概述
對于全連接的神經(jīng)網(wǎng)絡(luò)(MLP)搀别,其結(jié)構(gòu)看似復(fù)雜, 其實(shí)只是簡單結(jié)構(gòu)的不斷重復(fù)嘹叫。
這里的簡單結(jié)構(gòu)就是sigmoid函數(shù)即LR:
對于 有 和 標(biāo)量 使
當(dāng)然隨著激活函數(shù)的發(fā)展钝吮,函數(shù)也在變化。這里先從一般情況介紹限书。
這就是神經(jīng)網(wǎng)絡(luò)的一個神經(jīng)元,它把上一層所有輸出作為自己的輸入章咧,同時有自己的一套w
前向神經(jīng)網(wǎng)絡(luò)
如上圖倦西,
表示第一層即輸入層,接收一個樣本的特征,他有個神經(jīng)元赁严。
表示隱層每一層的結(jié)果是上一層的輸出也是下一層的輸入扰柠,分別有個神經(jīng)元
表示輸出層粉铐,當(dāng)然,對于二分類卤档,輸出層是一個神經(jīng)元蝙泼,如果是多分類,就可以是多個神經(jīng)元劝枣。有個神經(jīng)元
表示第l-1層與l層之間的權(quán)重矩陣踱承。
表示第l層的偏至值。
除第一層外其他層中每個圓即神經(jīng)元哨免,都是一個LR模型。
(這里的輸出是通用輸出昙沦,沒按圖1來琢唾。輸出層神經(jīng)元有個,模型共L層)
上述的計(jì)算值,從輸入層開始盾饮,逐層向前傳播采桃,經(jīng)過隱層到達(dá)輸出層。所以叫做前向傳播
反向傳播
反向傳播用于計(jì)算每一層的梯度丘损,用于更新
現(xiàn)在模型建立好了普办,對于一個樣本的輸入,可以得到一個預(yù)測值徘钥。
現(xiàn)在需要設(shè)計(jì)一個損失函數(shù)來指導(dǎo)模型學(xué)習(xí)
那有了損失函數(shù)后衔蹲,就要求損失函數(shù)關(guān)于參數(shù)的梯度了,即需要求解
其中
我們發(fā)現(xiàn)呈础,其實(shí)是很容易求解的舆驶,而且求導(dǎo)過程與其他層沒有關(guān)系。那么關(guān)鍵就是求
我們令
則
如果已知 根據(jù)鏈?zhǔn)角髮?dǎo)法則尤其是鏈?zhǔn)较蛄壳髮?dǎo)和這個 (其實(shí)這里最重要的就是要確保鏈?zhǔn)角髮?dǎo)的維度最終組合和初始的維度相同而钞,那么對于向量求導(dǎo)就會涉及到轉(zhuǎn)置和位置的交換沙廉。如果不覺得有問題,完全可以先對幾個元素求導(dǎo)臼节,然后總結(jié)出規(guī)律后來指導(dǎo)向量求導(dǎo)的組合)
我們首先約定一些東西撬陵。
- 每次的損失是一個標(biāo)量,而W則是矩陣网缝。當(dāng)我們求時巨税,要保證結(jié)果和W的shape時一樣的,即
-
都是列向量
但是發(fā)現(xiàn)如上式那么組合的話途凫,維度上是不相容的垢夹,所以應(yīng)該調(diào)整成如下式:
所以反向傳播算法,關(guān)鍵記住如下幾點(diǎn):
MLP 一般訓(xùn)練過程
隨機(jī)梯度下降:
對于一個樣本(x,y)輸入模型
首先维费,前向傳播記錄下每一層激活值以及權(quán)重
然后果元,計(jì)算以及逐層
然后促王,計(jì)算每層權(quán)重的梯度
最后,更新每層的權(quán)重
批量梯度下降
對于m個樣本(x,y)而晒,依次輸入模型
首先蝇狼,前向傳播記錄下每一層激活值以及權(quán)重
然后,計(jì)算以及逐層
然后倡怎,計(jì)算每層權(quán)重的梯度
最后迅耘,更新每層的權(quán)重
不同損失函數(shù)與激活函數(shù)所帶來的訓(xùn)練的不同
看不清楚請看:http://www.reibang.com/p/1d6d7b4857d6
, | , | , | |
---|---|---|---|
導(dǎo)數(shù) | |||
對比前兩列监署,最大的不同在,使用交叉熵的模型少乘了一個,而往往是很小的(只在0附近比較大)颤专,所以第二列會比第一列收斂快。
但關(guān)鍵是在钠乏,大家都一樣栖秕,但是隨著l的不斷減小,累乘的越來越多晓避,最后導(dǎo)致有的越來越小趨近于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ù)可能會很容易>1暑塑,這樣就會造成梯度爆炸」兀總結(jié)起來就是事格,由于反向傳播算法的固有缺陷,在網(wǎng)絡(luò)層數(shù)過多時搞隐,會出現(xiàn)梯度學(xué)習(xí)問題分蓖,為了解決有如下常用方法,具體見上鏈接尔许。
- 針對梯度爆炸么鹤,可以人為設(shè)定最大的梯度值,超過了就等于最大梯度值味廊。這種做法叫梯度剪切蒸甜。另外也可以對權(quán)重做正則化,來確保每次權(quán)重都不會太大余佛。
- 針對梯度消失柠新,如果激活函數(shù)的導(dǎo)數(shù)=1,那么就不會出現(xiàn)消失或爆炸辉巡,于是提出了ReLu激活函數(shù)
另外還有殘差網(wǎng)絡(luò)恨憎,batchnorm等技術(shù)
根本上就是針對BP的的組成,要么從激活函數(shù)導(dǎo)數(shù)入手,要么從權(quán)重W入手憔恳,要么從連乘的傳遞結(jié)構(gòu)入手等等瓤荔。