深度學(xué)習(xí)-前向傳播與反向傳播

概述

對于全連接的神經(jīng)網(wǎng)絡(luò)(MLP)搀别,其結(jié)構(gòu)看似復(fù)雜, 其實(shí)只是簡單結(jié)構(gòu)的不斷重復(fù)嘹叫。
這里的簡單結(jié)構(gòu)就是sigmoid函數(shù)即LR:
對于x=(x_0,x_1,...,x_n)w=(w_0,w_1,...,w_n) 和 標(biāo)量b 使y=\sigma(wx+b)=\frac{1}{1+exp(\sum_{i=0}^{n}w_ix_i+b)}
z=wx+b
當(dāng)然隨著激活函數(shù)的發(fā)展钝吮,\sigma函數(shù)也在變化。這里先從一般情況介紹限书。
\sigma(x)'=\sigma(x)(1-\sigma(x))
這就是神經(jīng)網(wǎng)絡(luò)的一個神經(jīng)元,它把上一層所有輸出作為自己的輸入章咧,同時有自己的一套w

前向神經(jīng)網(wǎng)絡(luò)

圖1:簡單神經(jīng)網(wǎng)絡(luò)

如上圖倦西,
x_0=a^0表示第一層即輸入層,接收一個樣本的特征,他有n_0個神經(jīng)元赁严。
a^1,a^2,...,a^{l-1}表示隱層每一層的結(jié)果是上一層的輸出也是下一層的輸入扰柠,分別有n_1,n_2,...,n_{l-1}個神經(jīng)元
a^l=y'表示輸出層粉铐,當(dāng)然,對于二分類卤档,輸出層是一個神經(jīng)元蝙泼,如果是多分類,就可以是多個神經(jīng)元劝枣。有n_l個神經(jīng)元
W^l表示第l-1層與l層之間的權(quán)重矩陣踱承。shape(W^l)=(n_l,n_{l-1})
b^l表示第l層的偏至值。shape(b^l)=shape(a^l)=(n_l,1)
除第一層外其他層中每個圓即神經(jīng)元哨免,都是一個LR模型。
\begin{alignedat}{2} a^0 &= x_0 \\ z^1&=W^1a^0+b^1 \\ a^1&=\sigma(z^1) \\ ... \\ z^l&=W^la^{l-1}+b^l \\ a^l&=\sigma(z^l)=(\sigma(z^l_0),\sigma(z^l_1),...,\sigma(z^l_{n_l}))^T \\ y' &= a^L \end{alignedat}
(這里的輸出是通用輸出昙沦,沒按圖1來琢唾。輸出層神經(jīng)元有n_L個,模型共L層)
上述的計(jì)算值,從輸入層開始盾饮,逐層向前傳播采桃,經(jīng)過隱層到達(dá)輸出層。所以叫做前向傳播

反向傳播

反向傳播用于計(jì)算每一層W^l,b^l的梯度丘损,用于更新
現(xiàn)在模型建立好了普办,對于一個樣本的輸入,可以得到一個預(yù)測值y'徘钥。
現(xiàn)在需要設(shè)計(jì)一個損失函數(shù)來指導(dǎo)模型學(xué)習(xí)
C=f(y',y)
那有了損失函數(shù)后衔蹲,就要求損失函數(shù)關(guān)于參數(shù)的梯度了,即需要求解
\frac{\partial C}{\partial W^l},\frac{\partial C}{\partial b^l},l=1,2,...L

\begin{alignedat}{2} \frac{\partial C}{\partial W^L}&=\frac{\partial C}{\partial z^L}\frac{\partial z^L}{\partial W^L} \\ &=(\frac{\partial C}{\partial a^L}\odot\frac{\partial a^L}{\partial z^L})\frac{\partial z^L}{\partial W^L} \\ &=(C'(a^L)\odot \sigma'(z^L))(a^{L-1})^T \\\\ \frac{\partial C}{\partial b^L}&=\frac{\partial C}{\partial z^L}\frac{\partial z^L}{\partial b^L} \\ &=C'(a^L)\odot \sigma'(z^L) \end{alignedat}
其中
C'(a^l)=(C'(a^l_1),C'(a^l_2),...,C'(a^l_{nl}))^T
\frac{\partial a^l}{\partial z^l}=\sigma'(z^l) =(\sigma'(z^l_1),\sigma'(z^l_2),...,\sigma'(z^l_{n_l}) )^T
C'(a^l)\odot \sigma'(z^l)=(C'(a^l_1)\sigma'(z^l_1),C'(a^l_2)\sigma'(z^l_2),...,C'(a^l_{nl})\sigma'(z^l_{n_l}) )^T

我們發(fā)現(xiàn)呈础,其實(shí)\frac{\partial z^l}{\partial W^l}是很容易求解的舆驶,而且求導(dǎo)過程與其他層沒有關(guān)系。那么關(guān)鍵就是求\frac{\partial C}{\partial z^l}
我們令\delta^l=\frac{\partial C}{\partial z^l}
\delta^L=C'(a^L)\odot \sigma'(z^L)=(C'(a^l_L)\sigma'(z^l_L),C'(a^l_L)\sigma'(z^l_L),...,C'(a^l_{nL})\sigma'(z^l_{n_L}) )^T, shape=(n_L,1)
如果已知\delta^l 根據(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)我們求\frac{\partial C}{\partial W^l}時巨税,要保證結(jié)果和W的shape時一樣的,即shape(\frac{\partial C}{\partial W^l})=shape(W^l)=(n_l,n_{l-1})
  • z^l,a^l,b^l 都是列向量
    \begin{alignedat}{2} shape(\delta^l)&=(n_l,1)\\\\ \delta^{l-1}&=\frac{\partial C}{\partial z^{l-1}}=\frac{\partial C}{\partial z^l}\frac{\partial z^l}{\partial z^{l-1}}=\delta^l\frac{\partial z^l}{\partial z^{l-1}},shape=(n_{l-1},1)\\\\ \frac{\partial z^l}{\partial z^{l-1}}&=\frac{\partial z^l}{\partial a^{l-1}}\odot\frac{\partial a^{l-1}}{\partial z^{l-1}}=(W^{l})^T\odot\sigma'(z^{l-1}),shape=(n_{l-1},n_l) \\\\ so\\\\ \delta^{l-1}&=\delta^l((W^{l})^T\odot\sigma'(z^{l-1})) \end{alignedat}
    但是發(fā)現(xiàn)如上式那么組合的話途凫,維度上是不相容的垢夹,所以應(yīng)該調(diào)整成如下式:
    \delta^{l-1}=((W^{l})^T\odot\sigma'(z^{l-1}))\delta^l=(W^{l})^T\delta^l\odot\sigma'(z^{l-1})
    所以反向傳播算法,關(guān)鍵記住如下幾點(diǎn):
    • \delta^L=C'(a^L)\odot\sigma'(z^L)

    • \delta^l=(W^{l+1})^T\delta^{l+1}\odot\sigma'(z^l)

    • \frac{\partial C}{\partial W^l}=\delta^l (a^{l-1})^T

    • \frac{\partial C}{\partial b^l}=\delta^l

MLP 一般訓(xùn)練過程

隨機(jī)梯度下降:

對于一個樣本(x,y)輸入模型
首先维费,前向傳播記錄下每一層激活值a^l以及權(quán)重W^l
然后果元,計(jì)算\delta^L以及逐層\delta^l
然后促王,計(jì)算每層權(quán)重的梯度\frac{\partial C}{\partial W^l},\frac{\partial C}{\partial b^l}
最后,更新每層的權(quán)重
W^l=W^l-\eta\frac{\partial C}{\partial W^l}
b^l=W^l-\eta\frac{\partial C}{\partial b^l}

批量梯度下降

對于m個樣本(x,y)而晒,依次輸入模型
首先蝇狼,前向傳播記錄下每一層激活值a^l以及權(quán)重W^l
然后,計(jì)算\delta^L以及逐層\delta^l
然后倡怎,計(jì)算每層權(quán)重的梯度\frac{\partial C}{\partial W^l},\frac{\partial C}{\partial b^l}
最后迅耘,更新每層的權(quán)重
W^l=W^l-\eta\sum\frac{\partial C}{\partial W^l}
b^l=W^l-\eta\sum\frac{\partial C}{\partial b^l}

不同損失函數(shù)與激活函數(shù)所帶來的訓(xùn)練的不同

看不清楚請看:http://www.reibang.com/p/1d6d7b4857d6

C=\frac{1}{2}(y'-y)^2,\sigma=sigmoid() C=-ylogy'-(1-y)log(1-y'),\sigma=sigmoid() C=-\sum y_ilogy_i'\sigma^l=sigmoid(),\sigma^L=softmax()
導(dǎo)數(shù) C'=y'-y,\sigma'=\sigma(1-\sigma) C'=\frac{1-y}{1-y'}-\frac{y}{y'},\sigma'=\sigma(1-\sigma) C'(a^L_i)=-\frac{1}{a^L_i} , softmax'(z^L_i)=a^L_i(1-a^L_i)
\delta^L=C'\odot\sigma' (a^L-y)\odot\sigma(1-\sigma) a^L-y (0,0,...,a^L_i-1,..,0)^T
\frac{\partial C}{\partial W^L} \delta^L(a^{L-1})^T \delta^L(a^{L-1})^T \delta^L(a^{L-1})^T
\delta^l (W^{l+1})^T\delta^{l+1}\odot\sigma'(z^l) (W^{l+1})^T\delta^{l+1}\odot\sigma'(z^l) (W^{l+1})^T\delta^{l+1}\odot\sigma'(z^l)
\frac{\partial C}{\partial W^l} \delta^l(a^{l-1})^T \delta^l(a^{l-1})^T \delta^l(a^{l-1})^T
\frac{\partial C}{\partial b^l} \delta^l \delta^l \delta^l

對比前兩列监署,最大的不同在\delta^L,使用交叉熵的模型少乘了一個\sigma',而\sigma'往往是很小的(只在0附近比較大)颤专,所以第二列會比第一列收斂快。

但關(guān)鍵是在\delta^l钠乏,大家都一樣栖秕,但是隨著l的不斷減小,累乘的\sigma'越來越多晓避,最后導(dǎo)致有的\delta^l越來越小趨近于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的\delta^l的組成,要么從激活函數(shù)導(dǎo)數(shù)入手,要么從權(quán)重W入手憔恳,要么從連乘的傳遞結(jié)構(gòu)入手等等瓤荔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市钥组,隨后出現(xiàn)的幾起案子输硝,更是在濱河造成了極大的恐慌,老刑警劉巖程梦,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件点把,死亡現(xiàn)場離奇詭異,居然都是意外死亡屿附,警方通過查閱死者的電腦和手機(jī)郎逃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來挺份,“玉大人衣厘,你說我怎么就攤上這事⊙购悖” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵错邦,是天一觀的道長探赫。 經(jīng)常有香客問我,道長撬呢,這世上最難降的妖魔是什么伦吠? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮魂拦,結(jié)果婚禮上毛仪,老公的妹妹穿的比我還像新娘。我一直安慰自己芯勘,他們只是感情好箱靴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著荷愕,像睡著了一般衡怀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上安疗,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天抛杨,我揣著相機(jī)與錄音,去河邊找鬼荐类。 笑死怖现,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的玉罐。 我是一名探鬼主播屈嗤,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼潘拨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恢共?” 一聲冷哼從身側(cè)響起战秋,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎讨韭,沒想到半個月后脂信,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡透硝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年狰闪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片濒生。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡埋泵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出罪治,到底是詐尸還是另有隱情丽声,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布觉义,位于F島的核電站雁社,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晒骇。R本人自食惡果不足惜霉撵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洪囤。 院中可真熱鬧徒坡,春花似錦、人聲如沸瘤缩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剥啤。三九已至何暮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铐殃,已是汗流浹背海洼。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留富腊,地道東北人坏逢。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親是整。 傳聞我的和親對象是個殘疾皇子肖揣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容