吳恩達(da)深度學(xue)習(xi)課(ke)程(cheng)二: 改(gai)善(shan)深層神經(jing)網絡 第一(yi)周(zhou):深度學(xue)習(xi)的實踐(一(yi))
此分類用于記錄吳恩達深度學習課程的學習筆記。
課程相關信息鏈接如(ru)下:
- 原課程視頻鏈接:
- github課程資料,含課件與筆記:
- 課程配套練習(中英)與答案:
本篇為第二課第一周的(de)內容(rong),到(dao)的(de)內容(rong)。
本(ben)(ben)周為(wei)第二課的第一周內容(rong),就像課題名稱一樣,本(ben)(ben)周更偏向于深度學習實踐中出現(xian)的問題和(he)概念(nian),在(zai)(zai)有了第一課的機器學習和(he)數學基礎后,可以說,在(zai)(zai)理解上對(dui)本(ben)(ben)周的內容(rong)不會存在(zai)(zai)什么難度。
當然,我也(ye)會對(dui)一(yi)些新出現(xian)的(de)概(gai)念補充一(yi)些基礎內容來幫助(zhu)理解,在有之前基礎的(de)情況下,按部就班(ban)即可(ke)對(dui)本周內容有較好的(de)掌握。
1.數據劃分
我們在第一課的第二周習題部分就已經簡單介紹了訓練集,驗證集,測試集的概念,這里跟隨課程進度,我們再補充一些細節:

這便是一些常用的數據劃分方式,此外,在實際應用中,我們還應注意一點,就是訓練集和后二者的來源,分布可能不同,這也需要我們有相應的措施,具體看一下:

這便是在數據劃分部分課程補充的一些內容,接下來我們引入兩個新概念:偏差和方差。
2.偏差和方差
2.1 什么是偏差和方差
還是先(xian)擺一下概念(nian)吧,這事好久沒做了:
偏差是指模型的預測值與真實值之間的系統性誤差。它衡量的是模型對數據真實規律的擬合能力。
方差是指模型對訓練數據中隨機噪聲或小波動的敏感程度。它衡量的是模型在不同訓練集上訓練時,其預測結果的不穩定性。
我們用課程里的具體例子來理解一下這兩個概念:

依舊是二分類:
我們先看第一幅圖,這里,我們用一條直線來進行分類,很明顯,出現了很多被錯誤分類的樣本。
對于這種不能較好的擬合,誤差較大的結果,就是高偏差。
高偏差的基本表現就是欠擬合(Underfitting),即在訓練集和驗(yan)證(zheng)集上的表現(xian)都很(hen)差。如用一條直線去擬合一組明顯呈拋物線分布的數據。
然后再看第三幅圖,這里,我們非常準確的區分了每一個樣本。
但是要注意,我們觀察發現,在圖中,有兩個樣本偏離了大部分該類樣本的位置。
對于這種變異的,無法正確反應類別規律的樣本數據,我們就稱為噪聲。
而在第三幅圖中,我們的模型敏感度較高,為了擬合這兩個無法正確反應規律的樣本,反而降低了最終的準確率,這種過于敏感以至于擬合噪聲導致性能下降的結果,就是高方差。
高方差的基本表示就是過擬合(Overfitting),即在訓練集上表(biao)現很好,但(dan)在驗(yan)證集或測試集上表(biao)現很差。就像一個(ge)非常復雜的神經網絡,完美記住了訓練數(shu)據的所有(you)點(包括噪聲),反而會對(dui)新數(shu)據泛化能力(li)極差。
而我們在第二份圖標注合適的原因,就是因為它做到了擬合大部分數據的規律實現低偏差,又沒有被噪聲干擾偏離正確規律從而實現低方差。
低(di)偏差(cha)(cha)和(he)低(di)方(fang)差(cha)(cha),就是我(wo)們追求(qiu)的模型目(mu)標。
2.2 從數據分析偏差和方差高低
現在,我們已經知道了偏差和方差的概念,而在實際代碼運行中,我們則需要從代碼的結果,即評估指標來判斷這兩點,來繼續看貓狗分類的例子,我們從代碼結果上看看如何分析偏差和方差的高低。

簡單來說:
偏差高低就看數據在訓練集上的表現好不好。
方差高低就看數據在訓練集和驗證集上的差別大不大。
此外,并不是說只有0.5%或以下才是低方差或者低誤差。
這涉及到一個基本誤差的概念:我們人眼判斷錯誤的概率。
假設我們人眼只有1%的概率會錯誤分類貓狗,那我們的方差和偏差的高低標準就會以1%為標準判斷。
基本誤(wu)差根據任(ren)務不同,自(zi)然也不同。
等等,好像還有一點不太清晰。
我們剛剛引出概念的時候談到,高偏差的表現是欠擬合,高方差的表現是過擬合,但從二者的定義上來看,欠擬合和過擬合不是沖突的嗎?那為什么高偏差和高方差可以同時存在呢?
對于這(zhe)個問題,從表面上看:
- 高偏差 → 欠擬合(模型太簡單,對規律學得不夠)
- 高方差 → 過擬合(模型太復雜,對噪聲學得太多)
似乎一個模型“學的不夠”,另一個“學的太多”,那怎么可能又多又少?
問題就在于——我們用“表現”來簡化這兩個概念,但其實它們真正反映的是模型表現的兩個不同維度。
舉一個飛鏢的例子 : - 每次都扔偏了靶心(高偏差);
- 而且每次落點都不一樣(高方差)。
這就是“又不準又不穩”的情況,即 高偏差 + 高方差同時存在。
其次,欠擬合和過擬合都可以是局部的,我們可能在圖像某一區域發生了欠擬合,又在另一區域發生了過擬合,從這個角度看,即 欠擬合 + 過擬合同時存在。
這樣便可以比較好的回答這個問題。
2.3 如何調整偏差和方差
現在我們已經知道如何判斷算法的偏差和誤差情況了,那相應的,采取什么樣的措施才能調整二者,從而實現算法的調優呢?
總結成一張圖如下:

這是一些基本措施。
要說明的一點是,方差和誤差往往是聯動的,我們的一些措施往往會同時增加或減少二者,用什么算法,什么樣的超參數等等都會產生影響,而隨著技術的發展,才出現了可以單獨影響二者之一的新方法技術,我們遇到再說。
總結來說,構建更大,更復雜的網絡往往能起到更好的效果,但實際上,在這方面,目前并沒有數學概念上的“最優解”,即可以在所有問題上實現最好效果的架構或算法。
這便是(shi)為(wei)什么(me)(me)我們(men)往往把訓練模型稱為(wei)“煉丹”的原(yuan)因(yin),我們(men)需(xu)要一點點,一步步地調試,來(lai)摸索出針對自己的問題效(xiao)果最好的模型,有(you)些(xie)時候,我們(men)自己也不知道為(wei)什么(me)(me)某樣組(zu)合能達到(dao)更好的效(xiao)果。
這便是本篇的內容,下一篇,我們就會介紹到剛剛的圖里新出現的概念:正則化,它可以幫我們緩解過擬合的問題。
