活用<BP算法的黃金三公式>
By 高煥堂
一、前言
在上一篇文章《AI機器學習的黃金三公式》裏,已經說明瞭,學習AI的BP算法有兩個途徑:
途徑-1. 像牛頓一樣的科學家,會去用數學證明 F = ma。如果您是AI算法和模型的科學家,才需要懂微積分去證明AI算法裡的常用簡單公式。
途徑-2. 像一般的學生們的學習物理時,常先記住F=ma 或 E = MC^2的簡單公式,然後一邊應用,一邊領會,最後才去研讀牛頓F=ma的推導過程。
在AI的NN方面也是一樣的。在我出版的《不編程,而學AI:Excel+TensorFlow》一書裡(P.243~245)有如下的圖:
首先您只需知道(先記住即可)NN的Layer與Layer之間BP傳播算法的非常簡單的公式。然後,再去探究delta與error(又稱loss)的關係。請留意,我這裏的error(即loss)不是L()損失函數的值,而這error只是單純指誤差值(t - z3)而已。也就是:
error = t - z3
接著,您只要弄懂delta與error之間的關係,就OK啦。此時,請您先記住簡單公式(慢慢再求深入理解):
delta = error * z3 * (1- z3)
於是,您就輕易弄懂了以上的圖了,也就是知道了Layer與Layer之間的BP(反向傳播)之關係。
接下來,剩下一步,就是要知道如何更新Weights值。在我的《不編程,而學AI:Excel+TensorFlow》一書裡(P.246)有一張圖:
基於剛才已經理解的delta來修正W 就行了。此時請您先記住修正W的公式:
w03 += delta * z0
w13 += delta * z1
w23 += delta * z2
于是,大功告成了,完成了Z3神經元的BP計算了,不亦簡乎、不是樂乎?
二、應用於CNN的卷積層
現在,舉一個最簡單的範例,更容易凸顯如何將上述的NN(神經網路)的BP算法直接應用於CNN的卷積層上,就能够一石兩鳥,同時理解一般NN,又能應用CNN。這個簡單的範例是:
把它對應到神經元模型上,如下圖:
在CNN的BP算法裏,後續層會回傳error值。由于CNN卷積層最常用的激活函數是ReLU。采取ReLU激活函數時,loss值等于delta值(暫時不必問爲什麽,後續有閑情時再去探究即可)。從上圖可以看到了,後續輸出層回傳delta值(已經使用第1公式,從error轉換成為delta值了)是[-0.1, 0.2]。運用上一篇文章所提供的第2公式,很容易從這個delta[]值,反向推導出前一層的error值,並算出delta值,如下:
就得到了delta_x值:[0.03, 0.01, 1.0],如下:
接下來,再運用上一篇文章所提供的第3公式,很容易來修正這卷積層的weight[ ]值了。如下:
以及:
就得到了新的w值:[0.6, 0.9]了。
~ END ~
*** 歡迎參閱 高煥堂的4本AI書籍:
==> 返回首頁