一步一步推導反向傳播

一步一步推導反向傳播

假如我們由如下的網絡(這裏只給出最後兩層lll+1l+1)其中l+1l+1是最後輸出:
在這裏插入圖片描述
其中有如下定義:

al+1=sigmoid(zl+1)(1)a^{l+1} = sigmoid(z^{l+1})……(1)
zl+1=wlal(2)z^{l+1} = w^l*a^l… ………(2)
注意這裏的wazw、a、z都是矩陣或向量。其定義和吳恩達的一樣,比如ajla^l_j代表第ljl層的第j個節點


因爲反向傳播是要求最後的損失對前面所有的權重的導數,然後再更新權重,所以我們的關鍵在於求出損失的權重的求導,上面的圖中最後的輸出是al+1a^{l+1},所以我們對應的損失如下:

J(θ)=[ylogal+1+(1y)log(1al+1)]J(\theta) =-[yloga^{l+1}+(1-y)log(1-a^{l+1})] 我們將J(θ)CJ(\theta)寫作C

我們的目的是要求Cwl\frac{\partial C}{\partial w^l},我們可以通過鏈式運算:

首先由上面的損失公式,我們可以很直觀的看出來Cal+1=al+1yal+1(1al+1)\frac{\partial C}{\partial a^{l+1}} =\frac{a^{l+1}-y}{a^{l+1}(1-a^{l+1})} ,注意這裏省去了常數部分。

根據鏈式法則,我們可以得到Czl+1=Cal+1al+1zl+1\frac{\partial C}{\partial z^{l+1}} =\frac{\partial C}{\partial a^{l+1}}\frac{\partial a^{l+1}}{\partial z^{l+1}} ,然後再結合式1,因爲al+1=sigmoid(zl+1)a^{l+1} = sigmoid(z^{l+1}) ,並且f(x)=sigmoid(x)f(x)=f(x)(1f(x))f(x) = sigmoid(x)的導數爲f’(x) =f(x)(1-f(x)),所以al+1zl+1=al+1(1al+1)\frac{\partial a^{l+1}}{\partial z^{l+1}}=a^{l+1}(1-a^{l+1}) ,最終我們得到如下:
Czl+1=Cal+1al+1zl+1=al+1y(3) \frac{\partial C}{\partial z^{l+1}} =\frac{\partial C}{\partial a^{l+1}}\frac{\partial a^{l+1}}{\partial z^{l+1}}=a^{l+1}-y …… (3)
我們離權重只剩下一步之遙了,同樣利用鏈式法則,我們可以得到Cwl=Czl+1zl+1wl\frac{\partial C}{\partial w^{l}} =\frac{\partial C}{\partial z^{l+1}}\frac{\partial z^{l+1}}{\partial w^{l}} ,結合式子2,因爲zl+1=wlalz^{l+1} = w^l*a^l,所以zl+1wl=al\frac{\partial z^{l+1}}{\partial w^{l}} =a^l到此爲止,我們得到了損失對wlw^l的導數:
Cwl=Czl+1zl+1wl=Czl+1al=(al+1y)al(4) \frac{\partial C}{\partial w^{l}} =\frac{\partial C}{\partial z^{l+1}}\frac{\partial z^{l+1}}{\partial w^{l}}=\frac{\partial C}{\partial z^{l+1}}a^l=(a^{l+1}-y)*a^l ……(4)

看到這裏,可能心裏想,這如果要好幾百層怎麼推呀,其實我們可以發現當我們求第ll層的時候,我們會用到l+1l+1層的數據,所以如果能找到規律就好了,那麼我們再向下推一層看看,同理,根據鏈式法則,我們可以得到Czl=Czl+1zl+1zl\frac{\partial C}{\partial z^{l}}=\frac{\partial C}{\partial z^{l+1}}\frac{\partial z^{l+1}}{\partial z^{l}} ,而zl+1=wlal=wlsigmoid(zl)z^{l+1}=w^la^l=w^lsigmoid(z^l),所以zl+1zl=(wl)Tal(1al)\frac{\partial z^{l+1}}{\partial z^{l}}=(w^l)^Ta^l(1-a^l),所以我們得到如下:
Czl=Czl+1(wl)Tal(1al)5 \frac{\partial C}{\partial z^{l}}=\frac{\partial C}{\partial z^{l+1}}(w^l)^Ta^l(1-a^l)……(5)

看看我們發現了什麼,我們發現第ll層對zz的導數和第l+1l+1層對zz的關係了,所以我們可以設Czl=δl\frac{\partial C}{\partial z^{l}} =\delta^l,所以我們有:
δl=δl+1(wl)Tal(1al)6 \delta^l = \delta^{l+1}(w^l)^Ta^l(1-a^l)……(6)
再根據鏈式法則得到對權重的導數爲:
Cwl1=Czlzlwl1=δlal17 \frac{\partial C}{\partial w^{l-1}} =\frac{\partial C}{\partial z^{l}} \frac{\partial z^l}{\partial w^{l-1}} =\delta^la^{l-1}……(7)
其中(zl=wl1al1z^l=w^{l-1}a^{l-1}

按照(7)這種寫法,我們也可以將(4)改下如下:
Cwl=Czl+1zl+1wl=δl+1al(4_1) \frac{\partial C}{\partial w^{l}} =\frac{\partial C}{\partial z^{l+1}}\frac{\partial z^{l+1}}{\partial w^{l}}= \delta^{l+1}a^l ……(4\_1)
所以我們就得到了我們的損失對於任意ll層的權重的導數,也就是式子4_1,發現裏面只存在一個δ\delta是未知的,而結合式子6,我們就能遞推求出所有層的δ\delta

比如我們最後一層是LL層,根據δl\delta^l的定義得到δL=CzL\delta^L=\frac{\partial C}{\partial z^{L}},因爲最後一層,所以結合損失,計算得到δL=CzL=aLy\delta^L=\frac{\partial C}{\partial z^{L}}=a^L-y,可以參考式子3的計算。當計算得到第LδL層的\delta,那麼L1,L2...L-1,L-2...就可以遞推得到,進而帶入4_1,就能得到對所有層權重的導數,進而更新權重。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章