Saturday, September 07, 2019

AI 從頭學(九):Back Propagation

AI 從頭學(九):Back Propagation

2017/02/05

前言:

這一篇不是要教你 Back Propagation(BP)Algorithm,只是解答我在自學 Deep Learning(DL)過程中所產生的疑問。

-----


Fig. Propagation(圖片來源:Pixabay)。

-----

Summary:

我從網路上輾轉獲得神諭,要學 AI(目前 DL 幾乎等同其代名詞)的方法,是用 Python 全手工實作 LeNet [1]-[3],不靠 Automatic Differentiation(AD)[4], [5] 的套件。先把 CNN [3] 寫出來。其他如 RNN,只是類似的概念加以延伸。

LeNet [1], [2] 最主要的函式是 CNN [3],CNN 的核心函式是前向傳播,以及反向傳播 Back Propagation(BP)[6]-[20]。BP 再呼叫 AD [4], [5]。

一開始我查了不少論文 [1], [18]-[20],可惜論文是寫給專家看的,很難看懂。後來我查了一些電子書 [13]-[17],有好一點。最後還是靠網路上部落格的文章 [6]-[9],解決了疑惑。

-----

Q1:微分
Q2:Activation function
Q3:輸入與輸出
Q4:訓練與測試

-----

Q1:微分

第一個問題是,你從網路上查到一堆 DL 的論文,為什麼裡面會有一堆偏微分的符號?

答案是:這雖然是一個演算法,但是當你把問題定義好之後,它其實是一個數學問題,目的是要求得神經網路的運算值與正確值差異之函數之極小值(參考圖一)。極小值最理想的情形是 0,在往 0 邁進的途中,我們要一次又一次從目前的結果反推回去,藉由改變一點點 weight(and bias),讓誤差變小。

往哪邊移,誤差會變小?導數為正,函數值漸增,導數為負,函數值漸減。所以當你求出導數,要移動一點點,就把原來的權重 w 減掉斜率(導數)乘以步長(參考圖二、三),函數(誤差)值才會變小。這個步長,是常數,一般很小,但也有取 0.5 的例子 [8],高階的作法,也可以是變數 [1]。


Fig. 1. 最小值問題 [1]。


Fig. 2. Training weighting factors [1]。


Fig. 3. Training weighting factors [5]。

-----

Q2:Activation function

論文裡面會有種種的 activation functions,這些函數為何要長成這樣?

千言萬語,不如一圖在手。


Fig. 4. Activation function, p. 475, [13]。

-----

Q3:輸入與輸出

CNN 是有輸入跟輸出的演算法。

輸入是什麼呢?若以影像辨識為例,不管是前半段訓練期或者後半段測試期,每次是一張圖片,每個神經元的輸入是一個像素 (pixel) [6], [9]。

輸出是什麼呢?輸出是每一個 label 的相似度,是一個正數或 0,可以把它規範在 0 與 1 之間 [9]。這是一個向量,可以用種種不同的 norm 來計算輸出值與正確值的誤差。非數學系的話,不講 norm,講 metric 可能比較容易聽懂。或者就用最簡單的歐幾里得距離。

-----

Q4:訓練與測試

第一步,選定訓練集合。
第二步,隨機指定 w, b 初值。
第三步,設定步長。

把 [8], [9] 都看懂之後,[15] 的演算法應該就看的懂了(參考圖五)。



Fig. 5. Back-propagation algorithm, p. 66 [15].

-----

結論:

BP 是 DL 最基礎的部分。去年 11 月到今年 1 月農曆過年前這三個月,我利用下班時間斷斷續續 K 一點 DL。幸虧遇到高人不吝傳授心法。我的感想是:自助者得天助。希望這篇文章能幫到其他對 DL 有興趣的同好。

-----

出版說明:

2019/09/07

深度學習的核心是反向傳播法,反向傳播法的核心是梯度下降法,而反向傳播法,其實是微積分裡的 chain rule。說實在的,反向傳播法確實有點複雜,最近我也搞清楚了,有機會的話,再寫一篇新文章了!

-----

References

[1] 1998_Gradient-Based Learning Applied to Document Recognition

[2] LeNet CNN 實例 MNIST 手寫數字辨識  allenlu2007
https://allenlu2007.wordpress.com/2015/11/28/mnist-database-%E6%89%8B%E5%AF%AB%E6%95%B8%E5%AD%97%E8%BE%A8%E8%AD%98/

[3] 2002_Tutorial on Convolutions - Torch

[4] 2010_Introduction to Automatic Differentiation and MATLAB Object-Oriented Programming

[5] 2014_Automatic differentiation of algorithms for machine learning

[6] [Note]Neural Network的一些基本概念(1) – iphone3310
https://iphone3310.wordpress.com/2016/03/24/noteneural-network%E7%9A%84%E4%B8%80%E4%BA%9B%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5/

[7] [Note]Neural Network的一些基本概念(2):back propagation推導 – iphone3310
https://iphone3310.wordpress.com/2016/04/01/noteneural-network%E7%9A%84%E4%B8%80%E4%BA%9B%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B52%EF%BC%9Aback-propagation%E6%8E%A8%E5%B0%8E/

[8] 1984年產物 倒傳遞神經網路(BACKPROPAGATION NETWORK, BPN)
http://donaldknuth.blogspot.tw/2013/01/backpropagation-network-bpn.html

[9] Back Propagation Neural Network 倒傳遞類神經網路  學習堅持,堅持學習 - 點部落
https://dotblogs.com.tw/dragon229/2013/01/23/88750

[10] 反向傳播算法 - 維基百科,自由的百科全書
https://zh.wikipedia.org/wiki/%E5%8F%8D%E5%90%91%E4%BC%A0%E6%92%AD%E7%AE%97%E6%B3%95

[11] 

[12] Neural networks and deep learning
http://neuralnetworksanddeeplearning.com/index.html

[13] 2016_Practical Machine Learning - Chapter 11: Deep learning, pp. 460-511.

[14] 2015_Python Machine Learning - Chapter 12: Training Artificial Neural Networks for Image Recognition, pp. 341-385.

[15] 2015_Automatic speech recognition, a deep learning approach - Chapter 4: Deep Neural Networks, pp. 57-77.

[16] 2006_Pattern Recognition and Machine Learning - Chapter 5: Neural Networks, pp. 225-290.

[17] Chapter 7: The Backpropagation Algorithm
https://page.mi.fu-berlin.de/rojas/neural/chapter/K7.pdf

[18] 1989_Theory of the backpropagation neural network

[19] 1990_30 years of adaptive neural networks, perceptron, madaline, and backpropagation

[20] 1993_A direct adaptive method for faster backpropagation learning, The RPROP algorithm

No comments: