天天看點

幹貨 | 深度學習的實踐應用之路

近年來,人工智能的崛起可以說是得益于深度學習的成功。驅動深度神經網絡突破的三個主要因素分别是:海量的訓練資料、強大的計算架構和學術領域的相關進展。是以,深度學習在圖像分類、面部識别等任務的表現上不僅超越了傳統方法,還超越了人類水準。這一切都為那些使用深度學習解決實際問題的新業務創造了巨大的發展潛力。

在位于柏林的merantix總部,我們緻力于研究這項新業務在不同行業下的應用。(目前,我們的研究對象是汽車業、醫療保障業、金融業和廣告業。)

幹貨 | 深度學習的實踐應用之路

學術理論與現實生活通常有很大不同(來源:mimiandeunice.com)

現在訓練一個神經網絡比以往任何時候都要簡單。然而,這并不意味着你可以将教程中的代碼直接應用到應用程式中。有趣的是,學術理論對這些至關重要的訓練技巧幾乎不予讨論,而這些技巧恰恰是産品的關鍵所在。

幹貨 | 深度學習的實踐應用之路

将深度學習應用于現實問題可能會比較麻煩(來源:pinsdaddy.com)

是以,我想了解和掌握這些技巧,對于那些計劃在生意上應用深度學習的人來說将會大有裨益。

在本文中,我想分享三點關鍵的心得和經驗。當我們在merantix用深度學習應對現實問題時,這些心得給了我們很大的幫助和啟發:

心得i:預訓練的重要性

心得ii:實際标簽分布的注意事項

心得iii:了解黑箱模型

聲明:

 本文介紹的内容不代表完整的方法,還有很多其他的方法和技巧本文沒有涉及。

· 本文分享的大部分心得體會不僅适用于深度學習,還适用于其他機器學習算法。

· 所有的心得都不是針對某一行業的。

· 本文中的大多内容都适用于有監督式學習的問題。

這篇文章是根據我在5月10日“柏林人工智能大會”上的演講修改而成的。

心得i:“預訓練”的重要性

在機器學習學術界,對擷取資料集的關注微乎其微。相反,為了将深度學習方法與其他方法作比較,并最終确定一個最優方法,标準做法是在一個标準資料集上,以相同的評估程式來評測不同方法的表現。然而在現實情境中,你的新算法性能比另一算法高出1%并不重要,重要的是建立一個強大穩健的,并且能夠準确地解決目标任務的系統。對所有機器學習系統來說,這需要一些算法能夠從中學習的标記訓練。

對許多現實問題來說,擷取标注的訓練資料的成本相當昂貴。為了詳細地闡述這個問題,我們來看兩個案例:

1. 醫學影像

如果我們想要建立一個在ct圖像中檢測人體淋巴結的系統,我們需要對ct圖像中的淋巴結進行标記。這是一項非常耗時的工作,因為這些圖像都是3d的,而且我們需要在3d圖像中識别出非常小的結構。假設,一個放射科醫生一小時能标記4張圖像,他的時薪是100美元;這就意味着标記一張ct圖像将花費我們25美元,而标記一萬張ct圖像,我們要花25萬美元。是以,我們需要幾個醫生來對同一張圖像進行标注,以確定接近100%的診斷準确性。這樣一來,一個醫學任務的資料集的成本很容易就會超過25萬美元。

2. 信用評分

如果我們想建立一個能夠對客戶信用等級進行評估的系統,我們就需要知道存在潛在違約風險的客戶,這樣我們才能讓一個機器學習系統提前識别出他們。不幸的是,隻有當違約真正發生的時候我們才能确定違約的客戶。是以,一個比較天真的政策是給每個人發放貸款(假如是每人一萬美元)。但這就意味着每一個人違約我們就将損失一萬美元,這無形中就使得每一個标注資料點的價格都非常昂貴。

顯然我們可以通過一些方法來降低這些成本,但總體來說,擷取用于解決現實問題的标記資料的成本非常高。

那麼,我們究竟該如何解決這個問題呢?

幹貨 | 深度學習的實踐應用之路

預訓練能有效降低成本(來源:massivejoes.com)

“預訓練”的基本操作是——首先,我們需要在一個相關領域的廉價大資料集上,或者是在同一領域的“非純淨訓練資料”上,對一個神經網絡(或另一個機器學習算法)進行訓練。盡管這樣做不能直接解決問題,但這能讓神經網絡對你需要解決的問題有初步的了解。接下來的第二步,我們要在一個更精細的、成本更高的小資料集上進一步優化神經網絡的參數。下圖是“預訓練”的操作示意圖:

幹貨 | 深度學習的實踐應用之路

 當訓練資料集很難擷取時,首先在相對廉價的大型資料集上對神經網絡進行“預訓練”;然後,在一個成本相對高的、相對精細的資料集上調整神經網絡。在對神經網絡進行微調時,類别的數目可能會發生改變。

人們通常會在有着1000個類别的imagenet資料集上對神經網絡進行“預訓練”,然後根據他們實際需要解決的問題對神經網絡進行微調,而微調過程中的類别數與“預訓練”中的類别數很可能是不一樣的。這就意味着神經網絡的最後一層需要重新初始化。通常情況下,神經網絡中最後一層的學習效率要相對高一些,因為最後一層需要從頭開始學習,而前面的層的學習速率會低一些。對于像imagenet這樣的資料集,這樣的特征學習是通用的,是以它能直接用于解決其他的計算機視覺問題。

我們應該如何擷取“預訓練”的資料?

1. 預訓練模型:網絡上有很多經過訓練的模型,其中最應該指出的就是model zoos。model zoos包含了一系列不同的訓練資料,這些資料經過了專家學者、公司企業和深度學習愛好者的訓練。

2. 公共資料集:網上有很多資料集,是以不要在收集資料集上浪費時間,花時間看看網上有沒有能夠解決你的問題的資料集。

3. 資料抓取:如果網上既沒有一個公共的“預訓練”模型,也沒有你需要的資料集,那麼你可以通過一個小門路來生成一個資料集。你可以建立一個所謂的“抓取器”,讓它自動從特定的網站上收集資料集。這樣你就能建立一個新的資料集了。

幹貨 | 深度學習的實踐應用之路

預訓練的資料來源

因為我們會在一個更精确的資料集上對神經網絡進行調整,是以在調整之前我們是可以在所謂的“弱标記”資料集上對其進行“預訓練”的。之是以稱之為“弱标記”資料集,是因為其中的資料标記并非是完全正确的(可能有90%的資料是正确的,10%是錯誤的)。“弱标記”資料的好處在于它能夠輕松擷取,不需要人工參與标記。這與那些人工參與标記的資料集相比成本要低很多。

舉個例子來說,在攻讀博士學位期間,我從維基百科和imdb上擷取了一個資料集,這個資料集中包含了50萬張人臉圖像。将照片中每個人的出生日期和照片底部顯示的拍攝日期結合起來,這樣我們就能大緻判斷出每張圖像的年齡。需要注意的是,在某些情況下,照片底部顯示的拍攝日期可能是錯的,或者一張照片中可能有多個人而面部檢測器在識别人臉時出現了差錯,是以,我們不能完全保證圖像年齡的判斷都是正确的。盡管如此,我們還是應該在這個“弱标記”資料集上進行“預訓練”,以提高神經網絡的性能,而僅在準确标記了的資料集上訓練是完全不夠的。

在前面提到的醫學影像問題上,我們同樣可以用這樣的邏輯來了解。為了使标記準确度盡可能接近100%,我們需要好幾個醫生單獨對同一張ct圖像進行标記。這就相當于我們用于進一步調整神經網絡的資料庫。另外,我們可以收集一個僅由一個人完成标記的“弱标記”大資料集,這樣我們不但能夠減低标記的成本,還能確定神經網絡經過了不同的圖像資料訓練過。

總之,提高神經網絡性能不一定要昂貴的人工标記或人工注釋,通過免費的,或是低成本的标記資料集,同樣可以提高性能。

幹貨 | 深度學習的實踐應用之路

現實中的标簽分布(來源:r4risk.com.au)

既然我們已經獲得了“預訓練”和調整的資料,接下來我們就能開始神經網絡的正式訓練了。在正式訓練中,出現了另一個學術界與現實世界之間的巨大分歧。

在學術界,資料集大多都是平衡的。也就是說,在有監督的分類問題上,每一類别通常有數目相同的樣本。下圖中有兩個學術界資料集的例子:mnist是一個非常有名的手寫數字資料集,這個資料集中包含了與數字的數量大緻相等的樣本。food

101是學術界資料集的另一個典型,其中的每一類食物都有整整1000張圖像。

幹貨 | 深度學習的實踐應用之路

mnist和food101都是“平衡資料集”

我想再一次用兩個現實中的案例來說明這個問題:

1. 醫學影像:醫學影像的訓練資料是很不平衡的。病患中的大多數其實都是健康的,隻有一小部分人患某種疾病。

2. 信用評分:實際上,大多數客戶都歸還了貸款,違約的人隻占大約1-2%。

幹貨 | 深度學習的實踐應用之路

不平衡的現實生活的标簽分布

正如上面所說的,在這兩個案例中,标簽分布是非常不平衡的。這在現實生活中其實是很常見的。實際上,每一類都有相同多的樣本量是很少見的。

不幸的是,這種情況變得越來越糟糕。在學術界,資料集中每一類别的分類錯誤的成本通常是一樣的。但是在現實生活中就大不相同了。

1. 醫學影像:将一個健康的人誤診為病人還不是最糟糕的,隻要醫生在反複檢查後發現這個人實際上是健康的就沒有問題。但是講一個患病的人錯誤地判斷為健康的人,讓病人沒能得到及時的治療,這就非常危險了。

2. 信用評分:拒絕向那些會歸還貸款的人提供貸款還不算最糟糕的,這最多讓你損失一些貸款利率。但是給違約的人提供貸款的代價就很高了,你需要承擔借出的所有貸款。

下面是這兩個案例的示意圖:

幹貨 | 深度學習的實踐應用之路

現實應用中不平衡的錯誤分類成本

如何解決這一問題?

既然類别和錯誤分類的成本都是不平衡的,那麼我們就必須要想個方法來應對這個不平衡的問題。針對這一問題的文獻十分有限,我們找到了一些與之相關的部落格文章和stack overflow問題。

值得注意的是,不平衡的類别和不平衡的錯誤分類成本都是高度相關的,因為這意味着對于部分樣本,我們幾乎沒有訓練資料;而且出現錯誤的成本相當高。

我将那些有助于模型分類的方法大緻分成了四種:

1. 更多訓練資料

最突出的方法就是從少量的類别中收集盡量多的資料。以醫學影像為例,這就意味着我們要盡量收集患有某種疾病的病人的圖像。如果收集這些圖像的成本過高,那麼就用前面所讨論的其他方法來擷取訓練資料。注意,在調整訓練标簽分布的時候你需要非常小心,因為這對于模型的預測判斷有很大的影響:如果你在訓練資料集中增加了患病病人的數量,那麼模型就更傾向于将對象預測為患病病人。

幹貨 | 深度學習的實踐應用之路

收集更多稀缺類别的資料。當訓練過程中的标簽分布與預測結果不比對時你就要非常注意了。

2.改變标記

如果你不能收集到更多稀缺類别的資料,那就考慮換一種分類方法。在實際的應用中,你可能不需要區分a疾病與b疾病,隻要能識别出這兩者中的其一就夠了。在這種情況下,你可以将這兩個類别合并。這樣一來,訓練期間的訓練流程将會被簡化;而且在模型推斷階段,即使a疾病和b疾病混淆了也沒有太大關系。

幹貨 | 深度學習的實踐應用之路

在訓練期間,或在模型評估階段将兩個或多個類别合并能使問題簡單化

3. 采樣

如果你既不能得到更多資料,也無法改變标記,那就意味着你需要研究原始資料了。那麼究竟該如何確定我們的模型善于處理稀缺類别呢?你隻需要在訓練過程中改變算法處理案例的方式。通常情況下,樣本都是經過統一采樣得來的,這也就意味着算法在訓練期間處理每個案例的方式都是一樣的。

我們可以采取一些不同的、有助于提高稀缺類别标記的性能的采樣方法。

忽略樣本:忽略高頻類别的部分樣本可以說是最簡單的方法了。我們可以在每一類樣本數目大緻相同的情況下采用這種方法。

幹貨 | 深度學習的實踐應用之路

過采樣/欠采樣:“過采樣”指的是将稀缺類别的樣本以更高的頻率展示給算法;而“欠采樣”的意思則相反。從算法的角度來看,這兩種方法的結果是一樣的。這兩種方法相對于前面的方法好處在于沒有樣本是被忽略的。

幹貨 | 深度學習的實踐應用之路

消極樣本挖掘:第三組采樣方法稍微複雜一些,但卻是最有效的方法。跟之前的“過采樣”和“欠采樣”不同,我們這一步的采樣是有意識的。盡管我們有很多高頻類别的樣本,但是我們最關心的還是其中最複雜、最困難的樣本,比如那些被誤分類機率最高的樣本。是以,我們可以在訓練過程中有規律地對模型進行評估,同時調查樣本,以識别出其中很可能被誤分類的部分。這樣一來,我們能夠輕易地選擇出算法最常學習的樣本了。

幹貨 | 深度學習的實踐應用之路

4. 對損失進行權重

采用上述的三個方法以後,我們在改善類别分布方面做的就已經夠多了。是以,我們現在可以轉移注意力至算法本身。幸運的是,還有一些方法是能夠用于讓算法更多地關注稀缺類别的。其中一個直接的方法就是增加稀缺類别樣本的損失權重。

幹貨 | 深度學習的實踐應用之路

稀缺類别的損失權重增加了

幹貨 | 深度學習的實踐應用之路

一個黑箱(來源:辛普森一家)

正如我們在前面提到的“預訓練”,學術界最重要的目标就是不論采用的模型是怎樣的,都要達到或超越當今最先進的性能。而在考慮現實生活應用時,僅建立一個性能良好的模型是不夠的。

我們還需要:

了解模型為什麼及如何出現預估錯誤的,

給出直覺的事實說明為什麼我們的模型性能要優于之前的任何方法,

確定模型不會被欺騙。

在深度神經網絡興起之前,大部分模型都是相對容易了解的。看以下幾點:

線性模型:線性分類器或回歸模型提供了每一特征和預測結果之間的直接關系。這就使我們能夠直接、輕易地了解模型預估決策機制。

決策樹:“決策樹”的優勢在于我們可以沿着樹來了解決策是如何形成的。總體上來說,最頂端的枝節涵蓋了最重要的特征。談到任意決策森林時,情況就變得稍微複雜一些了,但樹的結構還是能讓我們很好地了解其中的原理的。

不幸的是,了解深度神經網絡的決策機制要困難得多。因為深度神經網絡是高度非線性的,而且其中的變量數量基本都是上億的。是以要解釋其決策的方式是很困難的。

幹貨 | 深度學習的實踐應用之路

傳統機器學習方法vs深度學習

如今,如何解釋決策程式已經成為了現實生活應用中的一個巨大挑戰,因為深度神經網絡正迅速融入我們生活的各個領域——汽車自動駕駛、醫療診斷、金融決策等等。大部分的實際應用對我們的生活、财産和一些敏感資訊都會産生巨大的影響。是以,算法作出的錯誤決策很可能會謀财害命。

幹貨 | 深度學習的實踐應用之路

“特斯拉汽車事故”(左圖)和關于人工智能轉變為種族主義者的報道文章(右圖)

不幸的是,這些失誤的發生不全是偶然的,攻擊者的有意而為也會引發這些失誤。為了強調這個話題的相關性,研究專家已經發現,隻要在一張普通圖像上增加簡單任意的噪聲,就能改變深度神經網絡的分類結果,而人眼幾乎察覺不出圖像的變化。同樣,在與純人工圖像相适應的同時,仍能得到一個非常自信的預測結果。

幹貨 | 深度學習的實踐應用之路

在一張圖像或人工圖像上加上少量的任意噪聲(左圖)能輕易地騙過神經網絡

在現實生活中,你通常會非常想弄清楚為什麼你的系統不能發揮它本身的效能。

在merantix,我們對這些問題非常重視,我們相信這些問題在未來将會變得更加重要,因為深度學習系統在現實生活中将會有更多的實際應用。

最近,我們開發了一個名為picasso(medium

post,github)的深度學習可視化工具箱。由于要研究各種各樣的神經網絡架構,是以我們開發了picasso來幫助我們在不同的領域檢視标準的模型。比如,在汽車駕駛中了解道路分叉或道路對象識别失誤;廣告業中了解為什麼某種創意能獲得更高的點選率;在醫學影像領域分析ct圖像或x光圖中出現的不明對象。下圖是我們的開源picasso視覺化檢視器的示範圖:

幹貨 | 深度學習的實踐應用之路

在本文中,我分享了在merantix用深度學習解決現實問題時總結出的三個非常重要的心得體會,希望這些心得對那些計劃在生意中使用深度學習的人有所幫助。正如我在文章開頭說的,在将深度學習應用于實際生活中時,我們有許多非常有用的技巧,也有很多需要注意的事項。

rasmus

rothe是歐洲最重要的深度學習專家之一,也是merantix的聯合創始人之一。他曾在蘇黎世大學、牛津大學和普林斯頓大學學習計算機科學,并專攻深度學習。他曾開發了howhot.io,并将其作為他博士研究的一部分;創辦了歐洲最大的hackathon

hackzurich,并為谷歌和bcg工作。

本文作者:圖普科技

繼續閱讀