2017年1月22日 星期日

[深度學習練習] [Deep Learning Practice] 神經網路入門(四)- 卷積神經網路 X 基礎

這一集分享一下卷積神經網路 ( Convolutional Neural Network )

卷積神經網路是深度學習底下的一個分支,

對於圖像處理有很強大的分析能力。

------------------------------------------------------------------------------------------------------------

一、卷積神經網路介紹

卷積神經網路起源於 D. H. Hubel and T. N. Wiesel 這兩個人,

當初他們研究貓的大腦對外部感知的方法,

而發現局部感知 ( Partial connection ) 對於事物的判斷是很有幫助,

進而提出卷積神經網路。

聽起來很繞口,其實概念很簡單,

卷積神經網路提供了一個幫助人工智慧學習東西的新方法,

這個方法的概念就是,看事情要看重點,要會抓重點學習

可能有點抽象,讓我舉個例子,

假設我們現在要處理「機器判斷一張圖片是否為男性」的問題。



















* 這個人是特斯拉,少了他,現代科技將變得又貴又不科技。



回想我們上一集寫的基本神經網路,機器將會如何判讀?

機器將會經過一層又一層的運算,對每一個 pixel 內的事物

都給予最佳化的權重,並且做出判斷,但這樣是非常沒有效率而且較容易誤判的。



假如今天是 1024 * 1024 的圖片,輸入就會變成 1000000 這種量級的向量,

那麽在做最佳化的時候,就會需要很強大的運算能力。

再者,我們人類一看到這張圖的時候,會直接把重點放到臉上

而非像基礎神經網路一樣,一小格一小格看,失去完整訊息。



人類在判斷問題「是否為男性」後,我們會去找到鬍子的特徵,然後判斷他為男性。

( 當然寫得好的演算法,甚至還能藉由顴骨高低、額長寬比或其他特徵判斷。 )

所以,我們希望機器也可以像我們一樣,能一次看到多一點東西,

因此,卷積神經網路就誕生了。

------------------------------------------------------------------------------------------------------------

二、卷積的方法 - filter

那麼要如何讓機器變得有效率又能一次看多一點東西呢?

一次看大塊一點,不要一個一個 pixel 地看,哈哈哈!















* 為了方便講解,我們假設這張圖是 16 * 11 pixel 的圖片,左下角是座標 ( 0, 0 )。



試想,如果我們只看上圖的座標 (5, 9),應該很難判斷是鬍子吧?

但如果給我看座標 (4, 8)、(5, 8)、(6, 8)、(4, 9)、(5, 9)、(6, 9) 所組成的大方格,

我們就可以很容易判斷,這是個男人的照片了,對嗎?



卷積就是這樣,我們把一個具備長寬高的圖片,

(長與寬分別代表圖片的長與寬,高則代表單一方格的額外特徵,通常是顏色 rgb)

經由一個 filter 也就是貓論文中的 receptive field 轉換成另一張全新的圖片。

大概像下圖一樣,
















我們把這個過程解釋一下,

我們用 2*3 size 的 filter,對這張圖片做卷積,每次往 X方向跨一格,

Y方向則是兩格,而得到了一個新圖片。

可以算一下,這個新圖片將是幾乘幾的矩陣呢?

8 * 9 <- 確實是可以減少運算的複雜度

經過多次的矩陣運算 (maxpooling layer or convolutional layer),

我們可以將圖片的特徵抽象化出來,讓機器判斷。



不難想像,當 filter size 不同,或是每一次跨步大小不同,

都可以影響抽取出來的特徵的長相,

所以 filter size 和 每一次跨步大小 都是到時候寫卷積神經網路時,非常重要的參數。




以下這個範例,給大家看看一台車經過卷積後,會被抽象化成什麼樣子。













所以,對人腦來說,讓我以 2*3 的 filter 看到那鬍子那一格,

我就能判斷是男性,

但對於機器來說,他可能經過 3 層不同大小 filter 的卷積層後,

看到鬍子那一格被轉換成 [ 0 0 1 0 0 1 0 1] 這樣一維矩陣後,

而判斷,這是男性。



希望分享到這,大家可以大概感受到什麼是卷積神經網路,

總結一下,卷積神經網路就是藉由 filter 來抽取圖片的特徵,

因為基本的神經網路,只能一次看一個小方格,而對於事件無法有深刻的認識,

但藉由 filter,我們不僅能加快運算速率,也可以更快發現重點,

而這種藉由 filter 轉換的過程,也叫做局部感知 ( Partial connection )



除了 filter 以外,卷積神經網路也會用 Relu 和 Maxpooling 等方法來增加判別率,

下一章寫數字判讀實作的時候,再一起分享。

------------------------------------------------------------------------------------------------------------

Reference

[1] Practical Machine Learning Problem

[2] 圖解機器學習

[3] Coursera - Machine Leanring 

[4] A tour of machine learning algorithms

沒有留言:

張貼留言