我從吳恩達(dá)深度學(xué)習(xí)課程中學(xué)到的21個(gè)心得
今年8月,吳恩達(dá)的深度學(xué)習(xí)課程正式上線,并即刻吸引了眾多深度學(xué)習(xí)粉絲的“頂禮膜拜”。一如吳恩達(dá)此前在Coursera上的機(jī)器學(xué)習(xí)課程,這幾門深度學(xué)習(xí)課程也是好評(píng)如潮。
本文引用地址:http://m.butianyuan.cn/article/201712/372725.htm在諸多粉絲中,加拿大國(guó)家銀行金融市場(chǎng)的首席分析師Ryan J. Shrott從前三門深度學(xué)習(xí)課程中總結(jié)出了21點(diǎn)心得,總結(jié)了該系列課程的諸多精華。
今天,文摘菌就帶大家一起來(lái)讀一讀這份“學(xué)霸“筆記。
首先來(lái)看一下Ryan對(duì)該課程的總體評(píng)價(jià):
吳恩達(dá)先生(Andrew Ng)的3門課程都超級(jí)有用,教會(huì)了我許多實(shí)用的知識(shí)。吳教授擅長(zhǎng)過濾掉流行詞匯,用一種清晰簡(jiǎn)潔的方式解釋了一切。比如他闡明了監(jiān)督式深度學(xué)習(xí)(supervised deep learning)只不過是一個(gè)多維的曲線擬合程序,而其他任何具有代表性的理解,如人類神經(jīng)系統(tǒng)的通用參照,則有些太過玄乎了。
官方介紹說只需要有一些基本的線性代數(shù)和Python編程知識(shí)就可以聽懂這些課程。然而我認(rèn)為你還應(yīng)該懂得矢量微積分(vector calculus),有助于懂得優(yōu)化過程的內(nèi)部機(jī)理。如果你不關(guān)心內(nèi)部如何運(yùn)行,只是關(guān)注獲取更高層面的信息,你可以跳過那些微積分的視頻。
下面,就是Ryan在學(xué)習(xí)完該系列課程后的心得。
心得1:為什么深度學(xué)習(xí)得以迅速發(fā)展
我們?nèi)祟惍?dāng)今擁有的90%的數(shù)據(jù)都是于最近2年內(nèi)收集的。深度神經(jīng)網(wǎng)絡(luò)(DNN’s)可以更好地利用大規(guī)模的數(shù)據(jù),從而超越較小的網(wǎng)絡(luò)及傳統(tǒng)學(xué)習(xí)算法。
此外,還有好多算法方面的革新使DNN‘s的訓(xùn)練變得非???。比如將Sigmoid激活函數(shù)轉(zhuǎn)換成ReLU激活函數(shù)已經(jīng)對(duì)梯度下降等優(yōu)化過程產(chǎn)生了巨大的影響。這些算法的優(yōu)化使得研究者們的“創(chuàng)意-編碼-驗(yàn)證”循環(huán)迭代速度越來(lái)越快,從而引導(dǎo)了更多的創(chuàng)新。
心得2:深度學(xué)習(xí)內(nèi)的矢量化(vectorization)
在上這門課之前,我從沒有意識(shí)到一個(gè)神經(jīng)網(wǎng)絡(luò)可以不用for循環(huán)來(lái)搭建。吳恩達(dá)很好地傳達(dá)了矢量化代碼設(shè)計(jì)的重要性。在作業(yè)中,他還提供了一個(gè)標(biāo)準(zhǔn)化的矢量代碼設(shè)計(jì)樣本,這樣你就可以很方便的應(yīng)用到自己的應(yīng)用中了。
心得3:DNN的深層理解
在第一個(gè)課程中,我學(xué)會(huì)了用NumPy庫(kù)實(shí)現(xiàn)前向和反向傳播過程,我因而對(duì)諸如TensorFlow和Keras這些高級(jí)別框架的內(nèi)部工作機(jī)理產(chǎn)生了更深層次的理解。吳恩達(dá)通過解釋計(jì)算圖(comptation graph)背后的原理,讓我懂得TensorFlow是如何執(zhí)行“神奇的優(yōu)化”的。
心得4:為什么需要深度表征(Deep Representations)
吳恩達(dá)對(duì)DNN‘s的分層方面有著直觀的理解。比如,在面部識(shí)別方面,他認(rèn)為先前的分層用于將臉部邊緣分組,后續(xù)的分層將這些分好的組形成五官(如鼻子、眼睛、嘴等等),再接下來(lái)的分層把這些器官組合在一起用以識(shí)別人像。他還解釋了回路理論(circuit theory),即存在一些函數(shù),需要隱藏單元的指數(shù)去匹配淺層網(wǎng)絡(luò)的數(shù)據(jù)??梢酝ㄟ^添加有限數(shù)量的附加層來(lái)簡(jiǎn)化這個(gè)指數(shù)問題。
心得5:處理偏差(bias)和方差(variance)的工具
吳教授解釋了識(shí)別和修繕偏差和方差相關(guān)問題的步驟。下圖顯示了解決這些問題系統(tǒng)性的方法。
機(jī)器學(xué)習(xí)的基本“秘訣” 解決偏差和方差的“秘訣”
他還解決了偏差和方差之間被普遍引用的“權(quán)衡”(tradeoff)問題。他認(rèn)為在深度學(xué)習(xí)的時(shí)代,我們擁有獨(dú)立解決每個(gè)問題的能力,所以這種“權(quán)衡”問題將不再存在。
心得6:正則化的直觀解釋
為什么向成本函數(shù)中加入一個(gè)懲罰項(xiàng)會(huì)降低方差效應(yīng)?在上這門課之前我對(duì)它的直覺是它使權(quán)重矩陣接近于零,從而產(chǎn)生一個(gè)更加“線性”的函數(shù)。吳教授則給出了另一個(gè)關(guān)于tanh激活函數(shù)的解釋。他認(rèn)為更小的權(quán)重矩陣產(chǎn)生更小的輸出,這些輸出集中圍繞在tanh函數(shù)的線性區(qū)域。
tanh激活函數(shù)
他還為dropout給出了一個(gè)直觀的解釋。之前我認(rèn)為dropout僅僅在每個(gè)迭代中消滅隨機(jī)神經(jīng)元,就好比一個(gè)越小的網(wǎng)絡(luò),其線性程度就越強(qiáng)一樣。而他的觀點(diǎn)是從單個(gè)神經(jīng)元的角度來(lái)看這一做法。
單個(gè)神經(jīng)元的角度
因?yàn)閐ropout隨即消滅連接,使得神經(jīng)元向父系神經(jīng)元中更加均勻地?cái)U(kuò)散權(quán)重。以至于更傾向于縮減權(quán)重的L2范數(shù)(squared norm)的效果。他還解釋了dropout只不過是L2正則化的一種自適應(yīng)形式,而這兩種的效果類似。
心得7: 為什么歸一化(normalization)有效?
吳恩達(dá)展示了為什么歸一化可以通過繪制等高線圖(contour plots)的方式加速優(yōu)化步驟。他詳細(xì)講解了一個(gè)案例,在歸一化和非歸一化等高線圖上梯度下降樣本進(jìn)行迭代。
心得8: 初始化的重要性
吳恩達(dá)展示了不好的參數(shù)初始化將導(dǎo)致梯度消失或爆炸。他認(rèn)為解決這個(gè)問題的基本原則是確保每一層的權(quán)重矩陣的方差都近似為1。他還討論了tanh激活函數(shù)的Xavier初始化方法。
心得9: 為什么使用小批量(mini-batch)梯度下降?
吳教授使用等高線圖解釋了減小和增加小批量尺寸的權(quán)衡。基本原則是較大的尺寸每次迭代會(huì)變慢,而較小的尺寸則可以加快迭代過程,但是無(wú)法保證同樣的收斂效果。最佳方法就是在二者之間進(jìn)行權(quán)衡,使得訓(xùn)練過程比立即處理整個(gè)數(shù)據(jù)集要快,又能利用向量化技術(shù)的優(yōu)勢(shì)。
心得10: 高級(jí)優(yōu)化技術(shù)的直觀理解
吳恩達(dá)解釋了動(dòng)量(momentum)和RMSprop等技術(shù)是如何限制梯度下降逼近極小值的路徑。他還用球滾下山的例子生動(dòng)地解釋了這一過程。他把這些方法結(jié)合起來(lái)以解釋著名的Adam優(yōu)化過程。
心得11: 基本TensorFlow后端進(jìn)程的理解
吳恩達(dá)解釋了如何使用TensorFlow實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò),并闡明了在優(yōu)化過程中使用的后端進(jìn)程。課程作業(yè)之一就是鼓勵(lì)你用TensorFlow來(lái)實(shí)現(xiàn)dropout和L2正則化,加強(qiáng)了我對(duì)后端進(jìn)程的理解。
心得12: 正交化
吳恩達(dá)討論了機(jī)器學(xué)習(xí)策略中正交化的重要性?;舅枷胧菆?zhí)行一些控件,這些控件一次只作用于算法性能的單一組件。例如為了解決偏差問題,你可以使用更大的網(wǎng)絡(luò)或更多的魯棒優(yōu)化技術(shù)。你希望這些控件只影響偏差而不會(huì)影響其他如較差泛化等問題。一個(gè)缺少正交化的控件過早停止了優(yōu)化過程。因?yàn)檫@會(huì)同時(shí)影響模型的偏差和方差。
心得13:建立單一數(shù)字評(píng)估指標(biāo)的重要性
吳恩達(dá)強(qiáng)調(diào)選擇單一數(shù)字評(píng)估指標(biāo)來(lái)評(píng)估算法的重要性。在模型開發(fā)過程中,如果你的目標(biāo)改變,那么隨后才可以更改評(píng)估度量標(biāo)準(zhǔn)。 Ng給出了在貓分類應(yīng)用程序中識(shí)別色情照片的例子!
心得14:測(cè)試集/開發(fā)集的分布情況
始終確保開發(fā)集和測(cè)試集具有相同的分布。這可確保你的團(tuán)隊(duì)在迭代過程中瞄準(zhǔn)正確的目標(biāo)。這也意味著,如果你決定糾正測(cè)試集中錯(cuò)誤標(biāo)記的數(shù)據(jù),那么你還必須糾正開發(fā)集中錯(cuò)誤標(biāo)記的數(shù)據(jù)。
心得15:處理訓(xùn)練集和測(cè)試集/開發(fā)集處于不同分布的情況
吳恩達(dá)給出了為什么一個(gè)團(tuán)隊(duì)會(huì)對(duì)具有不同分布的訓(xùn)練集和測(cè)試集/開發(fā)集感興趣的原因。原因在于,你希望評(píng)估標(biāo)準(zhǔn)是根據(jù)你真正關(guān)心的例子計(jì)算出來(lái)的。例如,你也許想使用與你的問題不相關(guān)的示例作為訓(xùn)練集,但是,你別指望使用這些示例對(duì)你的算法進(jìn)行評(píng)估。你可以使用更多的數(shù)據(jù)訓(xùn)練你的算法。經(jīng)驗(yàn)證明,這種方法在很多情況下會(huì)給你帶來(lái)更好的性能。缺點(diǎn)是你的訓(xùn)練集和測(cè)試集/開發(fā)集有著不同的分布。解決方案是留出一小部分訓(xùn)練集,來(lái)單獨(dú)確定訓(xùn)練集的泛化能力。然后,你可以將此錯(cuò)誤率與實(shí)際的開發(fā)集錯(cuò)誤率進(jìn)行比較,并計(jì)算出“數(shù)據(jù)不匹配”度量標(biāo)準(zhǔn)。吳恩達(dá)隨后解釋了解決這個(gè)數(shù)據(jù)不匹配問題的方法,如人工數(shù)據(jù)合成。
心得16:訓(xùn)練集/開發(fā)集/測(cè)試集的大小
在深度學(xué)習(xí)時(shí)代,建立訓(xùn)練集/開發(fā)集/測(cè)試集劃分的參考標(biāo)準(zhǔn)發(fā)生了巨大的變化。在上課之前,我知道通常的60/20/20劃分。 Ng強(qiáng)調(diào),對(duì)于一個(gè)非常大的數(shù)據(jù)集,你應(yīng)該使用大約98/1/1甚至99 / 0.5 / 0.5的劃分。這是因?yàn)殚_發(fā)集和測(cè)試集只需足夠大,以確保你的團(tuán)隊(duì)提供的置信區(qū)間即可。如果你正在使用10,000,000個(gè)訓(xùn)練集示例,那么也許有100,000個(gè)示例(或1%的數(shù)據(jù))已經(jīng)很大了,足以確保在你的開發(fā)集和/或測(cè)試集具有某些置信界限。
心得17:逼近貝葉斯最優(yōu)誤差
吳恩達(dá)解釋了在某些應(yīng)用中,人類水平的表現(xiàn)如何被用作貝葉斯誤差的代表。例如,對(duì)于諸如視覺和音頻識(shí)別的任務(wù),人的水平誤差將非常接近貝葉斯誤差。這可以讓你的團(tuán)隊(duì)量化你的模型中可以避免的偏差。沒有貝葉斯誤差等基準(zhǔn),將很難理解網(wǎng)絡(luò)中的方差和可避免的偏差問題。
心得18:錯(cuò)誤分析
吳恩達(dá)展示了一個(gè)效果比較明顯的技術(shù),即通過使用錯(cuò)誤分析,來(lái)顯著提高算法性能的有效性?;舅枷胧鞘謩?dòng)標(biāo)記錯(cuò)誤分類的示例,并將精力集中在對(duì)錯(cuò)誤分類數(shù)據(jù)貢獻(xiàn)最大的錯(cuò)誤上。
識(shí)別貓的應(yīng)用程序錯(cuò)誤分析
例如,在識(shí)別貓的應(yīng)用中,吳恩達(dá)判定模糊圖像對(duì)錯(cuò)誤貢獻(xiàn)最大。這個(gè)靈敏度分析可以讓你看到,在減少總的錯(cuò)誤方面,你的努力是值得的。通??赡苁沁@樣的情況,修復(fù)模糊圖像是一個(gè)非常艱巨的任務(wù),而其他錯(cuò)誤是明顯的,且容易解決。因此敏感性和模糊工作都將被納入決策過程。
心得19:何時(shí)使用遷移學(xué)習(xí)?
遷移學(xué)習(xí)允許你將知識(shí)從一個(gè)模型遷移到另一個(gè)模型。例如,你可以將圖像識(shí)別知識(shí)從識(shí)別貓的應(yīng)用程序遷移到放射診斷。實(shí)現(xiàn)遷移學(xué)習(xí)涉及到用更多的數(shù)據(jù)重新訓(xùn)練用于類似應(yīng)用領(lǐng)域的最后幾層網(wǎng)絡(luò)。這個(gè)想法是,網(wǎng)絡(luò)中較早的隱單元具有更廣泛的應(yīng)用,通常不是專門針對(duì)你正在使用的網(wǎng)絡(luò)中的特定任務(wù)。總而言之,當(dāng)兩項(xiàng)任務(wù)具有相同的輸入特征時(shí),而且當(dāng)你嘗試學(xué)習(xí)的任務(wù)比你正在嘗試訓(xùn)練的任務(wù)有更多的數(shù)據(jù)時(shí),遷移學(xué)習(xí)是有效的。
心得20:何時(shí)使用多任務(wù)學(xué)習(xí)?
多任務(wù)學(xué)習(xí)迫使一個(gè)單一的神經(jīng)網(wǎng)絡(luò)同時(shí)學(xué)習(xí)多個(gè)任務(wù)(而不是每個(gè)任務(wù)都有一個(gè)單獨(dú)的神經(jīng)網(wǎng)絡(luò))。Ng解釋說,如果一組任務(wù)可以從共享較低級(jí)別的特征中受益,并且每個(gè)任務(wù)的數(shù)據(jù)量在數(shù)量級(jí)上相似,則該方法可以很好地工作。
心得21:何時(shí)使用端到端的深度學(xué)習(xí)?
端到端的深度學(xué)習(xí)需要多個(gè)處理階段,并將其組合成一個(gè)單一的神經(jīng)網(wǎng)絡(luò)。這使得數(shù)據(jù)能夠自己說話,而不會(huì)存在人們?cè)趦?yōu)化過程中手動(dòng)顯示工程步驟出現(xiàn)的偏差。相反,這種方法需要更多的數(shù)據(jù),可能會(huì)排除可能手動(dòng)設(shè)計(jì)的組件。
總結(jié)
Ryan總結(jié)道,雖然吳恩達(dá)的深度學(xué)習(xí)課程不能讓你成為真正的深度學(xué)習(xí)專家,但可以讓你對(duì)深度學(xué)習(xí)模型的發(fā)展過程有了基本的直覺了解。當(dāng)然,這21點(diǎn)心得也遠(yuǎn)遠(yuǎn)不能涵蓋該系列課程的全部信息,要想入門深度學(xué)習(xí),還是的自己親自學(xué)習(xí)這系列課程。
那么,學(xué)霸對(duì)這門課程有什么負(fù)面評(píng)價(jià)么?
沒錯(cuò),也還是有的。Ryan認(rèn)為,這門課的作業(yè)實(shí)在太過簡(jiǎn)單——并順手收過了文摘菌的膝蓋。
評(píng)論