2015年12月16日 星期三

Neural network 的 forward/backward propagation (一)

因為種種需要,所以重新看了一下 neural network (NN) 的教學
http://ufldl.stanford.edu/tutorial/supervised/MultiLayerNeuralNetworks/
其實這篇講的蠻清楚的
不過這邊試著自己用比較圖像、直觀的方式自己解釋一次
如果以後自己要複習的時候比較好用

不論是簡單的演算法或是較為複雜 SVM
機器學習最基礎要作事情就是
「給你一組資料 (vector),請問他是不是什麼什麼」
這件事又分成 training, testing

簡單的說
假設我們有一個潛在的條件是
離二維原點距離大於 4 就是 1,不然就是 0
這個問題

(0,0) -> 0
(0,3) -> 0
(0,4) -> 0
(3,4) -> 1
(9,9) -> 1

training 就是由很多組 (x1,x2) -> y 的關係推論出一個猜想
testing 就是用猜想去推出一個未知對應的新資料
例如說我們 training 的時候可能會猜 y = int(x1*x1+x2*x2>15)
testing 的時候遇到 (0,4) 就會猜 1,然後就猜做了

好,以上都是廢話,跟 NN 並無直接相關

NN 是機器學習的演算法之一,當然要作的事情也一樣
最簡單的版本一樣也是給你一堆 vector,猜出是 1 還是 0
這是一般NN的結構,分成 linear, nonlinear layer

先從 testing 講起
我們現在有一筆資料 (x1,x2)
首先他會在 data layer 出現
然後經過線性轉換變成 z (綠色式子,左)
接這馬上經過 element-wise 的非線性轉換變成 a (綠色式子,右)
(常見的非線性轉換通常選用 relu, sigmoid, tanh)
(圖片中的上標代表第幾層)
然後第二層重複一樣的步驟

這時最右邊的 a 就是我們要的值
他通常不會這麼剛好是 0 或 1,就選一個近的
例如說是 0.8 好了,我們就猜 1

此外在 training 的階段我們會把這個值跟 y 比較
並且用 2-norm 的大小當作 NN 的品質
例如剛剛的情形下 output 0.8
假設真實是 1,我們的誤差就是 0.04,還不錯
假設真實是 0,我們的誤差就是 0.64,那麼我們就要作比較大的調整
以上這些就是 NN 的 forward propagation 的流程以及目的
「調整」具體而言是什麼呢
一般來說節點數量固定的
而非線性轉換的函數一般也是
所以我們能調整的就只有係數了
在這邊就是兩個矩陣 W 的值
而係數的調整就是 backward propagation 要作的事情了

--
整理

NN 的 forward propagation 的目的

  1. testing 階段用來猜出 label
  2. training 階段看猜出的 label 離答案多遠,藉此可以在 backward propagation 計算係數矩陣 W 要作什麼修改



沒有留言:

張貼留言