神經網絡的反向傳播到底是個什么樣的過程?今天就用鏈式求導揭開這個黑盒子。
這對於理解和設計神經網絡很有幫助。
我們使用一個簡單的邏輯回歸的例子

這里綠色是前向計算,褐紅色是反向傳播。 0.73是最終輸出,1是誤差。
可以看到整個計算流程就是上面那個邏輯回歸表達式。
好了,誤差有了,開始反向傳播吧
很簡單,就是拿誤差乘以導數
error=1,它是經過1/x計算得到的誤差,導數f1=-1/x^2,反向傳遞 1X(-1/1.37^2)=-0.53
error=-0.53,它是經過x+1計算得到的誤差,導數f2=1,反向傳遞 -0.53X(1)=f1Xf2=-0.53
error=-0.53,它是經過ex計算得到的誤差,導數f3=ex,反向傳遞 -0.53X(e-1)=f1Xf2Xf3=-0.2
error=-0.2,它是經過-x計算得到的誤差,導數f4=-1,反向傳遞 -0.2X(-1)=f1Xf2Xf3Xf4=0.2
error=0.2,它是經過m1+m2計算得到的誤差,它有2個導數,
對m1的導數f51=1,反向傳遞 0.2X(1)=f1Xf2Xf3Xf4Xf51=0.2
對m2的導數f52=1,反向傳遞 0.2X(1)=f1Xf2Xf3Xf4Xf52=0.2
...
需要注意的是,誤差從輸出一層一層往前傳播,不可以跳過某些中間步驟,在計算每一步的誤差時,需要乘上上一步得到的誤差(鏈式法則,層層相乘)。
在傳播過程中,如果某一部分可以直接用一整個函數代替,則可以對整塊求導,然后將導數值傳到上一步,如下圖所示,這仍然符合鏈式求導法則。

藍色框內其實就是sigmoid函數,其導數為 f(1-f)=(0.73x(1-0.73))=0.2,反向傳遞 1X0.2=0.2
其實在實際過程中,完整的反向傳播應該是下圖

是不是覺得鏈式法則很有用?
