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:
Post a Comment