啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

白交 發自 凹非寺
量子位 報道 | 公眾號 QbitAI

看你是人還是物,是貓還是狗。

卷積神經網絡(CNN)最重要的用途就是圖像分類。說起來,似乎很簡單。

為什麼不使用普通的神經網絡呢?

那是因為在圖像分類時,面臨著圖像大,物體的形態、位置不同等問題,這就給普通的神經網絡帶來了難題。

而,卷積神經網絡就是來解決這個問題。

Facebook軟件工程師Victor Zhou這篇入門貼,就介紹了什麼是卷積神經網絡。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

截至目前,已經有47k訪問量了。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

已經對神經網絡有所瞭解的同學,一起來看看吧。

MNIST手寫數字分類

首先,就以MNIST手寫數字分類為例,這就是MNIST數據集的樣本。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

很簡單,就是識別圖像,然後將其分類為數字。

MNIST數據集中的每個圖像均為28×28,我們看到,都是居中的灰度數字。

正常的神經網絡其實就可以解決這個問題,首先將每張圖像視為28×28=784維向量,將784維送到一個784維的輸入層,堆疊幾個隱藏層,然後用10個節點的輸出層來完成,每個數字1個節點。

但這些數字居中,且圖像較小,所以也就沒有尺寸大、位置偏移的問題。但是我們知道實際生活中,情況並非如此。

好了,有了一個基本的瞭解之後,我們就進入了這個卷積神經網絡的世界吧。

什麼是卷積神經網絡?

顧名思義,卷積神經網絡就是基本上只是由卷積層組成的神經網絡,卷積層是基於卷積的數學運算。

而卷積層是由一組濾波器組成,你可以將其視為二維矩陣的數字。比如,這是一個3×3濾波器。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

將輸入圖像與濾波器結合卷積生成圖像,這其中包括:

  1. 將濾波器疊加在圖像的某個位置上。
  2. 在濾波器中的值和圖像中的相應值之間進行元素乘法。
  3. 將所有元素的乘積相加。這個和就是輸出圖像中的目標像素的輸出值
  4. 對所有位置重複進行。

這樣說,可能有些抽象看不太懂。沒關係,例子這就來了。

我們以一個微小的4×4灰度圖像和一個3×3的濾波器為例。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

圖像中的數字就是我們日常見到的像素強度,其中0為黑色,255為白色,我們的輸出設置成為、一個2×2的輸出圖像。

首先,將我們的濾波器疊加到圖像的左上位置。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

接著,將兩個值(圖像值和濾波器值)進行逐元素相乘。得到了如下的表格:

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

得出結果62-33=29。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

以此類推,就可以得到2×2圖像的數值。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

卷積有什麼用?

我們先把卷積的用途放一下,來看圖。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

這不就是剛剛3×3的濾波器嗎?其實它還有一個專業的名字——垂直Sobel濾波器,對應的還有一個水平Sobel濾波器,就是中間橫著的一行數字為0。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

其實,Sobel濾波器是邊緣檢測器,垂直Sobel濾波器是檢測垂直邊緣,而水平Sobel是檢測水平邊緣。

這麼說,可能不太明顯。我們來看圖。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

是不是有點感覺了。

試想,如果兩個濾波器都是用了,卷積是不是就能抓住圖像的邊緣特徵了。

輸出圖像中的亮像素說明了原始圖像的周圍又很強的邊緣。

這樣一來,卷積就可以幫助我們尋找特定的局部圖像特徵,比如邊緣。

填充

通常來說,我們其實都希望輸出圖像能夠跟原始圖像的大小相同。但在上面的示例中,我們是以4×4圖像為輸入,以2×2圖像為輸出,那應該怎麼解決這個問題呢?

填充。這時候就要談到0的妙用了。

就是要在圖像周圍添加一圈“0”,而濾波器則也需要填充1個像素。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

這樣,輸出跟輸入的圖像具有相同的尺寸,叫做相同填充

卷積層

卷積層就包含了上述的一組濾波器,卷積層的主要參數就是濾波器的數量。

對於MNIST CNN,如果使用帶有8個濾波器的小型卷積層,那麼輸入為28×28,輸出結果就變成了26×26×8 。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

(因為是有效填充,它將輸入的高度和寬度將減少2)

池化層

圖像中的相鄰i像素往往都有相似的值,而經過卷積層也就能在相鄰像素中產生了相似的值。這樣就會導致卷積層輸出的很多信息都是多餘的。

就如上述的負責邊緣檢測的濾波器,它能夠在某個位置上找到較強的邊緣,但是從很可能在其相鄰的一個像素也能找到較強的邊緣,這樣就造成了兩個相同的邊緣同時存在。

這樣的話,就造成了信息的冗餘,不會發現新的信息。

池化就解決了這個問題。池化,就是通過將輸入中的值集中在一起,減少輸入的大小。

通常,是通過一個簡單的操作來完成的,比如取max、min或平均值。

下面是一個最大池化層的例子,池化大小為2的最大池化層。為了執行最大池化,以2×2塊遍歷輸入圖像,並將最大值放入對應像素的輸出圖像中。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

池化將輸入的寬度和高度除以池大小。

比如,對於我們的MNIST CNN,我們將在初始轉換層之後立即放置一個池大小為2的最大池化層。池化層會將26x26x8輸入轉換為13x13x8輸出。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問


softmax層

實際上,最終完成CNN,還需要賦予其預測的能力。

那麼,將通過使用多類分類問題的標準最終層:Softmax層,這是一個完全連接(密集)的層,它使用Softmax函數作為其激活的全連接(密集)層。

什麼是Softmax函數?

給定一些數字,Softmax函數就能將任意數字轉化為概率。

比如,我們選定數字 -1、0、3和5。

首先,我們需要計算e的指定數字次方,然後將其所有結果相加,當作分母。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

最後,e的指定數字次方的值就作為分子,由此計算可能性。

啥是CNN?寫給小白的機器學習入門貼,Facebook員工打造,47k訪問

而以MNIST CNN為例,將使用帶有10個節點的softmax層作為CNN的最後一層,每個數字代表一個數字。層中的每個節點將連接到每個輸入。

應用softmax變換後,由節點表示的概率最高的數字將是CNN的輸出了。

好了,介紹了這麼多。是不是能夠很好的理解卷積神經網絡了呢?

可以私戳下方鏈接瞭解更多哦~

傳送門:

https://victorzhou.com/blog/intro-to-cnns-part-1/

https://victorzhou.com/blog/softmax/

— 完 —

量子位 QbitAI · 頭條號簽約

關注我們,第一時間獲知前沿科技動態


分享到:


相關文章: