Wednesday, May 17, 2017

AI 從頭學(二三):CNN - Kernel Training

AI 從頭學(二三):CNN - Kernel Training

2017/05/17

關於 LeNet [2],我看了好幾個月,一直無法實作,其中之一是因為關鍵的 filter / kernel 不知如何設定。這個算是被之前影像處理的概念限制住了。總之,在偶然的機會發問後,瞭解到原來 filter / kernel 的初值是隨機指定(uniform distribution),後面再用 BP 調整。

3/30 獲得解答。接下來是 4/12 LeNet 實作團開動 [5]。前幾天有同學完成期末作業。為期一個月左右的 LeNet 實作團暫時告一段落!我原本的希望是可以比較不同人訓練出來的 filter / kernel 會不會差不多,理論上應該是,但沒看到,總是遺憾!

回過頭來再看論文 [6],其實很快就要來台灣的作者是有提到的:

C1 contains 156 trainable parameters.

(5 x 5 + 1) x 6 = 156.

-----

2017/03/30

我對實作 CNN,filter 的選擇很有興趣,有人願意討論一下嗎?

Jason Tsai: Filter (kernel, 也就是 weight) 裡面的值(設定)是訓練出來的,不要跟一般的 filter 概念搞混了!

(size, number 可以選擇)

-----


Fig. 1. Filter / Kernel Training [1].

-----

起因是看了一位朋友的教學文章,主題是使用 Tensorflow 實作卷積神經網路 [1]。由於之前我研究 LeNet 時,查到的參考文獻都沒提到 filter 的長相 [2],所以就到 FB 的 AI 社團裡發問 [3],沒想到一下子就獲得解答了。AI 社團也是一種 AI 網絡啊!

回頭又看了一下 convolution 的計算 [4],雖然 filter / kernel 要設定初值,但卷積核的元素,以 5x5 為例,其實就是 25個 weights。這些 weights 在神經網路裡是要被 BP 訓練的,也就是 Jason 所說的,filter / kernel / weight 是訓練出來的。

感謝所有參加討論的社團成員!

-----

5則留言:

(一)

Bi-Ruei Chiu: 從前修過數位影像處理,看到那個 filter 第一個想到的是二維的濾波器,只是從圖示中的參數,看不太出來它是高通濾波器、低通濾波器、還是 edge detection 用的 sober filter ......

如果用 matlab 畫一下它的二維頻率響應,或許可以看出一點端倪。

其實當看到 convolution layer 的時候,我想到都是像傳統影像處理的東西,例如:2D-filtering、edge detection、histogram equalization、 filter bank... 又被 "偷偷" 放回神經網路裡。

二十多年前 P.P.V. 和林源倍教授有一篇 2D filter bank review 或許可以從中間得到一點靈感。

http://web.it.nctu.edu.tw/~ypl/Publication/A/5.pdf

-----

(二)

林暐翔: 請問是指filter size的選擇嗎?

Marcel Wang: type的選擇

Jason Tsai: Weight (filter/kernel) 是 train 出來的

-----

(三)

Eric Yang: 我想問一個問題,為什麼這套東西 要叫做Tensor Flow 跟我認識的Tensor 和 Flow 都沒有關係的樣子。。。

Bi-Ruei Chiu: IMHO, Tensor -> 底層有一堆矩陣和向量內積外積 blah...blah... 的運算......

Eric Yang: 我只看到conv

Eric Yang: 這比微分幾何還弱。。

Jason Tsai: "Tensor" 這裡指的是三軸/維度(含)以上的 data array。TensorFlow 借用了 directed computational graph (有向計算圖) 來規劃數值計算,代表 data 的計算 "Flow"。

Eric Yang: 有點感覺了 多謝指點

Eric Yang: Bi-Ruei Chiu 多謝

-----

(四)



Marcel Wang: 目前我最有興趣的是CNN主要使用哪些filters,以及這些filters孰優孰劣,其背後機制為何?



Marcel Wang: 無法證明嗎?也許只是還沒人做而已。

魏澤人: 有關 DNN 的正確性的一個面相,有一篇,可以參考 https://www.facebook.com/0DHARMA0/posts/725203530984322

Jason Tsai: Filter (kernel, 也就是 weight) 裡面的值(設定)是訓練出來的,不要跟一般的 filter 概念搞混了!

Marcel Wang: Jason Tsai 所以只有 size ,沒有 type ?



Jason Tsai: The important thing about kernel itself is its size and the number in each convolution layer.



Marcel Wang: 7x7, 5x5, 都可分解成 3x3



顏志翰: hello, Rot(W_{i,j}= W_{-i,-j} 就我的理解應該是因為kernel的最中間當(0,0) 其餘做shift,所以左上(-1,-1)旋轉180度就到(1,1的位置),應該是這樣吧!



顏志翰: 就好像在影像處理中,對convolution的推導都會先假設mxn filter 中m,n為奇數,比較方便推導summation,所以實現上遇到偶數就要另外計算了!!我沒像你們這麼厲害,實際代數字手推這麼多case!聽起來好複雜!

Jason Tsai: Kernel size 並不見得愈小愈好,過小會有特徵不足的問題。

-----

(五)

李昶輝: YOLOv2 Object Detection 把最後一層 cnn feature map 視覺化的結果 供參考 https://youtu.be/vw1R5JXvXi0

Marcel Wang: 這個厲害!

Jason Tsai:https://aiexperiments.withgoogle.com/visualizing-high-dimensional-space

汪楚剛: 這個問題每半年就會有人問一次,上次是我,也是jason出來解答的,好像是在Tensorflow Taiwan的社團

汪楚剛: 另外,你可以參考DeepLearningBook的Chapter 9.9 Random or Unsupervised Features,會有一些意外的收穫

-----

References

[1] 阿布拉機的3D列印與機器人  深度學習(2)--使用Tensorflow實作卷積神經網路(Convolutional neural network,CNN)
http://arbu00.blogspot.tw/2017/03/2-tensorflowconvolutional-neural.html

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

[3] 我對實作 CNN,filter 的選擇很有興趣,有人願意討論一下嗎?
https://www.facebook.com/groups/Taiwan.AI.Group/permalink/1803896623266104/

[4] 2002_Tutorial on Convolutions – Torch

[5] LeNet實作團(目錄)
http://hemingwang.blogspot.tw/2017/04/lenet.html 

[6] 1998_Gradient-Based Learning Applied to Document Recognition

No comments: