AI產品:淺談CNN(卷積神經網絡)

2 評論 7330 瀏覽 29 收藏 12 分鐘

文章對卷積神經網絡CNN核心特點以及它的基本原理展開簡要的解讀,希望能夠加深你對卷積神經網絡的解。

一、卷積神經網絡概述

1.卷積神經網絡要解決的問題

傳統的BP神經網絡與DNN(深度神經網絡)不同層神經元的連接方式是“全連接”,也就是這一次層的一個神經元的輸入,會接受上一次每一個神經元的輸出,這種方式即為“全連接神經網絡”。

這樣的連接方式有一個的缺點:因為權值與偏置等參數量大,導致訓練收斂十分緩慢。特別是對于圖像這樣的訓練數據,動不動就是數以百萬的像素,理論上雖然可以收斂,但你可能得等上N年才有結果,而且它的泛化性也會變差。

2.卷積神經網絡的特點

卷積神經網絡CNN就是為了解決這個問題而生,它的核心特點有三個

局部感受野

一張圖像,我們實際上并不需要讓每個神經元都接受整個圖片的信息,而是讓不同區域的神經元對應一整張圖片的不同局部,最后只要再把局部信息整合到一起就可以了。這樣就相當于在神經元最初的輸入層實現了一次降維

這有點像我們的眼鏡,左右眼各負責看到一部分視野,最后只要通過神經把視野整合到一起,我們看到的依舊是一個相對完整的視野

卷積層的權值共享

這可以說是卷積神經網絡的最最最重要也是它牛逼之處,剛剛我們說到全連接神經網絡最大的問題就是權值參數太多,而卷積神經網絡的卷積層,不同神經元的權值是共享的,這使得整個神經網絡的參數大大減小,提高了整個網絡的訓練性能,具體的實現方式我們一會再說

池化層(Pooling Layer)

簡單理解可以看作是對圖像的一次“有損壓縮”,因為在實際的訓練中,我們并不需要對圖像中的每一個細節都進行特征提取和訓練,所以池化的作用就是更進一步的信息抽象和特征提取,當然也會減小數據的處理量

二、卷積神經網絡核心概念

我們先來來看看所謂的卷積到底是什么

1.卷積核

卷積核表達式: F(x)=wx+b

簡單認識一下卷積到底是怎么實現特征提取的。假設現在輸入一個圖片作為x(3×3像素),一個簡單的卷積核w=【1,1,1,1,1,1,1,1,1】,b為0,那么這個圖像經過一次卷積后,實現的效果如圖

這樣一個3×3的圖像,通過卷積后就被壓縮得到一個點“6”,我們就把這個點存儲在卷積層的空間里(即 Feature map)。

當然在實際的訓練中,卷積核的w與b也是被隨機賦值并通過迭代法學出來的。而且在卷積后往往還會跟上一個激勵函數如ReLU或Sigmoid。

2.步長

剛剛我們所說的是最為簡化的圖像(3×3),而卷積的工作方式,我們理解為“掃描”,加入一個圖像是9×9像素,而卷積核理解為一個3×3的方框,那么一次卷積得到一個數字,而步長即為卷積下次移動掃描挪動的步數。

假設stride=1,那么每次就只滑動一個單位,它主要影響卷積對數據掃描的細密程度,步長越大,當然掃描的越粗糙,通常情況下Stride都會取“1”

3.卷積濾波器與卷積層

卷積濾波器通常由一個卷積核和激勵函數構成,一個局部圖像經過卷積濾波器提取特征后會形成一個Feature map,該平面上所有的神經元權值共享

4.Pooling Layer(池化層)

池化層是在圖像經過卷積處理后的又一次有效特征提取和模糊處理。它和“下采樣”實際上是一個意思。下面我們來看看所謂的“池化處理”或“下采樣過程”到底是怎么回事。

常見的方式有兩種,一種叫Max pooling(最大化),一種為Mean pooling(平均),它們都是對前面輸入的數據做一次處理,假設我們用的是2X2的Pooling Filter(池化濾波器)

最大值池化過程

對輸入的數據進行一次取最大值處理

平均值池化過程

對輸入的數據進行一次取平均值處理

池化(下采樣)的作用

這樣的池化處理,在處理圖像的時候是可以提取更為抽象的特征,減少數據處理量的同時保留有效信息。

當然它還可以防止過擬合,想想過擬合的原因就是模型過多開始學習數據中的細節導致其泛化性下降,而這樣的處理剛好可以去除掉不怎么重要的細節,幫助模型更好地學習更為抽象的特征

三、參數減少和共享權值

下面我們來看看,CNN到底是以何種方式來完成權值共享的,要知道這可是它最大的賣點??!

1.全連接神經網絡

沒有對比就沒有傷害,不妨先來看看全連接的神經網絡處理圖像時候的一番景象!

這密密麻麻交錯縱橫的連接線,還僅僅是連接到隱含層的一個神經元,連接次數已經紅字標出,不要太多。

2.“局部野”神經網絡效果圖

先聲明本身是沒有這個什么“局部野”神經網絡的,只不過為了能更好地一步一步去理解我們先前說的概念

發現了沒,通過不同神經元去接受局部圖像的信息,這樣它們明顯不會有那么多的權值參數了!但這還不夠

3.卷積層

如果我們在這個基礎上,加上卷積濾波和激勵函數的處理,最后會得到一層Feature map,在這個層中神經元之間的權值參數將會共享,完全一致哦

 

到這里你應該已經體會到卷積神經網絡思想的核心所在:通過局部感受野、卷積層權值共享的方法,大大降低了網絡參數的數量,減小網絡的空間復雜程度。這就解決了我們最開始引出的問題,面對圖像這樣數以百萬像素維度的數據,全連接神經網絡無法有效對其進行處理,而卷積神經網絡則剛好是對癥下藥!

當然在整個神經網絡的宏觀結構上,不同局部對應不同的卷積濾波器,以提取不同的特征。

?四、CNN網絡架構及訓練過程

1.LeNet-5CNN的網絡模型架構

可以看出來,這是一個識別字母的神經網絡(大寫的“A”有木有)

首先經過一次卷積濾波處理,得到了C1(卷積層 Feature map),然后又經過了一次下采樣(池化)處理得到了S2(下采樣層),之后又是一次卷積濾波得到C3卷積層,依次處理至途中的C5位全連接層,至此卷積的過程結束,被抽象的特征輸入至傳統的全連接神經網絡,之后就又是熟悉的節奏了。

2.訓練過程(有監督學習)

向前傳播階段

  • 選取訓練樣本(x,y),將x輸入網絡中
  • 隨機初始化權值(一般情況下選取小數),信息從輸入層經過一層一層的特征提取和轉換,最后到達輸出層,得到輸出結果

反向傳播階段

  • 輸出結果與理想結果對比,計算全局性誤差(即我們之前說的Loss)
  • 得到的誤差反向傳遞給不同層的神經元,按照我們之前所說的“迭代法”調整權值和偏重,尋找全局性最優的結果

?五、場景應用

卷積神經網絡目前最廣泛的應用場景為圖像識別領域,其中一個原因就是我們最初提到的,權值共享使得網絡在處理圖像的時候大大減少了參數數量,使得網絡的訓練速度更快。

當然最重要的還不止于此,我們都知道圖像識別一個很大的問題就是如果圖像中有一些損壞、缺失或變形的話,那么很可能干擾圖像的識別結果。

卷積神經網絡的卷積層和池化層在圖像的本質都是提取更為抽象的特征,簡單理解就是“模糊化”壓縮處理,把一個圖像中不那么重要的細節去掉,找到最為重要的特征進行學習。

那么圖像中小細節的變化,反應在神經網絡中也就是一些特征向量的變化,但這這個變化在卷積和池化處理后,對產生的結果影響幾乎是微乎其微的,換句話說在CNN看來,這兩張圖片幾乎就完全是“一張圖片”了

以上就是對卷積神經網絡CNN核心特點以及它的基本原理,是不是并沒有想象中的那么難以理解呢?最后給大家一個小彩蛋,希望可以幫助你們梳理卷積神經網絡的知識結構:

 

本文由 @free 原創發布于人人都是產品經理。未經許可,禁止轉載。

題圖來自 Unsplash ,基于 CC0 協議

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 產品經理居然要懂這么多技術知識???

    來自廣東 回復