用戶:Pdeantihuman/沙盒1
機器學習與資料探勘 |
---|
此條目可參照外語維基百科相應條目來擴充。 |
卷積神經網絡(Convolutional Neural Network, CNN)是一種前饋神經網絡,它的類神經元可以響應一部分覆蓋範圍內的周圍單元,[1]對於大型圖像處理有出色表現。
卷積神經網絡受生物過程的啟發[2][3][4][5],神經元之間的連接模式類似於動物視覺皮層的組織。單個皮質神經元只在被稱為感受野的視野受限區域對刺激做出反應。不同神經元的感受野部分重疊,從而覆蓋整個視野。
卷積神經網絡由一個或多個卷積層和頂端的全連接層(對應經典的神經網絡)組成,同時也包括關聯權重和池化層(pooling layer)。這一結構使得卷積神經網絡能夠利用輸入數據的二維結構。與其他深度學習結構相比,卷積神經網絡在圖像和語音辨識方面能夠給出更好的結果。這一模型也可以使用反向傳播演算法進行訓練。相比較其他深度、前饋神經網絡,卷積神經網絡需要考量的參數更少,使之成為一種頗具吸引力的深度學習結構[6]。
定義
「卷積神經網絡」表示在網絡採用稱為卷積的數學運算。卷積是一種特殊的線性操作。卷積網絡是一種特殊的神經網絡,它們在至少一個層中使用卷積代替一般矩陣乘法。
卷積神經網絡所使用的運算通常是互相關運算而非真正的卷積。
設計
卷積神經網絡由輸入層和輸出層以及多個隱藏層組成。CNN的隱藏層通常由一系列卷積層組成,這些卷積層與乘法或其他點積進行卷積。啟用功能通常是ReLU層,隨後是附加的卷積,例如池化層、全連接層和正則化層。因為它們的輸入和輸出被啟用功能和最終卷積所掩蓋,這些層被稱為隱藏層。
儘管這些層被通俗地稱為卷積,但這只是慣例。從數學上講,它是一個滑動點積和互相關運算。這對於矩陣中元素的指標具有重要意義,因為它影響矩陣中的特定元素確定權重的方式。
卷積層
卷積層的輸入是一個張量,有4個空間維度,為(圖像數量)x(圖像寬度)x(圖像高度)x(圖像深度)。然後在通過卷積層之後,圖像被抽象成特徵圖,具有空間維度(圖像數量)x(特徵圖寬度)x(特徵圖高度)x(特徵圖通道)。神經網絡中的卷積層應該具有以下屬性:
- 卷積窗口大小為寬度x高度的卷積核。寬度和高度是超參數。
- 輸入通道和輸出通道的數量。輸出通道數是超參數。
- 卷積核的輸入通道數必須等於輸入特徵圖的通道數。
卷積層對輸入進行卷積,並將結果傳遞給下一層。這類似於視覺皮層的神經元對特定刺激的反應。每個卷積神經元只處理其感受野的數據。儘管全連接的前饋神經網絡可以用於學習特徵以及分類數據,但是將這種結構應用於圖像是不實際的。由於與圖像相關的輸入尺寸非常大,其中每個像素都是相關的變數,因此即使在相當淺的架構中,也需要非常多的參數。例如,大小為100×100的(小)圖像的全連接層對於第二層中的每個神經元具有10,000個權重。卷積運算解決了這個問題,因為它減少了自由參數的數量,允許網絡用更少的參數更深。例如,不管圖像大小如何,大小為5×5的平鋪區域,每個區域具有相同的共用權重,只需要25個可學習的參數。這樣就解決了傳統多層神經網絡訓練中梯度消失或爆炸的問題。
輸出通道為 1 的卷積層在所有輸入通道上作用卷積核後將輸出相加。輸出通道為 n 的卷積層需要 n 個卷積核,各自作用在所有輸入通道上,最後將各個輸出通道的輸出連結為一個(圖像數量)x(特徵圖寬度)x(特徵圖高度)x(特徵圖通道)的張量。
步幅
卷積層的卷積窗口一開始處於輸入的最左上方(指標最小的)位置,依照從左到右,從上到下(單一指標增加)的方向移動。而移動的單位稱為步幅 。
填充
卷積層的輸入可以在上下兩邊添加 行 0 元素,在左右兩邊添加 列 0 元素。 和 稱為卷積層的零填充。
池化層
卷積網絡可能包括局部或全域池化層,以簡化底層計算。池化層通過將一層的輸出合併到下一層的單個神經元中來降低數據的維數。局部池結合了小型叢集,通常為2 x 2。全域池化作用於卷積層的所有神經元。此外,池化運算可以是計算最大值,也可以是平均值。最大池化使用前一層的感受野中的最大值。平均池化使用前一層神經元感受野的平均值。
池化層與卷積層一樣也有池化窗口,步幅和零填充的概念。
全連接層
全連接的層將一層中的每個神經元連接到另一層中的每個神經元。它原則上與傳統的多層感知器神經網絡(MLP)相同。展平的矩陣通過全連接的層來分類圖像。
感受野
在神經網絡中,每個神經元從前一層的一些位置接收輸入。在全連接的層中,每個神經元接收來自前一層的每個元素的輸入。在卷積層,神經元只接收來自前一層的受限子區域的輸入。典型地,子區域是正方形的(例如,大小為5×5)。神經元的輸入區域稱為感受野。因此,在一個全連接的層中,感受野是整個前一層。在卷積層中,感受野僅僅是前一層的一部分。
權重
神經網絡中的每個神經元通過對來自前一層感受野的輸入值應用特定函數來計算輸出值。應用於輸入值的函數由權重向量和偏差(通常為實數)決定。在神經網絡中,學習是通過對這些偏差和權重進行迭代調整來進行的。
權重向量和偏差被稱為過濾器,並表示輸入的特定特徵(例如,特定形狀)。CNN的一個顯著特徵是許多神經元可以共用同一個過濾器。這減少了記憶足跡,因為在共用該過濾器的所有感受野中使用了單個偏置和單個權重向量,而不是每個感受野都有其自己的偏置和向量權重。
發展
梯度下降法訓練CNN辨識圖像
1989年貝爾實驗室開發了一個辨識手寫郵政編碼的系統[7]。系統中包含卷積運算,其中的卷積核係數是手工精心設計的[8]。
Yann LeCun等人(1989)[8] 使用反向傳播直接從手寫數碼圖像中學習卷積核係數。參數的學習是完全自動化的,比手動係數設計表現得更好,並且適用於更廣泛的圖像辨識問題和圖像類型。
這種方法成為現代電腦視覺的基礎。
LeNet-5
LeNet-5是LeCun等人於1998年開發的一種7層卷積網絡[9] ,用於辨識手寫數字,已被幾家銀行用於辨識在32×32像素圖像中數碼化的支票(英國英語:支票)上的手寫數字。處理高解像度圖像的能力需要越來越多的卷積神經網絡層,因此這種技術受到計算資源可用性的限制。
GPU 實現
儘管CNN是在20世紀80年代發明的,但它們在21世紀的突破依賴於CNN在GPU上的高效能實現。
2004年,吳光正和榮格證明了標準神經網絡可以在GPU上大大加速。它們的實現比在CPU上的同等實現快20倍.[10][11]。2005年,另一篇論文也強調了GPU對於機器學習的價值。[12]
2006年,切爾皮拉等人描述了CNN的第一個GPU實現。它們的實現比在CPU上的同等實現快4倍。[13] 隨後的工作也使用GPU,最初用於其他類型的神經網絡(不同於CNN),尤其是無監督的神經網絡。[14][15][16][17]
在2010年,IDSIA的丹·西瑞森(Dan Ciresan)等人證明,即使是多層的深層標準神經網絡,也可以通過監督學習,用稱為反向傳播的老方法,在GPU上快速訓練。他們的網絡在MNIST手寫數字基準上優於以前的機器學習方法。[18]2011年,他們將這種GPU方法擴充到CNN,實現了60倍的加速係數,取得了令人印象深刻的結果。[19]2011年,他們在GPU上使用這種CNN贏得了一場圖像辨識比賽,他們第一次獲得了超人的表現。[20] 在2011年5月15日至2012年9月30日期間,他們的CNN贏得了至少四次圖像比賽。[21][11] 2012年,他們在多個圖像資料庫(包括MNIST資料庫、NORB資料庫、HWDB1.0數據集(中文字元)和CIFAR10數據集(60000個32x32標記的RGB圖像數據集)的文獻中的最佳效能方面也有顯著提高。[22]
隨後,亞歷克斯·克里熱夫斯基等人基於GPU的類似的美國CNN贏得了2012年ImageNet 大規模視覺辨識挑戰賽[23]。他們在這場比賽中提出的網絡結構稱為AlexNet。它刺激了更多使用卷積神經網絡和GPU來加速深度學習的論文的出現[24]。
結構
卷積層
卷積層是一組平行的特徵圖(feature map),它通過在輸入圖像上滑動不同的卷積核並執行一定的運算而組成。此外,在每一個滑動的位置上,卷積核與輸入圖像之間會執行一個元素對應乘積並求和的運算以將感受野內的資訊投影到特徵圖中的一個元素。這一滑動的過程可稱爲步幅 ,步幅 是控制輸出特徵圖尺寸的一個因素。卷積核的尺寸要比輸入圖像小得多,且重疊或平行地作用於輸入圖像中,一張特徵圖中的所有元素都是通過一個卷積覈計算得出的,也即一張特徵圖共用了相同的權重和偏置項。
線性整流層
線性整流層(Rectified Linear Units layer, ReLU layer)使用線性整流(Rectified Linear Units, ReLU) 作為這一層神經的激勵函數(Activation function)。它可以增強判定函數和整個神經網絡的非線性特性,而本身並不會改變卷積層。
事實上,其他的一些函數也可以用於增強網絡的非線性特性,如雙曲正切函數 , ,或者Sigmoid函數 。相比其它函數來說,ReLU函數更受青睞,這是因為它可以將神經網絡的訓練速度提升數倍[26],而並不會對模型的泛化準確度造成顯著影響。
池化層
池化(Pooling)是卷積神經網絡中另一個重要的概念,它實際上是一種非線性形式的降採樣。有多種不同形式的非線性池化函數,而其中「最大池化(Max pooling)」是最為常見的。它是將輸入的圖像劃分為若干個矩形區域,對每個子區域輸出最大值。
直覺上,這種機制能夠有效地原因在於,一個特徵的精確位置遠不及它相對於其他特徵的粗略位置重要。池化層會不斷地減小數據的空間大小,因此參數的數量和計算量也會下降,這在一定程度上也控制了過擬合。通常來說,CNN的網絡結構中的卷積層之間都會周期性地插入池化層。池化操作提供了另一種形式的平移不變性。因為卷積核是一種特徵發現器,我們通過卷積層可以很容易地發現圖像中的各種邊緣。但是卷積層發現的特徵往往過於精確,我們即使高速連拍拍攝一個物體,相片中的物體的邊緣像素位置也不大可能完全一致,通過池化層我們可以降低卷積層對邊緣的敏感性。
池化層每次在一個池化窗口(depth slice)上計算輸出,然後根據步幅移動池化窗口。下圖是目前最常用的池化層,步幅為2,池化窗口為 的二維最大池化層。每隔2個元素從圖像劃分出 的區塊,然後對每個區塊中的4個數取最大值。這將會減少75%的數據量。
除了最大池化之外,池化層也可以使用其他池化函數,例如「平均池化」甚至「L2-範數池化」等。過去,平均池化的使用曾經較為廣泛,但是最近由於最大池化在實踐中的表現更好,平均池化已經不太常用。
由於池化層過快地減少了數據的大小,目前文獻中的趨勢是使用較小的池化濾鏡,[27]甚至不再使用池化層。[28]
RoI池化(Region of Interest)是最大池化的變體,其中輸出大小是固定的,輸入矩形是一個參數。[29]
池化層是基於 Fast-RCNN [30]架構的卷積神經網絡的一個重要組成部分。
全連接層
最後,在經過幾個卷積和最大池化層之後,神經網絡中的進階推理通過全連接層來完成。就和常規的非卷積類神經網絡中一樣,全連接層中的神經元與前一層中的所有啟用都有聯絡。因此,它們的啟用可以作為仿射變換來計算,也就是先乘以一個矩陣然後加上一個偏差(bias)偏移量(向量加上一個固定的或者學習來的偏差量)。
損失函數層
損失函數層(loss layer)用於決定訓練過程如何來「懲罰」網絡的預測結果和真實結果之間的差異,它通常是網絡的最後一層。各種不同的損失函數適用於不同類型的任務。例如,Softmax交叉熵損失函數常常被用於在K個類別中選出一個,而Sigmoid交叉熵損失函數常常用於多個獨立的二分類問題。歐幾里德損失函數常常用於標籤取值範圍為任意實數的問題。
應用
影像辨識
卷積神經網絡通常在影像辨識系統中使用。
視像分析
相比影像辨識問題,視像分析要難許多。CNN也常被用於這類問題。
自然語言處理
卷積神經網絡也常被用於自然語言處理。 CNN的模型被證明可以有效的處理各種自然語言處理的問題,如語意分析[31]、搜尋結果提取[32]、句子建模[33] 、分類[34]、預測[35]、和其他傳統的NLP任務[36] 等。
藥物發現
卷積神經網路已在藥物發現中使用。卷積神經網絡被用來預測的分子與蛋白質之間的相互作用,以此來尋找靶向位點,尋找出更可能安全和有效的潛在治療方法。
圍棋
卷積神經網絡在電腦圍棋領域也被使用。2016年3月,AlphaGo對戰李世乭的比賽,展示了深度學習在圍棋領域的重大突破。
微調(fine-tuning)
卷積神經網絡(例如Alexnet、VGG網絡)在網絡的最後通常為softmax分類器。微調一般用來調整softmax分類器的分類數。例如原網絡可以分類出2種圖像,需要增加1個新的分類從而使網絡可以分類出3種圖像。微調(fine-tuning)可以留用之前訓練的大多數參數,從而達到快速訓練收斂的效果。例如保留各個卷積層,只重構卷積層後的全連接層與softmax層即可。
經典模型
可用包
- roNNie: 是一個簡易入門級框架,使用Tensorflow 計算層.可於python下載 pip3 ronnie
- Caffe: Caffe包含了CNN使用最廣泛的庫。它由伯克利視覺和學習中心(BVLC)研發,擁有比一般實現更好的結構和更快的速度。同時支援CPU和GPU計算,底層由C++實現,並封裝了Python和MATLAB的介面。
- Torch7(www.torch.ch)
- OverFeat
- Cuda-convnet
- MatConvnet
- Theano:用Python實現的神經網絡包[37]
- TensorFlow
- Paddlepaddle(www.paddlepaddle.org)
- Keras
參考
- ^ Convolutional Neural Networks (LeNet) - DeepLearning 0.1 documentation. DeepLearning 0.1. LISA Lab. [31 August 2013].
- ^ 參照錯誤:沒有為名為
fukuneoscholar
的參考文獻提供內容 - ^ 參照錯誤:沒有為名為
hubelwiesel1968
的參考文獻提供內容 - ^ 參照錯誤:沒有為名為
intro
的參考文獻提供內容 - ^ Matusugu, Masakazu; Katsuhiko Mori; Yusuke Mitari; Yuji Kaneda. Subject independent facial expression recognition with robust face detection using a convolutional neural network (PDF). Neural Networks. 2003, 16 (5): 555–559 [17 November 2013]. PMID 12850007. doi:10.1016/S0893-6080(03)00115-1.
- ^ Convolutional Neural Network. [2014-09-16].
- ^ Denker, J S , Gardner, W R., Graf, H. P, Henderson, D, Howard, R E, Hubbard, W, Jackel, L D , BaIrd, H S, and Guyon (1989) Neural network recognizer for hand-written zip code digits, AT&T Bell Laboratories
- ^ 8.0 8.1 Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, L. D. Jackel, Backpropagation Applied to Handwritten Zip Code Recognition; AT&T Bell Laboratories
- ^ LeCun, Yann; Léon Bottou; Yoshua Bengio; Patrick Haffner. Gradient-based learning applied to document recognition (PDF). Proceedings of the IEEE. 1998, 86 (11): 2278–2324 [October 7, 2016]. CiteSeerX 10.1.1.32.9552 . doi:10.1109/5.726791.
- ^ Oh, KS; Jung, K. GPU implementation of neural networks.. Pattern Recognition. 2004, 37 (6): 1311–1314. doi:10.1016/j.patcog.2004.01.013.
- ^ 11.0 11.1 Schmidhuber, Jürgen. Deep Learning. Scholarpedia. 2015, 10 (11): 1527–54. CiteSeerX 10.1.1.76.1541 . PMID 16764513. doi:10.1162/neco.2006.18.7.1527.
- ^ Dave Steinkraus; Patrice Simard; Ian Buck. Using GPUs for Machine Learning Algorithms. 12th International Conference on Document Analysis and Recognition (ICDAR 2005). 2005: 1115–1119.
- ^ Kumar Chellapilla; Sid Puri; Patrice Simard. High Performance Convolutional Neural Networks for Document Processing. Lorette, Guy (編). Tenth International Workshop on Frontiers in Handwriting Recognition. Suvisoft. 2006.
- ^ Hinton, GE; Osindero, S; Teh, YW. A fast learning algorithm for deep belief nets.. Neural Computation. Jul 2006, 18 (7): 1527–54. CiteSeerX 10.1.1.76.1541 . PMID 16764513. doi:10.1162/neco.2006.18.7.1527.
- ^ Bengio, Yoshua; Lamblin, Pascal; Popovici, Dan; Larochelle, Hugo. Greedy Layer-Wise Training of Deep Networks (PDF). Advances in Neural Information Processing Systems. 2007: 153–160.
- ^ Ranzato, MarcAurelio; Poultney, Christopher; Chopra, Sumit; LeCun, Yann. Efficient Learning of Sparse Representations with an Energy-Based Model (PDF). Advances in Neural Information Processing Systems. 2007.
- ^ Raina, R; Madhavan, A; Ng, Andrew. Large-scale deep unsupervised learning using graphics processors. (PDF). ICML. 2009: 873–880.
- ^ Ciresan, Dan; Meier, Ueli; Gambardella, Luca; Schmidhuber, Jürgen. Deep big simple neural nets for handwritten digit recognition.. Neural Computation. 2010, 22 (12): 3207–3220. PMID 20858131. arXiv:1003.0358 . doi:10.1162/NECO_a_00052.
- ^ Ciresan, Dan; Ueli Meier; Jonathan Masci; Luca M. Gambardella; Jurgen Schmidhuber. Flexible, High Performance Convolutional Neural Networks for Image Classification (PDF). Proceedings of the Twenty-Second International Joint Conference on Artificial Intelligence-Volume Volume Two. 2011, 2: 1237–1242 [17 November 2013].
- ^ IJCNN 2011 Competition result table. OFFICIAL IJCNN2011 COMPETITION. 2010 [2019-01-14] (美國英語).
- ^ Schmidhuber, Jürgen. History of computer vision contests won by deep CNNs on GPU. 17 March 2017 [14 January 2019] (美國英語).
- ^ 參照錯誤:沒有為名為
mcdns
的參考文獻提供內容 - ^ 參照錯誤:沒有為名為
:02
的參考文獻提供內容 - ^ Deshpande, Adit. The 9 Deep Learning Papers You Need To Know About (Understanding CNNs Part 3). adeshpande3.github.io. [2018-12-04].
- ^ He, Kaiming; Zhang, Xiangyu; Ren, Shaoqing; Sun, Jian. Deep Residual Learning for Image Recognition. (PDF). 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2016.
- ^ Krizhevsky, A.; Sutskever, I.; Hinton, G. E. Imagenet classification with deep convolutional neural networks. Advances in Neural Information Processing Systems. 2012, 1: 1097–1105. (原始內容存檔於2015-02-16).
- ^ Graham, Benjamin. Fractional Max-Pooling. 2014-12-18. arXiv:1412.6071 [cs.CV].
- ^ Springenberg, Jost Tobias; Dosovitskiy, Alexey; Brox, Thomas; Riedmiller, Martin. Striving for Simplicity: The All Convolutional Net. 2014-12-21. arXiv:1412.6806 [cs.LG].
- ^ Grel, Tomasz. Region of interest pooling explained. deepsense.io. 2017-02-28 (英語).
- ^ Girshick, Ross. Fast R-CNN. 2015-09-27. arXiv:1504.08083 [cs.CV].
- ^ Grefenstette, Edward; Blunsom, Phil; de Freitas, Nando; Hermann, Karl Moritz. A Deep Architecture for Semantic Parsing. 2014-04-29. arXiv:1404.7296 [cs.CL].
- ^ Learning Semantic Representations Using Convolutional Neural Networks for Web Search – Microsoft Research. research.microsoft.com. [2015-12-17].
- ^ Kalchbrenner, Nal; Grefenstette, Edward; Blunsom, Phil. A Convolutional Neural Network for Modelling Sentences. 2014-04-08. arXiv:1404.2188 [cs.CL].
- ^ Kim, Yoon. Convolutional Neural Networks for Sentence Classification. 2014-08-25. arXiv:1408.5882 [cs.CL].
- ^ 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.
- ^ 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].
- ^ 深度網絡:Theano專案首頁。