1. 程式人生 > >【李巨集毅ML筆記】 11 BP反向傳播

【李巨集毅ML筆記】 11 BP反向傳播

梯度提升在神經網路訓練中的過程

實際,BackPropagation是一種比較有效率計算的Gradient Descent方法

記住BackPropagation中的鏈式法則Chain Rule如下:


以上,即多元複合函式的求導公式,如下:



如下,在Neuron Network的training中,

yn 與 yn^的距離,即(偏差)距離值定義為Cn。

累加所有的Neuron的(偏差)距離值,得到整個Network的total loass損失值L(θ)。

用該累加公式對w求導。該公式意義在與,求L(θ)對w的偏微分,可以轉換為求每個Neuron對w的求導的累加和。


如下,以第一個Neuron為例,則x1,x2位原始輸入向量,進行計算。

由計算損失函式對w的偏導,基於鏈式法則,改為求函式模型對w的偏導*損失函式對啟用函式模型的偏導


如下,第一步,計算φ(z)/φ(w),規律就是wi前接的input是xi,則其偏微分為xi。


舉例如下,計算z,然後使用activation function(這裡用的sigmoid function),計算得到輸出0.98。


第一步,計算φ(C)/φ(z),C是在計算得到z,再經過activation function得到yn^,最後還要經過loss function,得到了C的值。因此,φ(C)/φ(z)很複雜。

假設a = σ(z), σ為sigmoid函式,然後a再與w3/w4得到z'/z'',以及後續的a',a''



ruxia因為a結合w3,w4分別影響後續的z'和z'',基於鏈式法則,假設後一層只有兩個neuron,也可以有1000個,下面式子更長。

然後,求φ(z')/φ(a)也很簡單了,跟前面的φ(z)/φ(w)類似,偏微分就是前面的wi,其餘部分φ(C)/φ(z')假設已經算出(後面考慮)。

即可得到下式:


反過來,從右往左看,假設有一個新的neuron,且不在原先的Network中,所做的工作跟上面中等式中括號中一樣,再直接乘以在forward pass中得到的已知的φ(z')。樣子如下,其input是φ(C)/φ(z'),φ(C)/φ(z''),得到的結果就是φ(C)/φ(z),z是固定的值,則φ(z)是常數。形成了backward pass


如下:假設能算φ(z'),φ(z''),則問題就都能解決了,假設已經處於最後一層neuron,輸出為y1,y2...可加入y1,y2,並利用鏈式法則,基於假設的C誤差函式,求出φ(C)/φ(z'),φ(C)/φ(z''),進而求出φ(C)/φ(z)。如果只有兩層,那按下面方法,就可以求出w1,w2了。


然而,如下,假設第一層後沒有輸出層,接的是下一個隱層,一樣原理。


換一個方向,從y1,y2輸出層開始,反向算,運算量跟forword pass是一樣的,只是用了很多鏈式法則。

如下,想要計算z1對C的偏微分,則算z3、z4根C的偏微分,想知道z3的偏微分,需要知道z5,z6對C的偏微分。

反之,就都算出來了。如果先算z5,z6對C的偏微分,再算z3、z4的偏微分,往前算。


那麼,怎麼先算z5,z6呢?利用假設一個反向的Neuron network,層層計算,做backward pass如下:



總結:

先做一個forward pass,知道activation function的output,就是φ(z)/φ(w)=a,在backward pass中,求φ(C)/φ(z),相乘,得到φ(C)/φ(w)