概述
對(duì)于全連接的神經(jīng)網(wǎng)絡(luò)(MLP),其結(jié)構(gòu)看似復(fù)雜, 其實(shí)只是簡(jiǎn)單結(jié)構(gòu)的不斷重復(fù)。
這里的簡(jiǎn)單結(jié)構(gòu)就是sigmoid函數(shù)即LR:
對(duì)于 有
和 標(biāo)量
使
當(dāng)然隨著激活函數(shù)的發(fā)展,函數(shù)也在變化。這里先從一般情況介紹。
這就是神經(jīng)網(wǎng)絡(luò)的一個(gè)神經(jīng)元,它把上一層所有輸出作為自己的輸入,同時(shí)有自己的一套w
前向神經(jīng)網(wǎng)絡(luò)

如上圖,
表示第一層即輸入層,接收一個(gè)樣本的特征,他有
個(gè)神經(jīng)元。
表示隱層每一層的結(jié)果是上一層的輸出也是下一層的輸入,分別有
個(gè)神經(jīng)元
表示輸出層,當(dāng)然,對(duì)于二分類(lèi),輸出層是一個(gè)神經(jīng)元,如果是多分類(lèi),就可以是多個(gè)神經(jīng)元。有
個(gè)神經(jīng)元
表示第l-1層與l層之間的權(quán)重矩陣。
表示第l層的偏至值。
除第一層外其他層中每個(gè)圓即神經(jīng)元,都是一個(gè)LR模型。
(這里的輸出是通用輸出,沒(méi)按圖1來(lái)。輸出層神經(jīng)元有個(gè),模型共L層)
上述的計(jì)算值,從輸入層開(kāi)始,逐層向前傳播,經(jīng)過(guò)隱層到達(dá)輸出層。所以叫做前向傳播
反向傳播
反向傳播用于計(jì)算每一層的梯度,用于更新
現(xiàn)在模型建立好了,對(duì)于一個(gè)樣本的輸入,可以得到一個(gè)預(yù)測(cè)值。
現(xiàn)在需要設(shè)計(jì)一個(gè)損失函數(shù)來(lái)指導(dǎo)模型學(xué)習(xí)
那有了損失函數(shù)后,就要求損失函數(shù)關(guān)于參數(shù)的梯度了,即需要求解
其中
我們發(fā)現(xiàn),其實(shí)是很容易求解的,而且求導(dǎo)過(guò)程與其他層沒(méi)有關(guān)系。那么關(guān)鍵就是求
我們令
則
如果已知 根據(jù)鏈?zhǔn)角髮?dǎo)法則尤其是鏈?zhǔn)较蛄壳髮?dǎo)和這個(gè) (其實(shí)這里最重要的就是要確保鏈?zhǔn)角髮?dǎo)的維度最終組合和初始的維度相同,那么對(duì)于向量求導(dǎo)就會(huì)涉及到轉(zhuǎn)置和位置的交換。如果不覺(jué)得有問(wèn)題,完全可以先對(duì)幾個(gè)元素求導(dǎo),然后總結(jié)出規(guī)律后來(lái)指導(dǎo)向量求導(dǎo)的組合)
我們首先約定一些東西。
- 每次的損失是一個(gè)標(biāo)量,而W則是矩陣。當(dāng)我們求
時(shí),要保證結(jié)果和W的shape時(shí)一樣的,即
-
都是列向量
但是發(fā)現(xiàn)如上式那么組合的話(huà),維度上是不相容的,所以應(yīng)該調(diào)整成如下式:
所以反向傳播算法,關(guān)鍵記住如下幾點(diǎn):
MLP 一般訓(xùn)練過(guò)程
隨機(jī)梯度下降:
對(duì)于一個(gè)樣本(x,y)輸入模型
首先,前向傳播記錄下每一層激活值以及權(quán)重
然后,計(jì)算以及逐層
然后,計(jì)算每層權(quán)重的梯度
最后,更新每層的權(quán)重
批量梯度下降
對(duì)于m個(gè)樣本(x,y),依次輸入模型
首先,前向傳播記錄下每一層激活值以及權(quán)重
然后,計(jì)算以及逐層
然后,計(jì)算每層權(quán)重的梯度
最后,更新每層的權(quán)重
不同損失函數(shù)與激活函數(shù)所帶來(lái)的訓(xùn)練的不同
看不清楚請(qǐng)看:http://www.itdecent.cn/p/1d6d7b4857d6
|
|
|
|
|
|---|---|---|---|
| 導(dǎo)數(shù) | |||
對(duì)比前兩列,最大的不同在,使用交叉熵的模型少乘了一個(gè)
,而
往往是很小的(只在0附近比較大),所以第二列會(huì)比第一列收斂快。
但關(guān)鍵是在,大家都一樣,但是隨著l的不斷減小,累乘的
越來(lái)越多,最后導(dǎo)致有的
越來(lái)越小趨近于0造成梯度消失(因?yàn)?img class="math-inline" src="https://math.jianshu.com/math?formula=0%3Csigmoid'%5Cle0.25" alt="0<sigmoid'\le0.25" mathimg="1">)。這樣導(dǎo)致底層網(wǎng)絡(luò)權(quán)重得不到有效訓(xùn)練。同樣,有的激活函數(shù)導(dǎo)數(shù)可能會(huì)很容易>1,這樣就會(huì)造成梯度爆炸??偨Y(jié)起來(lái)就是,由于反向傳播算法的固有缺陷,在網(wǎng)絡(luò)層數(shù)過(guò)多時(shí),會(huì)出現(xiàn)梯度學(xué)習(xí)問(wèn)題,為了解決有如下常用方法,具體見(jiàn)上鏈接。
- 針對(duì)梯度爆炸,可以人為設(shè)定最大的梯度值,超過(guò)了就等于最大梯度值。這種做法叫梯度剪切。另外也可以對(duì)權(quán)重做正則化,來(lái)確保每次權(quán)重都不會(huì)太大。
- 針對(duì)梯度消失,如果激活函數(shù)的導(dǎo)數(shù)=1,那么就不會(huì)出現(xiàn)消失或爆炸,于是提出了ReLu激活函數(shù)
另外還有殘差網(wǎng)絡(luò),batchnorm等技術(shù)
根本上就是針對(duì)BP的的組成,要么從激活函數(shù)導(dǎo)數(shù)入手,要么從權(quán)重W入手,要么從連乘的傳遞結(jié)構(gòu)入手等等。