
入門 | 吳恩達Deeplearning.ai 全部課程學習心得分享
本文作者,加拿大國家銀行首席分析師 Ryan Shrott 完成了迄今為止(2017 年 10 月 25 日)吳恩達在 Coursera 上發(fā)布的所有深度學習課程,并為我們提供了課程解讀。
目前 Coursera 上可用的課程中,有三門課非常值得關注:
1. 神經(jīng)網(wǎng)絡與深度學習(Neural Networks and Deep Learning)
2. 改進深度神經(jīng)網(wǎng)絡:調(diào)整超參數(shù)、正則化與優(yōu)化(Improving Deep Neural Networks: Hyperparamater tuning, Regularization and Optimization)
3. 結構化機器學習項目(Structuring Machine Learning Projects)
我發(fā)現(xiàn)這三門課非常重要,在其中,我們可以從吳恩達教授那里獲得很多有用的知識。吳恩達在教學語言上做得很好,解釋概念清晰明了。例如,吳恩達明確指出監(jiān)督學習并沒有超出多維曲線擬合過程的范疇,而對于這種方法的其他理解方式,如對人類神經(jīng)系統(tǒng)的模擬,實際上并不嚴謹。
學習這些課程的基礎知識要求不多,只要求你事先掌握一些線性代數(shù),以及 Python 基礎編程知識。在我看來,你也需要了解向量計算來理解優(yōu)化過程的內(nèi)在知識。但如果你不關心內(nèi)部運作方式,并只希望了解高級層面上的內(nèi)容,盡管跳過微積分的部分。
第 1 課:為什么深度學習如此熱門?
現(xiàn)在人類產(chǎn)生的 90% 數(shù)據(jù)是在最近 2 年內(nèi)被收集的。深度神經(jīng)網(wǎng)絡(DNN)能夠利用體量巨大的數(shù)據(jù)。因此,DNN 超越了較小的網(wǎng)絡和傳統(tǒng)學習算法。
規(guī)模是如何推動 DNN 性能的
此外,算法上的創(chuàng)新也使得 DNN 的訓練速度變得更快。例如,從 Sigmoid 激活函數(shù)改為 RELU 激活函數(shù)對梯度下降等任務的優(yōu)化過程產(chǎn)生了巨大影響。這些算法的改進使得研究人員可以更快地遍歷靈感→ 代碼→ 經(jīng)驗的開發(fā)循環(huán),從而帶來更多的創(chuàng)新。
深度學習開發(fā)循環(huán)
第 2 課:深度學習中的向量化
在開始這門課之前,我并不知道神經(jīng)網(wǎng)絡可以在沒有任何明確循環(huán)語句的情況下被實現(xiàn)(除了層之間的)。吳恩達點明了 Python 中向量化編程設計的重要性。課程附帶的作業(yè)引導你進行向量化的編程,同時這些方法也可以很快遷移到你自己的項目中。
第 3 課:深入了解 DNN
前幾門課實際上在引導你使用 NumPy 從頭開始實現(xiàn)前向和反向傳播。通過這種方法,我更加深入了解了高級深度學習框架(如 TensorFlow 和 Keras)的工作原理。吳恩達解釋了計算圖背后的想法,從而讓我們了解了 TensorFlow 如何實現(xiàn)「神奇優(yōu)化」的。
第 4 課:為什么需要深度?
在這一節(jié)中,吳恩達深入解釋了 DNN 的層概念。例如,對于面部識別系統(tǒng),他向我們解釋了先處理的層是用于處理面部邊界的,其后的層用于將這些邊界識別為面部組件(如鼻子、眼睛、嘴等),再其后的層會將這些組件整合到一起識別人的身份。他還解釋了電路理論(circuit theory)的思想——存在一個函數(shù),需要來自隱藏單元指數(shù)式的數(shù)字來適應淺網(wǎng)絡的數(shù)據(jù)??梢酝ㄟ^添加有限數(shù)量的附加層來簡化指數(shù)問題。
第 5 課:處理偏差和方差的工具
吳恩達解釋了研究者識別和處理偏差方差相關問題的步驟。下圖詮釋了一種解決這些問題的系統(tǒng)性方法。
解決偏差和方差問題的方法
他還解決了偏差和方差之間的「權衡」(tradeoff)。他認為在現(xiàn)在這個深度學習的時代,我們擁有獨立解決每個問題的工具,使權衡不再存在。
第 6 課:正則化
為什么向成本函數(shù)添加懲罰項會降低方差?在上這門課之前我的理解是它使權重矩陣接近于零,從而產(chǎn)生一個更「線性」的函數(shù)。吳恩達給出了另外一種和 tanh 激活函數(shù)相關的解釋,即較小的權重矩陣生成較小的輸出,使得輸出圍繞在 tanh 函數(shù)線性區(qū)域的中心。
tanh 激活函數(shù)
他還給出了 dropout 的有趣解釋。之前我認為 dropout 在每次迭代中消滅隨機神經(jīng)元,就像越小的網(wǎng)絡線性程度就越強一樣。但是吳恩達的解釋是從單個神經(jīng)元的角度來看待生命(life)。
單個神經(jīng)元的角度
由于 dropout 隨機消滅連接,這促使神經(jīng)元向父系神經(jīng)元中更加均勻地擴展權重。通過擴展權重,它可以減少權重的 L2 范數(shù)(squared norm)。他還解釋了 dropout 是 L2 正則化的自適應形式,兩種方法效果相近。
第 7 課:歸一化為何有效?
吳恩達展示了為什么歸一化可以通過繪制等高線圖的方式加速優(yōu)化步驟。他詳細講解了在歸一化和非歸一化等高線圖上進行梯度下降所需要的迭代次數(shù)變化,即相同優(yōu)化算法沒經(jīng)過歸一化操作會需要更多的迭代數(shù)。
第 8 課:初始化的重要性
吳恩達表示不使用參數(shù)初始化可能導致梯度消失或爆炸。他展示了多個步驟來解決這些問題?;驹瓌t是確保每一層的權重矩陣的方差都近似為 1。他還討論了 tanh 激活函數(shù)的 Xavier 初始化。
第 9 課:為什么使用小批量梯度下降?
吳恩達使用等高線圖解釋了使用小批量和大批量訓練之間的權衡。基本原則是較大的批量每次迭代會變慢,較小的批量可以加快迭代過程,但是無法保證同樣的收斂效果。最佳方法就是在二者之間進行權衡,使得訓練過程比一次性處理整個數(shù)據(jù)集要快,又能利用向量化技術的優(yōu)勢。
第 10 課:高級優(yōu)化技術的直觀理解
吳恩達解釋了合適使用動量(momentum)和 RMSprop 等技術限制梯度下降逼近極小值的路徑。他還用球滾下山的例子生動地解釋了這一過程。他把這些方法結合起來來解釋著名的 Adam 優(yōu)化。
第 11 課:基本的 TensorFlow 后端理解
吳恩達不僅解釋了如何使用 TensorFlow 實現(xiàn)神經(jīng)網(wǎng)絡,同時還講解了在優(yōu)化過程中出現(xiàn)的后端進程。有一個家庭作業(yè)就是鼓勵我們使用 TensorFlow 實現(xiàn) dropout 和 L2 正則化,這加強了我對后端過程的理解。
第 12 課:正交化
吳恩達還討論了機器學習策略中正則化的重要性。其基本思想是,我們希望實現(xiàn)并控制影響算法性能的因素,即一次只控制一個影響性能的因素。例如為了解決偏差問題,我們可以使用更大的網(wǎng)絡或更魯棒的優(yōu)化技術,我們希望這些控制只影響偏差而不會影響其它如泛化等問題。缺少正交化控制的案例是過早停止了算法的最優(yōu)化過程,因為這樣會同時影響模型的偏差和方差。
第 13 課:單數(shù)值評估度量的重要性
吳恩達強調(diào)了選擇單數(shù)值評估度量(single number evaluation metric)的重要性,它可以允許我們評估算法。如果目標改變,我們應該在模型開發(fā)過程中僅更改評估度量。吳恩達給我們講解了一個使用貓分類應用識別色情圖片的案例。
第 14 課:測試和開發(fā)集的分布
通常我們會假設測試集與開發(fā)集(dev sets)的分布相同,這就確保了我們在迭代過程中朝向正確的目標優(yōu)化。這同樣意味著如果你決定糾正測試集中錯誤的標注數(shù)據(jù),那么你需要在開發(fā)集中糾正錯誤標注的數(shù)據(jù)。
第 15 課:處理不同的訓練和測試/開發(fā)分布
吳恩達介紹了為什么我們對訓練和測試/開發(fā)集沒有相同的分布這一問題感興趣。因為我們希望根據(jù)實際關心的樣本來計算評估度量。例如我們可能希望使用和訓練問題無關的的樣本進行訓練,但我們并不希望算法使用這些樣本進行評估,這就令我們的算法可以在更多的數(shù)據(jù)上進行訓練。經(jīng)驗上,這種方法可以在許多案例上產(chǎn)生非常好的效果。缺點是可能我們的訓練和測試/開發(fā)集有不同的分布,這個問題的通常解決辦法是,可以留出一小部分訓練集,并確定訓練集的泛化性能。然后我們可以比較這些誤差率與實際的開發(fā)誤差,并計算一個「數(shù)據(jù)誤匹配」的度量標準。吳恩達還解釋了解決這些數(shù)據(jù)誤匹配問題的方法,例如人工數(shù)據(jù)合成。
第 16 課:訓練集/開發(fā)集/測試集大小
在深度學習時代,訓練集/開發(fā)集/測試集的分隔方法也發(fā)生了巨大的改變。之前,我只知道較普遍的 60/20/20 分隔。吳恩達強調(diào),對于一個非常大的數(shù)據(jù)集,應該使用 98/1/1 甚至 99/0.5/0.5 的分隔。這是因為開發(fā)集合測試集只要足夠大能保證模型處于團隊設定的置信區(qū)間即可。如果你使用 1 千萬個訓練樣本,那么 10 萬樣本(即數(shù)據(jù)集的 1%)就足夠保證開發(fā)集和/或測試集的置信區(qū)間了。
第 17 課:近似貝葉斯最優(yōu)誤差
吳恩達解釋了在某些應用中人類級別的性能如何作為貝葉斯誤差的替代。例如,在視覺和聽覺識別任務中,人類級別的誤差通常很接近貝葉斯誤差,可以用于量化模型中可避免的偏差。如果沒有諸如貝葉斯誤差這樣的基準測試,理解網(wǎng)絡中的方差和可避免的偏差問題是很困難的。
第 18 課:誤差分析
吳恩達介紹了一種能顯著提高算法性能的有效性的誤差分析技術?;鞠敕ㄊ鞘止俗㈠e誤分類的樣本,集中精力處理對錯誤分類數(shù)據(jù)影響最大的誤差。
貓識別 App 誤差分析
例如,在貓識別中吳恩達認為模糊的圖像最容易導致誤差。這種敏感性分析可以令人看到在降低總體誤差的過程中,你花費的精力到底有多值得。還有一種可能是,修復模糊圖像是很費力的任務,而其它的誤差更容易理解和修復。敏感性分析和近似操作都將作為決策過程的因素。
第 19 課:什么時候使用遷移學習?
遷移學習允許將一個模型的知識遷移到另一個。例如,你可以將一個貓識別 app 中的圖像識別知識遷移到放射診斷中去。實現(xiàn)遷移學習需要用更多的數(shù)據(jù)重訓練網(wǎng)絡的最后幾個層,以用于相似的應用領域。其思想基礎是網(wǎng)絡的低層的隱藏單元擁有更加廣闊的應用范圍,即對具體的任務類型不敏感??傊?,當任務之間擁有相同的輸入特征,并且需要學習的任務擁有比需要訓練的任務多得多的數(shù)據(jù)的時候,遷移學習是可行的。
第 20 課:什么時候使用多任務學習?
多任務學習迫使單個神經(jīng)網(wǎng)絡同時學習多個任務(和每一個任務都配置單獨的神經(jīng)網(wǎng)絡相反)。吳恩達解釋道,當任務集合通過共享低級特征獲得學習增益,以及每一個任務的數(shù)據(jù)量規(guī)模相似的時候,這種方法能工作得很好。
第 21 課:什么時候用端到端的深度學習?
端到端的深度學習需要多層處理并將它們組合到單個神經(jīng)網(wǎng)絡中,這使得數(shù)據(jù)能在沒有人工設計步驟引進偏差的前提下自主進行優(yōu)化過程。另一方面,這個方法需要非常多的數(shù)據(jù),有可能排除潛在的手工設計成分。
結論
吳恩達的深度學習課程使我對深度學習模型的開發(fā)過程有了基本的直觀理解,以上我解釋過的課程只不過是這個課程中展示資料的一部分。即使完成了課程你也還不能稱為深度學習專家,而我唯一的不滿是課程的作業(yè)布置太簡單了。順便提一句,寫這篇文章并沒有得到 deeplearning.ai 的批準。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
訓練與驗證損失驟升:機器學習訓練中的異常診斷與解決方案 在機器學習模型訓練過程中,“損失曲線” 是反映模型學習狀態(tài)的核心指 ...
2025-09-19解析 DataHub 與 Kafka:數(shù)據(jù)生態(tài)中兩類核心工具的差異與協(xié)同 在數(shù)字化轉(zhuǎn)型加速的今天,企業(yè)對數(shù)據(jù)的需求已從 “存儲” 轉(zhuǎn)向 “ ...
2025-09-19CDA 數(shù)據(jù)分析師:讓統(tǒng)計基本概念成為業(yè)務決策的底層邏輯 統(tǒng)計基本概念是商業(yè)數(shù)據(jù)分析的 “基礎語言”—— 從描述數(shù)據(jù)分布的 “均 ...
2025-09-19CDA 數(shù)據(jù)分析師:表結構數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結構數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-19SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內(nèi)涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結構數(shù)據(jù)特征價值的專業(yè)核心 表結構數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結構化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結構數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結構數(shù)據(jù)(以 “行 - 列” 存儲的結構化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結構數(shù)據(jù)價值的核心操盤手 表格結構數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11