Saturday, April 10, 2021

LeNet(三):Illustrated

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://zhenglungwu.medium.com/%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92%E7%AC%AC%E4%B8%80%E6%AD%A5-%E5%AF%A6%E4%BD%9C-lenet-5-4fea97e121d1

根據上面的文章,懲罰項沒有明顯的作用。

-----


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]。

圖廿七,非線性激活函數,鍊式法則,(梯度下降)反向傳播。

說明:

-----

Keras 實作
-----
keras 實現常用深度學習模型 LeNet,AlexNet,ZFNet,VGGNet,GoogleNet,Resnet
-----

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: