DeepLearning.ai筆記:(4-1)-- 卷積神經網路(Foundations of CNN)
title: ‘DeepLearning.ai筆記:(4-1)-- 卷積神經網路(Foundations of CNN)’
id: dl-ai-4-1
tags:
- dl.ai
categories: - AI
- Deep Learning
date: 2018-09-30 10:20:54
首發於個人部落格:fangzh.top,歡迎來訪
第四門課開始就學習深度學習關於計算機視覺的重要應用—卷積神經網路。
第一週主要是對卷積神經網路的基本構造和原理做了介紹。
計算機視覺
計算機視覺是深度學習的一個非常重要的應用。比如影象分類,目標檢測,圖片風格遷移等。
用傳統的深度學習演算法,假設你有一張 的貓片,又有RGB三通道,那麼這個時候是 ,input layer的維度就是12288,這樣其實也還可以,因為圖片很小。那麼如果你有 的照片呢,你的向量就會有300萬!假設有1000個隱藏神經元,那麼就是第一層的引數矩陣 有30億個引數!算到地老天荒。所以用傳統的深度學習演算法是不現實的。
邊緣檢測
如圖,這些邊緣檢測中,用水平檢測和垂直檢測會得到不同的結果。
垂直檢測如下圖,用一個 的過濾器(filter),也叫卷積核,在原圖片 的對應地方按元素相乘,得到 的圖片。
可以看到,用垂直邊緣的filter可以將原圖片中間的邊緣區分出來,也就是得到了最右圖中最亮的部分即為檢測到的邊緣。
當然,如果左圖的亮暗分界線反過來,則輸出圖片中最暗的部分表示邊緣。
也自然有水平的邊緣分類器。
還有更復雜的,但是我們不需要進行人工的決定這些filter是什麼,因為我們可以通過訓練,讓機器自己學到這些引數。
padding
padding是填充的意思。
-
我們可以從之前的例子看到,每經過一次卷積運算,圖片的畫素都會變小,從 ,這樣子圖片就會越來越小,後面就毛都不剩了。
-
還有一點就是,從卷積的運算方法來看,邊緣和角落的位置卷積的次數少,會丟失有用資訊。
所以就有padding的想法了,也就是在圖片四周填補上畫素。
計算方法如下,
原資料是 ,filter為 ,padding為 ,
那麼得到的矩陣大小是
padding有兩種:
- valid:也就是不填充
- same:輸入與輸出大小相同的圖片, ,一般padding為奇數,因為filter是奇數
stride(步長)
卷積的步長也就是每一次運算後平移的距離,之前使用都是stride=1。
假設stride=2,就會得到:
得到的矩陣大小是
向下取整: 59/60 = 0
立體卷積
之前都是單通道的圖片進行卷積,如果有RGB三種顏色的話,就要使用立體卷積了。
這個時候的卷積核就變成了 的三維卷積核,一共27個引數,每次對應著原圖片上的RGB一共27個畫素運算,然後求和得到輸出圖片的一個畫素。因為只有一個卷積核,這個時候輸出的還是 的圖片。
多個卷積核
因為不同的卷積核可以提取不同的圖片特徵,所以可以有很多個卷積核,同時提取圖片的特徵,如分別提取圖片的水平和垂直邊緣特徵。
因為有了兩個卷積核,這時候輸出的圖片就是有兩通道的圖片 。
這裡要搞清兩個概念,卷積核的通道數和個數:
- 通道數channel:即卷積核要作用在原圖片上,原圖片的通道處 ,卷積核的通道數必須和原圖片通道數相同
- 個數:即要使用多少個這樣的卷積核,使用 表示,卷積核的個數也就是輸出圖片的通道數,如有兩個卷積核,那麼生成了 的圖片,2 就是卷積核的個數
- 即 ,乘上的 個卷積核 $ f \times f \times n_c (n -f +1)\times (n - f +1 ) \times n_{c}^{\prime}$的新圖片
卷積神經網路
單層卷積網路
如圖是單層卷積的基本過程,先經過兩個卷積核,然後再加上bias進行relu啟用函式。
那麼假設某層卷積層有10個 的卷積核,那麼一共有 個引數,加1是加上了bias
在這裡總結了各個引數的表示方法:
簡單神經網路
一般卷積神經網路層的型別有:
- convolution卷積層
- pool池化層
- fully connected全連線層
池化層
pooling 的作用就是用來壓縮資料,加速運算,提高提取特徵的魯棒性
Max pooling
在範圍內取最大值
Average Pooling
取平均值
卷積神經網路示例
一般conv後都會進行pooling,所以可以把conv和pooling當做一層。
如上圖就是 的卷積神經網路結構。
各個層的引數是這樣的:
可以看到,在卷積層的引數非常少,池化層沒有引數,大量的引數在全連線層。
為何用卷積神經網路?
這裡給出了兩點主要原因:
- 引數共享:卷積核的引數是原圖片中各個畫素之間共享的,所以大大減少了引數
- 連線的稀疏性:每個輸出值,實際上只取決於很少量的輸入而已。