本頁使用了標題或全文手工轉換

卷積神經網路

維基百科,自由的百科全書
跳至導覽 跳至搜尋

卷積神經網路(Convolutional Neural Network, CNN)是一種前饋神經網路,它的人工神經元可以回應一部分覆蓋範圍內的周圍單元,[1]對於大型圖像處理有出色表現。

卷積神經網路由一個或多個卷積層和頂端的全連通層(對應經典的神經網路)組成,同時也包括關聯權重和池化層(pooling layer)。這一結構使得卷積神經網路能夠利用輸入資料的二維結構。與其他深度學習結構相比,卷積神經網路在圖像和語音辨識方面能夠給出更好的結果。這一模型也可以使用反向傳播演算法進行訓練。相比較其他深度、前饋神經網路,卷積神經網路需要考量的參數更少,使之成為一種頗具吸引力的深度學習結構[2]

定義[編輯]

「卷積神經網路」表示在網路採用稱為卷積的數學運算。卷積是一種特殊的線性操作。卷積網路是一種特殊的神經網路,它們在至少一個層中使用卷積代替一般矩陣乘法

概覽[編輯]

發展[編輯]

CNN是根據生物的視覺處理過程來進行設計的。[來源請求]

大腦中視覺皮層接收視覺訊號的過程[編輯]

HubelWiesel在20世紀50年代到20世紀60年代的研究發現,貓和猴子的視覺皮層中包含著能分別對某一小塊視覺區域進行回應的神經元。當眼睛不動的時候,在一定區域內的視覺刺激能使單個神經元興奮,那這個區域就稱為這個神經元的感受範圍。相鄰的細胞具有相似且重疊的感受範圍。[來源請求]為了形成一張完整的視覺圖像,整個視覺皮層上的神經元的感受範圍的大小和位置呈現系統性的變化。[來源請求]左腦和右腦分別對應其對側的視野。[來源請求] 他們在其1968年的一篇論文中確定了大腦中有兩種不同的基本視覺細胞:

  • 簡單細胞
  • 複雜細胞

Hubel和Wiesel還提出了這兩種細胞用於圖型識別任務的級聯模型。

結構[編輯]

卷積層[編輯]

卷積層是一組平行的特徵圖(feature map),它通過在輸入圖像上滑動不同的卷積核並執行一定的運算而組成。此外,在每一個滑動的位置上,卷積核與輸入圖像之間會執行一個元素對應乘積並求和的運算以將感受野內的資訊投影到特徵圖中的一個元素。這一滑動的過程可稱爲步幅 Z_s,步幅 Z_s 是控制輸出特徵圖尺寸的一個因素。卷積核的尺寸要比輸入圖像小得多,且重疊或平行地作用於輸入圖像中,一張特徵圖中的所有元素都是通過一個卷積核計算得出的,也即一張特徵圖共享了相同的權重和偏置項。

線性整流層[編輯]

線性整流層(Rectified Linear Units layer, ReLU layer)使用線性整流(Rectified Linear Units, ReLU)作為這一層神經的激勵函式(Activation function)。它可以增強判定函式和整個神經網路的非線性特性,而本身並不會改變卷積層。

事實上,其他的一些函式也可以用於增強網路的非線性特性,如雙曲正切函式 , ,或者Sigmoid函式。相比其它函式來說,ReLU函式更受青睞,這是因為它可以將神經網路的訓練速度提升數倍[3],而並不會對模型的泛化準確度造成顯著影響。

池化層[編輯]

步幅為2,池化窗口為的最大池化層

池化(Pooling)是卷積神經網路中另一個重要的概念,它實際上是一種非線性形式的降採樣。有多種不同形式的非線性池化函式,而其中「最大池化(Max pooling)」是最為常見的。它是將輸入的圖像劃分為若干個矩形區域,對每個子區域輸出最大值。

直覺上,這種機制能夠有效地原因在於,一個特徵的精確位置遠不及它相對於其他特徵的粗略位置重要。池化層會不斷地減小資料的空間大小,因此參數的數量和計算量也會下降,這在一定程度上也控制了過擬合。通常來說,CNN的網路結構中的卷積層之間都會周期性地插入池化層。池化操作提供了另一種形式的平移不變性。因為卷積核是一種特徵發現器,我們通過卷積層可以很容易地發現圖像中的各種邊緣。但是卷積層發現的特徵往往過於精確,我們即使高速連拍拍攝一個物體,相片中的物體的邊緣像素位置也不大可能完全一致,通過池化層我們可以降低卷積層對邊緣的敏感性。

池化層每次在一個池化窗口(depth slice)上計算輸出,然後根據步幅移動池化窗口。下圖是目前最常用的池化層,步幅為2,池化窗口為的二維最大池化層。每隔2個元素從圖像劃分出的區塊,然後對每個區塊中的4個數取最大值。這將會減少75%的資料量。

除了最大池化之外,池化層也可以使用其他池化函式,例如「平均池化」甚至「L2-範數池化」等。過去,平均池化的使用曾經較為廣泛,但是最近由於最大池化在實踐中的表現更好,平均池化已經不太常用。

由於池化層過快地減少了資料的大小,目前文獻中的趨勢是使用較小的池化濾鏡,[4]甚至不再使用池化層。[5]

RoI池化(Region of Interest)是最大池化的變體,其中輸出大小是固定的,輸入矩形是一個參數。[6]

池化層是基於 Fast-RCNN [7]架構的卷積神經網路的一個重要組成部分。

完全連接層[編輯]

最後,在經過幾個卷積和最大池化層之後,神經網路中的進階推理通過完全連接層來完成。就和常規的非卷積人工神經網路中一樣,完全連接層中的神經元與前一層中的所有啟用都有聯絡。因此,它們的啟用可以作為仿射變換來計算,也就是先乘以一個矩陣然後加上一個偏差(bias)偏移量(向量加上一個固定的或者學習來的偏差量)。

應用[編輯]

影像辨識[編輯]

卷積神經網路通常在影像辨識系統中使用。

視訊分析[編輯]

相比影像辨識問題,視訊分析要難許多。CNN也常被用於這類問題。

自然語言處理[編輯]

卷積神經網路也常被用於自然語言處理。 CNN的模型被證明可以有效的處理各種自然語言處理的問題,如語意分析[8]、搜尋結果提取[9]、句子建模[10] 、分類[11]、預測[12]、和其他傳統的NLP任務[13] 等。

藥物發現[編輯]

卷積神經網路已在藥物發現中使用。卷積神經網路被用來預測的分子與蛋白質之間的相互作用,以此來尋找靶向位點,尋找出更可能安全和有效的潛在治療方法。

圍棋[編輯]

卷積神經網路在電腦圍棋領域也被使用。2016年3月,AlphaGo對戰李世乭的比賽,展示了深度學習在圍棋領域的重大突破。

微調(fine-tuning)[編輯]

卷積神經網路(例如Alexnet、VGG網路)在網路的最後通常為softmax分類器。微調一般用來調整softmax分類器的分類數。例如原網路可以分類出2種圖像,需要增加1個新的分類從而使網路可以分類出3種圖像。微調(fine-tuning)可以留用之前訓練的大多數參數,從而達到快速訓練收斂的效果。例如保留各個卷積層,只重構卷積層後的全連接層與softmax層即可。

經典模型[編輯]

可用包[編輯]

  • roNNie: 是一個簡易入門級框架,使用Tensorflow 計算層.可於python下載 pip3 ronnie
  • Caffe: Caffe包含了CNN使用最廣泛的庫。它由伯克利視覺和學習中心(BVLC)研發,擁有比一般實現更好的結構和更快的速度。同時支援CPUGPU計算,底層由C++實現,並封裝了Python和MATLAB的介面。
  • Torch7(www.torch.ch)
  • OverFeat
  • Cuda-convnet
  • MatConvnet
  • Theano:用Python實現的神經網路包[14]
  • TensorFlow
  • Paddlepaddle(www.paddlepaddle.org)
  • Keras

參考[編輯]

  1. ^ Convolutional Neural Networks (LeNet) - DeepLearning 0.1 documentation. DeepLearning 0.1. LISA Lab. [31 August 2013]. (原始內容存檔於2017-12-28). 
  2. ^ Convolutional Neural Network. [2014-09-16]. 
  3. ^ Krizhevsky, A.; Sutskever, I.; Hinton, G. E. Imagenet classification with deep convolutional neural networks. Advances in Neural Information Processing Systems. 2012, 1: 1097–1105 [2016-11-20]. (原始內容存檔於2015-02-16). 
  4. ^ Graham, Benjamin. Fractional Max-Pooling. 2014-12-18. arXiv:1412.6071 [cs.CV]. 
  5. ^ Springenberg, Jost Tobias; Dosovitskiy, Alexey; Brox, Thomas; Riedmiller, Martin. Striving for Simplicity: The All Convolutional Net. 2014-12-21. arXiv:1412.6806 [cs.LG]. 
  6. ^ Grel, Tomasz. Region of interest pooling explained. deepsense.io. 2017-02-28. (原始內容存檔於2017-06-02) (英語). 
  7. ^ Girshick, Ross. Fast R-CNN. 2015-09-27. arXiv:1504.08083 [cs.CV]. 
  8. ^ Grefenstette, Edward; Blunsom, Phil; de Freitas, Nando; Hermann, Karl Moritz. A Deep Architecture for Semantic Parsing. 2014-04-29. arXiv:1404.7296 [cs.CL]. 
  9. ^ Learning Semantic Representations Using Convolutional Neural Networks for Web Search – Microsoft Research. research.microsoft.com. [2015-12-17]. 
  10. ^ Kalchbrenner, Nal; Grefenstette, Edward; Blunsom, Phil. A Convolutional Neural Network for Modelling Sentences. 2014-04-08. arXiv:1404.2188 [cs.CL]. 
  11. ^ Kim, Yoon. Convolutional Neural Networks for Sentence Classification. 2014-08-25. arXiv:1408.5882 [cs.CL]. 
  12. ^ Collobert, Ronan, and Jason Weston. "A unified architecture for natural language processing: Deep neural networks with multitask learning."Proceedings of the 25th international conference on Machine learning. ACM, 2008.
  13. ^ Collobert, Ronan; Weston, Jason; Bottou, Leon; Karlen, Michael; Kavukcuoglu, Koray; Kuksa, Pavel. Natural Language Processing (almost) from Scratch. 2011-03-02. arXiv:1103.0398 [cs.LG]. 
  14. ^ 深度网络:Theano项目主页。. [2015-04-24]. (原始內容存檔於2020-11-08).