天天看點

Andrew Ng深度學習課程筆記

我最近在Coursera上完成了Andrew Ng導師關于新深度學習的所有課程。Ng在解釋術語和概念方面做得非常出色。例如,Ng指出,監督深度學習隻不過是一種多元曲線拟合過程。

以下是我對課程的簡單回顧:

<b>第1課:為什麼深度學習會興起?</b><b></b>

因為在過去的幾年裡科學家收集了90%的資料,而深度神經網絡(DNN)需要大量的資料。是以,DNN可以支配較小的網絡和傳統的學習算法。

此外,還有許多算法的創新使得DNN的運作速度越來越快。例如,sigmoid激活函數進化到Relu激活函數,這對如梯度下降類的優化過程産生了巨大影響。這些算法的改進使得研究人員更快速地對新想法進行疊代-&gt;實驗-&gt;編碼周期循環,進而實作更多的創新。

<b>第2課:深度學習中的矢量化</b><b></b>

在上這門課之前,我沒意識到在不需要對循環進行明确操作的前提下,可以實作一個神經網絡。Ng出色的表達了Python矢量化代碼設計的重要性。他提供了一個樣闆化的代碼設計,你可以輕松地将其轉移到你自己的應用程式中。

<b>第3課:深入了解DNN</b><b></b>

第一個課程實際上是讓你能夠了解,如何從頭開始實作numpy的向前和向後傳播的步驟。通過該課程,使得我對TensorFlow和Keras等高層架構的内部工作有了更深入的了解。Ng解釋了計算圖背後的想法,讓我了解了TensorFlow是如何執行“神奇的優化”的。

<b>第4課:為什麼使用深層表達</b><b></b>

Ng對DNN的分層方面給出了直覺地了解。例如他對人臉識别的解釋,神經網絡第一層所做的事就是從原始圖檔中提取出人臉的輪廓與邊緣,即邊緣檢測。這樣每個神經元得到的是一些邊緣資訊。神經網絡第二層所做的事情就是将前一層的邊緣進行組合,組合成人臉一些局部特征,比如眼睛、鼻子、嘴巴等。再往後面,就将這些局部特征組合起來,融合成人臉的模樣。他還解釋了存在一些函數,這些函數需要指數數量的隐藏單元來适應淺層網絡中的資料。

<b>第5課:處理偏差和方差的工具</b><b></b>

Ng講解了研究人員為識别和解決與偏差和方差相關問題而采取的步驟。他還談到了偏差和方差之間的“權衡”。他解釋說,在現代的深度學習時代,我們有工具來單獨解決每個問題,不在需要“權衡”了。

<b>第6課:規範化的直覺</b><b></b>

為什麼将懲罰因子添加到成本函數可以減少方差效應?Ng給出了另外一種涉及tanh激活函數的解釋。即,較小的權重矩陣産生較小的輸出,然後将輸出集中于tanh函數的線性部分。

他還為dropout提供了一個有趣的解釋。在選修這門課程之前,我認為dropout基本上都是在每次疊代過程中随機殺死神經元,導緻我們好像是在用一個更小更線性的網絡。而他是從單個神經元的角度看待問題。

由于dropout是随機殺死連接配接,神經元被激勵将其權重更平均地分布在其父母之間。通過擴充權重縮小全中的平方規範。他還解釋說,dropout隻不過是L2正規化的一種自适應形式,這兩種方法都有相似的效果。

<b>第7課:為什麼規範化工作?</b><b></b>

Ng通過一個在歸一化和非歸一化輪廓圖上周遊逐漸下降的例子證明了一個問題,即,為什麼歸一化傾向于通過繪制登高線圖來提高優化過程的速度。

<b>第8課:初始化的重要性</b><b></b>

Ng表示參數的初始化失誤會導緻漸變的消失或爆炸。他示範了幾種解決這些問題的程式,基本思想都是確定每一層的權重矩陣在方差1以内,而且他還讨論了tanh激活函數的Xavier初始化。

<b>第9課:為什麼使用小批量梯度下降法?</b><b></b>

Ng使用等高線圖解釋了小尺寸和大尺寸mini-batch的權衡。基本思想是,大尺寸的會在每次疊代中變慢,而小尺寸的允許你更快的取得進展,但是不能對收斂做出相同的保證。最好的方法是在兩者之間做一些措施,使你能夠更快地處理整個資料集,同時還可以利用矢量化技術。

<b>第10課:對進階優化技術的直覺了解</b><b></b>

Ng解釋了動量(momentum)和RMSprop等技術如何用梯度下降來減少它通向最小值的路徑。

他還用滾下山的球給出了很好的實體解釋。他将這些方法聯系起來解釋著名的亞當優化程式。

<b>第11課:基本後端TensorFlow的了解</b><b></b>

Ng不僅解釋了如何使用TensorFlow實作一個神經網絡,還解釋了如何在優化過程中使用一些後端程式。其中的一項作業是鼓勵你用TensorFlow實作dropout和L2正則化,這進一步增強了我對後端流程的了解。

<b>第12課:正交化</b><b></b>

Ng論述了正交化在機器學習政策中的重要性。基本思想是,希望實作的控件每次隻影響算法的單個元件。例如,為了解決偏差問題,你可以使用更大的網絡或更健壯的優化技術。你希望這些控件隻影響偏差,而不是例如泛化等其他問題。缺乏正交化的控件的一個例子是提前終止優化過程。這是因為它同時影響模型的偏差和方差。

<b>第13課:單個數字評估名額的重要性</b><b></b>

Ng強調了用單個數字評價名額評估算法的重要性。如果你的目标更改,則隻需在模型開發過程中更改評估名額。Ng給出了一個在貓分類應用程式中識别色情照片的例子!

<b>第14課:測試/開發分布</b><b></b>

在過程中需要保持開發和測試集具有相同的分布,這能確定你的團隊在疊代過程中針對正确的目标。不過這也意味着,如果你再測試集中糾正錯誤資料,那麼也必須在開發集中糾正。

<b>第15課:處理不同的教育訓練和測試/開發配置設定</b><b></b>

為什麼團隊會對教育訓練和測試/開發配置設定不同感興趣呢?Ng給出了相應的解釋。他的觀點是,你希望評估名額可以根據你真正關心的比例進行配置設定。例如,你可能希望使用與你的問題不相關的示例來進行教育訓練,但是你不希望你的算法對這些示例進行評估。這樣你的算法就可以得到更多的資料。經驗表明,這種方法在許多情況下會給你帶來更好的性能。缺點是你的訓練和測試/釋出集有不同的釋出。解決方案是忽略訓練集的一小部分,并确定訓練集的泛化能力。然後,你可以将此錯誤率與實際開發錯誤進行比較,并計算“資料不比對”名額。然後,Ng解釋了處理這種資料不比對問題的方法,例如人工資料合成。

<b>第16課:訓練/釋出/測試尺寸</b><b></b>

在深度學習時代,設定訓練/釋出/測試分離的指導方針發生了巨大變化。在上這門課之前,我知道通用的60/20/20分組比例。然而,Ng強調,對于一個非常大的資料集,應該使用大約98/1/1甚至99/0.5/0.5的分割。這是因為開發和測試集大小隻需要能夠確定團隊提供的置信區間内。如果你使用10,000,000個訓練示例,那麼可以100,000個示例就能保證你的開發和測試集的某些信任範圍。

<b>第17課:近似貝葉斯最優誤差</b><b></b>

Ng解釋了在某些應用中,人類級别的誤差如何用作貝葉斯誤差的代理。例如,在視覺和音頻識别之類的任務中,人類的誤差水準非常接近貝葉斯誤差。是以可以通過量化人類模型來避免偏差量。如果沒有貝葉斯誤差的基準,很難了解網絡中的變化和可避免的偏差問題。

<b>第18課:錯誤分析</b><b></b>

Ng講述了一種顯而易見的技術:通過錯誤分析大幅提高算法性能。基本的思路是手動給錯誤分類的例子貼上标簽,這樣就能重點關注在錯誤上,這對錯誤分類資料是最重要的。

例如,在貓識别任務中,Ng确定模糊圖像出現錯誤的幾率最大。而這種敏感性分析可以讓你看到可以減少總錯誤數量。敏感性和近似工作将被納入決策過程。

<b>第19課:何時使用轉移學習?</b><b></b>

轉移學習允許你将知識從一個模型轉移到另一個模型。例如,你可以将圖像識别知識從cat識别應用轉移到放射診斷。實作遷移學習需要重新訓練網絡的最後幾層,用于類似的應用程式域并提供更多的資料。這個思路是,網絡中較早的隐藏單元具有更廣泛的應用程式,它通常不是特定于你正在使用網絡的确切任務。總之,當兩個任務都有相同的輸入特性,并且當你要學習的任務比你想要訓練的任務資料更多時,轉移學習是有效的。

<b>第20課:何時使用多任務學習?</b><b></b>

多任務學習迫使單個神經網絡同時學習多個任務(而不是每個任務都有一個單獨的神經網絡)。Ng解釋說,當一組任務可以從共享較低級别的特性中受益,并且當每個任務的資料量大小相似時,這種方法很有效。

<b>第21課:何時使用端到端深度學習?</b><b></b>

端到端的深度學習需要進行多個階段的處理,并将它們組合成一個單一的神經網絡。這使得資料可以為自己說話,而無需在優化過程中使用人工操作。但相應的缺點為,這種方法需要更多的資料,并且可能會排斥手動設計的元件。

<a href="https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=j4nkrg1c&amp;utm_source=j4nkrg1c" target="_blank"><b>數十款阿裡雲産品限時折扣中,趕緊點選領劵開始雲上實踐吧!</b></a>

文章原标題《Deep Learning Specialization by Andrew Ng  –  21 Lessons Learned》

譯者:奧特曼,審校:袁虎。

繼續閱讀