Coursera自动驾驶课程第10讲:Feedforward Neural Networks
在上一講《Coursera自動(dòng)駕駛課程第9講:Visual Features Detection Description and Matching》中我們學(xué)習(xí)了如何進(jìn)行圖像特征檢測(cè),特征匹配以及如何構(gòu)建視覺(jué)里程計(jì)來(lái)估計(jì)相機(jī)的運(yùn)動(dòng)。
本講我們將學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)模塊,關(guān)于神經(jīng)網(wǎng)絡(luò)或深度學(xué)習(xí)網(wǎng)上有很多相關(guān)課程,這里推薦吳恩達(dá)老師的深度學(xué)習(xí)專(zhuān)項(xiàng)課程。由于篇幅所限,本講介紹的不會(huì)很深入。
B站視頻鏈接:https://www.bilibili.com/video/BV1PE411D72p。
文章目錄
- 1. Feedforward Neural Networks
- 1.1 Overview
- 1.2 Applications
- 1.3 Mode of Action of Neural Networks
- 1) Hidden units
- 2) Activation functions
- 2.Output Layers and Loss Functions
- 2.1 Machine Learning Algorithm Design
- 2.2 Classification: Softmax Output Layers
- 2.3 Regression: Linear Output Layers
- 3. Neural Network Training with Gradient Descent
- 3.1 Overview
- 3.2 Batch Gradient Descent (重點(diǎn))
- 3.3 Stochastic Gradient Descent (重點(diǎn))
- 4. Data Splits and Neural Network Performance Evaluation
- 4.1 Data Splits
- 4.2 Underfitting & Overfitting
- 5. Neural Network Regularization
- 5.1 Overview
- 5.2 Parameter norm penalites
- 5.3 Dropout
- 5.4 Early Stopping
- 6. Convolutional Neural Networks
- 6.1 ConvNets
- 6.2 Cross Correlation
- 6.3 Output Volume Shape
1. Feedforward Neural Networks
1.1 Overview
本講,我們將學(xué)習(xí)一個(gè)新的主題:深度學(xué)習(xí)。我們將學(xué)習(xí)前饋神經(jīng)網(wǎng)絡(luò),前饋神經(jīng)網(wǎng)絡(luò)是一種非常有用的人工神經(jīng)網(wǎng)絡(luò)。
前饋神經(jīng)網(wǎng)絡(luò)本質(zhì)上也是一種函數(shù),定義了從輸入xxx到輸出yyy的映射,函數(shù)形式如下,θ\thetaθ是需要的參數(shù)。
y=f(x;θ)y=f(x ; \theta)y=f(x;θ)
下面來(lái)看一個(gè)神經(jīng)網(wǎng)絡(luò)的例子:這是一個(gè)四層前饋神經(jīng)網(wǎng)絡(luò)。該神經(jīng)網(wǎng)絡(luò)具有輸入層,輸入層為xxx。在這里,xxx可以是標(biāo)量,向量,矩陣甚至是nnn維張量,例如圖像。輸入經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò)的第一層處理。我們將此層稱(chēng)為第一隱藏層。類(lèi)似地,第二隱藏層處理第一隱藏層的輸出。我們可以根據(jù)需要添加任意數(shù)量的隱藏層,但是每個(gè)層都會(huì)添加其他要學(xué)習(xí)的參數(shù)。神經(jīng)網(wǎng)絡(luò)的最后一層稱(chēng)為輸出層。它獲取最后一個(gè)隱藏層的輸出并將其轉(zhuǎn)換為所需的輸出yyy。現(xiàn)在,我們應(yīng)該對(duì)為什么將這些網(wǎng)絡(luò)稱(chēng)為前饋具有直覺(jué)。這是因?yàn)樾畔妮斎?span id="ozvdkddzhkzd" class="katex--inline">xxx經(jīng)過(guò)一些中間計(jì)算,一直流到輸出yyy,而沒(méi)有任何反饋連接。
然后,我們將網(wǎng)絡(luò)擴(kuò)展到NNN層,函數(shù)形式為:
f(x;θ)=f(N)(f(N?1)(…f(2)(f(1)(x))))f(x ; \theta)=f^{(N)}\left(f^{(N-1)}\left(\ldots f^{(2)}\left(f^{(1)}(x)\right)\right)\right)f(x;θ)=f(N)(f(N?1)(…f(2)(f(1)(x))))
其中,xxx為輸入層,f(N)f^{(N)}f(N)為輸出層,函數(shù)f(1)f^{(1)}f(1)到f(N?1)f^{(N-1)}f(N?1)為隱藏層。
1.2 Applications
現(xiàn)在,我們看一下深度學(xué)習(xí)在自動(dòng)駕駛中的應(yīng)用實(shí)例,輸入為圖像。
- 最基本的感知任務(wù)是分類(lèi)任務(wù)。在這里,我們需要神經(jīng)網(wǎng)絡(luò)告訴我們圖像所屬分類(lèi)。
- 我們還可以對(duì)圖像中的對(duì)象的進(jìn)行定位,稱(chēng)之為目標(biāo)檢測(cè)。
- 另一組任務(wù)是像素級(jí)任務(wù)。舉例來(lái)說(shuō),我們可能想估計(jì)圖像中每個(gè)像素的深度值。
- 我們可能要確定每個(gè)像素屬于哪個(gè)類(lèi)。此任務(wù)稱(chēng)為語(yǔ)義分割。
1.3 Mode of Action of Neural Networks
現(xiàn)在我們了解一些關(guān)于神經(jīng)網(wǎng)絡(luò)訓(xùn)練的知識(shí)。在稱(chēng)為神經(jīng)網(wǎng)絡(luò)訓(xùn)練的過(guò)程中,我們通過(guò)修改描述網(wǎng)絡(luò)的參數(shù)θ\thetaθ來(lái)使神經(jīng)網(wǎng)絡(luò)fff以匹配真值f?(x)f ^*(x)f?(x),即:
f(x;θ)?f?(x)f(x ; \theta) \cong f^{*}(x)f(x;θ)?f?(x)
這里訓(xùn)練數(shù)據(jù)為xxx和其真值f?(x)f ^*(x)f?(x)。
1) Hidden units
現(xiàn)在我們來(lái)深入了解隱藏層,隱藏層由仿射變換和一個(gè)非線(xiàn)性變換ggg組成。
- 其中非線(xiàn)性函數(shù)ggg稱(chēng)為激活函數(shù)。
- 第nnn個(gè)隱藏層的輸入為n?1n-1n?1層的輸出,在該層是第一隱藏層的情況下,其輸入僅是輸入圖像xxx。
- 仿射變換由一個(gè)乘法權(quán)重矩陣WWW和一個(gè)偏差bbb組成。這些權(quán)重和偏差是神經(jīng)網(wǎng)絡(luò)需要學(xué)習(xí)的參數(shù)θ\thetaθ。
- 最后,轉(zhuǎn)換后的輸入通過(guò)激活函數(shù)ggg傳遞。
2) Activation functions
下面我們來(lái)介紹神經(jīng)網(wǎng)絡(luò)中常用的激活函數(shù),ReLU是現(xiàn)在常用的激活函數(shù),其形式為:
g(z)=max?(0,z)g(z)=\max (0, z)g(z)=max(0,z)
ReLU將零和仿射變換的輸出之間的最大值作為其輸出。
讓我們來(lái)看一個(gè)ReLU隱藏層計(jì)算的示例。 已知前一個(gè)隱藏層輸出hn?1h_{n-1}hn?1?,權(quán)重矩陣WWW和偏差bbb。 首先進(jìn)行仿射變換,仿射變換的最終結(jié)果是5×35\times35×3矩陣。
現(xiàn)在,讓我們將此矩陣傳遞給ReLU函數(shù)。 我們可以看到ReLU防止了仿射變換的任何負(fù)輸出傳遞到下一層。
實(shí)際上,隱藏單元的設(shè)計(jì)是深度學(xué)習(xí)中一個(gè)非常活躍的研究領(lǐng)域,并且還沒(méi)有很多指導(dǎo)理論。 例如,某些神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)使用sigmoid函數(shù),雙曲正切非線(xiàn)性tanh函數(shù),ReLU的泛化,Maxout非線(xiàn)性作為其隱藏層激活函數(shù),如果想深入了解可以查看相關(guān)教材和論文。
2.Output Layers and Loss Functions
2.1 Machine Learning Algorithm Design
包括神經(jīng)網(wǎng)絡(luò)在內(nèi)的有監(jiān)督機(jī)器學(xué)習(xí)模型有兩種工作模式:推理和訓(xùn)練。
- 給定一組參數(shù),將輸入xxx傳遞到模型中,可以獲得輸出yyy,這種工作模式稱(chēng)為推理,網(wǎng)絡(luò)及其參數(shù)是固定的。
- 第二種工作模式,涉及對(duì)網(wǎng)絡(luò)參數(shù)進(jìn)行優(yōu)化,這種模式稱(chēng)為訓(xùn)練。
讓我們看看通常如何進(jìn)行訓(xùn)練。我們從與推理相同的工作流程開(kāi)始。但是,在訓(xùn)練過(guò)程中,我們有訓(xùn)練數(shù)據(jù)。這樣,我們知道xxx的真值是什么,即模型的預(yù)期輸出。對(duì)于自動(dòng)駕駛,訓(xùn)練數(shù)據(jù)常見(jiàn)的為人類(lèi)標(biāo)注的圖像,這往往需要花費(fèi)很長(zhǎng)時(shí)間才能完成。我們通過(guò)損失函數(shù)將預(yù)測(cè)的輸出yyy和xxx的實(shí)際輸出真值進(jìn)行比較。
損失函數(shù)將來(lái)自網(wǎng)絡(luò)的預(yù)測(cè)輸出yyy和x的實(shí)際輸出作為輸入,并提供了兩者之間差異的度量。我們通常嘗試通過(guò)修改參數(shù)來(lái)最小化此度量,以使網(wǎng)絡(luò)的輸出yyy與xxx的預(yù)期輸出盡可能相似。我們通過(guò)優(yōu)化函數(shù)對(duì)參數(shù)進(jìn)行修改。
在上一課中討論了前饋神經(jīng)網(wǎng)絡(luò),該神經(jīng)網(wǎng)絡(luò)將輸入xxx傳遞給隱藏層函數(shù),然后將隱藏層的輸出傳遞給輸出層。這是神經(jīng)網(wǎng)絡(luò)的推理階段。為了進(jìn)行訓(xùn)練,我們將預(yù)測(cè)的輸出傳遞給損失函數(shù),然后使用優(yōu)化函數(shù)來(lái)生成一組新的參數(shù)。
人工神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)與傳統(tǒng)機(jī)器學(xué)習(xí)算法的設(shè)計(jì)之間的主要區(qū)別在于,神經(jīng)網(wǎng)絡(luò)僅通過(guò)輸出層與損失函數(shù)進(jìn)行交互。然后通過(guò)優(yōu)化函數(shù)進(jìn)行參數(shù)調(diào)整。(這里課程說(shuō)的不是很準(zhǔn)確,其實(shí)神經(jīng)網(wǎng)絡(luò)會(huì)通過(guò)反向傳播來(lái)調(diào)整每一層參數(shù)值。)
2.2 Classification: Softmax Output Layers
自動(dòng)駕駛感知的第一個(gè)常見(jiàn)任務(wù)就是分類(lèi)任務(wù)。分類(lèi)可以描述為將輸入xxx映射到kkk個(gè)類(lèi)別中的其中一個(gè)類(lèi)別,包括圖像分類(lèi),語(yǔ)義分割,實(shí)體分割等。
自動(dòng)駕駛感知的第二個(gè)任務(wù)是回歸任務(wù)。在回歸中,我們將輸入映射為一組實(shí)數(shù)。回歸的示例包括深度估計(jì),估計(jì)圖像中每個(gè)像素的真實(shí)深度值。我們也可以將兩個(gè)任務(wù)混合在一起。例如,目標(biāo)檢測(cè)通常包括一個(gè)回歸任務(wù)和一個(gè)分類(lèi)任務(wù),在回歸任務(wù)中我們估計(jì)目標(biāo)的邊界框,在分類(lèi)任務(wù)中我們確定邊界框中的目標(biāo)類(lèi)型。
讓我們先從分類(lèi)任務(wù)開(kāi)始。 通常,對(duì)于kkk個(gè)類(lèi)別的分類(lèi)任務(wù),常用的分類(lèi)函數(shù)為softmax函數(shù)。 Softmax函數(shù)能夠表示kkk個(gè)類(lèi)別上的概率分布。 softmax輸出層將神經(jīng)網(wǎng)絡(luò)最后一個(gè)隱藏層的輸出作為輸入hhh。 然后通過(guò)線(xiàn)性變換得到向量zzz。
z=WTh+bz=W^{T} h+bz=WTh+b
接下來(lái),使用softmax函數(shù)將向量zzz轉(zhuǎn)換為離散概率分布。 對(duì)于每個(gè)元素ziz_izi?,此函數(shù)都會(huì)計(jì)算元素ziz_izi?的指數(shù)與zzz的所有元素的指數(shù)之和之比。 結(jié)果為一個(gè)介于0和1之間的值,即其所屬類(lèi)別的概述,概率總和是1。
Softmax?(zi)=exp?(zi)∑jexp?(zj)\operatorname{Softmax}\left(z_{i}\right)=\frac{\exp \left(z_{i}\right)}{\sum_{j} \exp \left(z_{j}\right)}Softmax(zi?)=∑j?exp(zj?)exp(zi?)?
讓我們看一個(gè)示例,以更好地解釋softmax。 在此示例中,我們想對(duì)包含貓,狗或狐貍的圖像進(jìn)行分類(lèi)。 首先,根據(jù)我們的網(wǎng)絡(luò),我們定義輸出矢量的第一個(gè)元素以對(duì)應(yīng)于圖像是貓的概率。 類(lèi)的順序是任意的,對(duì)網(wǎng)絡(luò)性能沒(méi)有影響。 以線(xiàn)性變換的輸出為例,我們通過(guò)將輸出中每個(gè)元素的指數(shù)除以所有元素的指數(shù)總和來(lái)計(jì)算概率。我們得出該圖像為貓的概率為88%,該圖像為狐貍的概率為11.9%,而該圖像為狗的概率非常低 。
現(xiàn)在,讓我們看看如何設(shè)計(jì)一個(gè)損失函數(shù),該函數(shù)使用softmax輸出層的輸出向我們展示估計(jì)的準(zhǔn)確性。 softmax輸出層使用的損失函數(shù)是交叉熵?fù)p失,它是通過(guò)取softmax函數(shù)的負(fù)對(duì)數(shù)來(lái)形成的。交叉熵?fù)p失具有兩項(xiàng)來(lái)控制網(wǎng)絡(luò)輸出與真實(shí)概率的接近程度,損失函數(shù)形式為:
L(θ)=?log?(Softmax?(zi))=?zi+(log?∑jexp?(zj))L(\theta)=-\log \left(\operatorname{Softmax}\left(z_{i}\right)\right)=-z_{i}+\left(\log \sum_{j} \exp \left(z_{j}\right)\right)L(θ)=?log(Softmax(zi?))=?zi?+(logj∑?exp(zj?))
要更好地了解這種損失。讓我們看一個(gè)如何通過(guò)分類(lèi)神經(jīng)網(wǎng)絡(luò)的輸出來(lái)計(jì)算交叉熵?fù)p失的數(shù)值示例。回顧前面的示例,我們首先需要選擇ziz_izi?是什么。 ziz_izi?是對(duì)應(yīng)于真實(shí)輸入類(lèi)別的線(xiàn)性變換輸出。在這種情況下,ziz_izi?是對(duì)應(yīng)于cat類(lèi)的線(xiàn)性變換輸出的元素。一旦確定了ziz_izi?,就可以使用交叉熵來(lái)計(jì)算最終損失值。在這種情況下,網(wǎng)絡(luò)可以正確地預(yù)測(cè)輸入為貓,損失函數(shù)值為0.12。
現(xiàn)在讓我們?cè)俅芜M(jìn)行計(jì)算,但是網(wǎng)絡(luò)輸出錯(cuò)誤。網(wǎng)絡(luò)的輸入仍然是貓的圖像。網(wǎng)絡(luò)仍將13的值分配給線(xiàn)性變換輸出的cat條目。但是這一次fox條目的值為14。計(jì)算交叉熵?fù)p失,我們發(fā)現(xiàn)它的評(píng)估值為1.31,是前一張幻燈片的十倍。損失函數(shù)會(huì)嚴(yán)重懲罰錯(cuò)誤的預(yù)測(cè),這種差異加快了學(xué)習(xí)過(guò)程。
2.3 Regression: Linear Output Layers
線(xiàn)性輸出層主要用于回歸任務(wù),線(xiàn)性輸出層僅由一個(gè)線(xiàn)性變換組成,無(wú)任何非線(xiàn)性。 常見(jiàn)的損失函數(shù)為均方誤差函數(shù)。
L(θ)=∑i(zi?f?(xi))2L(\theta)=\sum_{i}\left(z_{i}-f^{*}\left(x_{i}\right)\right)^{2}L(θ)=i∑?(zi??f?(xi?))2
上面描述的線(xiàn)性和softmax是當(dāng)今神經(jīng)網(wǎng)絡(luò)中最常用的輸出層,可以與各種任務(wù)(特定的損失函數(shù))結(jié)合使用,以執(zhí)行用于自動(dòng)駕駛的各種感知任務(wù)。
3. Neural Network Training with Gradient Descent
3.1 Overview
讓我們首先回顧一下我們先前描述的前饋神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程。給定訓(xùn)練輸入數(shù)據(jù)xxx和相應(yīng)的標(biāo)簽f?(x)f^*(x)f?(x)。
我們首先將輸入xxx傳遞給隱藏層,然后傳遞給輸出層以獲得最終輸出yyy。我們?cè)谶@里看到輸出yyy是參數(shù)θ\thetaθ的函數(shù)。請(qǐng)記住,θ\thetaθ包含網(wǎng)絡(luò)內(nèi)部線(xiàn)性變換的權(quán)重和偏差。
接下來(lái),我們通過(guò)損失函數(shù)將xxx和θ\thetaθ的預(yù)測(cè)輸出yyy與f?(x)f^*(x)f?(x)進(jìn)行比較。請(qǐng)記住,損失函數(shù)衡量的是網(wǎng)絡(luò)輸出與真值之間的誤差有多大。目標(biāo)是使損失函數(shù)最小。我們通過(guò)使用損失函數(shù)作為指導(dǎo)來(lái)產(chǎn)生一組新的參數(shù)θ\thetaθ來(lái)達(dá)到預(yù)期的最小的損失值目的。具體來(lái)說(shuō),我們使用損失函數(shù)的梯度來(lái)修改參數(shù)θ\thetaθ。此優(yōu)化過(guò)程稱(chēng)為梯度下降。
3.2 Batch Gradient Descent (重點(diǎn))
在詳細(xì)介紹梯度下降之前,讓我們?cè)賮?lái)看看神經(jīng)網(wǎng)絡(luò)的損失函數(shù)。通常,我們有數(shù)千對(duì)訓(xùn)練數(shù)據(jù),xxx和f?(x)f^*(x)f?(x)。
我們可以計(jì)算所有訓(xùn)練樣本的損失,作為單個(gè)訓(xùn)練樣本損失的平均值,公式為:
J(θ)=1N∑i=1NL[f(xi,θ),f?(xi)]J(\theta)=\frac{1}{N} \sum_{i=1}^{N} L\left[f\left(x_{i}, \theta\right), f^{*}\left(x_{i}\right)\right]J(θ)=N1?i=1∑N?L[f(xi?,θ),f?(xi?)]
然后我們可以計(jì)算訓(xùn)練損失相對(duì)于參數(shù)θ\thetaθ的梯度,最終得到的梯度下降算法為:
?θJ(θ)=?θ[1N∑i=1NL[f(xi,θ),f?(xi)]]=1N∑i=1N?θL[f(xi,θ),f?(xi)]\nabla_{\theta} J(\theta)=\nabla_{\theta}\left[\frac{1}{N} \sum_{i=1}^{N} L\left[f\left(x_{i}, \theta\right), f^{*}\left(x_{i}\right)\right]\right]=\frac{1}{N} \sum_{i=1}^{N} \nabla_{\theta} L\left[f\left(x_{i}, \theta\right), f^{*}\left(x_{i}\right)\right]?θ?J(θ)=?θ?[N1?i=1∑N?L[f(xi?,θ),f?(xi?)]]=N1?i=1∑N??θ?L[f(xi?,θ),f?(xi?)]
梯度下降是迭代一階優(yōu)化算法。迭代意味著它從參數(shù)θ\thetaθ的初始值開(kāi)始,迭代改進(jìn)參數(shù)。一階是指算法只利用一階導(dǎo)數(shù)來(lái)改善參數(shù)θ\thetaθ。批量梯度下降過(guò)程如下:
- 首先,對(duì)神經(jīng)網(wǎng)絡(luò)的參數(shù)θ\thetaθ進(jìn)行初始化。
- 其次,確定停止條件,終止迭代并返回最終的參數(shù)。一旦迭代過(guò)程開(kāi)始,算法要做的第一件事就是計(jì)算損失函數(shù)相對(duì)于參數(shù)θ\thetaθ的梯度:?θJ(θ)\nabla_{\theta} J(\theta)?θ?J(θ)。梯度可以用我們前面推導(dǎo)的方程來(lái)計(jì)算。最后,根據(jù)計(jì)算的梯度更新參數(shù)θ\thetaθ:θ←θ???θJ(θ)\theta \leftarrow \theta-\epsilon \nabla_{\theta} J(\theta)θ←θ???θ?J(θ)。在這里,?\epsilon?稱(chēng)為學(xué)習(xí)率,它控制著我們?cè)诿看蔚鷷r(shí),在負(fù)梯度方向上調(diào)整參數(shù)的程度。
讓我們看一個(gè)二維情況下梯度下降的例子。在這里,我們?cè)噲D找到使函數(shù)JJJ最小化的參數(shù)θ1\theta1θ1和θ2\theta2θ2。圖中的等高線(xiàn)是相等的。梯度下降迭代地尋找新的參數(shù)θ\thetaθ,在每次迭代中,它會(huì)使我們向內(nèi)前進(jìn)一步。
- 算法的第一步是初始化參數(shù)θ\thetaθ。使用我們的初始參數(shù),我們得到損失函數(shù)的初始值。
- 我們通過(guò)計(jì)算初始參數(shù)θ1\theta1θ1和θ2\theta2θ2處損失函數(shù)的梯度開(kāi)始梯度下降。使用更新步驟,我們得到新的參數(shù),以達(dá)到我們的損失函數(shù)的低點(diǎn)。
- 我們重復(fù)這個(gè)過(guò)程,直到滿(mǎn)足終止條件。然后我們得到最后一組參數(shù)。該算法還缺少兩個(gè)部分。我們?nèi)绾纬跏蓟瘏?shù),以及如何決定何時(shí)停止算法?
對(duì)于參數(shù)初始化,我們通常使用標(biāo)準(zhǔn)正態(tài)分布初始化權(quán)重,并將偏差設(shè)為0。值得一提的是,還有一些特定于某些激活函數(shù)的啟發(fā)式算法在文獻(xiàn)中被廣泛使用。
梯度下降的停止條件有點(diǎn)復(fù)雜。有三種方法可以確定何時(shí)停止訓(xùn)練算法。
- 當(dāng)?shù)螖?shù)超過(guò)多最大迭代次數(shù)時(shí),終止迭代。
- 另一種啟發(fā)式方法是基于參數(shù)θ\thetaθ在迭代之間的變化程度(即θnew??θold?\boldsymbol{\theta}_{\text {new }}-\boldsymbol{\theta}_{\text {old }}θnew???θold??)。微小的變化意味著算法不再有效地更新參數(shù),這可能意味著已經(jīng)達(dá)到最小值。
- 最后一個(gè)廣泛使用的停止條件是迭代之間損失函數(shù)值的變化。同樣,隨著迭代之間損失函數(shù)的變化變小,優(yōu)化很可能已經(jīng)收斂到最小值。
3.3 Stochastic Gradient Descent (重點(diǎn))
不幸的是,批梯度下降算法有嚴(yán)重的缺點(diǎn)。為了能夠計(jì)算梯度,我們需要使用反向傳播。而批梯度下降則對(duì)整個(gè)訓(xùn)練集的梯度進(jìn)行評(píng)估。使執(zhí)行單個(gè)更新步驟的速度非常慢。為了解決這個(gè)問(wèn)題,我們現(xiàn)在可以使用訓(xùn)練數(shù)據(jù)的一個(gè)小批量來(lái)計(jì)算我們的梯度。那么,如何使用小批量修改我們的批梯度下降算法?
對(duì)算法的唯一修改是在采樣步驟。這里我們選擇訓(xùn)練數(shù)據(jù)的子樣本作為我們的小批量,這種算法被稱(chēng)為隨機(jī)或小批量梯度下降,因?yàn)槲覀冸S機(jī)選擇樣本,但是,此算法會(huì)導(dǎo)致另一個(gè)要確定的參數(shù),即我們要使用的minibatch大小N′N(xiāo)^{\prime}N′。
?θJ(θ)=1N′∑iN′?θL[fi(x,θ),fi?(x)]\nabla_{\theta} J(\theta)=\frac{1}{N^{\prime}} \sum_{i}^{N^{\prime}} \nabla_{\theta} L\left[f_{i}(x, \theta), f_{i}^{*}(x)\right]?θ?J(θ)=N′1?i∑N′??θ?L[fi?(x,θ),fi??(x)]
在使用GPU時(shí),我們可以將minibatch設(shè)置為2的nnn次方。要記住的最后一個(gè)問(wèn)題是,在對(duì)minibatch進(jìn)行采樣之前,需要對(duì)數(shù)據(jù)集進(jìn)行打亂。
隨機(jī)梯度下降法在文獻(xiàn)中有許多變體,每種變體都有各自的優(yōu)缺點(diǎn)。可能很難選擇要使用哪種變體,有時(shí)其中一種變體比另一種變體更適用于某些問(wèn)題。作為自動(dòng)駕駛應(yīng)用的簡(jiǎn)單經(jīng)驗(yàn)法則,安全的選擇是adam優(yōu)化方法。它對(duì)初始參數(shù)θ\thetaθ具有很強(qiáng)的魯棒性,應(yīng)用廣泛。
4. Data Splits and Neural Network Performance Evaluation
4.1 Data Splits
讓我們以一個(gè)現(xiàn)實(shí)問(wèn)題為例。我們得到了一個(gè)包含10000張交通標(biāo)志圖像的數(shù)據(jù)集,其中包含相應(yīng)的分類(lèi)標(biāo)簽。我們想訓(xùn)練我們的神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行交通標(biāo)志分類(lèi)。如何處理這個(gè)問(wèn)題?我們是否需要對(duì)所有數(shù)據(jù)進(jìn)行訓(xùn)練,然后部署交通標(biāo)志分類(lèi)器?這種方法肯定會(huì)失敗,原因如下。給定一個(gè)足夠大的神經(jīng)網(wǎng)絡(luò),我們幾乎可以保證得到一個(gè)非常低的訓(xùn)練損失。這是因?yàn)樵谝粋€(gè)典型的深度神經(jīng)網(wǎng)絡(luò)中,參數(shù)數(shù)量會(huì)非常大,允許它在給定足夠多的迭代次數(shù)的情況下,記憶訓(xùn)練數(shù)據(jù)。更好的方法是將這些數(shù)據(jù)分為三部分:訓(xùn)練集、驗(yàn)證集和測(cè)試集。
- 訓(xùn)練集,顧名思義,在神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)程中,模型在訓(xùn)練集上使損失函數(shù)最小化。
- 當(dāng)超參數(shù)發(fā)生變化時(shí),使用驗(yàn)證集來(lái)驗(yàn)證神經(jīng)網(wǎng)絡(luò)的性能。超參數(shù)包括:學(xué)習(xí)率、網(wǎng)絡(luò)層數(shù)、每層神經(jīng)元數(shù)等。
- 測(cè)試集用于測(cè)試網(wǎng)絡(luò)性能的無(wú)偏估計(jì)。在開(kāi)發(fā)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)時(shí),測(cè)試集是禁止的,這樣神經(jīng)網(wǎng)絡(luò)在訓(xùn)練或超參數(shù)優(yōu)化過(guò)程中就不會(huì)看到這些數(shù)據(jù)。
現(xiàn)在讓我們來(lái)確定不同數(shù)據(jù)集百分比劃分。在大數(shù)據(jù)錯(cuò)誤之前,當(dāng)數(shù)據(jù)量小于10000時(shí),默認(rèn)數(shù)據(jù)百分比約為60%用于訓(xùn)練,20%用于驗(yàn)證,20%用于測(cè)試。然而,如今數(shù)據(jù)量可以達(dá)到上百萬(wàn)甚至更多,在驗(yàn)證和測(cè)試集中使用20%的數(shù)據(jù)是不必要的,因?yàn)轵?yàn)證和測(cè)試包含的樣本將遠(yuǎn)遠(yuǎn)超過(guò)目的所需的樣本。在這種情況下,我們會(huì)發(fā)現(xiàn)98%的訓(xùn)練集和1%的驗(yàn)證和測(cè)試集并不少見(jiàn)。
4.2 Underfitting & Overfitting
讓我們回到我們的交通標(biāo)志分類(lèi)問(wèn)題。我們假設(shè)我們的交通標(biāo)志數(shù)據(jù)集由10000個(gè)標(biāo)記的示例組成。我們可以根據(jù)6000、2000、2000的大小將數(shù)據(jù)集分成訓(xùn)練集、驗(yàn)證集和測(cè)試集。我們現(xiàn)在使用損失函數(shù)來(lái)評(píng)估我們的神經(jīng)網(wǎng)絡(luò)在每個(gè)數(shù)據(jù)集上的性能。
對(duì)于分類(lèi)問(wèn)題,損失函數(shù)定義為預(yù)測(cè)值與真值之間的交叉熵。交叉熵嚴(yán)格地大于零,所以它的值越高,分類(lèi)器的性能就越差。記住,神經(jīng)網(wǎng)絡(luò)只直接觀察訓(xùn)練集。所有開(kāi)發(fā)人員都使用驗(yàn)證集來(lái)確定要使用的最佳超參數(shù)。訓(xùn)練的最終目標(biāo)仍然是最小化測(cè)試集上的誤差,因?yàn)樗菍?duì)系統(tǒng)性能的無(wú)偏估計(jì),并且數(shù)據(jù)從未被網(wǎng)絡(luò)觀察到。
- 讓我們首先考慮以下場(chǎng)景。假設(shè)我們的估計(jì)器在訓(xùn)練集上的交叉熵?fù)p失為0.21,在驗(yàn)證集上的交叉熵?fù)p失為0.25,最后在測(cè)試集上的交叉熵?fù)p失為0.3。此外,由于數(shù)據(jù)集標(biāo)簽的錯(cuò)誤,我們可以預(yù)期的最小交叉熵?fù)p失為0.18。在這種情況下,我們有一個(gè)相當(dāng)好的分類(lèi)器,因?yàn)槿齻€(gè)集合上的損失是相當(dāng)一致的。
- 讓我們考慮第二個(gè)場(chǎng)景,其中訓(xùn)練損失現(xiàn)在是1.9,大約是最小損失的10倍。正如我們?cè)谏弦徽n中所討論的,我們期望任何大小合理的神經(jīng)網(wǎng)絡(luò)都能夠在足夠的訓(xùn)練時(shí)間內(nèi)幾乎完美地?cái)M合數(shù)據(jù)。但在這種情況下,網(wǎng)絡(luò)無(wú)法做到這一點(diǎn)。我們將這種情況稱(chēng)為神經(jīng)網(wǎng)絡(luò)無(wú)法降低訓(xùn)練損失的欠擬合。
- 我們可能面臨的另一種情況是,訓(xùn)練集準(zhǔn)確率較高,但驗(yàn)證和測(cè)試集準(zhǔn)確率較低。這里驗(yàn)證損失大約是訓(xùn)練損失的十倍。這種情況被稱(chēng)為過(guò)擬合,是由于神經(jīng)網(wǎng)絡(luò)優(yōu)化其參數(shù),以精確地再現(xiàn)訓(xùn)練數(shù)據(jù)輸出。當(dāng)我們?cè)隍?yàn)證集上部署時(shí),網(wǎng)絡(luò)不能很好地推廣到新數(shù)據(jù)。訓(xùn)練和驗(yàn)證損失之間的差距稱(chēng)為泛化差距。我們希望這個(gè)差距盡可能小,同時(shí)仍然有足夠低的訓(xùn)練損失。
讓我們看看如何改善欠擬合:
- 第一個(gè)選擇是延長(zhǎng)訓(xùn)練時(shí)間。即迭代次數(shù)越多,訓(xùn)練損失越小。
- 為神經(jīng)網(wǎng)絡(luò)添加更多層,或者為每層添加更多參數(shù)。
現(xiàn)在,讓我們討論如何減少過(guò)擬合:
- 最簡(jiǎn)單的方法就是收集更多的數(shù)據(jù)。
- 另一個(gè)解決方案是正則化。
5. Neural Network Regularization
5.1 Overview
讓我們?cè)谝粋€(gè)示例中逐步進(jìn)行神經(jīng)網(wǎng)絡(luò)的迭代開(kāi)發(fā)。我們將笛卡爾空間分成兩個(gè)部分,橙色和藍(lán)色。屬于藍(lán)色空間的任何點(diǎn)都應(yīng)標(biāo)記為1,而屬于橙色空間的任何點(diǎn)都應(yīng)標(biāo)記為2。但是,我們無(wú)法直接訪(fǎng)問(wèn)這些類(lèi)或其邊界。相反,我們只能訪(fǎng)問(wèn)傳感器測(cè)量值,這些測(cè)量值為我們提供了點(diǎn)及其相應(yīng)的類(lèi)別。不幸的是,傳感器存在噪音,這意味著它有時(shí)會(huì)提供錯(cuò)誤的標(biāo)簽。標(biāo)簽在藍(lán)色空間中指向2,在橙色空間中指向1。
現(xiàn)在我們先使用一個(gè)簡(jiǎn)單的神經(jīng)元網(wǎng)絡(luò),該網(wǎng)絡(luò)具有二個(gè)隱藏層來(lái)對(duì)數(shù)據(jù)進(jìn)行分類(lèi)。使用這種設(shè)計(jì)選擇,我們可以得到以下空間分類(lèi)。訓(xùn)練集損失為0.264,驗(yàn)證集損失0.268。但是,它仍然遠(yuǎn)高于最小可實(shí)現(xiàn)的損失0.1。這是明顯不合時(shí)宜的情況。當(dāng)我們將網(wǎng)絡(luò)分類(lèi)的結(jié)果與真實(shí)空間分類(lèi)的結(jié)果進(jìn)行比較時(shí),我們發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)無(wú)法捕獲當(dāng)前問(wèn)題的復(fù)雜性,并且沒(méi)有按照要求將空間正確地劃分為四個(gè)部分。
為了解決欠擬合問(wèn)題,我們通過(guò)增加五個(gè)隱藏層來(lái)增加網(wǎng)絡(luò)規(guī)模。我們的模型能夠更好的學(xué)習(xí)數(shù)據(jù)特征,因此它應(yīng)該能夠更好地表示真實(shí)的分類(lèi)。我們繼續(xù)再次訓(xùn)練模型,然后進(jìn)行測(cè)試以查看我們做得如何。我們注意到,我們的驗(yàn)證集損失為0.45,遠(yuǎn)遠(yuǎn)高于我們的訓(xùn)練集損失0.1。但是,訓(xùn)練集損失等于此任務(wù)上可實(shí)現(xiàn)的最小損失0.1。我們處于過(guò)擬合訓(xùn)練數(shù)據(jù)的狀態(tài)。為了解決過(guò)擬合現(xiàn)象,我們將介紹一種處理過(guò)擬合的方法:正則化。
5.2 Parameter norm penalites
讓我們看看神經(jīng)網(wǎng)絡(luò)常用的第一種正則化方法。適用于神經(jīng)網(wǎng)絡(luò)的最傳統(tǒng)形式的正則化形式是參數(shù)范數(shù)懲罰。常見(jiàn)的表達(dá)形式為:
J(θ)reg=J(θ)+αΩ(θ)J(\theta)_{r e g}=J(\theta)+\alpha \Omega(\theta)J(θ)reg?=J(θ)+αΩ(θ)
α\alphaα是一個(gè)超參數(shù), Ω(θ)\Omega(\theta)Ω(θ)是參數(shù)θ\thetaθ的懲罰項(xiàng),常見(jiàn)的是LpLpLp正則化。此外,我們通常僅約束神經(jīng)網(wǎng)絡(luò)參數(shù)的權(quán)重值。
神經(jīng)網(wǎng)絡(luò)中最常用的規(guī)范懲罰是L2正則化。 其形式為:
Ω(W)=12WTW=12∥W∥22\Omega(W)=\frac{1}{2} W^{T} W=\frac{1}{2}\|W\|_{2}^{2}Ω(W)=21?WTW=21?∥W∥22?
請(qǐng)記住,我們此前設(shè)計(jì)的網(wǎng)絡(luò)導(dǎo)致對(duì)訓(xùn)練數(shù)據(jù)集的過(guò)擬合。加上L2范數(shù)懲罰后,驗(yàn)證集損失與訓(xùn)練集損失從0.1增加到0.176,驗(yàn)證集損失從0.45降為0.182。訓(xùn)練集損失與驗(yàn)證集損失與最小損失幾乎相等。
5.3 Dropout
當(dāng)前,研究人員已經(jīng)開(kāi)發(fā)出特定于神經(jīng)網(wǎng)絡(luò)的正則化機(jī)制:Dropout。讓我們看看在模型訓(xùn)練期間如何應(yīng)用Dropout。Dropout的第一步是選擇一個(gè)稱(chēng)為PkeepP_{keep}Pkeep?的概率。在每次迭代訓(xùn)練中,此概率用于選擇要保留在網(wǎng)絡(luò)中的網(wǎng)絡(luò)節(jié)點(diǎn)子集。這些節(jié)點(diǎn)可以是隱藏單元,輸出單元或輸入單元。然后,我們切斷所有該神經(jīng)節(jié)點(diǎn)的后續(xù)連接。
Dropout可以直觀地解釋為迫使模型在缺少輸入和隱藏單元的情況下進(jìn)行學(xué)習(xí)。它提供了一種在計(jì)算過(guò)程中不昂貴但功能強(qiáng)大的方法,可以在訓(xùn)練過(guò)程中對(duì)大量的神經(jīng)網(wǎng)絡(luò)模型進(jìn)行正則化,從而大大減少過(guò)擬合的情況。此外,Dropout并沒(méi)有明顯限制可以使用的訓(xùn)練模型。它幾乎適用于參數(shù)化表示形式上的任何模型,并且可以通過(guò)隨機(jī)梯度下降進(jìn)行訓(xùn)練。最后,所有神經(jīng)網(wǎng)絡(luò)庫(kù)都已實(shí)現(xiàn)了Dropout層。
5.4 Early Stopping
最后一種正則化方法是Early Stopping。為了從視覺(jué)上解釋,我們查看了在訓(xùn)練集上的損失函數(shù)的變化,訓(xùn)練損失應(yīng)該能夠減少到接近零。但是,如果我們有獨(dú)立的訓(xùn)練和驗(yàn)證集,則驗(yàn)證損失將先下降然后開(kāi)始增加,這種現(xiàn)象在過(guò)擬合中很常見(jiàn)。
停止訓(xùn)練后,將返回驗(yàn)證損失最小的參數(shù)集。最后要說(shuō)明的是,不應(yīng)該將早期停止用作進(jìn)行正則化的首選。由于它限制了訓(xùn)練時(shí)間,因此可能會(huì)影響整體模型性能。
6. Convolutional Neural Networks
6.1 ConvNets
卷積神經(jīng)網(wǎng)絡(luò)是一種特殊的神經(jīng)網(wǎng)絡(luò),用于處理具有網(wǎng)格狀拓?fù)涞臄?shù)據(jù)。這樣的數(shù)據(jù)的示例可以是以規(guī)則間隔采樣的1D時(shí)間序列數(shù)據(jù),2D圖像甚至3D視頻。卷積網(wǎng)主要由兩種類(lèi)型的層組成:卷積層和池化層。 ConvNet體系結(jié)構(gòu)的一個(gè)簡(jiǎn)單示例是VGG 16。該網(wǎng)絡(luò)接收?qǐng)D像,并將其傳遞給卷積層,池化層,然后是池化層和卷積層等。現(xiàn)在,不必太擔(dān)心VGG1 6網(wǎng)絡(luò)設(shè)計(jì)的細(xì)節(jié),當(dāng)我們了解目標(biāo)檢測(cè)時(shí),我們將在后面的視頻中詳細(xì)討論該網(wǎng)絡(luò)。
讓我們看看這兩種類(lèi)型的卷積層在實(shí)際中如何工作。到目前為止,我們描述的神經(jīng)網(wǎng)絡(luò),隱藏層通常稱(chēng)為完全連接層。顧名思義,上一層網(wǎng)絡(luò)的每個(gè)節(jié)點(diǎn)與下一層網(wǎng)絡(luò)的所有節(jié)點(diǎn)進(jìn)行連接。這是通過(guò)矩陣乘法在軟件中實(shí)現(xiàn)的。
盡管反直覺(jué),但是卷積層對(duì)其線(xiàn)性算子使用互相關(guān)而不是卷積,不是通用矩陣乘法。在卷積運(yùn)算中僅使用了有限大小的內(nèi)核。
6.2 Cross Correlation
讓我們開(kāi)始描述卷積層在實(shí)際中如何工作的。我們假設(shè)要對(duì)輸入圖像應(yīng)用卷積層。我們將該圖像稱(chēng)為輸入量,因?yàn)槲覀儗⒖吹骄矸e層也將其他層的輸出作為輸入。輸入寬度是其水平尺寸,高度是其垂直尺寸,深度是通道數(shù)。在我們的案例中,所有三個(gè)特征的值均為三個(gè)。在卷積運(yùn)算中通常我們也會(huì)進(jìn)行填充操作,這種情況下,在每一側(cè)添加的像素?cái)?shù)稱(chēng)為填充大小,填充對(duì)于保持執(zhí)行卷積所需的形狀至關(guān)重要。
我們通過(guò)一組內(nèi)核執(zhí)行卷積運(yùn)算。每個(gè)內(nèi)核由一組權(quán)重和一個(gè)偏差組成。內(nèi)核通道數(shù)對(duì)應(yīng)于輸入通道數(shù)。在這種情況下,每個(gè)內(nèi)核有三個(gè)權(quán)重通道,分別對(duì)應(yīng)于輸入圖像的紅色,綠色和藍(lán)色通道。
通常每個(gè)卷積層有多個(gè)卷積核。讓我們看看如何應(yīng)用二個(gè)卷積核從輸入中獲取輸出。輸入維度為(3,3,3)(3,3,3)(3,3,3),輸出維度(2,2,2)(2,2,2)(2,2,2)
6.3 Output Volume Shape
假設(shè)卷積核大小是(m,m)(m,m)(m,m),并且我們有KKK個(gè)卷積核,步長(zhǎng)為SSS,填充大小為PPP。則輸出寬度為:
Wout=Win?m+2×Ps+1\boldsymbol{W}_{\boldsymbol{o u t}}=\frac{\boldsymbol{W}_{\boldsymbol{i n}}-m+2 \times P}{s}+1Wout?=sWin??m+2×P?+1
輸出高度為:
Hout=Hin??m+2×PS+1\boldsymbol{H}_{\boldsymbol{o u t}}=\frac{\boldsymbol{H}_{\text {in }}-m+2 \times P}{S}+1Hout?=SHin???m+2×P?+1
通道數(shù)為:
Dout?=K\boldsymbol{D}_{\text {out }}=KDout??=K
現(xiàn)在讓我們繼續(xù)描述ConvNets的第二個(gè)構(gòu)建塊,池化層。讓我們以最常用的池化層(最大池化)為例。下面是一個(gè)最大池化的示例。
同樣,我們也可以給出最大池化輸出的維度,假設(shè)池化卷積核大小為(n,n)(n,n)(n,n),步長(zhǎng)為SSS。其輸出寬度為:
Wout=Win?ns+1W_{o u t}=\frac{W_{i n}-n}{s}+1Wout?=sWin??n?+1
輸出高度為:
Hout=Hin?nS+1H_{o u t}=\frac{H_{i n}-n}{S}+1Hout?=SHin??n?+1
輸出高度為:
Dout?=Din?\boldsymbol{D}_{\text {out }}=\boldsymbol{D}_{\text {in }}Dout??=Din??
ConvNets的有效性有兩個(gè)重要原因。
- 首先,它們?cè)诰矸e層中的參數(shù)通常比具有完全連接層的類(lèi)似網(wǎng)絡(luò)少得多。 這減少了通過(guò)參數(shù)共享而過(guò)擬合的機(jī)會(huì),并允許ConvNets在較大的圖像上運(yùn)行。
- 也許更重要的是平移不變性。 通過(guò)使用相同的參數(shù)來(lái)處理圖像的每個(gè)塊,即使在圖像平面上平移幾個(gè)像素,ConvNets仍能夠檢測(cè)對(duì)象或?qū)ο袼剡M(jìn)行分類(lèi)。 這意味著我們可以隨時(shí)隨地檢測(cè)到汽車(chē)。
總結(jié)
以上是生活随笔為你收集整理的Coursera自动驾驶课程第10讲:Feedforward Neural Networks的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 什么是商业银行?哪些银行属于商业银行?
- 下一篇: 详解惯性导航论文 RINS-W: Rob