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:
Post a Comment