卷積神經網路(Convolutional Neural , CNN) - HackMD
文章推薦指數: 80 %
Convolution Layer 卷積層. 卷積層主要是由許多不同的kernel 在輸入圖片上進行卷積運算。
什麼是卷積?
Published
LinkedwithGitHub
Like9
Bookmark
Subscribe
卷積神經網路(ConvolutionalNeural,CNN)
===
######tags:`李宏毅``MachingLearning`
---
>
>***本文內容以李宏毅MachineLearning(2017)第十講:ConvolutionalNeuralNetwork(CNN)為主,搭配參考資料編輯而成。
**
>
>***本篇圖片部分出自MachineLearning(2017)課程內容講義**
>
---
當我們剛開始接觸深度學習的時候,最常看到的例子便是使用MINST資料庫進行手寫數字的辨識。
概念如下圖所示,將所有像素灰階數值壓成一維資料後再丟進全連接層進行學習。
(2)全連接層搭配高像素的圖片,會讓整個計算成本大幅增加。
基於上面幾個理由便衍伸出ConvolutionalNeuralNetwork(CNN)卷積神經網路來進行圖像辨識。
整個CNN結構主要分成幾個部分:**卷積層(Convolutionlayer)、池化層(Poolinglayer)以及最後一個全連接層(FullyConnectedlayer)**。
什麼是卷積?在這邊卷積其實就是兩個步驟組成的運算:滑動+內積,利用filter在輸入圖片上滑動並且持續進行矩陣內積,卷積後得到的圖片我們稱之為featuremap。
[^1] [^1]:在數學上對於卷積的定義更加抽象且準確,而卷積這樣的概念也被廣泛的應用在許多領域中,而在"知乎--[如何通俗易懂地解释卷积?](https://www.zhihu.com/question/22298352)"這篇文章中對於卷積有多面向的討論,非常建議大家可以閱讀。
![](https://i.imgur.com/JTqr2Yw.png) ![](https://i.imgur.com/v4VM3qu.gif) (圖片取自:[[機器學習MLNOTE]ConvolutionNeuralNetwork卷積神經網路](https://medium.com/%E9%9B%9E%E9%9B%9E%E8%88%87%E5%85%94%E5%85%94%E7%9A%84%E5%B7%A5%E7%A8%8B%E4%B8%96%E7%95%8C/%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92-ml-note-convolution-neural-network-%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-bfa8566744e9)) kernel我們也稱為filter,我認為filter這樣的概念可以讓人更體會卷積層的作用,一般我們使用修圖軟體的各種濾鏡功能即是不同的kernel在圖片上作用後的結果。
(想知道許多不同的filter造成的效果可以參考Wikipedia--[Kernel(imageprocessing)](https://en.wikipedia.org/wiki/Kernel_%28image_processing%29)) 在全連接層神經網路中經由學習不斷更新的權重,在CNN這邊指的就是filter,如上圖3X3的filter內就相當於有9個權重。
我們可以想像,CNN訓練的過程就是不斷地在改變filter來凸顯這個輸入圖像上的特徵。
不過,CNN還是有一些值得注意的地方: **1.每一層卷積層的filter不會只有一個** 我們引用CNN的經典論文GradientBasedLearningAppliedtoDocumentRecognition中的LeNet-5結構,第一層的卷積層就給了6個3X3kernel,也就是說在這同一層中就有54個權重需要同時更新,而這六個filter也會相對應給出六個featuremap。
![](https://i.imgur.com/z4wLQJn.png) (圖片來源:YannLeCunLeonBottouYoshuaBengioandPatrickHaffner.(1998).*GradientBasedLearningAppliedtoDocumentRecognition*[^2]) [^2]:論文連結:YannLeCunLeonBottouYoshuaBengioandPatrickHaffner.(1998).[*GradientBasedLearningAppliedtoDocumentRecognition*](http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf) **2.彩色的圖片同時會有RGB三個channel** 也就是說,我們每一張圖片都會有深度,既然輸入圖有深度,那麼我們的filter也相同的會有一個深度,每一個channel會對應著filter的深度做卷積,filter每一個深度的數值可能會不一樣。
當我們進行filter滑動的時候,也是表示我們同一組權重正作用在不同區域,這樣的過程我們這個filter並沒有改變,也就是權重是不會變動的。
下圖中,李宏毅將整個卷積層排列成類似全連接層的型態,這樣可以很明白的看出共享權重的過程。
因此特別在這裡做了一個補充。
**
就單看第一層卷積層吧,一張$32\times32$的輸入,經過了五個$28\times28$的Kernel,形成了五張featuremaps,所以第一層卷積層應該是輸出五張圖像,看上圖也似乎是如此沒有錯。
不過真的是這樣嗎? 事實上,這五張featuremaps的確是卷積後的結果,但並非整個卷積層最後的輸出,卷積層還必須將這五張featuremaps疊合在一起,這才是真正第一層卷積層的輸出。
**
所以,當我們卷積層的Kernel數量越多,輸出的圖像就會越厚(專業的講法是這圖像的深度變得更深了),相對的參數也會越多。
![](https://i.imgur.com/CubUCmH.png) (圖片來源:[卷積神經網路(Convolutionalneuralnetwork,CNN):1×1卷積計算在做什麼](https://medium.com/@chih.sheng.huang821/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-convolutional-neural-network-cnn-1-1%E5%8D%B7%E7%A9%8D%E8%A8%88%E7%AE%97%E5%9C%A8%E5%81%9A%E4%BB%80%E9%BA%BC-7d7ebfe34b8)) ##$1\times1$卷積層到底在做什麼? 如果我們把卷積層只看作是一個逐步向量內積的過程,那一定會覺得$1\times1$卷積層只是單純的純量相乘的結果而已。
當然,就運算上的確只是如此,但是如果我們了解了真正卷積層的運作,你就不難發現,$1\times1$卷積層還能有一個非常好用的功能。
**
--- ##PoolingLayer池化層 ![](https://i.imgur.com/gs0K20B.png) 池化層的主要概念是,當我們在做圖片的特徵萃取的過程中,圖形的縮放應該不會影響到我們的目的,經由這樣的scaling我們也可以再一次的減少神經網路的參數。
常用的pooling方式有Maxpooling與Averagepooling: 如同卷積層,pooling也有一個kernel,也是在輸入圖像上進行滑動運算但和卷積層不同的地方是滑動方式不會互相覆蓋,且運算是以kernel涵蓋範圍的最大值(Maxpooling)或平均值(Averagepooling)。
![](https://i.imgur.com/Ok5FuhJ.png=450x) (圖片來源:Quora--[Whatisthebenefitofusingaveragepoolingratherthanmaxpooling?](https://www.quora.com/What-is-the-benefit-of-using-average-pooling-rather-than-max-pooling)) 許多研究都發現,Maxpooling的效果會比Averagepooling來的好,因此現在大多使用Maxpooling。
(LeNet-5則是使用Averagepooling) ###池化層的特色 **1.藉由對輸入圖片的subsampling來減少參數,減少計算成本** 從pooling過程來看,如果原本的輸入圖片,經過2x2poolingkernel之後,整個圖片的尺寸將會縮小$\displaystyle{\frac{1}{2}}$,如此一來,計算成本也將節省一半。
**2.具有特徵不變性** 以下面三個圖來看看,經過池化後如何保持特徵不變性,圖一平移,圖二旋轉以及圖三是縮小。
我們可以發現,經過池化後,這些特徵最後呈現的featuremap會是相同的,這也符合了我們當初對於池化層的期待與概念,經過subsampling後相對於原圖並不會有什麼太多的改變。
![](https://i.imgur.com/crpxYlI.jpg) (圖片來源:知乎--[CNN网络的pooling层有什么用?](https://www.zhihu.com/question/36686900)) **3.提高ReceptiveField(中國翻譯為:感受野)** Receptivefield指的是我們在featuremap中的一個像素內能看到輸入圖像區域 ![](https://i.imgur.com/QCJRHPL.png) 不管卷積層或是池化層都能夠有提高Receptivefield的作用,所謂的「提高Receptivefield」,依上圖來看就是當我們經過池化或是卷積層後,featuremap對應的原圖區域就會越大,也就是我們可以「見微知著」,從一個點看到整個原圖蘊含的資訊。
這個有趣的影片我認為也可以展示poolinglayersubsampling的概念 {%youtubefApFKmXcp2Y%} ##FullyConnectedLayer全連接層 這邊的全連接層跟我們進行手寫辨識的方式一樣,說穿了就是一個分類器,把我們經過數個卷積、池化後的結果進行分類。
這邊可能會有人有一個問題:「不是說全連接層會破壞圖片的空間結構嗎?」 是的,但是別忘了,我們已經經過數個卷積池化層了,現在每一個節點已經包含了空間結構的資訊在裡面,這個時候進行全連接層的分類就不會有破壞空間結構的問題。
在全連接層有趣的地方是,如果我們把這一層的輸出視覺化,直覺上會認為他輸出的視覺化圖形會接近我們認知的分類。
舉例來說,我們丟手寫數字進去經過CNN最後全連接層的輸出,理應出來的圖形會接近我們認知的數字型態。
然而我們實際將全連接層最後輸出視覺化會是下圖。
[^4] [^4]:參考論文: (1)AnhNguyen,JasonYosinskiandJeffClune.(2014).[*DeepNeuralNetworksareEasilyFooled:HighConfidencePredictionsforUnrecognizableImages.*](https://arxiv.org/pdf/1412.1897.pdf) (2)KarenSimonyan,AndreaVedaldiandAndrewZisserman.(2013).*[DeepInsideConvolutionalNetworks:VisualisingImageClassificationModelsandSaliencyMaps.](https://arxiv.org/pdf/1312.6034.pdf)* 我們如果將上圖加上ㄧ些constrain(Regularization),來告知系統說有些點不是我們需要的部分,就可以稍微看出一些端倪。
###應用一:AlphaGo ![](https://i.imgur.com/TDpCK3e.png) 如圖所示,棋盤本身就具有一定的空間結構,而CNN也的確在下棋這件事上面有著很不錯的表現,我們可以餵進許多的棋譜讓它學習到各種狀況下的下棋策略。
然而,我們在CNN上面有經過Maxpoolingsubsampling來縮小尺度保留特徵,棋盤似乎無法這樣做。
我們從AlohaGo的結構也發現,他們的確將poolinglayer拿掉了。
![](https://i.imgur.com/IjfZQbT.png) ###應用二:語音辨識 ![](https://i.imgur.com/xhPyOiU.png) 由於人類的說話本身也具有結構,因此利用語音建立的Spectrogram來進行CNN的訓練。
###應用三:文本分析 ![](https://i.imgur.com/gwyPhGV.png) 跟上面語音的概念相似,文本也具有類似的空間概念,因此也可以利用CNN來訓練出一個不錯的文本分析模型。
9 × Signin Email Password Forgotpassword or Byclickingbelow,youagreetoourtermsofservice. SigninviaFacebook SigninviaTwitter SigninviaGitHub SigninviaDropbox SigninviaGoogle NewtoHackMD?Signup
延伸文章資訊
- 1看懂卷積神經網路
這兩個概抄念實際上是互相交叉的,例如,卷積神經網路(Convolutional neural networks,簡稱CNNs)就是一種深度的監督學習下的機器學習模型,而深度置信 ...
- 2卷積神經網路(Convolutional Neural Networks,CNN) @ 凝視
卷積神經網路(Convolutional Neural Networks),CNN 也被稱為CNNs 或ConvNets,它是目前深度神經網路(deep neural network)領域的發展主力。
- 3卷積神經網路(CNN) 的發展 - Medium
卷積神經網路(Convolutional Neural Network, CNN)是深度學習裡極為重要的一門分支,電腦視覺這領域便是因為它的關係在近幾年有了許多重大的進展, ...
- 4卷積神經網路Convolutional Neural Networks - 資料科學・機器 ...
CNN 又被稱為CNNs 或ConvNets,它是目前深度神經網路(deep neural network)領域的發展主力,在圖片辨別上甚至可以做到比人類還精準的程度。如果要說有任何方法能不負大...
- 5近期必讀的12篇KDD 2019【圖神經網路(GNN)】相關論文
最近有一些關於層次學習圖表示的工作類似於傳統卷積神經網路(CNN)中的pooling步驟。然而,在匯聚過程中,區域性結構資訊在很大程度上仍然被忽略。本文介紹了一種基於圖的 ...