LeNet(三):Illustrated
2020/12/29
-----
施工中。。。
-----
https://pixabay.com/zh/photos/fish-fishermen-fishing-net-fishing-3062034/
-----
-----
Outline
一、Machine Learning,Deep Learning。
二、Neuron,LeNet。
三、Error Function,Gradient Descent。
四、Convolution,Activation Function,Pooling。
五、Full Connection,Back Propagation。
-----
# History DL [3]。
圖三,機器學習與深度學習。
說明:
-----
# History DL [3]。
圖四,人工智慧、機器學習、深度學習。
說明:
-----
# History DL [3]。
圖五,神經元。
說明:
https://blog.csdn.net/hy13684802853/article/details/78717475
-----
# Deep Learning [2]。
-----
# LeNet [1]。
圖六,LeNet 的架構圖。
說明:
-----
# LeNet [1]。
圖七,每一層的特徵圖。
說明:
-----
# LeNet [1]。
圖八,輸出的標準。7 x 12 的 ASCII。
說明:
-----
# LeNet [1]。
圖九,
說明:
f 是一個 hyperbolic tangent 函數,壓縮函數,也就是激活函數。
S 是 slope,函數 f 在原點的斜率。
A 是 amplitude,也就是函數 f 的振幅。A 的值是 1.7159。
-----
# LeNet [1]。
圖十,
說明:
C5 共有 120 點。F6 共有 84 點。OUTPUT 共有 10 點。
i 從 1 到 84。
ai 是 120 點乘上權重再加偏置,成為 84 點其中的一點(還沒經過激活函數)。
xi 是 84 點其中的一點。
-----
# LeNet [1]。
圖十一,輸出。
說明:輸入值不再與權重矩陣相乘,而是與權重矩陣相減。
F6 共有 84 點。OUTPUT 共有 10 點。
i:這裡的 i 是 0 到 9。
j:這裡的 j 是從 1 到 84。
xj:是輸入的點。
wij:是對應 xj 的權重矩陣。wij 是手動選擇且固定(參考 ASCII),至少一開始是。
yi 是 10 點其中的一點。正確的 yi 值會很小。錯誤的值應該要較大。
RBF:Euclidean Radial Basis Function。徑向基函數是一個取值為,到原點或到某點 c 的距離的函數(此處的例子是 84 點的 ASCII 代表中心 c)。歐氏距離,距離的平方和開根號。此處沒有根號是因為要微分方便。
-----
# LeNet [1]。
圖十二,損失函數一。
說明:如果要用這個,W 則設為固定值(ASCII)。
E:Error function。
W:對應 Zp 的待更新的權重矩陣(此處為變數)。
P:一個 iteration 的樣本數,可以是 batch 或 mini-batch。
p:樣本的 index,從 1 到 P。
yDp:十個徑向基單元的某個輸出單元函數(根據第 p 個數字圖片)。
Zp:第 p 張數字圖片(已轉成 84 個 F6 的點)。
-----
# LeNet [1]。
圖十三,損失函數二。
說明:如果要用這個,W 為可訓練。
第二項 log 之後為懲罰項:j:常數。i 為 10 個 RBF 單元去掉正確標籤的單元那 9 個。若 yi(Zp, W) 的值很大,則 error 小,且表示 Zp 離其他九個數字的中心比較遠,達到分離的目的。
根據上面的文章,懲罰項沒有明顯的作用。
-----
https://pixabay.com/zh/photos/mountaineering-man-mountains-455338/
圖十四,下山。
說明:
網路的輸出值跟正確值相減,是誤差函數,假設誤差函數長的像一座山,我們希望經由網路權重的迭代,最後讓誤差很小,趨近於 0,也就是到山腳。只要我們往下山的地方,每次走一小步,最後就會到山腳。
那麼什麼叫做下山的方向?當你跨一步時,如果海拔降低,也就是誤差變小,那麼就是下山的方向。以數學的講法,叫做斜率為負。反之,如果你跨一步,海拔升高,錯誤變大,那是斜率為正。
-----
https://pixabay.com/zh/photos/ama-dablam-himalaya-mountain-peak-2064522/
-----
# LeNet [1]。
圖十六,梯度下降法。
說明:
將 上圖的 x 改成 W,y 改 E(W),就得到梯度下降的更新公式。從 k - 1 到 k 是一次更新的過程。偏導數的符號,代表對每個不同的權重 W 都要做梯度下降。epsilon 是一個常數,代表一定步長。固定步長是最簡單的梯度下降法。
-----
# Guide to convolution [4]。
圖十七,卷積。
說明:
-----
# Guide to convolution [4]。
圖十八,Padding。
說明:
-----
# History DL [3]。
圖十九,激活函數。
說明:
-----
# Deep Learning [2]。
圖二十,線性不可分到線性可分。
說明:
-----
# History DL [3]。
圖廿一,池化。
說明:
-----
# LeNet [1]。
圖廿二,六張特徵圖到十六張特徵圖。
說明:
-----
# Deep Learning [2]。
-----
# Deep Learning [2]。
圖廿三,反向傳播與鍊式法則一。
重點:
z 是 y 的函數,y 是 x 的函數,則 z 對 x 的導數為 z 對 y 的導數乘以 y 對 x 的導數。
說明:
導數是瞬間的變化量。假定 z 是 y 的函數,y 是 x 的函數,則 z 的變化量相當於 z 對 y 的導數乘以 y 的變化量。 y 的變化量相當於 y 對 x 的導數乘以 x 的變化量。所以 z 的變化量相當於 z 對 y 的導數乘以 y 對 z 的導數乘以 x 的變化量。z 對 x 的導數相當於 z 對 y 的導數乘以 y 對 x 的導數。推廣到反向傳播。如果我們要知道損失函數對於某一層某個權重的導數,以用於梯度下降,我們只要從輸出層開始,把每一層的導數相乘,即可求出。也就是附圖公式的第四行。
-----
# Deep Learning [2]。
圖廿四,反向傳播與鍊式法則二。
重點:
重點:z 是 y1, y2 的函數,y1, y2 是 x 的函數,則 z 對 x 的導數為 z 對 y1 的導數乘以 y1 對 x 的導數加上 z 對 y2 的導數乘以 y2 對 x 的導數。
說明:
附圖是一個輸入層與輸出層之外,另有兩個隱藏層的網路。H1 有四個點,H2 有三個點。H2 這三個點,每個點都會受到 H1 這四個點的影響。但是反過來,如果我們要計算 H1 這四個點的導數,則每個點都會影響到 H2 這三個點。所以底下的代碼,有 H1 與 H2 之間的權重矩陣的轉置。
-----
# History DL [3]。
圖廿五,反向傳播與鍊式法則三 。
重要:附圖的符號部分有錯,先修改一下。
Row 1:A Network with L layers。
Row 3:y~ = hL。
Row 4:y~。
Row 5:For l = L to 0 do
重點:(以下五個函數的解釋施工中。。。)
損失函數為 ε(y, y~)。損失函數對 y~ 的導數為 δ。公式中的 y 應該是 y~ 才對。
輸出函數為 hL(小寫的 l 應該是層的變數)。輸出函數的導數為。
層輸出函數(激活函數)為。激活函數的導數為。
權重函數為。權重函數的導數為。
偏置函數為。偏置函數的導數為。
說明:
一,根據梯度下降法,要減低損失函數的值,首先要計算損失函數的梯度。損失函數的值,會被最後一層的輸出所影響。最後一層的輸出,是 hl,也是 y~。
二,delta 是一個暫存的變數。首先計算損失函數對最後一層的梯度。也就是目前這一層的梯度。
三,然後計算對目前這一層的 W 與 b 的梯度。
四,進行梯度下降。
五,將 delta 乘上最後一層對前一層的梯度,然後再放進 delta。跳到三。
-----
圖廿六,反向傳播與鍊式法則四。
重點:(以下五個函數的解釋施工中。。。)
損失函數為。損失函數對輸出函數的導數為(往前一層):
輸出函數為。輸出函數對激活函數的導數為(往前一層):
激活函數為。激活函數對權重矩陣的導數為(往前一層):
權重矩陣為。權重矩陣對權重函數的導數為(在這一層):
權重矩陣為。權重矩陣對偏置函數的導數為(在這一層):
說明:
鍊式法則,求每一層的錯誤函數的導數。一直微,輸出函數在某個 x 的微分值就會跑出來。
一,BP 副程式開始。S 是訓練集,有 M 個樣本。m 是某個樣本的索引。
二,W 是權重矩陣,b 是偏置向量。0 是 iteration 0。L 是神經網路的層數。l 是 L 的索引。
三,錯誤未降低到想要的值就一直做。嘗試夠多次或者進步已經變得很小就停止。
四,O 是輸入值。Y 是實際值。Mb 是 mini batch 的個數。
五,呼叫前向網路,計算每一層的輸出。
六,E 是 error signal。VtL 是最後一層的輸出。t 是 iteration 的索引。這裡會乘以 1,也就是誤差函數對 V 的導數。
七,G 是 E 的暫存變數。
八,從第 L 層開始逐步更新權重。
九,計算權重矩陣的導數。倒三角形是一個向量微分算子,稱為 Del 算子或 Nabla 算子,目的在各個維度取偏微分。此處的轉置矩陣的值是根據連鎖定律,乘上 f(wa+b) 對 w 的導數 a,也就是上一層的輸出 v。轉置放後面是要維持矩陣的維度。
十,計算偏置的導數。根據連鎖定律,乘上 f(wa+b) 對 b 的導數 1,也就是維持原狀。
十一,權重更新。epsilon 是梯度下降的常數。
十二,偏置更新參考十一行的權重更新。
十三,錯誤透過權重矩陣向前傳遞。此處的轉置矩陣放前面是要維持前一個向量的維度。
十四,如果不是第一層的話,
十五,Z 是每一層的輸出,Z(L) = f(W(L)Z(L-1)+b(L))。錯誤要乘上每一層輸出函數的微分值再放入暫存變數,以便向前傳遞。
十六,結束 if。
十七,結束 for。
十八,結束 while。
十九,完成一次整個網路的權重更新。
二十,局數 BP 副程式。
圖片來源:2015_Automatic speech recognition, a deep learning approach - Chapter 4: Deep Neural Networks, pp. 57-77.
-----
# Deep Learning [2]。
圖廿七,非線性激活函數,鍊式法則,(梯度下降)反向傳播。
說明:
-----
Python 實作
https://github.com/feiyuhug/lenet-5
https://github.com/HiCraigChen/LeNet/tree/master/LeNet
-----
References
-----
◎ 論文
-----
[1] # LeNet。被引用 31707 次。經典的卷積神經網路,主要比 HDR 多了全連接層。
LeCun, Yann, et al. "Gradient-based learning applied to document recognition." Proceedings of the IEEE 86.11 (1998): 2278-2324.
http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf
[2] # Deep Learning Paper。
LeCun, Yann, Yoshua Bengio, and Geoffrey Hinton. "Deep learning." nature 521.7553 (2015): 436-444.
https://www2.cs.duke.edu/courses/spring19/compsci527/papers/Lecun.pdf
[3] # History DL。
Alom, Md Zahangir, et al. "The history began from alexnet: A comprehensive survey on deep learning approaches." arXiv preprint arXiv:1803.01164 (2018).
https://arxiv.org/ftp/arxiv/papers/1803/1803.01164.pdf
[4] # Guide to convolution
Dumoulin, Vincent, and Francesco Visin. "A guide to convolution arithmetic for deep learning." arXiv preprint arXiv:1603.07285 (2016).
https://arxiv.org/pdf/1603.07285.pdf
-----
◎ 英文
-----
[5] Neural Networks, Manifolds, and Topology -- colah's blog
https://colah.github.io/posts/2014-03-NN-Manifolds-Topology/
-----
◎ 簡中
-----
[6] 深度学习中偏移项bias的作用_zeng_haoyu的博客-CSDN博客
https://blog.csdn.net/hy13684802853/article/details/78717475
-----
◎ 繁中
-----
[7] 奇異值分解 (SVD) | 線代啟示錄
https://ccjou.wordpress.com/2009/09/01/%E5%A5%87%E7%95%B0%E5%80%BC%E5%88%86%E8%A7%A3-svd/
[8] Activation function 到底怎麼影響模型? - Dream Maker
https://yuehhua.github.io/2018/07/27/activation-function/
[9] The Star Also Rises: AI 從頭學(九):Back Propagation
http://hemingwang.blogspot.com/2017/02/aiback-propagation.html
[10] The Star Also Rises: AI 從頭學(一二):LeNet
http://hemingwang.blogspot.com/2017/03/ailenet.html
[11] The Star Also Rises: AI 從頭學(一三):LeNet - F6
http://hemingwang.blogspot.com/2017/03/ailenet-f6.html
[12] The Star Also Rises: 深入淺出 Deep Learning(二):LeNet & BP
http://hemingwang.blogspot.com/2018/02/deep-learninglenet-bp.html
[13] The Star Also Rises: AI 三部曲(深度學習:從入門到精通)
http://hemingwang.blogspot.com/2019/05/trilogy.html
[14] The Star Also Rises: 全方位 AI 課程(精華篇)
http://hemingwang.blogspot.com/2020/01/all-round-ai-lectures-highlight.html
-----
No comments:
Post a Comment