免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
【吳恩達(dá)機(jī)器學(xué)習(xí)】第九章 神經(jīng)網(wǎng)絡(luò)參數(shù)的反向傳播算法
  • csdn:

    https://blog.csdn.net/qq_36645271

  • github:

    https://github.com/aimi-cn/AILearners

9.1 代價(jià)函數(shù)

9.1.1 神經(jīng)網(wǎng)絡(luò)在分類(lèi)中的作用

  •  {(x^(1), y^(1)),...,(x^(m), y^(m))}:含有m組訓(xùn)練樣本的訓(xùn)練集。

  • L:神將網(wǎng)絡(luò)結(jié)構(gòu)的總層數(shù)。對(duì)于上圖來(lái)說(shuō),L=4.

  • s_l:第L層的神經(jīng)單元數(shù),這其中不包括第L層的偏置單元。例如上圖中。

對(duì)于分類(lèi)問(wèn)題,我們會(huì)將其分成兩種情況考慮:即二元分類(lèi)(binary classification)多元分類(lèi)(multi-class classification)。

對(duì)于二元分類(lèi),由于y只能等于0或1,所以我們只有一個(gè)輸出單元,其輸出h_θ(x)一個(gè)實(shí)數(shù)。在這種情況下,s_L=1。

在多元分類(lèi)中,會(huì)有K個(gè)不同的類(lèi),就會(huì)有K個(gè)輸出單元,其輸出h_θ(x)為一個(gè)K維向量。在這種情況下,s_L=K。

9.1.2 神經(jīng)網(wǎng)絡(luò)的代價(jià)函數(shù)

先讓我們回顧一下邏輯回歸的代價(jià)函數(shù):

在邏輯回歸中,我們通常要使J(θ)小化,一般會(huì)在最后加上一個(gè)正則化項(xiàng),是一個(gè)j從1到n的求和,因?yàn)槲覀儾](méi)有把偏差項(xiàng)θ_0正則化。

對(duì)于一個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),我們的代價(jià)函數(shù)就會(huì)是這個(gè)式子的一般形式,這里不僅只有一個(gè)邏輯回歸輸出單元,而是K個(gè)。

所以上圖中的式子就是神經(jīng)網(wǎng)絡(luò)中的代價(jià)函數(shù)。上式中的第一部分-1/m乘以一個(gè)類(lèi)似于我們?cè)谶壿嫽貧w里的求和項(xiàng),除了上式還加入了求k從1到的K的有和。這個(gè)求和項(xiàng)主要是K個(gè)輸出單元之和。依次把每一個(gè)邏輯回歸算法的代價(jià)函數(shù)按照四次輸出的順序加起來(lái)。這個(gè)求和符號(hào)應(yīng)用于y_k和h_k因?yàn)槲覀冎饕菍⒌贙個(gè)輸出單元的值和y_k的值的大小作比較,即最后得到的向量應(yīng)該屬于哪個(gè)分類(lèi)。

最后,神經(jīng)網(wǎng)絡(luò)代價(jià)函數(shù)的正則化項(xiàng)也與邏輯回歸有些不同。這里的正則化項(xiàng)是對(duì)θ_ij^(l)項(xiàng)對(duì)所有i,j,k的值求和。就像在邏輯回歸中我們不加入偏置單元的值一樣,這里要去除那些對(duì)應(yīng)的偏置單元的項(xiàng)。具體地說(shuō),我們不對(duì)θ_ij^(l)中i為0的項(xiàng)求和,因?yàn)槲覀冊(cè)谟?jì)算激活函數(shù)時(shí),會(huì)得到類(lèi)似于θ_i0^(2)a_0+θ_i1^(2)a_0+...樣的項(xiàng),這些含有0的項(xiàng)對(duì)應(yīng)了a_0的項(xiàng),這是一個(gè)類(lèi)似于偏置單元的項(xiàng)。

正則化的那一項(xiàng)只是排除了每一層θ_0后,每一層的θ_i0矩陣的和。最里層的循環(huán)循環(huán)所有的行(由 s_l+1 層的激活單元數(shù)決定),循環(huán)i則循環(huán)所有的列,由該層(s_l層)的激活單元數(shù)所決定。

9.2 反向傳播算法

9.2.1 梯度計(jì)算

在上一節(jié)中我們介紹了神經(jīng)網(wǎng)絡(luò)的代價(jià)函數(shù),現(xiàn)在,讓我們來(lái)看一下讓代價(jià)函數(shù)最小化的算法——反向傳播算法(back propagation algorithm)。

上圖中我們給出了神經(jīng)網(wǎng)絡(luò)的代價(jià)函數(shù),現(xiàn)在我們要設(shè)法找到參數(shù)θ使J(θ)取到最小值。所以這里我們需要計(jì)算J(θ)以及一些列偏導(dǎo)項(xiàng)。

讓我們從只有一個(gè)訓(xùn)練樣本說(shuō)起。

這里我們先使用向前傳播,通過(guò)項(xiàng)量化的方法計(jì)算出神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)里的每一個(gè)神經(jīng)單元的激活值。

9.2.2 反向傳播算法

反向傳播算法從直觀(guān)上說(shuō),就是對(duì)于每一個(gè)節(jié)點(diǎn),我們計(jì)算δ_j^(l),它代表了第l層第j個(gè)節(jié)點(diǎn)的誤差。這個(gè)δ項(xiàng)在某種程度上就捕捉到了我們?cè)谶@個(gè)節(jié)點(diǎn)的激活值得誤差。在這里,我們還要回顧一下之前的一個(gè)定義——a_j^(l),它代表了第層第個(gè)節(jié)點(diǎn)的激活值。

我們用上面這個(gè)四層(L=4)神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)為例。對(duì)于每一個(gè)輸出單元,我們將計(jì)算δ項(xiàng)。

所以第四層第j個(gè)單元的δ值等于這個(gè)單元的激活值減去訓(xùn)練樣本里的真實(shí)值。這里的y_i就是我們訓(xùn)練集中向量y的第j個(gè)元素。接下來(lái),我們把網(wǎng)絡(luò)中前面幾層的誤差項(xiàng)δ項(xiàng)算出來(lái)。

上面公式中的.*是MATLAB中的點(diǎn)乘符號(hào),g`(z^{(3)})是對(duì)激活函數(shù)在輸入值為z(3)的時(shí)候所求的導(dǎo)數(shù)。g`(z^{(3)})=a^{(3)} * (1-a^{(3)})。

這里沒(méi)有δ^(1)項(xiàng)是因?yàn)榈谝淮螌?duì)應(yīng)的是輸入層,那只表示我們?cè)谟?xùn)練集里觀(guān)察到的,所以不會(huì)存在誤差

我們有了所有的誤差的表達(dá)式后,便可以計(jì)算代價(jià)函數(shù)的偏導(dǎo)數(shù)了,假設(shè),即我們不做任何正則化處理時(shí)有:

在上述公式中:

  • l代表目前所計(jì)算的是第幾層。

  • j代表目前計(jì)算層中的激活單元的下標(biāo),也將是下一層的第個(gè)輸入變量的下標(biāo)。

  • i代表下一層中誤差單元的下標(biāo),是受到權(quán)重矩陣中第行影響的下一層中的誤差單元的下標(biāo)。

9.2.3 整合到一起

現(xiàn)在讓我們把上面的內(nèi)容整合到一起,來(lái)看看如何實(shí)現(xiàn)反向傳播算法。

我們要做的第一件事就是固定這些帶下標(biāo),讓其值都為0,它們將會(huì)被用來(lái)計(jì)算偏導(dǎo)項(xiàng)。

接下來(lái)我們將遍歷我們的訓(xùn)練集。

首先,對(duì)于第i個(gè)循環(huán)而言,我們將取出訓(xùn)練樣本(x^{(i)},y^{(i)}),然后設(shè)定a^{(1)},也就是輸入層的激活函數(shù)為x^{(i)}。

接下來(lái)我們運(yùn)用正向傳播,計(jì)算每一層的激活值。

用樣本的輸出值y^(i)計(jì)算這個(gè)輸出值所對(duì)應(yīng)的誤差項(xiàng)δ(L)。

用反向傳播分別計(jì)算δ值一直到δ^(2)。

用△來(lái)累計(jì)偏導(dǎo)數(shù)項(xiàng)。

最后,執(zhí)行完for循環(huán)之后,我們跳出循環(huán),然后計(jì)算下面的式子:

一旦計(jì)算出來(lái)了這些項(xiàng),它正好就是代價(jià)函數(shù)關(guān)于每個(gè)參數(shù)的偏導(dǎo)數(shù),之后就可以使用梯度下降或其他高級(jí)優(yōu)化算法了。

9.3 反向傳播算法的直觀(guān)理解

9.3.1 向前傳播

為了更好地理解反向傳播,我們先進(jìn)一步的研究向前傳播的過(guò)程。

這就是向前傳播。我們會(huì)發(fā)現(xiàn)反向傳播算法與其大致相同,知識(shí)計(jì)算方向不一樣而已。

9.3.2 神經(jīng)網(wǎng)絡(luò)的代價(jià)函數(shù)

為了更好地理解反向傳播算法的過(guò)程,讓我們先看一下神經(jīng)網(wǎng)絡(luò)的代價(jià)函數(shù)。

這個(gè)代價(jià)函數(shù)適用于只有一個(gè)輸出單元的情況。現(xiàn)在讓我們只關(guān)注一個(gè)訓(xùn)練樣本(x^{(i)},y^{(i)}),因?yàn)橹挥幸粋€(gè)輸出單元,所以這里y^{(i)}是一個(gè)實(shí)數(shù),并且忽略正則化項(xiàng)。簡(jiǎn)化的代價(jià)函數(shù)如下:

將這一個(gè)訓(xùn)練樣本帶入,我們會(huì)發(fā)現(xiàn)它的代價(jià)函數(shù)可以寫(xiě)成如下形式:

這個(gè)代價(jià)函數(shù)扮演了一個(gè)類(lèi)似方差的角色,所以與其關(guān)注這個(gè)代價(jià)函數(shù),可以把cost(i)近似的看成神經(jīng)網(wǎng)絡(luò)的輸出值與實(shí)際值的方差:

因此,它表示了神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)樣本值的準(zhǔn)確程度,也就是網(wǎng)絡(luò)的輸出值和實(shí)際觀(guān)測(cè)值y^(i)接近程度。

9.3.3 反向傳播算法

現(xiàn)在讓我們看看反向傳播的過(guò)程,一種直觀(guān)的理解是反向傳播算法就是在計(jì)算這些δ_j^(i),我們可以把它們看作是在第層中第j個(gè)單元得到的激活項(xiàng)的“誤差”。用數(shù)學(xué)的知識(shí)去解釋的話(huà),δ_j^(i)是代價(jià)函數(shù)關(guān)于z_j^(i)的偏導(dǎo)數(shù)。它們衡量的是為了影響這些中間值,我們想要改變神經(jīng)網(wǎng)絡(luò)中的權(quán)重的程度進(jìn)而影響整個(gè)神經(jīng)網(wǎng)絡(luò)的輸出h(x)。

接下來(lái)讓我們對(duì)反向傳播算法有一個(gè)更直觀(guān)的了解:

現(xiàn)在,讓我們關(guān)注一下第一個(gè)隱藏層中第三個(gè)神經(jīng)元的具體計(jì)算過(guò)程。與向前傳播類(lèi)似,我么分別用紫色和紅色標(biāo)注權(quán)值,用后一層中δ的加權(quán)和由對(duì)應(yīng)邊的強(qiáng)度來(lái)進(jìn)行加權(quán)。

9.4 使用注意:展開(kāi)參數(shù)

9.4.1 為什么要展開(kāi)參數(shù)

在上節(jié)中,我們談到了怎樣使用反向傳播算法計(jì)算代價(jià)函數(shù)的導(dǎo)數(shù)。在這一節(jié),我們將介紹如何把你的參數(shù)從矩陣展開(kāi)成向量,以便我們?cè)诟呒?jí)最優(yōu)化步驟中的使用需要。

具體來(lái)講,我們?cè)趫?zhí)行代價(jià)函數(shù)時(shí),輸入?yún)?shù)是theta,函數(shù)返回代價(jià)值及導(dǎo)數(shù)值。然后我們可以將返回值傳遞給高級(jí)優(yōu)化算法。這些程序默認(rèn)給定的theta都是參數(shù)向量(vectors),同時(shí)代價(jià)函數(shù)返回的梯度值也是一個(gè)向量。

但是在神經(jīng)網(wǎng)絡(luò)中,我們的參數(shù)不再是向量了,而變成了矩陣(matrices)。同樣的,這些返回的梯度值D^(1),D^(2),D^(3)是矩陣。

9.4.2 如何展開(kāi)參數(shù)

假設(shè)我們有一個(gè)輸入層有10個(gè)輸入單元,隱藏層有10個(gè)隱藏單元,最后的輸出層只有一個(gè)輸出單元的神經(jīng)網(wǎng)絡(luò)。再做這種情況下,θ和維度如上圖所示。在octave中,如果想實(shí)現(xiàn)將矩陣轉(zhuǎn)化為向量,就要使用下面的代碼:

即將theta1,2,3中的所有元素取出,然后把它們?nèi)空归_(kāi)成為一個(gè)很長(zhǎng)的向量。

如果想實(shí)現(xiàn)將向量還原回矩陣,就要適用下面的代碼:

例如還原theta1,我們先取出前110個(gè)元素,然后用reshape命令來(lái)改變矩陣的大小,從而得到矩陣theta1。

9.4.3 將展開(kāi)的參數(shù)應(yīng)用于學(xué)習(xí)算法

假設(shè)我們有一些初始化參數(shù),我們要把它們展開(kāi)成一個(gè)長(zhǎng)向量,然后作為theta參數(shù)的初始值傳入優(yōu)化函數(shù)。另一件需要我們做的是就是實(shí)現(xiàn)代價(jià)函數(shù),如下圖:

代價(jià)函數(shù)實(shí)現(xiàn)算法如下:

使用矩陣表達(dá)的好處是在進(jìn)行正向/反向傳播時(shí)會(huì)更方便;用向量表達(dá)式的有點(diǎn)是當(dāng)你使用一些高級(jí)優(yōu)化算法時(shí),這些算法會(huì)要求把所有參數(shù)展開(kāi)成一個(gè)長(zhǎng)向量的形式。

9.5 梯度檢驗(yàn)

當(dāng)我們對(duì)一個(gè)較為復(fù)雜的模型(例如神經(jīng)網(wǎng)絡(luò))使用梯度下降算法時(shí),可能會(huì)存在一些不容易察覺(jué)的錯(cuò)誤,意味著,雖然代價(jià)看上去在不斷減小,但最終的結(jié)果可能并不是最優(yōu)解。為了避免這樣的問(wèn)題,我們采取一種叫做梯度的數(shù)值檢驗(yàn)(Numerical Gradient Checking)方法。這種方法的思想是通過(guò)估計(jì)梯度值來(lái)檢驗(yàn)我們計(jì)算的導(dǎo)數(shù)值是否真的是我們要求的。

9.5.1 梯度的數(shù)值估計(jì)

通常來(lái)說(shuō),epsilon一個(gè)很小的值,例如10^(-4)當(dāng)我們?cè)趏ctave中需要執(zhí)行這樣的計(jì)算時(shí),需要執(zhí)行以下代碼:

9.5.2 參數(shù)為向量時(shí)

在上一節(jié)中,我們只考慮了θ實(shí)數(shù)的情況,現(xiàn)在我們要考慮更普遍的情況,即為參數(shù)向量的時(shí)候。

我們可以用類(lèi)似的思想來(lái)計(jì)算所有的偏導(dǎo)數(shù)項(xiàng):

具體來(lái)說(shuō),求θ_1偏導(dǎo)時(shí),可以通過(guò)增加J中的θ_1得到,所以括號(hào)中是θ_1+epsilon其余項(xiàng)不變。在octave中的代碼實(shí)現(xiàn)如下:

當(dāng)我們?cè)谏窠?jīng)網(wǎng)絡(luò)中使用這種方法時(shí),我們需要驗(yàn)證通過(guò)上述方法得到的偏導(dǎo)數(shù)與通過(guò)反向傳播算法得到的偏導(dǎo)數(shù)在數(shù)值上是否非常接近。如果二者十分接近,那么反向傳播的實(shí)現(xiàn)就是正確的。

9.5.3 總結(jié)

在進(jìn)行梯度檢驗(yàn)時(shí)時(shí),我們需要注意:

  • 通過(guò)反向傳播來(lái)計(jì)算DVec(D^(1),D^(2),D^(3)的展開(kāi)形式)。

  • 實(shí)現(xiàn)數(shù)值上的梯度檢驗(yàn),計(jì)算出gradApprox。

  • 確保DVec和gradApprox都能得出相似的近似值。

  • 在你使用代碼訓(xùn)練網(wǎng)絡(luò)之前,要關(guān)掉梯度檢驗(yàn)。因?yàn)樘荻葯z驗(yàn)是一個(gè)計(jì)算量非常大的,運(yùn)行速度非常慢的計(jì)算倒數(shù)的程序,相反的,反向傳播算法是一個(gè)高性能的導(dǎo)數(shù)計(jì)算方法。所以一旦確定反向傳播的實(shí)現(xiàn)是正確的,就應(yīng)該關(guān)閉梯度檢驗(yàn)。

9.6 隨機(jī)初始化(random initialization)

9.6.1 為什么要進(jìn)行隨機(jī)初始化

當(dāng)你執(zhí)行一個(gè)例如梯度下降的算法時(shí),我們需要為變量θ取一些初始值,那么應(yīng)該如何對(duì)θ設(shè)置初始值呢?一般在邏輯回歸中,我們會(huì)將初始值設(shè)為0,但是在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)這樣起不到任何作用。

我們以上圖中的神經(jīng)網(wǎng)絡(luò)為例。由于參數(shù)都是以0初始化的,所以隱藏層的權(quán)重相同,導(dǎo)致a_1^(2)=a_2^(2)同理δ_1^(2)=δ_2^(2)進(jìn)一步去看,由于權(quán)重相同,那么它們的偏導(dǎo)數(shù)也就相同,這樣會(huì)導(dǎo)致雖然迭代多次后值不為0,但是從同一個(gè)輸入單元處罰的兩條權(quán)重每次更新完后都是相等的。

所以每次更新之后,這兩個(gè)隱藏單元的每個(gè)參數(shù)輸入都是相等的。如果有不止兩個(gè)隱藏單元,而是有很多隱藏單元,那么它們?cè)谟?jì)算相同的特征。所有的隱藏單元都以相同的函數(shù)作為輸入,這是一種高度冗余的現(xiàn)象,因?yàn)檫@意味著最后的邏輯回歸單元只能得到一個(gè)特征。

9.6.2 隨機(jī)初始化

為了解決上節(jié)中的問(wèn)題,我們要使用隨機(jī)初始化。對(duì)于每一個(gè)值,我們將其初始化為一個(gè)范圍在[-epsilon,epsilon]之間的隨機(jī)值。在octave中可以通過(guò)如下代碼實(shí)現(xiàn):

其中,rand方法會(huì)產(chǎn)生一個(gè)所有元素介于0到1之間的隨機(jī)矩陣。注意,這里的與我們?cè)谔荻葯z驗(yàn)中的沒(méi)有任何關(guān)系。

總而言之,為了訓(xùn)練神經(jīng)網(wǎng)絡(luò),應(yīng)該首先要將權(quán)重隨機(jī)初始化為一個(gè)接近0的,范圍在[-epsilon,epsilon]之間的隨機(jī)值,然后進(jìn)行反向傳播,在進(jìn)行梯度檢驗(yàn),最后使用梯度下降或其他高級(jí)優(yōu)化算法來(lái)最小化代價(jià)函數(shù)。

9.7 組合到一起

9.7.1 選擇一個(gè)神經(jīng)網(wǎng)絡(luò)

在訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)時(shí),我們要做的第一件事就是選擇一種網(wǎng)絡(luò)架構(gòu)(network architecture),即神經(jīng)元之間的連接模式。

我們將按以下原則進(jìn)行選擇:

  • 輸入層的單元數(shù)量:特征x^(i)的維度。

  • 輸出層的單元數(shù)量:分類(lèi)問(wèn)題中分類(lèi)的個(gè)數(shù)。

  • 隱藏層數(shù):一個(gè)合理的默認(rèn)選項(xiàng)是只是用單個(gè)隱藏層,如果使用多余一層的隱藏單元,那每一個(gè)隱藏層通常都應(yīng)有相同的單元數(shù)。雖然神經(jīng)元的數(shù)量越多,計(jì)算量越大,但是通常來(lái)說(shuō),隱藏單元還是越多越好。

9.7.2 訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)

接下來(lái)要說(shuō)的是訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)需要實(shí)現(xiàn)的步驟:

  1. 使用梯度檢查,來(lái)比較已經(jīng)計(jì)算得到的偏導(dǎo)數(shù)項(xiàng)與用反向傳播算法得到的偏導(dǎo)數(shù)值,以確保兩種方法得到的值近似。之后要停用梯度檢查。

  2. 使用一個(gè)最優(yōu)化算法和反向傳播算法相結(jié)合,來(lái)最小化關(guān)于的代價(jià)函數(shù)J(θ)。

對(duì)于神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),代價(jià)函數(shù)J(θ)是一個(gè)非凸函數(shù)(non-convex),理論上可能停留在局部最小值的位置。實(shí)際上,梯度下降算法和其他一些高級(jí)優(yōu)化方法理論上都能收斂于局部最小值,但是一般來(lái)講,在實(shí)際操作中,盡管我們不能保證這些優(yōu)化算法一定會(huì)得到局部最優(yōu)值,但項(xiàng)梯度下降這類(lèi)算法,在最小化代價(jià)函數(shù)J(θ)的過(guò)程中表現(xiàn)得很不錯(cuò)。

9.8 無(wú)人駕駛

本章視頻可在吳恩達(dá)及機(jī)器學(xué)習(xí)課時(shí)80中觀(guān)看。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
打破「反向傳播」壟斷,「正向自動(dòng)微分」也能計(jì)算神經(jīng)網(wǎng)絡(luò)梯度!
反向傳播算法推導(dǎo)-卷積神經(jīng)網(wǎng)絡(luò)
零基礎(chǔ)入門(mén)深度學(xué)習(xí):感應(yīng)器、線(xiàn)性單元和梯度下降
你真的理解反向傳播嗎?面試必備
Coursera公開(kāi)課筆記: 斯坦福大學(xué)機(jī)器學(xué)習(xí)第九課“神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)(Neural Networks: Learning)”
零基礎(chǔ)入門(mén)深度學(xué)習(xí)(2)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服