2.2 卷積神經網絡-卷積神經入門

4.2 卷積神經網絡

  • 問題引入

    • 參數過多:神經網絡中多個神經元能夠組成一層,這一層的神經元須要和上一層的輸出作全鏈接,固然在輸入的時候,也須要將輸入數據的每個份量都鏈接到本身的神經元上做爲輸入,而後獲得一個輸出。面試

      若是是圖像的話,咱們能夠把每個像素點,都當成一個特徵值。編程

      image.png

      參數過多會帶來什麼問題呢:bash

      • 容易過擬合,須要更多訓練數據(關於更多過擬合的討論請參考:www.jianshu.com/p/c1cd49555…
      • 收斂到較差的局部極值
  • 卷積 -- 參考https://www.jianshu.com/p/d0890947153c

    • 解決問題網絡

      對於圖像數據來講,某個像素點和他周圍的關係比較大,可是離他比較遠的店的關係就比較小。因此對於一個圖像數據來講,他具備很是大的區域性。ide

      基於這樣的一個性質,咱們能夠作一個篩檢,從全鏈接編程局部連接從而下降他的模型參數函數

      (注:區域鏈接範圍是只一個區域的大小是10*10,不是將1000*1000的圖像分紅100份)學習

      • 局部鏈接(圖像的區域性)spa

        image.png

        固然還能夠去調整filter-size:神經元和圖像中多大的區域的像素點進行鏈接3d

      • 參數共享(圖像特徵與位置無關)code

        對於一張圖像來講,不一樣的角度能夠看到不一樣的圖像信息。圖像的特徵和位置是無關的,他的特徵就表明着這個東西是什麼(好比愛因斯坦的左眼和右眼);和位置無關,就表明着說能夠在圖像的任何一個位置(多是左上角,多是右上角),若是用每一個神經元去學習一個固定的位置的話,那麼這個神經元他提取的特徵,他也不知道是什麼,由於這個位置是變化的,因此說咱們沒法去解釋這個神經元到底學到了什麼東西。

        爲了解決這個問題,咱們又作了另一個操做-參數共享:強制每個神經元和圖像的局部連接都使用一樣的參數。

        先看下這麼作能夠下降模型參數到什麼程度

        image.png

        那麼這個的物理含義是什麼呢:如下圖爲例,左邊是原圖,右邊是原圖的每個區域根據參數塊內積獲得的神經元,能夠想象成是參數再在圖像上從左到右從上到下劃過生成的一個新的圖像。那麼能夠想象一下參數共享的含義。無論這個特徵在哪(圖像的哪一個位置),這個參數塊就是去捕捉這個特徵,捕捉到了,就能夠激活對應的某個神經元(每一個參數塊由全部局部區域共享,爲提取一個特徵)

        image.png

    • 每一個位置進行計算

      卷積核的操做:輸入圖像中的每個區域都和卷積核作全鏈接,獲得輸出圖像中的一個區域

      image.png

      卷積核和輸入圖像的計算方法:

      image.png

      步長:控制卷積核在圖像上每次划動所隔的位置

      padding使輸出size變小:

      在剛纔的計算中,卷積核在圖像劃事後產生的輸出相對輸入來講是逐漸變小的,這個對中間的計算就會比較負責,由於可能會有多個卷積層,若是每層都變小的話,會很難計算。

      那麼有沒有一種辦法,讓輸入和輸出的size是同樣的呢--padding

      padding的方法就是說在圖像的周圍,加上一些默認值0,那麼當卷積核在從加過padding圖像劃過的時候,產生的輸出就和原輸入的大小是同樣的。padding加的大小,就和卷積核是有關的(根據輸出size=輸入size-卷積核size+1的這個公式計算),

    • 感悟:實際上一次卷積操做,就是一次特徵提取

    • 多通道:卷積也變成多通道的,通道上的卷積的參數是不共享的,在作計算的過程當中,每一個通道上的卷積的參數和相應圖像上的區域作內積,將這三個通道上獲得的一樣位置上的內積的結果相加起來做爲輸出神經元的值

    image.png

    • 多個卷積核

      如何產生多通道的神經元—多加幾個卷積核,這些卷積核的參數是不共享的。多卷積核的物理意義:卷積核是用來提取某種特徵的,當這個區域有這個特徵的時候,卷積核就可以捕捉到特徵使得輸出神經元比較大,沒有捕捉到,輸出就會比較小。多個卷積核能夠用來提取多種特徵

      image.png

    • 卷積層的參數數目舉例

      卷積層,輸入三通道,輸出192通道,卷積核大小是3*3 ,問該卷積層有多少參數?

      // 3*3 是一個卷積核,由於是三通道的因此再乘3
      // (3*3)*3 是一個卷積層,一共有192通道,就有192層
      (3*(3*3)) * 192 = 5184
      複製代碼
  • 激活函數

    除了以前講過的sigmoid激活函數,經常使用的還有其餘五種

    image.png

    在卷積神經網絡中,比較經常使用的激活函數時ReLU,由於他的計算很是簡單(sigmoid須要進行一個很是複雜的指數計算和一個相對複雜的出發計算)

    image.png

    • 激活函數的性質:
      1. 單調性
      2. 非線性函數(面試常常問,劃重點!!!):多個神經元之間的全鏈接,實際上都是作的矩陣的操做,而矩陣的操做是能夠合併的。若是不使用非線性函數,即便很深層次的神經網絡,實際上也能夠合併成一層,那麼這個時候多層就沒有意義了
    • 卷積函數參數
      • P = 邊距(padding)
      • S = 步長(stride)
      • 輸出尺寸=(n-p)/s + 1
      • 參數數目 = kw*Kh*Ci·*Co
        • Ci:通道數目
        • Co:輸出通道數
        • Kw,Kh: 卷積核長寬
  • 池化

    • 最大值池化:

      image.png

      • 仍然是核在輸入圖像上划動,可是不是作內積,而是取這個區域像素值的最大值。
      • 作卷積的時候,默認步長=1,池化的時候默認步長和核的寬高是相等(不會重疊)
      • 對於多出來的邊的處理方法:忽略和padding
    • 平均值池化:

      • 仍然是核在輸入圖像上划動,可是不是作內積,而是取這個區域像素值的平均值。
    • 池化的性質與性質:

      • 常使用不重疊(stride=kernel size),不補零(多餘的數據直接丟棄)
      • 沒有用於求導的參數(直接求最大值或者平均值)
      • 參數爲步長和池化核大小(通常是相等,特殊狀況下也能夠不等)
      • 用於減小圖像尺寸,從而減小計算量(在池化後加一層卷積,此次卷積劃過圖像比較小,節省內存)
      • 必定程度解決平移魯棒性(卷積的時候因爲有重疊,致使平移一小步得等到的結果可能和以前是同樣的,池化能夠必定程度上解決這個問題)
      • 損失了空間位置精度(池化是計算量和精度直接的權衡)
  • 全鏈接層(和普通神經網絡同樣)

    • 將上一層輸出展開(將圖像矩陣展開轉換成向量)並鏈接到每個神經元上
    • 全鏈接層後不能再加捲積層和池化層,由於這時候已經把圖像打平成向量了
    • 相較於卷積層,參數數量較大
    • 參數數目爲Ci*Co
      • Ci\Co爲輸入輸出的通道數目
  • 卷積神經網絡結構

    卷積神經網絡=卷積層+池化層+全鏈接層

    image.png

    上圖年代較早,圖中的單詞和咱們講的概念能夠先忽略,只看結構的基本信息

    1. 輸入是2通道的96*96的圖像
    2. 先通過5*5的卷積核以後,獲得的是一個92*92的8通道的圖,這裏卷積沒有作padding,因此輸出的size會變小
    3. 而後通過了一個4*4的池化,獲得了一個23*23的8通道的結果
    4. 又通過了一個6*6的卷積核,獲得了一個24通道的18*18的結果
    5. 又通過了一個4*4的池化,獲得了一個23*23的8通道的結果
    6. 最後通過了一個100參數的全鏈接層

    因爲全鏈接的結果是向量,是沒有辦法生成圖像的,若是去掉全鏈接層,咱們就可使得卷積神經網絡能夠以圖像的形式輸出模型東西。

    以下輸出是和輸入同等大小的圖像,每一個圖像上的值就是一個分類信息,用來分類這是否是一個分界面,好比輸入是貓和狗,這裏就能夠把貓和狗區分開來

    問題:不padding的卷積和池化會使得圖像變小,如何獲得和原圖同樣大小的輸出呢?反捲積,使用小於1的步長,這是一個很是奇怪的卷積操做,會在後面提到

    image.png
相關文章
相關標籤/搜索