新聞中心

        EEPW首頁 > 智能計算 > 設計應用 > 我從吳恩達深度學習課程中學到的21個心得

        我從吳恩達深度學習課程中學到的21個心得

        作者: 時間:2017-12-07 來源:網絡 收藏

          今年8月,課程正式上線,并即刻吸引了眾多粉絲的“頂禮膜拜”。一如此前在Coursera上的機器學習課程,這幾門課程也是好評如潮。

        本文引用地址:http://www.104case.com/article/201712/372725.htm

          在諸多粉絲中,加拿大國家銀行金融市場的首席分析師Ryan J. Shrott從前三門深度學習課程中總結出了21點心得,總結了該系列課程的諸多精華。

          今天,文摘菌就帶大家一起來讀一讀這份“學霸“筆記。

          首先來看一下Ryan對該課程的總體評價:

          先生(Andrew Ng)的3門課程都超級有用,教會了我許多實用的知識。吳教授擅長過濾掉流行詞匯,用一種清晰簡潔的方式解釋了一切。比如他闡明了監督式深度學習(supervised deep learning)只不過是一個多維的曲線擬合程序,而其他任何具有代表性的理解,如人類神經系統的通用參照,則有些太過玄乎了。

          官方介紹說只需要有一些基本的線性代數和Python編程知識就可以聽懂這些課程。然而我認為你還應該懂得矢量微積分(vector calculus),有助于懂得優化過程的內部機理。如果你不關心內部如何運行,只是關注獲取更高層面的信息,你可以跳過那些微積分的視頻。

          下面,就是Ryan在學習完該系列課程后的心得。

          心得1:為什么深度學習得以迅速發展

          我們人類當今擁有的90%的數據都是于最近2年內收集的。深度神經網絡(DNN’s)可以更好地利用大規模的數據,從而超越較小的網絡及傳統學習算法。

          

         

          此外,還有好多算法方面的革新使DNN‘s的訓練變得非常快。比如將Sigmoid激活函數轉換成ReLU激活函數已經對梯度下降等優化過程產生了巨大的影響。這些算法的優化使得研究者們的“創意-編碼-驗證”循環迭代速度越來越快,從而引導了更多的創新。

          

         

          心得2:深度學習內的矢量化(vectorization)

          在上這門課之前,我從沒有意識到一個神經網絡可以不用for循環來搭建。吳恩達很好地傳達了矢量化代碼設計的重要性。在作業中,他還提供了一個標準化的矢量代碼設計樣本,這樣你就可以很方便的應用到自己的應用中了。

          心得3:DNN的深層理解

          在第一個課程中,我學會了用NumPy庫實現前向和反向傳播過程,我因而對諸如TensorFlow和Keras這些高級別框架的內部工作機理產生了更深層次的理解。吳恩達通過解釋計算圖(comptation graph)背后的原理,讓我懂得TensorFlow是如何執行“神奇的優化”的。

          心得4:為什么需要深度表征(Deep Representations)

          吳恩達對DNN‘s的分層方面有著直觀的理解。比如,在面部識別方面,他認為先前的分層用于將臉部邊緣分組,后續的分層將這些分好的組形成五官(如鼻子、眼睛、嘴等等),再接下來的分層把這些器官組合在一起用以識別人像。他還解釋了回路理論(circuit theory),即存在一些函數,需要隱藏單元的指數去匹配淺層網絡的數據。可以通過添加有限數量的附加層來簡化這個指數問題。

          心得5:處理偏差(bias)和方差(variance)的工具

          吳教授解釋了識別和修繕偏差和方差相關問題的步驟。下圖顯示了解決這些問題系統性的方法。

          

         

          機器學習的基本“秘訣” 解決偏差和方差的“秘訣”

          他還解決了偏差和方差之間被普遍引用的“權衡”(tradeoff)問題。他認為在深度學習的時代,我們擁有獨立解決每個問題的能力,所以這種“權衡”問題將不再存在。

          心得6:正則化的直觀解釋

          為什么向成本函數中加入一個懲罰項會降低方差效應?在上這門課之前我對它的直覺是它使權重矩陣接近于零,從而產生一個更加“線性”的函數。吳教授則給出了另一個關于tanh激活函數的解釋。他認為更小的權重矩陣產生更小的輸出,這些輸出集中圍繞在tanh函數的線性區域。

          

         

          tanh激活函數

          他還為dropout給出了一個直觀的解釋。之前我認為dropout僅僅在每個迭代中消滅隨機神經元,就好比一個越小的網絡,其線性程度就越強一樣。而他的觀點是從單個神經元的角度來看這一做法。

          

         

          單個神經元的角度

          因為dropout隨即消滅連接,使得神經元向父系神經元中更加均勻地擴散權重。以至于更傾向于縮減權重的L2范數(squared norm)的效果。他還解釋了dropout只不過是L2正則化的一種自適應形式,而這兩種的效果類似。

          心得7: 為什么歸一化(normalization)有效?

          吳恩達展示了為什么歸一化可以通過繪制等高線圖(contour plots)的方式加速優化步驟。他詳細講解了一個案例,在歸一化和非歸一化等高線圖上梯度下降樣本進行迭代。

          心得8: 初始化的重要性

          吳恩達展示了不好的參數初始化將導致梯度消失或爆炸。他認為解決這個問題的基本原則是確保每一層的權重矩陣的方差都近似為1。他還討論了tanh激活函數的Xavier初始化方法。

          心得9: 為什么使用小批量(mini-batch)梯度下降?

          吳教授使用等高線圖解釋了減小和增加小批量尺寸的權衡。基本原則是較大的尺寸每次迭代會變慢,而較小的尺寸則可以加快迭代過程,但是無法保證同樣的收斂效果。最佳方法就是在二者之間進行權衡,使得訓練過程比立即處理整個數據集要快,又能利用向量化技術的優勢。

          心得10: 高級優化技術的直觀理解

          吳恩達解釋了動量(momentum)和RMSprop等技術是如何限制梯度下降逼近極小值的路徑。他還用球滾下山的例子生動地解釋了這一過程。他把這些方法結合起來以解釋著名的Adam優化過程。

          心得11: 基本TensorFlow后端進程的理解

          吳恩達解釋了如何使用TensorFlow實現神經網絡,并闡明了在優化過程中使用的后端進程。課程作業之一就是鼓勵你用TensorFlow來實現dropout和L2正則化,加強了我對后端進程的理解。

          心得12: 正交化

          吳恩達討論了機器學習策略中正交化的重要性。基本思想是執行一些控件,這些控件一次只作用于算法性能的單一組件。例如為了解決偏差問題,你可以使用更大的網絡或更多的魯棒優化技術。你希望這些控件只影響偏差而不會影響其他如較差泛化等問題。一個缺少正交化的控件過早停止了優化過程。因為這會同時影響模型的偏差和方差。

          心得13:建立單一數字評估指標的重要性

          吳恩達強調選擇單一數字評估指標來評估算法的重要性。在模型開發過程中,如果你的目標改變,那么隨后才可以更改評估度量標準。 Ng給出了在貓分類應用程序中識別色情照片的例子!

          心得14:測試集/開發集的分布情況

          始終確保開發集和測試集具有相同的分布。這可確保你的團隊在迭代過程中瞄準正確的目標。這也意味著,如果你決定糾正測試集中錯誤標記的數據,那么你還必須糾正開發集中錯誤標記的數據。

          心得15:處理訓練集和測試集/開發集處于不同分布的情況

          吳恩達給出了為什么一個團隊會對具有不同分布的訓練集和測試集/開發集感興趣的原因。原因在于,你希望評估標準是根據你真正關心的例子計算出來的。例如,你也許想使用與你的問題不相關的示例作為訓練集,但是,你別指望使用這些示例對你的算法進行評估。你可以使用更多的數據訓練你的算法。經驗證明,這種方法在很多情況下會給你帶來更好的性能。缺點是你的訓練集和測試集/開發集有著不同的分布。解決方案是留出一小部分訓練集,來單獨確定訓練集的泛化能力。然后,你可以將此錯誤率與實際的開發集錯誤率進行比較,并計算出“數據不匹配”度量標準。吳恩達隨后解釋了解決這個數據不匹配問題的方法,如人工數據合成。

          心得16:訓練集/開發集/測試集的大小

          在深度學習時代,建立訓練集/開發集/測試集劃分的參考標準發生了巨大的變化。在上課之前,我知道通常的60/20/20劃分。 Ng強調,對于一個非常大的數據集,你應該使用大約98/1/1甚至99 / 0.5 / 0.5的劃分。這是因為開發集和測試集只需足夠大,以確保你的團隊提供的置信區間即可。如果你正在使用10,000,000個訓練集示例,那么也許有100,000個示例(或1%的數據)已經很大了,足以確保在你的開發集和/或測試集具有某些置信界限。

          心得17:逼近貝葉斯最優誤差

          吳恩達解釋了在某些應用中,人類水平的表現如何被用作貝葉斯誤差的代表。例如,對于諸如視覺和音頻識別的任務,人的水平誤差將非常接近貝葉斯誤差。這可以讓你的團隊量化你的模型中可以避免的偏差。沒有貝葉斯誤差等基準,將很難理解網絡中的方差和可避免的偏差問題。

          心得18:錯誤分析

          吳恩達展示了一個效果比較明顯的技術,即通過使用錯誤分析,來顯著提高算法性能的有效性。基本思想是手動標記錯誤分類的示例,并將精力集中在對錯誤分類數據貢獻最大的錯誤上。

          

         

          識別貓的應用程序錯誤分析

          例如,在識別貓的應用中,吳恩達判定模糊圖像對錯誤貢獻最大。這個靈敏度分析可以讓你看到,在減少總的錯誤方面,你的努力是值得的。通常可能是這樣的情況,修復模糊圖像是一個非常艱巨的任務,而其他錯誤是明顯的,且容易解決。因此敏感性和模糊工作都將被納入決策過程。

          心得19:何時使用遷移學習?

          遷移學習允許你將知識從一個模型遷移到另一個模型。例如,你可以將圖像識別知識從識別貓的應用程序遷移到放射診斷。實現遷移學習涉及到用更多的數據重新訓練用于類似應用領域的最后幾層網絡。這個想法是,網絡中較早的隱單元具有更廣泛的應用,通常不是專門針對你正在使用的網絡中的特定任務。總而言之,當兩項任務具有相同的輸入特征時,而且當你嘗試學習的任務比你正在嘗試訓練的任務有更多的數據時,遷移學習是有效的。

          心得20:何時使用多任務學習?

          多任務學習迫使一個單一的神經網絡同時學習多個任務(而不是每個任務都有一個單獨的神經網絡)。Ng解釋說,如果一組任務可以從共享較低級別的特征中受益,并且每個任務的數據量在數量級上相似,則該方法可以很好地工作。

          心得21:何時使用端到端的深度學習?

          端到端的深度學習需要多個處理階段,并將其組合成一個單一的神經網絡。這使得數據能夠自己說話,而不會存在人們在優化過程中手動顯示工程步驟出現的偏差。相反,這種方法需要更多的數據,可能會排除可能手動設計的組件。

          總結

          Ryan總結道,雖然吳恩達的深度學習課程不能讓你成為真正的深度學習專家,但可以讓你對深度學習模型的發展過程有了基本的直覺了解。當然,這21點心得也遠遠不能涵蓋該系列課程的全部信息,要想入門深度學習,還是的自己親自學習這系列課程。

          那么,學霸對這門課程有什么負面評價么?

          沒錯,也還是有的。Ryan認為,這門課的作業實在太過簡單——并順手收過了文摘菌的膝蓋。



        關鍵詞: 吳恩達 深度學習

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 柞水县| 灵石县| 晋中市| 静安区| 上思县| 黄大仙区| 维西| 镇沅| 锡林浩特市| 呼和浩特市| 贺州市| 明星| 龙岩市| 济阳县| 化隆| 聂拉木县| 报价| 攀枝花市| 白朗县| 阳朔县| 湘潭市| 福建省| 滦南县| 昌江| 尼木县| 鹤壁市| 永济市| 河池市| 临猗县| 衡阳县| 东台市| 萨迦县| 泰来县| 汉阴县| 绥中县| 临澧县| 渭南市| 家居| 扶余县| 东乡县| 麻栗坡县|