1. 程式人生 > >十四、卷積神經網路(1):介紹卷積神經網路

十四、卷積神經網路(1):介紹卷積神經網路

本篇部落格主要內容參考圖書《神經網路與深度學習》,李航博士的《統計學習方法》National Taiwan University (NTU)李巨集毅老師的《Machine Learning》的課程,在下文中如果不正確的地方請積極指出。
如果喜歡請點贊,歡迎評論留言 ! o( ̄▽ ̄)ブ

歡迎大家在評論區多多留言互動~~~~

1. 為什麼要使用卷積神經網路

  在之前的手寫數字分類的例子中,是直接使用全連線神經網路的進行影象分類的。但是仔細推敲,使用全連線層的網路來分類影象是很奇怪的,因為這樣的一個網路架構不考慮影象的空間結構。所以一個很直接的考慮就是引入影象的一種空間關係來構建神經網路,也就是這裡要介紹的卷積神經網路(CNN)。
  正是由於考慮了空間結構,所以卷積神經網路可以更快的訓練,從而獲得一個深度的、多層的神經網路,並可以在影象分類上獲得較好的結果。

2. CNN 中的基本概念

  在這裡我們將介紹 CNN 中的主要的三個概念,即:區域性感受野(local receptive fields),共享權重(shared weights),和池化(pooling)。

2.1 區域性感受野

  對於輸入的影象,在這裡並不會像之前的全連線神經網路一樣按行排列成一個長的向量,而是仍然保持其原有的樣子,如下所示


圖1. 卷積神經網路的輸入神經元排列方式

如圖1所示為卷積神經網路的輸入神經元排列方式,實際上因為輸入神經元與畫素是一一對應的關係,所以也可以看作是輸入的影象。在這裡我們不會把每個輸入畫素連線到每個隱藏神經元。相反,我們只是把輸入影象進行小的、區域性區域的連線。說的確切一點,第一個隱藏層中的每個神經元會連線到一個輸入神經元的一個小區域(例如一5×5個的區域,對應於25個輸入畫素)。所以對於一個特定的隱藏神經元,我們可能有看起來像圖2的連線:


圖2. 卷積神經網路的輸入層於隱層的連線方式

這個輸入影象的區域被稱為隱藏神經元的區域性感受野,它是輸入畫素上的一個小視窗。每個連線學習一個權重。而隱藏神經元同時也學習一個總的偏置。你可以把這個特定的隱藏神經元看作是在學習分析它的區域性感受野。

  我們然後在整個輸入影象上交叉移動區域性感受野。對於每個區域性感受野,在第一個隱藏層中有一個不同的隱藏層神經元。為了正確說明,讓我們從左上角開始一個區域性感受野:

然後我們往右一個畫素(即一個神經元)移動區域性感受野,連線到第二個隱藏神經元:

如此重複,構建起第一個隱藏層。注意如果我們有一個 28×28 的輸入影象,5×5 的區域性感受野,那麼隱藏層中就會有 24×24 個神經元。在這裡每次移動的過程是一個畫素,即步長為1,有的時候步長也可以是2。

2.2 共享權重和偏置

  按照上面的說明過程,對於每一個給定的區域性感受野有一個對應的隱層的神經元,比如一個5×5的感受野所對應的隱層的神經元應該具有25個權值和1個偏置。而通過上面的分析可以知道,隱層中共有 24×24 個神經元,所以共有25×24×24 個權值和 24×24 個偏置,但是在卷積神經網路中卻不是這樣的,因為這樣的計算量過大。在這裡,對 24×24 個隱藏神經元中的每一個使用相同的權重和偏置,也就是說共用一個 5×5 的權值和 1 個偏置。
  這意味著第一個隱藏層的所有神經元檢測完全相同的特徵,只是在輸入影象的不同位置,這一點與影象處理中的卷積的概念是一致的,我猜測這就它叫卷積神經網路的原因吧。把權重和偏置設想成隱藏神經元可以挑選的東西,例如,在一個特定的區域性感受野的垂直邊緣。這種能力在影象的其它位置也很可能是有用的。因此,在影象中應用相同的特徵檢測器是非常有用的。用稍微更抽象的術語,卷積網路能很好地適應影象的平移不變性:例如稍稍移動一幅貓的影象,它仍然是一幅貓的影象。
  因為這個原因,我們有時候把從輸入層到隱藏層的對映稱為一個特徵對映。我們把定義特徵對映的權重稱為共享權重。我們把以這種方式定義特徵對映的偏置稱為共享偏置。共享權重和偏置經常被稱為一個卷積核或者濾波器
  目前我描述的網路結構只能檢測一種區域性特徵的型別。為了完成影象識別我們需要超過一個的特徵對映,所以一個完整的卷積層由幾個不同的特徵對映組成,如下圖所示

在這個例子中,每個特徵對映定義為一個 5×5 共享權重和單個共享偏置的集合。其結果是網路能夠檢測3種不同的特徵,每個特徵都在整個影象中可檢測。在實際使用的過程中可以使用更過的卷積核。

  共享權重和偏置的一個很大的優點是,它大大減少了參與的卷積網路的引數。

2.3 池化層

  池化層通常緊接著在卷積層之後使用,簡化從卷積層輸出的資訊。一種常見的池化方法為最大池化方法,它簡單地輸出其 2×2 輸入區域的最大啟用值,具體如圖6所示


圖6. 最大池化的過程

注意既然從卷積層有 24×24 個神經元輸出,池化後我們得到 12×12 個神經元。同樣的對於每一個卷積層的輸出都可以進行池化。我們可以把最大值池化看作一種網路詢問是否有一個給定的特徵在一個影象區域中的哪個地方被發現的方式。然後它扔掉確切的位置資訊。直觀上,一旦一個特徵被發現,它的確切位置並不如它相對於其它特徵的大概位置重要。一個很大的好處是,這樣可以有很多被更少地混合的特徵,所以這有助於減少在以後的層所需的引數的數目。最大值混合並不是用於混合的僅有的技術,另一個常用的方法是L2 混合(L2 pooling)。

3. 卷積神經網路的總體過程


圖6. 卷積神經網路總體過程

這個網路從 28×28 個輸入神經元開始,這些神經元用於對 MNIST 影象的畫素強度進行編碼。接著的是一個卷積層,使用一個 5× 5區域性感受野和 3 個特徵對映。其結果是一個3×24×24 隱藏特徵神經元層。下一步是一個最大值池化層,應用於 2×2 區域,遍及3個特徵對映,結果是一個 3×12×12 隱藏特徵神經元層。網路中最後連線的層是一個全連線層。更確切地說,這一層將最大值池化層的每一個神經元連線到每一個輸出神經元,和我們之前章節中使用的相同。

4. 卷積神經網路的反向傳播過程

  我們確實需要對反向傳播程式做些修改。原因是我們之前的反向傳播的推導是針對全連線層的網路。幸運的是,針對卷積和最大值混合層的推導是簡單的。在一個具有全連線層的網路中,反向傳播的核心方程是(BP1)–(BP4)。假設我們有這樣一個網路,它包含有一個卷積層,一個最大值混合層,和一個全連線的輸出層,正如上面討論的那樣。
  具體過程留一個坑,日後來填。

相關推薦

神經網路1介紹神經網路

本篇部落格主要內容參考圖書《神經網路與深度學習》,李航博士的《統計學習方法》National Taiwan University (NTU)李巨集毅老師的《Machine Learning》的課程,在下文中如果不正確的地方請積極指出。 如果喜歡請點贊

Web Hacking 101 中文版 XML 外部實體注入

十四、XML 外部實體注入 作者:Peter Yaworski 譯者:飛龍 XML 外部實體(XXE)漏洞涉及利用應用解析 XML 輸入的方式,更具體來說,應用程式處理輸入中外部實體的包含方式。為了完全理解理解如何利用,以及他的

空域分析及變換1濾波

空域分析及變換(1):濾波卷積 引言 1、均值濾波 2、中值濾波 3、高斯濾波 4、梯度Prewitt濾波 5、梯度Sobel濾波 6、梯度Sobel濾波 7、梯度Laplacian濾波 8、其他

HTML5與WebGL程式設計1介紹

      程式碼https://github.com/tparisi/Programming3DApplications       HTML5是HTML標準的大規模修訂,包括語法的清理、新的JavaScript語言特性和API、移動端支援以及突破性的多媒體支援。HTML

神經網路CNN之一維二維三維詳解

由於計算機視覺的大紅大紫,二維卷積的用處範圍最廣。因此本文首先介紹二維卷積,之後再介紹一維卷積與三維卷積的具體流程,並描述其各自的具體應用。 1. 二維卷積 圖中的輸入的資料維度為14×1414×14,過濾器大小為5×55×5,二者做卷積,輸出的資料維度為10×1

神經網路1

卷積神經網路作為一種置換了傳統網路中隱藏層的可自動提取樣本特徵的技術,具有較高的識別率。本文利用dlib與TensorFlow平臺實現了卷積神經網路人臉識別。結果準確率達到了0.984,取的了較為理想的結果。 ** 1 引言 ** 人臉識別是通過提取

tensorflow 學習專欄使用神經網路CNN在mnist資料集上實現分類

卷積神經網路(Convolutional Neural Network, CNN)是一種前饋神經網路,它的人工神經元可以響應一部分覆蓋範圍內的周圍單元,對於大型影象處理有出色表現。卷積神經網路CNN的結構一般包含這幾個層:輸入層:用於資料的輸入卷積層:使用卷積核進行特徵提取和

神經網路應用簡單網路實現MNIST數字識別

卷積神經網路簡單實現MNIST數字識別 本篇的主要內容: 一個兩層卷積層的簡單卷積網路的TensorFlow的實現 網路的結構 在這張圖裡,我把每一層的輸入以及輸出的結構都標註了,結合閱讀程式碼食用效果更佳。 具體程式碼 具體的內容,都寫在相應位置的註釋中

【學習筆記1】吳恩達_神經網路_第一週神經網路1

一、卷積神經網路 1.邊緣檢測 不同的語言中表示卷積的函式不同,在Python中為在tensorflow裡為 濾波器:垂直、水平邊緣檢測。 Sobel filter:其優點在於增加了中間一行元素的權重,即影象中間的畫素點提高,會使結果的魯棒(robust)性提高。

神經網路權值初始化方法之Xavier與MSRA

基礎知識 首先介紹一下Xavier等初始化方法比直接用高斯分佈進行初始化W的優勢所在: 一般的神經網路在前向傳播時神經元輸出值的方差會不斷增大,而使用Xavier等方法理論上可以保證每層神經元輸入輸出方差一致。 這裡先介紹一個方差相乘的公式,以便理解Xav

10分鐘看懂全神經網路 FCN 語義分割深度模型先驅

大家好,我是為人造的智慧操碎了心的智慧禪師。今天是10月24日,既是程式設計師節,也是程式設計師

神經網路CNN學習演算法之----基於LeNet網路的中文驗證碼識別

  由於公司需要進行了中文驗證碼的圖片識別開發,最近一段時間剛忙完上線,好不容易閒下來就繼上篇《基於Windows10 x64+visual Studio2013+Python2.7.12環境下的Caffe配置學習 》文章,記錄下利用caffe進行中文驗證碼圖片識別的開發過程。由於這裡主要介紹開發和實現過程,

神經網路神經網路CNN的簡單實現部分Python原始碼

上週末利用python簡單實現了一個卷積神經網路,只包含一個卷積層和一個maxpooling層,pooling層後面的多層神經網路採用了softmax形式的輸出。實驗輸入仍然採用MNIST影象使用10個feature map時,卷積和pooling的結果分別如下所示。

pytorchCNN神經網路

import torch import torch.nn as nn import torch.utils.data as Data import torchvision # 視覺圖片資料庫 from torch.autograd import Variable impor

Vue的生命週期鉤子函式

                                  Vue的生命週期(鉤子函式)     Vue一共有10個生命週期函式,我們可以利用這些函式在vue的每個階段都進行操作資料或者改變內容

改進神經網路的學習方法1交叉熵代價函式

本部落格主要內容為圖書《神經網路與深度學習》和National Taiwan University (NTU)林軒田老師的《Machine Learning》的學習筆記,因此在全文中對它們多次引用。初出茅廬,學藝不精,有不足之處還望大家不吝賜教。

人臉特徵點檢測深度網路級聯

人臉特徵檢測(face feature detection)也稱為 “facial landmark detection”, “facial keypoint detection” and “face alignment”,是在人臉檢測的基礎上,對人臉上的特徵點例如眼睛、鼻

TensorFlow學習各種網路

更新: 2017.5.13 刪除了一些不常用的內容,可以通過查文件獲得 詳細解釋了conv2d的引數內容和執行過程 2017.12.26 增加了空洞卷積(dilated Conv)的相關內容 一.基本卷積操作(co

Scala入門到精通——第二節 高級類型

func double tor 結構體 入門到精通 strac 命令 person 字節碼 作者:擺擺少年夢 視頻地址:http://blog.csdn.net/wsscy2004/article/details/38440247 本節主要內容

Linux虛擬機器管理

本節著重介紹virsh虛擬機器管理命令、建立快照、虛擬機器遷移 - virsh虛擬機器管理命令 virsh list ## 檢視正在執行的虛擬機器 virsh list --all