反向傳播 具體是如何計算的

2022-07-21 05:12:11 字數 2468 閱讀 2517

從左至右分別是輸入層(input:i1、i2),隱含層(hidden:h1、h2)和輸出層(output:o1、o2),以及下方的兩個偏置(bias:這裡兩個bias取值皆為1);中間的w1~w8則分別是每層節點之間的權重。

我們的目標是讓輸出層的輸出結果(o1、o2)跟實際應該得到的結果(target1、target2)盡量相同,也是就是target和output之間的差(error)盡可能的小。

即,我們希望(target-output)=0.為了衡量target-output的大小,就採用了乙個均方誤差函式來計算,希望這個誤差函式的結果盡可能的小,於是有:

\(error_=e_=e_+e_=\frac(o1_-o1_)^2+\frac(o2_-o2_)^2\)

這裡出現的1/2的作用是在之後對該公式計算偏導數的時候,和得到的2相乘,最後相互抵消掉,暫時可以不用管它。

我們假定實際需要得到的輸出應該是\(o1_=0.01\),\(o2_=0.99\)(如上圖所示)

那麼這個簡單的神經網路自己計算得到的output1和output2分別是多少呢,我們從左往右以output1為例開始一步步計算。

先看輸入:\(i1_=0.05\),\(i2_=0.10\);

此時,隱含層h1分別接受來自i1和i2的輸入,分別乘以其權重(w1、w2)外加數值為1的偏置(其權重為b1),即

\(h1_=w1*i1+w2*i2+b1*1=0.15*0.05+0.2*0.1+0.35*1=0.3775\)

所以0.3775是隱含層神經元h1從輸入神經元i1和i2得到的輸入,h1本身再對這個輸入進行一定計算,然後將結果傳到下一層(輸出層),他的計算方式是採用乙個logistic函式,即,

\(h1_=\frac}}=\frac}=0.593269992\)

(這裡之所以選擇logistic函式也全是為了之後計算偏導數的方便)因為,

如果\(y=\frac\)那麼\(\frac=y(1-y)\)

同理得到\(h2_=0.596884378\)

輸出層o1和o2分別得到來自隱含層h1和h2的輸入(即分別是h1的輸出以及h2的輸出)加上bias,即

\(o1_=w5*h1_+w7*h2_+b2*1=0.4*0.593269992+0.45*0.596884378+0.6*1=1.105905967\)

然後,o1也是對它的輸入進行一次logistic函式的計算後再輸出

\(o1_=\frac}}=\frac}}=0.75136507\)

同理得到\(o2_=0.772928465\)

再回來計算\(e_=\frac(target_-output_)^2=\frac(0.01-0.75136507)^2=0.274811083\)

同理得到\(e_=0.023560026\)

最終\(e_=e_+e_=0.298371109\)

我們需要的就是降低上述這個值。為了降低它,我們需要知道這個值本身是如何被權重w所影響的,即誤差的變化和權重變化的比例關係。在知道了這個比例後,通過將權重增加或減小,來將誤差盡可能地調整為0.我們需要調整所有w1到w8的權重,暫時這裡先以w5為例進行計算,讓total error對它求偏導數(梯度)

\(\frac}=\frac}}*\frac}}*\frac}\)

下面分別計算等式右邊的三項,因為

\(e_=e_+e_=\frac(o1_-o1_)^2+\frac(o2_-o2_)^2\)

所以\(\frac}}=2*\frac*(o1_-o1_)^*(-1)+0=-(o1_-o1_)=-(0.01-0.75136507)=0.74136507\)

又因為\(o1_=\frac}}\)

所以\(\frac}}=o1_*(1-o1_)=0.75136507(1-0.75136507)=0.186815602\)

另外\(o1_=w5*h1_+w6*h2_+b2*1\)

所以\(\frac}=1*w5^(1-1)*h1_+0+0=h1_=0.593269992\)

最後將上述三項的數值相乘,得到\(\frac}\)為0.082167041

我們使用這個偏導數的結果來對權重w5進行更新,從而降低誤差,

\(w5_=w5-(learningrate)*\frac}=0.4-0.5*0.082167041=0.35891648\)

(這裡我們暫設學習率-learningrate為0.5)

w5是從隱含層h1到輸出層o1的權重,那麼對於輸入層i1到隱含層h1的權重w1,我們類似得使用下式求得偏導數,然後對它進行更新。

\(\frac}=\frac}}*\frac}}*\frac}\)

因為\(e_,e_\)同時受到\(h1_\)的影響,所以這裡

\(\frac}}=\frac}}+\frac}}\)

接下來的具體推導步驟可以參看原博文。根據這些偏導數的結果對所有權重w1~w8的數值進行更新,即完成了利用梯度進行反向傳播,修改權重,從而減少**整體誤差的過程。

反向傳播理解 從抽象到具體

反向傳播是深度學習的基礎理論知識,在去年很早的時候,就把研究生期間學習推導bp的過程總結了一下,寫了一篇文章,但是給同事分享的時候還是發現不能非常清晰的讓大家理解什麼是反向傳播,反思一下,可能是那篇文章講的太細節了,不能從巨集觀的角度理解,這一篇文章從抽象的角度出發,忽略公式推導的細節,然後反過來研...

caffe反向傳播計算 softmax

loss layers.hpp ifndef caffe loss layer hpp define caffe loss layer hpp include include caffe blob.hpp include caffe layer.hpp include caffe proto caf...

反向傳播演算法 反向傳播演算法的工作原理(2)

推薦圖書 資料準備和特徵工程 在第一部分 反向傳播演算法的工作原理 1 已經得到了如下結論,本文將在前述基礎上,做進一步的證明和解釋。其中 是乙個方陣,其對角線是 非對角線項為零。請注意,此矩陣通過矩陣乘法作用於 有上面糧食,可得 對於熟悉矩陣乘法的讀者來說,這個方程可能比 bp1 和 bp2 更容...