ML5-Backpropagation(李宏毅筆記)

這個系列文章是我對李宏毅教授機器學習課程的一個筆記。

看backpropagation是怎麼讓neural network變的有效率的。

gradient descent的流程

backpropagation並不是和gradient descent不同的一個方法。他只是一個比較有效率的演演算法,讓你在計算梯度向量的時候比較有效率把結果計算出來。

關鍵就是求導的鏈式法則(Chain Rule)

鏈式法則求導的兩種case

定義lost function:

1.損失函數(Loss function)是定義在單個訓練樣本上的,也就是就算一個樣本的誤差,比如我們想要分類,就是預測的類別和實際類別的區別,是一個樣本的哦,用L表示。

2.代價函數(Cost function)是定義在整個訓練集上面的,也就是所有樣本的誤差的總和的平均,也就是損失函數的總和的平均,有沒有這個平均其實不會影響最後的參數的求解結果。

所以這裡定義的是有點問題的。

那怎麼去做呢?我們先從一部分的neural去看:

從整個neural network中抽出一小部分

從這一小部分中去看,把計算梯度分成兩個部分

那怎麼計算 frac{partial z}{partial w} (Forward pass的部分):

forward pass的運算規律

那我們帶入數值來計算:

帶值計算

那怎麼計算 frac{partial C}{partial z} (Backward pass的部分)這就很困難複雜因為我們的C是最後一層:

還使用鏈式法則(第一部分很好算)

最終的式子結果:

但是你可以想像從另外一個角度看這個事情,現在有另外一個neural,

將back過程逆過來

這裡的 sigma^{}(z) 因為forward pass階段已經算出來了,所以這個是一個常數,所以在上面圖中畫出的是一個三角形(放大器)。

case1:output layer

case 1(y1與y2是輸出值)

case 2:

怎麼去計算呢?

計算流程

實際上進行backward pass時候就是反向的計算(也相當於一個neural network)。

總結一下:


推薦閱讀:

Golang 學習筆記三
一次性解決數學筆記所有問題
今日2.22《子夜》書摘
熱點很多,看懂很好

TAG:機器學習 | 筆記 |