Tuesday, August 29, 2017

AI從頭學(代序):The Road to Deep Learning

AI從頭學(代序):The Road to Deep Learning

2017/08/29

有關 Deep Learning,或者 AI,如果想瞭解的話,我建議你不要看一般的介紹, 看再多都是假的!

直接看論文吧,有我先讀過一遍,我相信你至少會輕鬆很多!:)

-----


Fig. 1. 公路車下劍南路.

-----

1. BP、LeNet。首先是 BP 跟 LeNet [1], [2]。

2. RNN。然後是 RNN 跟 LSTM [3]。

3. CNN。再回到 LeNet / CNN,[4], [5] 告訴你有哪些 CNN 是值得注意的。

4. R-CNN。還有 R-CNN 系列,在 [4] 後半部,一開始我完全不知道這是什麼。更新的 R-CNN 系列,在我整理的大全集 [6] 裡面的 [7] 這份名單裡也更新了。

5. Framework。到了這裡,如果你終於要進入「實戰」,Caffe 是個好選擇,Caffe 之外的框架,有興趣就自己看看吧 [8]!

以上是我的自學之路的「精華」,更多的部分,可以參考 [9],祝您一路順風。

-----

References

[1] AI從頭學(九):Back Propagation
http://hemingwang.blogspot.tw/2017/02/aiback-propagation.html

[2] AI從頭學(一二):LeNet
http://hemingwang.blogspot.tw/2017/03/ailenet.html

[3] AI從頭學(一九):Recurrent Neural Network
http://hemingwang.blogspot.tw/2017/03/airecurrent-neural-network.html

[4] 書名:深度學習: Caffe 之經典模型詳解與實戰,ISBN:7121301180,作者:樂毅, 王斌,出版社:電子工業出版社,出版日期:2016-12-01.

[5]  AI從頭學(一八):Convolutional Neural Network
http://hemingwang.blogspot.tw/2017/03/aiconvolutional-neural-network_23.html 

[6] AI從頭學(三四):Complete Works
http://hemingwang.blogspot.tw/2017/08/aicomplete-works.html

[7] Deep Learning Papers Reading Roadmap
https://github.com/songrotek/Deep-Learning-Papers-Reading-Roadmap/blob/master/README.md 

[8] Lab DRL_02:深度學習框架
http://hemingwang.blogspot.tw/2017/06/lab-drl02.html  

[9] AI從頭學(目錄)
http://hemingwang.blogspot.tw/2016/12/ai_20.html

Monday, August 07, 2017

AI 從頭學(三七):Weight Decay

AI 從頭學(三七):Weight Decay

2017/06/22

前言:

你用一小撮資料來建立一個模型,以便用於預測大量資料。模型建的太好(符合這一小撮資料),在大量資料的表現,難免變的較差。錯一點,但不要錯太多,這就是 weight decay 的精神。

-----

Summary:

Regularization 是一些避免 overfitting 的方法的總稱,weight decay 是最簡單的方法之一 [1]。 本文蒐集了一些相關資料用來輔助理解 [2]-[5],最後是 noise 及一些相關的討論 [6], [7]。

-----

本文藉著下列問題來說明 weight decay。

Q1:Overfitting 是什麼?
Q2:Regularization 有那些方法?
Q3:多項式的 fitting 與類神經網路的 fitting 有何不同?
Q4:Weight decay 裡的懲罰項是什麼意思?
Q5:梯度不出現是什麼意思?
Q6:Weight decay 的微分方程版?
Q7:Weight decay 的差分方程版?
Q8:Noise 的影響? 

-----

Q1:Overfitting 是什麼?

機器學習有很大的比例是用一小群資料建立模型,再用模型來處理大規模的資料。在訓練模型時,如果考慮的太細,會使訓練結果很好,但測試結果不理想,這個就叫 overfitting。以圖1a為例。訓練不足變成直線,訓練過度是高次方的多項式,理想的結果是一個二次的拋物線。


Fig. 1a. A high-degree polynomial regression model, p. 119 [1].

-----

Q2:Regularization 有那些方法?

本文要介紹的 weight decay 是一種,early stopping 是一種,dropout 也是一種,參考圖1b。這些在 [4], [5] 裡有清楚的簡介。



Fig. 1b. Regularization for deep learning [1].

-----

Q3:多項式的 fitting 與類神經網路的 fitting 有何不同?

其實是很類似的,不過類神經網路更複雜一些。

圖2a是一個多項式,要注意的是,如果你的 weights 很大,就會產生一堆曲線跟複雜的結構,因為你把不重要的 noise 資料都考慮到了,參考圖2b。


Fig. 2a. Polynomial curve fitting, p. 9 [2].



Fig. 2b. A polynomial with an excess of free coefficients, p. 338 [2].

-----

Q4:Weight decay 裡的懲罰項是什麼意思?

要做 weight decay,首先在原來的 loss function 加入一個懲罰項 Ω ,另外還有調節的係數 ν 。參考圖2c。

理論上,loss function 的值越小越好,因為你希望模型越準確越好,可惜在訓練時,你的資料只是一小撮。error 非常小,你就 overfit 、無法處理未來的一大堆測試資料集。Loss function 加入懲罰項,你就沒那麼準。懲罰項的係數是重點。係數太小,甚至是0,你等於麼都沒做,如同圖1a的右邊。係數太大,懲罰過度,如圖1a的左邊。適合的係數,經驗上譬如0.0001,會像是圖1a的中間。

懲罰項一般取權重的平方和,如圖2d。係數1/2是方便微分後跟二次方相乘變成1。懲罰項為 w^2,會避免 w 太大。為什麼?因為 Loss function 的值要越來越小,w 當然也要傾向於越來越小。

最後的結果是 fitting the data 與 minimizing Ω的 妥協,為什麼?因為你希望 Ω 越小越好,可是太小又會 overfitting 了,參考圖2e。


Fig. 2c. Adding a penalty to the error function, p. 338 [2].



Fig. 2d. Sum of the squares, p. 338 [2].



Fig. 2e. Compromise, p. 338 [2].

-----

Q5:梯度不出現是什麼意思?

圖3a講解了 weight decay 的原理。這個解釋不大清楚,但可以先看一下。

最後它提到:如果梯度不出現,則這個方程式會導致權重成指數式的下降,參考圖3b。

太不清楚了,但是這個問題可以好好想想。



Fig. 3a. Adding a term to the cost function that penalizes large weights, p. 2 [3].



Fig. 3b. If the gradient were not present, p. 2 [3].

-----

Q6:Weight decay 的微分方程版?

圖4a又介紹了一次 regularization 跟 weight decay,重點在圖4b的運算。這邊把式子列出,解微分方程後,得到 w 在連續時間 τ 上是一個指數函數,所以如果 τ 越來越大,w 就呈指數下降,在梯度不見(也就是原來的 loss function 無法藉著梯度更新時)時,還是可以持續更新 w。 這個也就是 weight decay。



Fig. 4a. Regularization, p.353 [2].



Fig. 4b. Weight decay, p. 354 [2].

-----

Q7:Weight decay 的差分方程版?

這邊又把 weight decay 整個講過一遍,參考圖4c。

做完後,在原來的梯度更新之前,w 會先乘上一個小於 1 的係數。這個就是 weight decay。

梯度等於0時,也就是無法藉由更新梯度而有更好的結果時,權重就指數式變小,以致於消失,類似人的神經系統,參考圖4d。



Fig. 4c. Closer to zero, p. 34 [4].



Fig. 4d. Pruning out useless links, p.36 [4].

-----

Q7:Goodfellow 的版本?

圖5是 Goodfellow 的版本,相信已經不用再講一遍了!



Fig. 5a. Mean squared error, p. 108 [1].



Fig. 5b. Adding a regularization term, p. 231 [1].



Fig. 5c. Total objective function, p. 119 [1].



Fig. 5d. Weight decay, p. 231 [1].

-----

Q8:Noise 的影響?

圖6a列出四種 noise。有特別的權重表示可以讓小的 weights 非常快變小,對比比較大的 weights,這也就相等於 reinforcing large weights and weakening small weights,參考圖6b。

圖7則是一些關於 weight decay 較經典的研究。



Fig. 6a. Four types of noise, p. 1127 [6].



Fig. 6b. Reinforcing large weights and weakening small weights, p. 1128 [6].



Fig. 6c. Decaying small weights more rapidly than large weights, p. 1128 [6].



Fig. 7. Historical references of weight decay, p. 92 [7].

-----

結論:

Weight decay 與 early stopping、dropout,都是避免 overfitting 常用的方法,而 weight decay 算是最基本的。

-----

References

[1] 2016_Deep Learning

[2] 1995_Neural Networks for Pattern Recognition

[3] 1992_A simple weight decay can improve generalization

[4] DNN tip
http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2016/Lecture/DNN%20tip.pdf

[5] ML Lecture 9  Tips for Training DNN - YouTube
https://www.youtube.com/watch?v=xki61j7z-30

[6] 1998_Weight decay backpropagation for noisy data

[7] 2015_Deep learning in neural networks, An overview

Thursday, August 03, 2017

AI 從頭學(三一):Inception

AI 從頭學(三一):Inception

2017/08/03

前言:

知其然,也要知其所以然!

-----

Summary:

GoogLeNet [1] 主要的靈感來自 [2],實務上的應用則參考 Network in Network [3]。

之前寫的幾篇文章主要是 GoogLeNet 如何運作 [4]-[6],但它設計的原理,雖然看了好幾次 [2],無奈並不容易看懂,一直到最近重新查詢 [2] 的標題,找到相關的中文文獻 [7],才得以徹底瞭解 [1] 的設計原理。

-----

圖1.1是Inception 3a 與 3b。

圖1.2則是 3a 與 3b 綠色的部分:DepthContact。

作者把圖1.1重點的部分加上紅框,在原理講解完後再講解這三個紅框作用為何。


Fig. 1.1. Inception 3, p, 6 [1].



Fig. 1.2. DepthConcat [5].

-----

首先是 GoogLeNet 的靈感來源 [2] 的靈感來源:Hebbian rule。

其大意是:相關性高的節點應該要綁在一起。參考圖2.1。

根據這個原理,[2] 藉著觀察特徵之間的相關性,一層一層地重新建造網路。參考圖2.2。

這一段跟 GoogLeNet 關係為何?很難理解,什麼叫做「特徵的相關性」?如何計算?

不過沒關係,隨著資料的開展,我們會知道什麼叫做「特徵的相關性」。



Fig. 2.1. Hebbian rule, p. 3 [2].



Fig. 2.2. Observing correlations, p. 1 [2].

-----

[2] 的主要結果說明:如果資料集的機率分布可以表現為一個大型的極稀疏網路(CNN結構上就很稀疏,全連接層則很稠密),那麼最佳的網路拓樸可以藉著分析前一層作用的關連統計與高相關輸出的群聚神經元一層一層重新建造。參考圖3.1。

很像繞口令吧,這幾段話我看了很多次,一點都無法理解這個跟 GoogLeNet 關係在哪?

不過 GoogLeNet 毫不客氣地引用 [2] 的結果,試著用一個稠密的現成單元來近似 [2] 的稀疏結構,這個單元也就是 Inception。



Fig. 3.1. Analyzing the correlation statistics, p. 2 [1].



Fig. 3.2. Dense, readily available components, p. 3 [1].

-----

這裡直接引用一段話(圖4.1) :

「因此一個「好」的稀疏結構,應該是符合Hebbian原理的,我們應該把相關性高的一簇神經元節點連接在一起。在普通的數據集中,這可能需要對神經元節點聚類,但是在圖片數據中,天然的就是臨近區域的數據相關性高,因此相鄰的像素點被卷積操作連接在一起。而我們可能有多個卷積核,在同一空間位置但在不同通道的卷積核的輸出結果相關性極高。因此,一個1´1的卷積就可以很自然地把這些相關性很高的、在同一個空間位置但是不同通道的特徵連接在一起,這就是為什麼1´1卷積這麼頻繁地被應用到Inception Net中的原因。 」[7]

重點就是:臨近區域的數據相關性高。

這個鄰近區域,被卷積核把高相關性萃取出來,3x3 視野較小,5x5 視野較大,另外還有 max pooling 也是一種參考來源。至於平面上的同一位置、不同通道的,相關性也極大,則由 1x1 綁在一起,這就是上面圖1.1紅框代表的 1x1 跨通道作用。

另外 3x3 與 5x5 前面的 1x1 作用則是降維。

Conv1 的作用在於把 圖1.2的DepthCancat 以及 Maxpooling 作 「fire together」,另一個作用是 Conv3 與 Conv5 前面的降維。



Fig. 4.1. 鄰近區域的數據相關性高 [7].

-----

藉由以上的說明,我們就可以讀懂圖4.2這一大段話,以及圖3.2,GoogLeNet 用 Inception 這個架構重覆構築圖片分類的網路。

FB網友對 [7] 的觀點,與圖4.2相同。

許傅鈞:這一篇的確主要是參考Provable那篇,但Googlenet並沒有先去找高度相關的節點做clustering,而是直接設定一個網路結構然後開始訓練。



Fig. 4.2. Implementing Hebbian rule with 1x1 convolutions, p. 3 [1].

-----

結論:

重點就是:臨近區域的數據相關性高。不管是平面上,還是通道之間。

這段話或許是影像處理的「常識」,因為論文中並未提到。

-----

許傅鈞:相鄰影像的相關性是從神經科學對眼睛reception field的特性得來的。的確近代文章已經把它當作不用推導的特性

-----

References

[1] 2015_Going deeper with convolutions

[2] 2014_Provable bounds for learning some deep representations

[3] 2014_Network in network

[4] AI從頭學(二八):Network in Network
http://hemingwang.blogspot.tw/2017/06/ainetwork-in-network.html

[5] AI從頭學(二九):GoogLeNet
http://hemingwang.blogspot.tw/2017/06/aigooglenet.html

[6] AI從頭學(三0):Conv1
http://hemingwang.blogspot.tw/2017/06/aiconv1.html

[7] 深度學習之四大經典CNN技術淺析 硬創公開課 香港矽谷
https://www.hksilicon.com/articles/1280725