卷積神經網路(Convolutional Neural Networks,CNN) @ 凝視

文章推薦指數: 80 %
投票人數:10人

卷積神經網路(Convolutional Neural Networks),CNN 也被稱為CNNs 或ConvNets,它是目前深度神經網路(deep neural network)領域的發展主力。

­凝視、散記卷積神經網路(ConvolutionalNeuralNetworks),CNN也被稱為CNNs或ConvNets,它是目前深度神經網路(deepneuralnetwork)領域的發展主力。

CNN在影像辨識中甚至可以超越人類辨識的精準度。

CNN是一個很直觀的演算法,CNN的概念跟人類以眼睛去辨識有模擬相似之處。

先用CNN的始祖Model:LeNet,以LeNet來介紹CNN的運作。

以下是LeNet的模型架構( 源自YannLeCun1998年論文 )LeNetArchitecture,1998LetNet對輸入的圖片做了2次Convolutions(卷積)、2次Subsampling(採樣),跟2次Fullconnection(全連結),還有1次Gaussianconnections(高斯連結);其中Convolution跟Subsampling是在對圖片做「特徵擷取」的動作,最後把特徵擷取出來後,後面再展開(flattering)用Fullconnection做「分類」。

【CNN要點】卷積神經網路就是:使用kernel(decoder)對圖片做特徵擷取,並找出最佳的特徵,以進行分類卷積神經網路是通過神經網路反向傳播自動學習的手段,來得到各種有用的卷積核的過程。

卷積神經網路由一個或多個卷積層和頂端的全連通層組成,也包括關聯權重和池化層(poolinglayer)。

使卷積神經網路能夠利用輸入資料的二維結構。

卷積神經網路在圖像和語音辨識聚集佳的運作結果。

這一模型也可以使用反向傳播演算法進行訓練。

相比較其他深度、前饋神經網路,卷積神經網路需要考量的參數更少,使之成為一種頗具吸引力的深度學習結構。

卷積神經網路通過卷積(Convolution)和池化(Pooling)操作,自動學習圖像在各個層次上的特徵。

典型的卷積神經網路通常由以下三種Layers共同組成:卷積層(Convolutionlayer)、子採樣池化層(Subsampling/Poolinglayer)、全連接層(Fullyconnectedlayer)。

卷積層(ConvolutionLayer):對輸入圖像進行降維和特徵抽取卷積運算是線性操作,而神經網路要擬合的是非線性的函數,因此和前全連接網路類似,我們需要加上啟動函數,常用的有sigmoid函數,tanh函數,ReLU函數等。

神經網路前部卷積層有小的感受野,可以捕捉圖像局部、細節資訊,即輸出圖像的每個圖元(Activation啟動值)只是感受到輸入圖像很小範圍數值進行計算的結果。

卷積運算就是將原始圖片的與特定的FeatureDetector(filter)做卷積運算(符號⊗)。

卷積運算就是將下圖兩個3x3的矩陣作相乘後再相加,以下圖為例0*0+0*0+0*1+0*1+1*0+0*0+0*0+0*1+0*1=0中間的FeatureDetector(Filter)會隨機產生好幾種(ex:16種)。

FeatureDetector的目的就是幫助我們萃取出圖片當中的一些特徵,模擬人大腦在判讀圖片時的反應和運作,如根據:形狀、顏色、輪廓、對比等特徵。

在LeNet的架構中,第一層的卷積層,Input為32x32的image,經過Convolutions的時候出現6張28X28的Featuremap。

池化層(Pooling)通過卷積操作,我們完成了對輸入圖像的降維和特徵抽取,但特徵圖像的維數還是很高。

維數高不僅計算耗時,而且容易導致過擬合。

為此引入了下採樣技術,也稱為pooling即池化操作。

Pooling常用的方式有二種,MaxPooling,MeanPooling。

Pooling的做法是對圖像的某一個區域用一個值代替,如最大值或平均值。

如果採用最大值,叫做max池化;如果採用均值,叫做均值池化。

除了降低圖像尺寸之外,下採樣帶來的另外一個好處是平移、旋轉不變性,因為輸出值由圖像的一片區域計算得到,對於平移和旋轉並不敏感。

總結池化層作用:降維,縮減模型大小,提高計算速度降低過擬合Overfitting,提升特徵提取Robutness對”微小”的變化保持不變性(invariance),旋轉、平移、伸縮等的不變性(不敏感)。

(參考:討論)池化層的具體實現是在進行卷積操作之後對得到的特徵圖像進行分塊,圖像被劃分成的不相交塊,計算這些塊內的最大值或平均值,得到池化後的圖像。

均值池化和max池化都可以完成下採樣操作,前者是線性函數,而後者是非線性函數,一般情況下max池化有更好的效果。

但近期一些性能優異的網路模型如ResNet和GoogLeNet等是採用全域均值池化(globalaveragepooling,GAP)取代FC來融合學到的深度特徵。

FullyConnectedLayer全連接層就是所謂的分類器,基本上全連接層的部分就是將之前的結果平坦化之後接到最基本的神經網絡了。

------------------------全連接就是個矩陣乘法,相當於一個特徵空間變換,可以把前面所有有用的資訊提取整合。

再加上啟動函數的非線性映射,多層全連接層理論上可以類比任何非線性變換。

但缺點也很明顯:無法保持空間結構。

全連接的一個作用是維度變換,尤其是可以把高維變到低維,同時把有用的資訊保留下來。

全連接另一個作用是隱含語義的表達(embedding),把原始特徵映射到各個隱語義節點(hiddennode)。

對於最後一層全連接而言,就是分類的顯示表達。

不同channel同一位置上的全連接等價與1x1的卷積。

N個節點的全連接可近似為N個範本卷積後的均值池化(GAP)。

最近的論文,你會發現,FC可以用GAP(GlobalAveragePooling)的方法代替。

GAP就是:用featuremap直接表示屬於某個類的confidencemap,比如有10個類,就在最後輸出10個featuremap,每個featuremap中的值加起來求平均值,然後把得到的這些平均值直接作為屬於某個類別的confidencevalue,再輸入softmax中分類,更重要的是實驗效果並不比用FC差。

GAP的優勢是:1.因為FC的參數眾多,這麼做就減少了參數的數量(在最近比較火的模型壓縮中,這個優勢可以很好的壓縮模型的大小)。

2.因為減少了參數的數量,可以很好的減輕過擬合的發生。

另外,這種直接用featuremap表示屬於某個類的confidencemap的做法很符合CNN的思想。

關於這點我的理解是這樣的:比如最後要分10個類,假設在有FC的network中,FC前面一層的featuremap用A表示,A經過FC的作用得到了一個10維的向量(假設用C表示),然後輸入softmax等分類器中分類。

既然CNN的學習能力很強,那為什麼不直接讓CNN學習輸出C(而不是A)呢?可以看到這種思想和CNN結合的很好(FCN也是用了類似的思想,以前的segmentation需要做很多的pre-processing/post-processing,比如regionproposal等,然後用CNN提取特徵,雖然比較繁瑣但效果還是很好的。

於是就有人想到,既然CNN那麼牛,乾脆什麼都讓CNN做,這樣就可以省去繁瑣的processing了,於是就出現了pixel-to-pixel的segmentation)。

理解1:卷積取的是局部特徵,全連接就是把以前的局部特徵重新通過權值矩陣組裝成完整的圖。

因為用到了所有的局部特徵,所以叫全連接。

理解2:從卷積網路談起,卷積網路在形式上有一點點像咱們正在召開的“人民代表大會制度”。

卷積核的個數相當於候選人,圖像中不同的特徵會啟動不同的“候選人”(卷積核)。

池化層(僅指最大池化)起著類似於“合票”的作用,不同特徵在對不同的“候選人”有著各自的喜好。

全連接相當於是“代表普選”。

所有被各個區域選出的代表,對最終結果進行“投票”,全連接保證了receiptivefield是整個圖像,既圖像中各個部分(所謂所有代表),都有對最終結果影響的權利。

理解3:假設你是一隻小螞蟻,你的任務是找小麵包。

你的視野還比較窄,只能看到很小一片區域。

當你找到一片小麵包之後,你不知道你找到的是不是全部的小麵包,所以你們全部的螞蟻開了個會,把所有的小麵包都拿出來分享了。

全連接層就是這個螞蟻大會~理解4:例如經過卷積,relu後得到3x3x5的輸出。

那它是怎麼樣把3x3x5的輸出,轉換成1x4096的形式?很簡單,可以理解為在中間做了一個卷積。

從上圖我們可以看出,我們用一個3x3x5的filter去卷積啟動函數的輸出,得到的結果就是一個fullyconnectedlayer的一個神經元的輸出,這個輸出就是一個值。

因為我們有4096個神經元。

我們實際就是用一個3x3x5x4096的卷積層去卷積啟動函數的輸出。

以VGG-16再舉個例子吧,對224x224x3的輸入,最後一層卷積可得輸出為7x7x512,如後層是一層含4096個神經元的FC,則可用卷積核為7x7x512x4096的全域卷積來實現這一全連接運算過程。

它把特徵representation整合到一起,輸出為一個值。

這樣做,有一個什麼好處?就是大大減少特徵位置對分類帶來的影響。

舉個簡單的例子:從上圖我們可以看出,貓在不同的位置,輸出的feature值相同,但是位置不同。

對於電腦來說,特徵值相同,但是特徵值位置不同,那分類結果也可能不一樣。

這時全連接層filter的作用就相當於喵在哪我不管,我只要喵,於是我讓filter去把這個喵找到,實際就是把featuremap整合成一個值,這個值大,有喵,這個值小,那就可能沒喵和這個喵在哪關係不大了,魯棒性有大大增強。

因為空間結構特性被忽略了,所以全連接層不適合用於在方位上找Pattern的任務,比如segmentation。

全連接層中一層的一個神經元就可以看成一個多項式,我們用許多神經元去擬合數據分佈但是只用一層fullyconnectedlayer有時候沒法解決非線性問題,而如果有兩層或以上fullyconnectedlayer就可以很好地解決非線性問題了我們都知道,全連接層之前的作用是提取特徵全理解層的作用是分類我們現在的任務是去區別一圖片是不是貓假設這個神經網路模型已經訓練完了,全連接層已經知道當我們得到以上特徵,我就可以判斷這個東東是貓了。

因為全連接層的作用主要就是實現分類(Classification),從下圖,我們可以看出紅色的神經元表示這個特徵被找到了(啟動了)。

同一層的其他神經元,要麼貓的特徵不明顯,要麼沒找到,當我們把這些找到的特徵組合在一起,發現最符合要求的是貓。

ok,我認為具有這些特徵的,這是貓了。

貓頭有這麼些個特徵,於是我們下一步的任務。

就是把貓頭的這麼些子特徵找到,比如眼睛啊,耳朵啊。

 這些細節特徵又是怎麼來的?就是從前面的卷積層,subsamplingpoolinglayer來的。

道理和區別貓一樣:當我們找到這些特徵,神經元就被啟動(紅色圓圈)了。

【References】理解CNN卷積層、池化層、全連接層機器學習MLNOTEFeatureExtractionUsingConvolution(stanford.tutorial)資料分析&機器學習ConvolutionalNeuralNetworks(LeNet)-DeepLearning0.1documentation)(DeepLearning0.1.LISALab. [31August 2013])ConvolutionalNeuralNetwork. [2014-09-16].https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_convolutional_neural_networks_work.html隨機文章MT4動態(追踪)止損EA可以使用MT4動態(追踪)止損EA來管理交易以及在盈利交易中鎖定利潤。

動態(追踪)止損是外匯風險交易管理和交易管理的重要組成部分。

須注意有時或某些MT4交易平台的預設動態(追踪)止損功能...雙因子認證Two-FactorAuthentication用於身份認證授權(Authentication)主要有三方面要素:1)用戶所知,密碼或者身份證號碼2)用戶所有,手機或者USBKey、磁卡3)用戶本身的唯一特徵,指紋、瞳孔、聲音或者其他特徵...【轉】FunctionsthatReturnSeveralValues FunctionsthatReturnSeveralValues Aretheresuch functionsOfcourse,youcanwriteityours...Fantom(FTM)和LachesisFantom是一個高性能、可擴展且安全;也是無許可(permissionless)、去中心化和開源的的智能合約平台。

Fantom旨在克服上一代區塊鏈平台的局限性。

Fantom成立於201...×輸入回應內容更多留言網友回饋回應:0切換至 電腦版Copyright©2016InternetServicebyXuite隨意窩切換至電腦版反應問題取消文章相簿影音旅遊帳號暱稱依相關度依日期顯示更多歡迎來到隨意窩Xuite開啟選單瀏覽服務或以關鍵字搜尋。

 瀏覽更多精彩內容切換至格主其他頻道或直接搜尋。

 快速便利分享工具提供多種分享方式傳遞內容資訊。

 更多推薦APP隨意遊與隨食記app僅支援ios裝置。

 



請為這篇文章評分?