前向傳播和反向傳播

前向傳播和反向傳播是神經(jīng)網(wǎng)絡(luò)中的重要基礎(chǔ)。兩者存在一些聯(lián)系,所以本文將兩者一起講述,有利于大家理解。同時反向傳播是理解神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練的重點(diǎn),需要一些微積分基礎(chǔ)(導(dǎo)數(shù),偏導(dǎo)數(shù),鏈?zhǔn)椒▌t)。如果你準(zhǔn)備好了,那我們開始吧。

1.前向傳播Forward-Propagation

前向傳播如圖所示:圖片下方的單詞表示該層所使用的active function。


Forward-propagation
Input Layer-->h1 Layer矩陣計算細(xì)節(jié):
Matrix Operation

Relu operation

舉個例子:


Input -->h1 example
h1 Layer-->h2 Layer矩陣計算細(xì)節(jié):
Matrix Operation
Sigmoid Operation

例子:


h1-->h2 example
h2 -->output 矩陣計算細(xì)節(jié):
Matrix Operation

Softmax Operation

例子:


h2-->output example

上面的[0.2698, 0.3223, 0.4078],便是我們將[0.1, 0.2, 0.7]輸入模型后得到的結(jié)果。好了我們來通俗解釋一下什么是前向傳播。

Forward-propagation:將固定的數(shù)值的一個樣本x輸入模型,模型利用weight ,bias(隨機(jī)初始),active function對x進(jìn)行一系列的運(yùn)算最后輸出一個結(jié)果\hat y(actual output)。

2.損失函數(shù) loss function

好奇的小伙伴可能會想不是要說back-propagation么?為什么搞個loss function 出來?慢慢看下去你就明白了。
在監(jiān)督學(xué)習(xí)的任務(wù)中,我們會有大量的固定的輸入X和固定的輸出Y(desired output)作為樣本。我們將一個樣本x輸入?yún)?shù)隨機(jī)初始化后的模型得到一個輸出\hat y,但\hat y只是一個估計值,我們想得到的是y。于是就想怎么樣可以使\hat y盡量的接近y呢?這個問題好像有點(diǎn)復(fù)雜,那我們先衡量一下\hat yy的差距吧。
均方誤差 MSE(mean square error)常用于回歸任務(wù):

MSE

交叉熵 (cross-entropy)常用于分類任務(wù):
cross entropy

我們知道在訓(xùn)練階段,模型的輸入X和輸出Y是固定的,只能夠調(diào)節(jié)模型中的weight和bias 使 \hat y 盡量的接近 y,即調(diào)節(jié)模型中的參數(shù)使loss function計算出的loss盡可能的小。更進(jìn)一步的可以理解為:

當(dāng)loss 逐步變小時,weight和bias應(yīng)該如何變化。原來loss function 就像一個教練,它能夠指導(dǎo)模型去學(xué)習(xí)最優(yōu)的weight和bias去完成預(yù)測任務(wù)。

具體的weight和bias的更新過程就是back-propagation所要做的啦。


cross entropy

例子:


loss

3.反向傳播 Back-Propagation

output Layer-->h2 Layer的反向傳播:
Backpropagating errors to h2 weights

a. E_1O_{out1} 的變化關(guān)系:

交叉熵偏導(dǎo)公式

Matrix of cross-entropy derivatives

例子:


cross entropy偏導(dǎo)矩陣值

b.O_{out1}O_{in1}的變化關(guān)系:

softmax偏導(dǎo)公式

Matrix of softmax derivatives

例子:
softmax偏導(dǎo)矩陣值

c.O_{in1}W_{k1l1}的變化關(guān)系:

偏導(dǎo)公式

例子:
偏導(dǎo)矩陣和偏導(dǎo)矩陣值

d.E_1W_{k1l1}的變化關(guān)系:由鏈?zhǔn)椒▌t可得

Chain rule breakdown of Error derivative

output-->h2的反向傳播

例子:
數(shù)值矩陣

以0.01的學(xué)習(xí)率對 W_{kl} 更新:

反向傳播對W的更新值

h2 Layer-->h1 Layer的反向傳播:
Backpropagating errors to h1 weights

a.h2_{out1}h2_{in1}的變化關(guān)系:

Derivative of sigmoid output wrt h2 input

例子:
h2 output 和 input 的偏導(dǎo)矩陣值

b.h2_{in1}W_{j1k1}的變化關(guān)系:

h2 input 和 weight的偏導(dǎo)公式

例子:
h2 input 和 weight_jk 的偏導(dǎo)矩陣值

c.E_totalh2_{out1}的變化關(guān)系:由鏈?zhǔn)椒▌t可得





例子:

d.E_totalW_{j1k1}的變化關(guān)系:由鏈?zhǔn)椒▌t可得

error 和 weight_jk的偏導(dǎo)公式

error 和 weight_jk的偏導(dǎo)矩陣

例子:

以0.01的學(xué)習(xí)率對W_{jk}進(jìn)行更新:

h1 Layer-->Input Layer 的反向傳播:

a.h1_{out1}h1_{in1}的變化關(guān)系:



例子:

b.h1_{in1}W_{i1j1}的變化關(guān)系:


例子:

c.與的變化關(guān)系:由鏈?zhǔn)椒▌t可得

例子:

c.E_{total}W_{ij}的變化關(guān)系:由鏈?zhǔn)椒▌t可得


例子:

以0.01的學(xué)習(xí)率對W_{ij}進(jìn)行更新:

4.總結(jié)

模型隨機(jī)初始化的全部weight:


向模型輸入一個樣本x:[0.1, 0.2, 0.7]和y:[1.0, 0.0, 0.0],通過forward propagation 模型輸出一個結(jié)果\hat y:[0.2698, 0.3223, 0.4078]。然后利用loss function 計算y\hat y 的loss,以loss 變小為原則指導(dǎo)back propagation,最終實現(xiàn)weight的一次更新。

更新后的全部weight:


summary

小伙伴們?nèi)绻X得文章還行的請點(diǎn)個贊呦??!同時覺得文章哪里有問題的可以評論一下 謝謝你!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容