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