Andrew Ng深度学习课程笔记
摘要:?本文對Andrew Ng深度學習課程進行了大體的介紹與總結,共包括21個課程。
我最近在Coursera上完成了Andrew Ng導師關于新深度學習的所有課程。Ng在解釋術語和概念方面做得非常出色。例如,Ng指出,監督深度學習只不過是一種多維曲線擬合過程。
以下是我對課程的簡單回顧:
第1課:為什么深度學習會興起?
因為在過去的幾年里科學家收集了90%的數據,而深度神經網絡(DNN)需要大量的數據。因此,DNN可以支配較小的網絡和傳統的學習算法。
此外,還有許多算法的創新使得DNN的運行速度越來越快。例如,sigmoid激活函數進化到Relu激活函數,這對如梯度下降類的優化過程產生了巨大影響。這些算法的改進使得研究人員更快速地對新想法進行迭代->實驗->編碼周期循環,從而實現更多的創新。
第2課:深度學習中的矢量化
在上這門課之前,我沒意識到在不需要對循環進行明確操作的前提下,可以實現一個神經網絡。Ng出色的表達了Python矢量化代碼設計的重要性。他提供了一個樣板化的代碼設計,你可以輕松地將其轉移到你自己的應用程序中。
第3課:深入了解DNN
第一個課程實際上是讓你能夠了解,如何從頭開始實現numpy的向前和向后傳播的步驟。通過該課程,使得我對TensorFlow和Keras等高層框架的內部工作有了更深入的了解。Ng解釋了計算圖背后的想法,讓我理解了TensorFlow是如何執行“神奇的優化”的。
第4課:為什么使用深層表達
Ng對DNN的分層方面給出了直觀地理解。例如他對人臉識別的解釋,神經網絡第一層所做的事就是從原始圖片中提取出人臉的輪廓與邊緣,即邊緣檢測。這樣每個神經元得到的是一些邊緣信息。神經網絡第二層所做的事情就是將前一層的邊緣進行組合,組合成人臉一些局部特征,比如眼睛、鼻子、嘴巴等。再往后面,就將這些局部特征組合起來,融合成人臉的模樣。他還解釋了存在一些函數,這些函數需要指數數量的隱藏單元來適應淺層網絡中的數據。
第5課:處理偏差和方差的工具
Ng講解了研究人員為識別和解決與偏差和方差相關問題而采取的步驟。他還談到了偏差和方差之間的“權衡”。他解釋說,在現代的深度學習時代,我們有工具來單獨解決每個問題,不在需要“權衡”了。
第6課:規范化的直覺
為什么將懲罰因子添加到成本函數可以減少方差效應?Ng給出了另外一種涉及tanh激活函數的解釋。即,較小的權重矩陣產生較小的輸出,然后將輸出集中于tanh函數的線性部分。
他還為dropout提供了一個有趣的解釋。在選修這門課程之前,我認為dropout基本上都是在每次迭代過程中隨機殺死神經元,導致我們好像是在用一個更小更線性的網絡。而他是從單個神經元的角度看待問題。
由于dropout是隨機殺死連接,神經元被激勵將其權重更平均地分布在其父母之間。通過擴展權重縮小全中的平方規范。他還解釋說,dropout只不過是L2正規化的一種自適應形式,這兩種方法都有相似的效果。
第7課:為什么規范化工作?
Ng通過一個在歸一化和非歸一化輪廓圖上遍歷逐漸下降的例子證明了一個問題,即,為什么歸一化傾向于通過繪制登高線圖來提高優化過程的速度。
第8課:初始化的重要性
Ng表示參數的初始化失誤會導致漸變的消失或爆炸。他演示了幾種解決這些問題的程序,基本思想都是確保每一層的權重矩陣在方差1以內,而且他還討論了tanh激活函數的Xavier初始化。
第9課:為什么使用小批量梯度下降法?
Ng使用等高線圖解釋了小尺寸和大尺寸mini-batch的權衡。基本思想是,大尺寸的會在每次迭代中變慢,而小尺寸的允許你更快的取得進展,但是不能對收斂做出相同的保證。最好的方法是在兩者之間做一些措施,使你能夠更快地處理整個數據集,同時還可以利用矢量化技術。
第10課:對高級優化技術的直觀理解
Ng解釋了動量(momentum)和RMSprop等技術如何用梯度下降來減少它通向最小值的路徑。
他還用滾下山的球給出了很好的物理解釋。他將這些方法聯系起來解釋著名的亞當優化程序。
第11課:基本后端TensorFlow的理解
Ng不僅解釋了如何使用TensorFlow實現一個神經網絡,還解釋了如何在優化過程中使用一些后端程序。其中的一項作業是鼓勵你用TensorFlow實現dropout和L2正則化,這進一步增強了我對后端流程的理解。
第12課:正交化
Ng論述了正交化在機器學習策略中的重要性。基本思想是,希望實現的控件每次只影響算法的單個組件。例如,為了解決偏差問題,你可以使用更大的網絡或更健壯的優化技術。你希望這些控件只影響偏差,而不是例如泛化等其他問題。缺乏正交化的控件的一個例子是提前終止優化過程。這是因為它同時影響模型的偏差和方差。
第13課:單個數字評估指標的重要性
Ng強調了用單個數字評價指標評估算法的重要性。如果你的目標更改,則只需在模型開發過程中更改評估指標。Ng給出了一個在貓分類應用程序中識別色情照片的例子!
第14課:測試/開發分布
在過程中需要保持開發和測試集具有相同的分布,這能確保你的團隊在迭代過程中針對正確的目標。不過這也意味著,如果你再測試集中糾正錯誤數據,那么也必須在開發集中糾正。
第15課:處理不同的培訓和測試/開發分配
為什么團隊會對培訓和測試/開發分配不同感興趣呢?Ng給出了相應的解釋。他的觀點是,你希望評估指標可以根據你真正關心的比例進行分配。例如,你可能希望使用與你的問題不相關的示例來進行培訓,但是你不希望你的算法對這些示例進行評估。這樣你的算法就可以得到更多的數據。經驗表明,這種方法在許多情況下會給你帶來更好的性能。缺點是你的訓練和測試/發布集有不同的發布。解決方案是忽略訓練集的一小部分,并確定訓練集的泛化能力。然后,你可以將此錯誤率與實際開發錯誤進行比較,并計算“數據不匹配”指標。然后,Ng解釋了處理這種數據不匹配問題的方法,例如人工數據合成。
第16課:訓練/發布/測試尺寸
在深度學習時代,設置訓練/發布/測試分離的指導方針發生了巨大變化。在上這門課之前,我知道通用的60/20/20分組比例。然而,Ng強調,對于一個非常大的數據集,應該使用大約98/1/1甚至99/0.5/0.5的分割。這是因為開發和測試集大小只需要能夠確保團隊提供的置信區間內。如果你使用10,000,000個訓練示例,那么可以100,000個示例就能保證你的開發和測試集的某些信任范圍。
第17課:近似貝葉斯最優誤差
Ng解釋了在某些應用中,人類級別的誤差如何用作貝葉斯誤差的代理。例如,在視覺和音頻識別之類的任務中,人類的誤差水平非常接近貝葉斯誤差。因此可以通過量化人類模型來避免偏差量。如果沒有貝葉斯誤差的基準,很難理解網絡中的變化和可避免的偏差問題。
第18課:錯誤分析
Ng講述了一種顯而易見的技術:通過錯誤分析大幅提高算法性能。基本的思路是手動給錯誤分類的例子貼上標簽,這樣就能重點關注在錯誤上,這對錯誤分類數據是最重要的。
例如,在貓識別任務中,Ng確定模糊圖像出現錯誤的幾率最大。而這種敏感性分析可以讓你看到可以減少總錯誤數量。敏感性和近似工作將被納入決策過程。
第19課:何時使用轉移學習?
轉移學習允許你將知識從一個模型轉移到另一個模型。例如,你可以將圖像識別知識從cat識別應用轉移到放射診斷。實現遷移學習需要重新訓練網絡的最后幾層,用于類似的應用程序域并提供更多的數據。這個思路是,網絡中較早的隱藏單元具有更廣泛的應用程序,它通常不是特定于你正在使用網絡的確切任務。總之,當兩個任務都有相同的輸入特性,并且當你要學習的任務比你想要訓練的任務數據更多時,轉移學習是有效的。
第20課:何時使用多任務學習?
多任務學習迫使單個神經網絡同時學習多個任務(而不是每個任務都有一個單獨的神經網絡)。Ng解釋說,當一組任務可以從共享較低級別的特性中受益,并且當每個任務的數據量大小相似時,這種方法很有效。
第21課:何時使用端到端深度學習?
端到端的深度學習需要進行多個階段的處理,并將它們組合成一個單一的神經網絡。這使得數據可以為自己說話,而無需在優化過程中使用人工操作。但相應的缺點為,這種方法需要更多的數據,并且可能會排斥手動設計的組件。
文章原標題《Deep Learning Specialization by Andrew Ng? – ?21 Lessons Learned》
作者:?Ryan Shrott
譯者:奧特曼,審校:袁虎。
原文鏈接
干貨好文,請關注掃描以下二維碼:
總結
以上是生活随笔為你收集整理的Andrew Ng深度学习课程笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (Python)时序预测的七种方法
- 下一篇: 考察数据科学家支持向量机(SVM)知识的