柚子快報(bào)激活碼778899分享:人工智能 神經(jīng)網(wǎng)絡(luò)進(jìn)一步學(xué)習(xí)
柚子快報(bào)激活碼778899分享:人工智能 神經(jīng)網(wǎng)絡(luò)進(jìn)一步學(xué)習(xí)
一、代價(jià)函數(shù)
????????首先引入一些便于稍后討論的新標(biāo)記方法:假設(shè)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練樣本有m個(gè),每個(gè)包含一組輸入x和一組輸出y,L表示神經(jīng)網(wǎng)絡(luò)層數(shù),表示該層的神經(jīng)元個(gè)數(shù),將神經(jīng)網(wǎng)絡(luò)的分類定義為兩種情況:二類分類和多類分類
二類分類:
K類分類:,表示分到第i類
回顧邏輯回歸問(wèn)題中我們的代價(jià)函數(shù)為:
在邏輯回歸中我們只有一個(gè)輸出變量,又稱標(biāo)量(scalar),即只有一個(gè)因變量。在神經(jīng)網(wǎng)絡(luò)中,我們可以有很多輸出變量,我們的是一個(gè)維度為的向量,并且我們訓(xùn)練集中的因變量也是同樣維度的一個(gè)向量,因此我們的代價(jià)函數(shù)會(huì)比邏輯回歸更加復(fù)雜一些,表示為:
這個(gè)看起來(lái)復(fù)雜很多的代價(jià)函數(shù)背后的思想還是一樣的,我們希望通過(guò)代價(jià)函數(shù)來(lái)觀察算法預(yù)測(cè)的結(jié)果與真實(shí)情況的誤差有多大。唯一不同的是,基本上我們可以利用循環(huán)對(duì)每一行特征都預(yù)測(cè)個(gè)不同結(jié)果,然后再利用循環(huán)在個(gè)預(yù)測(cè)中選擇可能性最高的一個(gè),將其與中的實(shí)際數(shù)據(jù)進(jìn)行比較,其中正則化的那一項(xiàng)排除了每一層的
二、反向傳播算法BP
????????之前我們?cè)诶蒙窠?jīng)網(wǎng)絡(luò)預(yù)測(cè)結(jié)果的時(shí)候我們采用了一種正向傳播算法,我們從第一層開始正向一層一層進(jìn)行計(jì)算,直到最后一層的,現(xiàn)在為了計(jì)算代價(jià)函數(shù)的偏導(dǎo)數(shù),我們需要采用一種反向傳播算法,也就是首先計(jì)算最后一層的誤差,然后再一層一層反向求出各層的誤差,直到倒數(shù)第二層。,下面以一個(gè)例子來(lái)說(shuō)明反向傳播算法。
假設(shè)我們的訓(xùn)練集只有一個(gè)實(shí)例,我們的神經(jīng)網(wǎng)絡(luò)是一個(gè)四層的神經(jīng)網(wǎng)絡(luò),其中K=4,L=4,前向傳播算法如圖所示:
重要的是清楚地知道上面式子中上下標(biāo)的含義:
l 代表目前所計(jì)算的是第幾層
j 代表目前計(jì)算層中的激活單元的下標(biāo),也是下一層的第j個(gè)輸入變量的下標(biāo)
i 代表下一層中誤差單元的下標(biāo),是受到權(quán)重矩陣中第i行影響的下一層中的誤差單元的下標(biāo)
如果我們考慮正則化處理,并且我們的訓(xùn)練集是一個(gè)特征矩陣而非向量。在上面的特殊情況中,我們需要計(jì)算每一層的誤差單元來(lái)計(jì)算代價(jià)函數(shù)的偏導(dǎo)數(shù)。在更為一般的情況中,我們同樣需要計(jì)算每一層的誤差單元,但是我們需要為整個(gè)訓(xùn)練集計(jì)算誤差單元,此時(shí)的誤差單元也是一個(gè)矩陣,我們用來(lái)表示這個(gè)誤差矩陣,第 l 層的第 i 個(gè)激活單元受到第 j 個(gè)參數(shù)影響而導(dǎo)致的誤差,我們的算法表示為:
即首先用正向傳播方法計(jì)算出每一層的激活單元,利用訓(xùn)練集的結(jié)果與神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)的結(jié)果求出最后一層的誤差,然后利用該誤差運(yùn)用反向傳播法計(jì)算出直至第二層的所有誤差。
在求出了之后,我們便可以計(jì)算代價(jià)函數(shù)的偏導(dǎo)數(shù)了,計(jì)算方法如下:
三、梯度檢驗(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ù)值是否符合我們的要求
????????對(duì)梯度的估計(jì)采用的方法是在代價(jià)函數(shù)上沿著切線的方向選擇離兩個(gè)非常近的點(diǎn)然后計(jì)算兩個(gè)點(diǎn)的平均值用以估計(jì)梯度。即對(duì)于某個(gè)特定的 ,我們計(jì)算出在 處和 的代價(jià)值(是一個(gè)非常小的值,通常選取 0.001),用以估計(jì)在 處的代價(jià)值
當(dāng)是一個(gè)向量時(shí),我們則需要對(duì)偏導(dǎo)數(shù)進(jìn)行檢驗(yàn)。因?yàn)榇鷥r(jià)函數(shù)的偏導(dǎo)數(shù)檢驗(yàn)只針對(duì)一個(gè)參數(shù)的改變進(jìn)行檢驗(yàn),下面是一個(gè)只針對(duì)進(jìn)行檢驗(yàn)的示例:
最后我們還需要對(duì)通過(guò)反向傳播算法計(jì)算出的偏導(dǎo)數(shù)進(jìn)行檢驗(yàn),根據(jù)上面的算法,計(jì)算出的偏導(dǎo)數(shù)存儲(chǔ)在矩陣 中。檢驗(yàn)時(shí)我們要將該矩陣展開成為向量,同時(shí)我們也將 矩陣展開為向量,我們針對(duì)每一個(gè) 都計(jì)算一個(gè)近似的梯度值,將這些值存儲(chǔ)于一個(gè)近似梯度矩陣中,最終將得出的這個(gè)矩陣同進(jìn)行比較
四、隨機(jī)初始化
????????任何優(yōu)化算法都需要一些初始的參數(shù),到目前為止我們都是初始所有參數(shù)為0,這樣的初始方法對(duì)于邏輯回歸來(lái)說(shuō)是可行的,但是對(duì)于神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō)是不可行的。如果我們令所有的初始參數(shù)都為0,這將意味著我們第二層的所有激活單元都會(huì)有相同的值。同理,如果我們初始所有的參數(shù)都為一個(gè)非0的數(shù),結(jié)果也是一樣的。我們通常初始參數(shù)為正負(fù)ε之間的隨機(jī)值,假設(shè)我們要隨機(jī)初始一個(gè)尺寸為10×11的參數(shù)矩陣,代碼如下:
注意這里的?ε和前面說(shuō)的梯度檢驗(yàn)的ε沒(méi)有任何關(guān)系
五、總結(jié)
小結(jié)一下使用神經(jīng)網(wǎng)絡(luò)時(shí)的步驟:
網(wǎng)絡(luò)結(jié)構(gòu):第一件要做的事是選擇網(wǎng)絡(luò)結(jié)構(gòu),即決定選擇多少層以及決定每層分別有多少個(gè)單元,第一層的單元數(shù)即我們訓(xùn)練集的特征數(shù)量,最后一層的單元數(shù)是我們訓(xùn)練集的結(jié)果的類的數(shù)量,如果隱藏層數(shù)大于1,確保每個(gè)隱藏層的單元個(gè)數(shù)相同,通常情況下隱藏層單元的個(gè)數(shù)越多越好,因?yàn)槲覀冋嬲獩Q定的是隱藏層的層數(shù)和每個(gè)中間層的單元數(shù)。
訓(xùn)練神經(jīng)網(wǎng)絡(luò):
①參數(shù)的隨機(jī)初始化
②利用正向傳播方法計(jì)算所有的
③編寫計(jì)算代價(jià)函數(shù) J 的代碼
④利用反向傳播方法計(jì)算所有偏導(dǎo)數(shù)
⑤利用數(shù)值檢驗(yàn)方法檢驗(yàn)這些偏導(dǎo)數(shù)
⑥使用優(yōu)化算法來(lái)最小化代價(jià)函數(shù)
柚子快報(bào)激活碼778899分享:人工智能 神經(jīng)網(wǎng)絡(luò)進(jìn)一步學(xué)習(xí)
精彩內(nèi)容
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。