機器學習Basics-第九期-CNN卷積神經網絡詳解

機器學習Basics-第九期-CNN卷積神經網絡詳解

背景

本系列已經經過八期,已經涉及到了矩陣運算、神經元、過擬和、激勵函數、差錯的反向傳遞等。本期將介紹卷積神經網絡。這是本系列第一個介紹的神經網絡框架。此神經網絡框架在圖片處理種表現優越,本期將介紹CNN的原理和處理方式。

如果對於神經網絡比較陌生,建議先看下本系列第八期https://www.toutiao.com/i6610380967003554318/

另外,本期大部分圖片來源於ujjwalkarn

Why 卷積神經網絡

相信大部分看過卷積神經網絡新聞,都有看到過類似下面的圖片。也可能聽說過CNN有卷積層、Relu、Pooling(池化層)等等。

機器學習Basics-第九期-CNN卷積神經網絡詳解


在開始介紹CNN 構造前,需要提出一個問題。我們看到的是CNN複雜的操作,但是CNN這麼做的動機和作用是什麼呢?

我們知道CNN應用場景是圖片識別和處理。那麼,我們都知道圖片是由像素構成的。而像素點本身就是圖片的特徵,一張28*28的數字圖片有784個像素點。在我之前的文章“機器學習的hello world”https://www.toutiao.com/i6567102109823533571/ 中只使用全鏈接層、只使用784個像素點本身作為特徵值 就能夠進行數字圖片的識別。

機器學習Basics-第九期-CNN卷積神經網絡詳解


那麼為什麼普通的圖片不能參考數字圖片識別一樣處理呢? 其中一個很重要的原因在於計算成本。對於一個色彩斑斕高清的圖片,其中像素點太多,從而導致計算成本及速度偏慢。

回想人類看圖片,理解圖片的內容的過程,其實我們是通過對主要特徵的識別。如果稍微學過畫畫的朋友,這個很類似於素描。在畫板上色之前,其實你已經能夠基於素描判斷出圖片的內容。而上色是看起來更生動等等。

機器學習Basics-第九期-CNN卷積神經網絡詳解

結論:首先,基於Computation Cost我們無法採用將原始每個像素點作為圖片特徵的處理方式;

其次,我們通過對圖片和人類識別圖片可以理解到,圖片識別就是找到圖片主要特徵的過程(素描的例子)

那麼,CNN最大特別的地方就是提取出一個高清圖片中的有效特徵。如上面哪個圖原畫很精緻,但是提取出來的輪廓也有非常豐富的信息量。

帶著目標和自己的理解學習非常重要,下面將介紹CNN整個框架。

卷積神經網絡

機器學習Basics-第九期-CNN卷積神經網絡詳解

上圖的卷積神經網絡框架中,包含了四個組成部分:

  1. Convolution 卷積層
  2. Non Linearity (ReLU) ReLu
  3. Pooling or Sub Sampling 池化層
  4. Classification (Fully Connected Layer) 分類(全鏈接層)

卷積層、ReLu、池化層是卷積神經網絡的組成部分。瞭解每一個組成部分的結構,對於瞭解卷積神經網絡尤為重要。

卷積層操作

卷積層的主要目的是從輸入圖片中提取出特徵值。並且卷積層需要保留輸入圖片像素原有的空間結構。將通過圖片來展示卷積層是如何工作的。

每個圖片可以看成一個像素值的矩陣。假設有一個5*5的圖片,其像素是0或者1;

機器學習Basics-第九期-CNN卷積神經網絡詳解


另外,我們也有一個3*3的矩陣,如下

機器學習Basics-第九期-CNN卷積神經網絡詳解


然後,5*5的圖片和3*3的矩陣的卷積如下面的Gif所示

機器學習Basics-第九期-CNN卷積神經網絡詳解

回顧下上面的GIF操作。首先,我們將黃色的矩陣在綠色的原始圖片中掃過。其掃過的每一個位子,我們可以通過矩陣相乘計算出一個值。 然後將這個值添加到一個3*3的矩陣中。我們最終形成來了一個新的粉色的矩陣。

在CNN的術語中,黃色的3*3矩陣被叫做“過濾器(filter)”或者“特徵探測器(Feature Detector)”。而過濾後形成的粉色特徵矩陣被叫做“卷積後特徵”、“特徵地圖Feature Map”。從上面的GIF可以看出,黃色的矩陣(過濾器)扮演的作用是將特徵從原始的綠色圖片中提取出來的作用。

所以,很明顯。不同類型的過濾器會產生不同的結果。舉個例子,我們來看下面這個圖

機器學習Basics-第九期-CNN卷積神經網絡詳解

在下表中,我們能看到不同過濾器的影響。我們能通過改變過濾器中的數值達到不同的效果。這意味著不同的過濾器可以探測到不同的特徵,如邊線、曲線等等。

機器學習Basics-第九期-CNN卷積神經網絡詳解

另一個更好的方式來理解卷積的操作是看下面的這個GIF圖

機器學習Basics-第九期-CNN卷積神經網絡詳解

一個過濾器(紅色框)在輸入的圖片傻姑娘劃過(卷積操作)從而產生了一個特徵圖。另一個過濾器(綠色)在同一個輸入圖片產生另一個特徵圖。

在實際操作過程中,過濾器的參數也是學習過程的一部分。越多的過濾器,我們就能夠獲得更多的圖片特徵,也就能更好的識別圖片。

非線性方程(ReLu)

在卷積操作之後,一般會有一個ReLu的方程。ReLu是一個非線性方程:


機器學習Basics-第九期-CNN卷積神經網絡詳解

如上圖,ReLu會將矩陣中的每個負數的元素替換為0.使用ReLu的一個主要原因是將非線性引入到我們的框架中來,因為大部分現實數據都是非線性的。

ReLu的操作如下圖所示,其是將卷積產出的圖片進行再加工。

機器學習Basics-第九期-CNN卷積神經網絡詳解

Pooling Step(池化操作)

Pooling操作降低了每個特徵圖的緯度,但是保持了其原有最重要的信息。Pooling可以有多種類型,如取最大值、平均值、求和等

如下圖所示,最大值池化,其是將2*2的小框作為一個Pool,然後取其中的最大值。然後形成一個新的矩陣。該新的矩陣比原有矩陣緯度降低很多,但是保留了原有的最大的特徵。

機器學習Basics-第九期-CNN卷積神經網絡詳解


下圖展示了在ReLu之後的池化效果。

機器學習Basics-第九期-CNN卷積神經網絡詳解


目前為止,我們已經介紹了卷積層、ReLu和池化操作。如下圖我們有兩組卷積操作。第二個卷積組合就接在第一個卷積操作之後。

這些層一起最終達到的目的是:提取了原始圖片中的有效特徵信息、引入了非線性方程、在保持信息的情況下減少了特徵的緯度。

所有以上操作的最終結果將輸出到一個 全聯接層(Fully Connected Layer),將在下一部分討論

機器學習Basics-第九期-CNN卷積神經網絡詳解

全聯接層

如果對於基礎神經網絡不熟悉的朋友,可以去看下本系列的第八期和之前的文章“機器學習的Hello World”。

卷積和池化操作的輸出結果代表著原圖片的 “精華”特徵。全聯接層的目的是使用這些特徵來進行圖片的分類。例如,我們可以需要將圖片分為四個類型

機器學習Basics-第九期-CNN卷積神經網絡詳解


該層最終的輸出結果總和是1. 這是因為使用SoftMax作為激活方程的原因。

總結與思考

以上基本上全部介紹了卷積神經網絡的組成部分。我最初看到這個結果的時候,並不能理解他為什麼要這麼設計。但是,回過頭來看,他們這麼做都是有原因的。

首先,高清圖片包含很多信息,也使得計算成本太高。無法將原始的每個像素點作為特徵,隨便一個480*800的圖片就有384000個像素點;然後,我們就需要一種方法能夠將特徵值減少並且能夠儘可能的保留原圖片的信息

知道了這個目標我們就能夠理解卷積神經網絡了,首先,卷積操作(過濾器)就是提取了原圖片的基礎信息(緯度同時也減少了一些);其次,池化操作更加是將2*2的小池子裡面取最大值,又減少了緯度;除此之外,我們還能搞兩次完整的卷積操作。

所以,這一切的一切的目的都是在儘可能保留信息的情況下,減少緯度。卷積神經網絡做到了這點,這也是這個CNN牛的地方。


分享到:


相關文章: