【寫給小白的機器學習入門包】Facebook 員工親自講解:CNN 到底是什麼? | TechOrange


【為什麼我們要挑選這篇文章】大家都知道機器學習很重要,但該從何學起?這篇「機器學習入門文」由 Facebook 員工親自撰寫,他用簡單易懂的道理,解釋何謂卷積神經網路(CNN),帶你了解現在深度神經網路發展領域的主力。(責任編輯:藍立晴)

本文經 AI 新媒體量子位(公眾號 ID:QbitAI)授權轉載,轉載請連繫出處

作者:量子位

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

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

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

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

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

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

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

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

MNIST 手寫數字分類

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

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

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

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

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

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

什麼是卷積神經網路?

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

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

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

1. 將濾波器疊加在圖像的某個位置上。

2. 在濾波器中的值和圖像中的相應值之間進行元素乘法。

3. 將所有元素的乘積相加。這個和就是輸出圖像中的目標像素的輸出值。

4. 對所有位置重複進行。

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

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

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

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

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

得出結果 62-33=29。

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

卷積有什麼用?

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

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

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

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

是不是有點感覺了。

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

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

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

填充

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

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

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

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

卷積層

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

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

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

池化層

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

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

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

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

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

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

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

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

softmax 層

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

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

什麼是 Softmax 函數?

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

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

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

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

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

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

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

可以私戳下方超連結了解更多哦~

傳送門:
【victorzhou 1】:CNNs, Part 1: An Introduction to Convolutional Neural Networks
【victorzhou 2】:A Simple Explanation of the Softmax Function

(本文經 AI 新媒體量子位 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈什么是 CNN?写给小白的机器学习入门贴,Facebook 员工打造,47k 访问量 〉。)

延伸閱讀

【機器學習懶人包】從數據分析到模型整合,各種好用的演算法全都整理給你啦!
上班族自學 Python、機器學習寶典!Kaggle 全新免費課程教你快速入門,且馬上能應用
在家從零自學沒問題!22 歲數據工程師大推 3 本必看的機器學習入門書



Do NOT follow this link or you will be banned from the site!