日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CNN浅析和历年ImageNet冠军模型解析

發(fā)布時間:2025/4/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CNN浅析和历年ImageNet冠军模型解析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://www.infoq.com/cn/articles/cnn-and-imagenet-champion-model-analysis

今天在這里我給大家講解一些深度學(xué)習(xí)中卷積神經(jīng)網(wǎng)絡(luò)的原理和一些經(jīng)典的網(wǎng)絡(luò)結(jié)構(gòu)

卷積神經(jīng)網(wǎng)絡(luò)原理淺析

卷積神經(jīng)網(wǎng)絡(luò)(Convolutional?Neural?Network,CNN)最初是為解決圖像識別等問題設(shè)計的,當(dāng)然其現(xiàn)在的應(yīng)用不僅限于圖像和視頻,也可用于時間序列信號,比如音頻信號、文本數(shù)據(jù)等。在早期的圖像識別研究中,最大的挑戰(zhàn)是如何組織特征,因為圖像數(shù)據(jù)不像其他類型的數(shù)據(jù)那樣可以通過人工理解來提取特征。

在股票預(yù)測等模型中,我們可以從原始數(shù)據(jù)中提取過往的交易價格波動、市盈率、市凈率、盈利增長等金融因子,這即是特征工程。但是在圖像中,我們很難根據(jù)人為理解提取出有效而豐富的特征。在深度學(xué)習(xí)出現(xiàn)之前,我們必須借助SIFT、HoG等算法提取具有良好區(qū)分性的特征,再集合SVM等機(jī)器學(xué)習(xí)算法進(jìn)行圖像識別。

SIFT對一定程度內(nèi)的縮放、平移、旋轉(zhuǎn)、視角改變、亮度調(diào)整等畸變,都具有不變性,是當(dāng)時最重要的圖像特征提取方法之一。然而SIFT這類算法提取的特征還是有局限性的,在ImageNet?ILSVRC比賽的最好結(jié)果的錯誤率也有26%以上,而且常年難以產(chǎn)生突破。

卷積神經(jīng)網(wǎng)絡(luò)提取的特征則可以達(dá)到更好的效果,同時它不需要將特征提取和分類訓(xùn)練兩個過程分開,它在訓(xùn)練時就自動提取了最有效的特征。CNN作為一個深度學(xué)習(xí)架構(gòu)被提出的最初訴求,是降低對圖像數(shù)據(jù)預(yù)處理的要求,以及避免復(fù)雜的特征工程。CNN可以直接使用圖像的原始像素作為輸入,而不必先使用SIFT等算法提取特征,減輕了使用傳統(tǒng)算法如SVM時必需要做的大量重復(fù)、煩瑣的數(shù)據(jù)預(yù)處理工作。

和SIFT等算法類似,CNN訓(xùn)練的模型同樣對縮放、平移、旋轉(zhuǎn)等畸變具有不變性,有著很強(qiáng)的泛化性。CNN的最大特點(diǎn)在于卷積的權(quán)值共享結(jié)構(gòu),可以大幅減少神經(jīng)網(wǎng)絡(luò)的參數(shù)量,防止過擬合的同時又降低了神經(jīng)網(wǎng)絡(luò)模型的復(fù)雜度。

卷積神經(jīng)網(wǎng)絡(luò)的概念最早出自19世紀(jì)60年代科學(xué)家提出的感受野(Receptive?Field37)。當(dāng)時科學(xué)家通過對貓的視覺皮層細(xì)胞研究發(fā)現(xiàn),每一個視覺神經(jīng)元只會處理一小塊區(qū)域的視覺圖像,即感受野。到了20世紀(jì)80年代,日本科學(xué)家提出神經(jīng)認(rèn)知機(jī)(Neocognitron38)的概念,可以算作是卷積網(wǎng)絡(luò)最初的實現(xiàn)原型。

神經(jīng)認(rèn)知機(jī)中包含兩類神經(jīng)元,用來抽取特征的S-cells,還有用來抗形變的C-cells,其中S-cells對應(yīng)我們現(xiàn)在主流卷積神經(jīng)網(wǎng)絡(luò)中的卷積核濾波操作,而C-cells則對應(yīng)激活函數(shù)、最大池化(Max-Pooling)等操作。同時,CNN也是首個成功地進(jìn)行多層訓(xùn)練的網(wǎng)絡(luò)結(jié)構(gòu),即前面章節(jié)提到的LeCun的LeNet5,而全連接的網(wǎng)絡(luò)因為參數(shù)過多及梯度彌散等問題,在早期很難順利地進(jìn)行多層的訓(xùn)練。

卷積神經(jīng)網(wǎng)絡(luò)可以利用空間結(jié)構(gòu)關(guān)系減少需要學(xué)習(xí)的參數(shù)量,從而提高反向傳播算法的訓(xùn)練效率。在卷積神經(jīng)網(wǎng)絡(luò)中,第一個卷積層會直接接受圖像像素級的輸入,每一個卷積操作只處理一小塊圖像,進(jìn)行卷積變化后再傳到后面的網(wǎng)絡(luò),每一層卷積(也可以說是濾波器)都會提取數(shù)據(jù)中最有效的特征。這種方法可以提取到圖像中最基礎(chǔ)的特征,比如不同方向的邊或者拐角,而后再進(jìn)行組合和抽象形成更高階的特征,因此CNN可以應(yīng)對各種情況,理論上具有對圖像縮放、平移和旋轉(zhuǎn)的不變性。

一般的卷積神經(jīng)網(wǎng)絡(luò)由多個卷積層構(gòu)成,每個卷積層中通常會進(jìn)行如下幾個操作。

  • 圖像通過多個不同的卷積核的濾波,并加偏置(bias),提取出局部特征,每一個卷積核會映射出一個新的2D圖像。
  • 將前面卷積核的濾波輸出結(jié)果,進(jìn)行非線性的激活函數(shù)處理。目前最常見的是使用ReLU函數(shù),而以前Sigmoid函數(shù)用得比較多。
  • 對激活函數(shù)的結(jié)果再進(jìn)行池化操作(即降采樣,比如將2×2的圖片降為1×1的圖片),目前一般是使用最大池化,保留最顯著的特征,并提升模型的畸變?nèi)萑棠芰Α?/li>

    一個卷積層中可以有多個不同的卷積核,而每一個卷積核都對應(yīng)一個濾波后映射出的新圖像,同一個新圖像中每一個像素都來自完全相同的卷積核,這就是卷積核的權(quán)值共享。那我們?yōu)槭裁匆蚕砭矸e核的權(quán)值參數(shù)呢?答案很簡單,降低模型復(fù)雜度,減輕過擬合并降低計算量。

    (點(diǎn)擊放大圖像)

    舉個例子,如圖5-2所示,如果我們的圖像尺寸是1000像素×1000像素,并且假定是黑白圖像,即只有一個顏色通道,那么一張圖片就有100萬個像素點(diǎn),輸入數(shù)據(jù)的維度也是100萬。接下來,如果連接一個相同大小的隱含層(100萬個隱含節(jié)點(diǎn)),那么將產(chǎn)生100萬×100萬=一萬億個連接。

    僅僅一個全連接層(Fully?Connected?Layer),就有一萬億連接的權(quán)重要去訓(xùn)練,這已經(jīng)超出了普通硬件的計算能力。我們必須減少需要訓(xùn)練的權(quán)重數(shù)量,一是降低計算的復(fù)雜度,二是過多的連接會導(dǎo)致嚴(yán)重的過擬合,減少連接數(shù)可以提升模型的泛化性。

    圖像在空間上是有組織結(jié)構(gòu)的,每一個像素點(diǎn)在空間上和周圍的像素點(diǎn)實際上是有緊密聯(lián)系的,但是和太遙遠(yuǎn)的像素點(diǎn)就不一定有什么關(guān)聯(lián)了。這就是前面提到的人的視覺感受野的概念,每一個感受野只接受一小塊區(qū)域的信號。這一小塊區(qū)域內(nèi)的像素是互相關(guān)聯(lián)的,每一個神經(jīng)元不需要接收全部像素點(diǎn)的信息,只需要接收局部的像素點(diǎn)作為輸入,而后將所有這些神經(jīng)元收到的局部信息綜合起來就可以得到全局的信息。

    這樣就可以將之前的全連接的模式修改為局部連接,之前隱含層的每一個隱含節(jié)點(diǎn)都和全部像素相連,現(xiàn)在我們只需要將每一個隱含節(jié)點(diǎn)連接到局部的像素節(jié)點(diǎn)。假設(shè)局部感受野大小是10×10,即每個隱含節(jié)點(diǎn)只與10×10個像素點(diǎn)相連,那么現(xiàn)在就只需要10×10×100萬=1億個連接,相比之前的1萬億縮小了10000倍。

    簡單說,全連接就是上圖的左邊部分,而局部連接就是上圖的右邊部分。局部連接可以大大降低神經(jīng)網(wǎng)絡(luò)參數(shù)量,從100M*100M = 1萬億,到10*10*100萬=1億。

    (點(diǎn)擊放大圖像)

    上面我們通過局部連接(Locally?Connect)的方法,將連接數(shù)從1萬億降低到1億,但仍然偏多,需要繼續(xù)降低參數(shù)量。現(xiàn)在隱含層每一個節(jié)點(diǎn)都與10×10的像素相連,也就是每一個隱含節(jié)點(diǎn)都擁有100個參數(shù)。假設(shè)我們的局部連接方式是卷積操作,即默認(rèn)每一個隱含節(jié)點(diǎn)的參數(shù)都完全一樣,那我們的參數(shù)不再是1億,而是100。不論圖像有多大,都是這10×10=100個參數(shù),即卷積核的尺寸,這就是卷積對縮小參數(shù)量的貢獻(xiàn)。

    簡單說,卷積就是使用完全相同的(參數(shù)相同)的模板去進(jìn)行局部連接,所以參數(shù)量可以繼續(xù)驟降

    我們不需要再擔(dān)心有多少隱含節(jié)點(diǎn)或者圖片有多大,參數(shù)量只跟卷積核的大小有關(guān),這也就是所謂的權(quán)值共享。但是如果我們只有一個卷積核,我們就只能提取一種卷積核濾波的結(jié)果,即只能提取一種圖片特征,這不是我們期望的結(jié)果。好在圖像中最基本的特征很少,我們可以增加卷積核的數(shù)量來多提取一些特征。

    圖像中的基本特征無非就是點(diǎn)和邊,無論多么復(fù)雜的圖像都是點(diǎn)和邊組合而成的。人眼識別物體的方式也是從點(diǎn)和邊開始的,視覺神經(jīng)元接受光信號后,每一個神經(jīng)元只接受一個區(qū)域的信號,并提取出點(diǎn)和邊的特征,然后將點(diǎn)和邊的信號傳遞給后面一層的神經(jīng)元,再接著組合成高階特征,比如三角形、正方形、直線、拐角等,再繼續(xù)抽象組合,得到眼睛、鼻子和嘴等五官,最后再將五官組合成一張臉,完成匹配識別。

    因此我們的問題就很好解決了,只要我們提供的卷積核數(shù)量足夠多,能提取出各種方向的邊或各種形態(tài)的點(diǎn),就可以讓卷積層抽象出有效而豐富的高階特征。每一個卷積核濾波得到的圖像就是一類特征的映射,即一個Feature?Map。一般來說,我們使用100個卷積核放在第一個卷積層就已經(jīng)很充足了。

    那這樣的話,如上圖所示,我們的參數(shù)量就是100×100=1萬個,相比之前的1億又縮小了10000倍。因此,依靠卷積,我們就可以高效地訓(xùn)練局部連接的神經(jīng)網(wǎng)絡(luò)了。卷積的好處是,不管圖片尺寸如何,我們需要訓(xùn)練的權(quán)值數(shù)量只跟卷積核大小、卷積核數(shù)量有關(guān),我們可以使用非常少的參數(shù)量處理任意大小的圖片。每一個卷積層提取的特征,在后面的層中都會抽象組合成更高階的特征。

    我們再總結(jié)一下,卷積神經(jīng)網(wǎng)絡(luò)的要點(diǎn)就是局部連接(Local?Connection)、權(quán)值共享(Weight?Sharing)和池化層(Pooling)中的降采樣(Down-Sampling)。

    其中,局部連接和權(quán)值共享降低了參數(shù)量,使訓(xùn)練復(fù)雜度大大下降,并減輕了過擬合。同時權(quán)值共享還賦予了卷積網(wǎng)絡(luò)對平移的容忍性,而池化層降采樣則進(jìn)一步降低了輸出參數(shù)量,并賦予模型對輕度形變的容忍性,提高了模型的泛化能力。

    卷積神經(jīng)網(wǎng)絡(luò)相比傳統(tǒng)的機(jī)器學(xué)習(xí)算法,無須手工提取特征,也不需要使用諸如SIFT之類的特征提取算法,可以在訓(xùn)練中自動完成特征的提取和抽象,并同時進(jìn)行模式分類,大大降低了應(yīng)用圖像識別的難度;相比一般的神經(jīng)網(wǎng)絡(luò),CNN在結(jié)構(gòu)上和圖片的空間結(jié)構(gòu)更為貼近,都是2D的有聯(lián)系的結(jié)構(gòu),并且CNN的卷積連接方式和人的視覺神經(jīng)處理光信號的方式類似。

    下面介紹一下經(jīng)典的卷積網(wǎng)絡(luò)LeNet5。

    大名鼎鼎的LeNet5?誕生于1994年,是最早的深層卷積神經(jīng)網(wǎng)絡(luò)之一,并且推動了深度學(xué)習(xí)的發(fā)展。從1988年開始,在多次成功的迭代后,這項由Yann?LeCun完成的開拓性成果被命名為LeNet5。

    LeCun認(rèn)為,可訓(xùn)練參數(shù)的卷積層是一種用少量參數(shù)在圖像的多個位置上提取相似特征的有效方式,這和直接把每個像素作為多層神經(jīng)網(wǎng)絡(luò)的輸入不同。像素不應(yīng)該被使用在輸入層,因為圖像具有很強(qiáng)的空間相關(guān)性,而使用圖像中獨(dú)立的像素直接作為輸入則利用不到這些相關(guān)性。

    LeNet5當(dāng)時的特性有如下幾點(diǎn)。

    • 每個卷積層包含三個部分:卷積、池化和非線性激活函數(shù)
    • 使用卷積提取空間特征
    • 降采樣(Subsample)的平均池化層(Average?Pooling)
    • 雙曲正切(Tanh)或S型(Sigmoid)的激活函數(shù)
    • MLP作為最后的分類器
    • 層與層之間的稀疏連接減少計算復(fù)雜度

    LeNet5中的諸多特性現(xiàn)在依然在state-of-the-art卷積神經(jīng)網(wǎng)絡(luò)中使用,可以說LeNet5是奠定了現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)的基石之作。Lenet-5的結(jié)構(gòu)下圖所示。

    (點(diǎn)擊放大圖像)

    它的輸入圖像為32×32的灰度值圖像,后面有3個卷積層,1個全連接層和1個高斯連接層。

    下面我們來介紹一些其他幾個經(jīng)典的卷積網(wǎng)絡(luò)結(jié)構(gòu),AlexNet、VGGNet、Google Inception Net和ResNet,這4種網(wǎng)絡(luò)依照出現(xiàn)的先后順序排列,深度和復(fù)雜度也依次遞進(jìn)。

    它們分別獲得了ILSVRC(ImageNet?Large?Scale?Visual?Recognition?Challenge)比賽分類項目的2012年冠軍(AlexNet, top-5錯誤率16.4%,使用額外數(shù)據(jù)可達(dá)到15.3%,8層神經(jīng)網(wǎng)絡(luò))、2014年亞軍(VGGNet,top-5錯誤率7.3%,19層神經(jīng)網(wǎng)絡(luò)),2014年冠軍(InceptionNet,top-5錯誤率6.7%,22層神經(jīng)網(wǎng)絡(luò))和2015年的冠軍(ResNet,top-5錯誤率3.57%,152層神經(jīng)網(wǎng)絡(luò))。

    (點(diǎn)擊放大圖像)

    如圖所示,ILSVRC的top-5錯誤率在最近幾年取得重大突破,而主要的突破點(diǎn)都是在深度學(xué)習(xí)和卷積神經(jīng)網(wǎng)絡(luò),成績的大幅提升幾乎都伴隨著卷積神經(jīng)網(wǎng)絡(luò)的層數(shù)加深。

    (點(diǎn)擊放大圖像)

    前面提到的計算機(jī)視覺比賽ILSVRC使用的數(shù)據(jù)都來自ImageNet,如上圖所示。ImageNet項目于2007年由斯坦福大學(xué)華人教授李飛飛創(chuàng)辦,目標(biāo)是收集大量帶有標(biāo)注信息的圖片數(shù)據(jù)供計算機(jī)視覺模型訓(xùn)練。ImageNet擁有1500萬張標(biāo)注過的高清圖片,總共擁有22000類,其中約有100萬張標(biāo)注了圖片中主要物體的定位邊框。

    (點(diǎn)擊放大圖像)

    每年度的ILSVRC比賽數(shù)據(jù)集中大概擁有120萬張圖片,以及1000類的標(biāo)注,是ImageNet全部數(shù)據(jù)的一個子集。比賽一般采用top-5和top-1分類錯誤率作為模型性能的評測指標(biāo),上圖所示為AlexNet識別ILSVRC數(shù)據(jù)集中圖片的情況,每張圖片下面是分類預(yù)測得分最高的5個分類及其分值。

    AlexNet技術(shù)特點(diǎn)概要

    AlexNet是現(xiàn)代深度CNN的奠基之作。

    2012年,Hinton的學(xué)生Alex?Krizhevsky提出了深度卷積神經(jīng)網(wǎng)絡(luò)模型AlexNet,它可以算是LeNet的一種更深更寬的版本。AlexNet中包含了幾個比較新的技術(shù)點(diǎn),也首次在CNN中成功應(yīng)用了ReLU、Dropout和LRN等Trick。同時AlexNet也使用了GPU進(jìn)行運(yùn)算加速,作者開源了他們在GPU上訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)的CUDA代碼。

    AlexNet包含了6億3000萬個連接,6000萬個參數(shù)和65萬個神經(jīng)元,擁有5個卷積層,其中3個卷積層后面連接了最大池化層,最后還有3個全連接層。AlexNet以顯著的優(yōu)勢贏得了競爭激烈的ILSVRC?2012比賽,top-5的錯誤率降低至了16.4%,相比第二名的成績26.2%錯誤率有了巨大的提升。

    AlexNet可以說是神經(jīng)網(wǎng)絡(luò)在低谷期后的第一次發(fā)聲,確立了深度學(xué)習(xí)(深度卷積網(wǎng)絡(luò))在計算機(jī)視覺的統(tǒng)治地位,同時也推動了深度學(xué)習(xí)在語音識別、自然語言處理、強(qiáng)化學(xué)習(xí)等領(lǐng)域的拓展。

    AlexNet將LeNet的思想發(fā)揚(yáng)光大,把CNN的基本原理應(yīng)用到了很深很寬的網(wǎng)絡(luò)中。AlexNet主要使用到的新技術(shù)點(diǎn)如下。

  • 成功使用ReLU作為CNN的激活函數(shù),并驗證其效果在較深的網(wǎng)絡(luò)超過了Sigmoid,成功解決了Sigmoid在網(wǎng)絡(luò)較深時的梯度彌散問題。雖然ReLU激活函數(shù)在很久之前就被提出了,但是直到AlexNet的出現(xiàn)才將其發(fā)揚(yáng)光大。
  • 訓(xùn)練時使用Dropout隨機(jī)忽略一部分神經(jīng)元,以避免模型過擬合。Dropout雖有單獨(dú)的論文論述,但是AlexNet將其實用化,通過實踐證實了它的效果。在AlexNet中主要是最后幾個全連接層使用了Dropout。
  • 在CNN中使用重疊的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出讓步長比池化核的尺寸小,這樣池化層的輸出之間會有重疊和覆蓋,提升了特征的豐富性。
  • 提出了LRN層,對局部神經(jīng)元的活動創(chuàng)建競爭機(jī)制,使得其中響應(yīng)比較大的值變得相對更大,并抑制其他反饋較小的神經(jīng)元,增強(qiáng)了模型的泛化能力。
  • 使用CUDA加速深度卷積網(wǎng)絡(luò)的訓(xùn)練,利用GPU強(qiáng)大的并行計算能力,處理神經(jīng)網(wǎng)絡(luò)訓(xùn)練時大量的矩陣運(yùn)算。AlexNet使用了兩塊GTX?580?GPU進(jìn)行訓(xùn)練,單個GTX?580只有3GB顯存,這限制了可訓(xùn)練的網(wǎng)絡(luò)的最大規(guī)模。因此作者將AlexNet分布在兩個GPU上,在每個GPU的顯存中儲存一半的神經(jīng)元的參數(shù)。
  • 數(shù)據(jù)增強(qiáng),隨機(jī)地從256*256的原始圖像中截取224*224大小的區(qū)域(以及水平翻轉(zhuǎn)的鏡像),相當(dāng)于增加了(256224)2*2=2048倍的數(shù)據(jù)量。如果沒有數(shù)據(jù)增強(qiáng),僅靠原始的數(shù)據(jù)量,參數(shù)眾多的CNN會陷入過擬合中,使用了數(shù)據(jù)增強(qiáng)后可以大大減輕過擬合,提升泛化能力。進(jìn)行預(yù)測時,則是取圖片的四個角加中間共5個位置,并進(jìn)行左右翻轉(zhuǎn),一共獲得10張圖片,對他們進(jìn)行預(yù)測并對10次結(jié)果求均值。
  • (點(diǎn)擊放大圖像)

    ?

    整個AlexNet有8個需要訓(xùn)練參數(shù)的層(不包括池化層和LRN層),前5層為卷積層,后3層為全連接層,上圖所示。AlexNet最后一層是有1000類輸出的Softmax層用作分類。LRN層出現(xiàn)在第1個及第2個卷積層后,而最大池化層出現(xiàn)在兩個LRN層及最后一個卷積層后。

    (點(diǎn)擊放大圖像)

    AlexNet每層的超參數(shù)、參數(shù)量、計算量上圖所示。

    我們可以發(fā)現(xiàn)一個比較有意思的現(xiàn)象,在前幾個卷積層,雖然計算量很大,但參數(shù)量很小,都在1M左右甚至更小,只占AlexNet總參數(shù)量的很小一部分。這就是卷積層有用的地方,可以通過較小的參數(shù)量提取有效的特征。

    雖然每一個卷積層占整個網(wǎng)絡(luò)的參數(shù)量的1%都不到,但是如果去掉任何一個卷積層,都會使網(wǎng)絡(luò)的分類性能大幅地下降。

    VGGNet技術(shù)特點(diǎn)概要

    VGGNet是牛津大學(xué)計算機(jī)視覺組(Visual?Geometry?Group)和Google?DeepMind公司的研究員一起研發(fā)的的深度卷積神經(jīng)網(wǎng)絡(luò)。VGGNet探索了卷積神經(jīng)網(wǎng)絡(luò)的深度與其性能之間的關(guān)系,通過反復(fù)堆疊3*3的小型卷積核和2*2的最大池化層,VGGNet成功地構(gòu)筑了16~19層深的卷積神經(jīng)網(wǎng)絡(luò)。VGGNet相比之前state-of-the-art的網(wǎng)絡(luò)結(jié)構(gòu),錯誤率大幅下降,并取得了ILSVRC?2014比賽分類項目的第2名和定位項目的第1名。

    VGGNet論文中全部使用了3*3的卷積核和2*2的池化核,通過不斷加深網(wǎng)絡(luò)結(jié)構(gòu)來提升性能。下圖所示為VGGNet各級別的網(wǎng)絡(luò)結(jié)構(gòu)圖,和每一級別的參數(shù)量,從11層的網(wǎng)絡(luò)一直到19層的網(wǎng)絡(luò)都有詳盡的性能測試。

    (點(diǎn)擊放大圖像)

    (點(diǎn)擊放大圖像)

    雖然從A到E每一級網(wǎng)絡(luò)逐漸變深,但是網(wǎng)絡(luò)的參數(shù)量并沒有增長很多,這是因為參數(shù)量主要都消耗在最后3個全連接層。前面的卷積部分雖然很深,但是消耗的參數(shù)量不大,不過訓(xùn)練比較耗時的部分依然是卷積,因其計算量比較大。

    VGGNet擁有5段卷積,每一段內(nèi)有2~3個卷積層,同時每段尾部會連接一個最大池化層用來縮小圖片尺寸。每段內(nèi)的卷積核數(shù)量一樣,越靠后的段的卷積核數(shù)量越多:64?–?128?–?256?–?512?–?512。其中經(jīng)常出現(xiàn)多個完全一樣的3*3的卷積層堆疊在一起的情況,這其實是非常有用的設(shè)計。

    (點(diǎn)擊放大圖像)

    如上圖所示,兩個3*3的卷積層串聯(lián)相當(dāng)于1個5*5的卷積層,即一個像素會跟周圍5*5的像素產(chǎn)生關(guān)聯(lián),可以說感受野大小為5*5。而3個3*3的卷積層串聯(lián)的效果則相當(dāng)于1個7*7的卷積層。除此之外,3個串聯(lián)的3*3的卷積層,擁有比1個7*7的卷積層更少的參數(shù)量,只有后者的55%。

    最重要的是,3個3*3的卷積層擁有比1個7*7的卷積層更多的非線性變換(前者可以使用三次ReLU激活函數(shù),而后者只有一次),使得CNN對特征的學(xué)習(xí)能力更強(qiáng)。

    作者在對比各級網(wǎng)絡(luò)時總結(jié)出了以下幾個觀點(diǎn)。

  • LRN層作用不大。
  • 越深的網(wǎng)絡(luò)效果越好。
  • 1*1的卷積也是很有效的,但是沒有3*3的卷積好,大一些的卷積核可以學(xué)習(xí)更大的空間特征。
  • InceptionNet技術(shù)特點(diǎn)概要

    Google?Inception?Net首次出現(xiàn)在ILSVRC?2014的比賽中(和VGGNet同年),就以較大優(yōu)勢取得了第一名。那屆比賽中的Inception?Net通常被稱為Inception?V1,它最大的特點(diǎn)是控制了計算量和參數(shù)量的同時,獲得了非常好的分類性能——top-5錯誤率6.67%,只有AlexNet的一半不到。

    Inception?V1有22層深,比AlexNet的8層或者VGGNet的19層還要更深。但其計算量只有15億次浮點(diǎn)運(yùn)算,同時只有500萬的參數(shù)量,僅為AlexNet參數(shù)量(6000萬)的1/12,卻可以達(dá)到遠(yuǎn)勝于AlexNet的準(zhǔn)確率,可以說是非常優(yōu)秀并且非常實用的模型。

    Inception?V1降低參數(shù)量的目的有兩點(diǎn):第一,參數(shù)越多模型越龐大,需要供模型學(xué)習(xí)的數(shù)據(jù)量就越大,而目前高質(zhì)量的數(shù)據(jù)非常昂貴;第二,參數(shù)越多,耗費(fèi)的計算資源也會更大。

    Inception?V1參數(shù)少但效果好的原因除了模型層數(shù)更深、表達(dá)能力更強(qiáng)外,還有兩點(diǎn):一是去除了最后的全連接層,用全局平均池化層(即將圖片尺寸變?yōu)?*1)來取代它。全連接層幾乎占據(jù)了AlexNet或VGGNet中90%的參數(shù)量,而且會引起過擬合,去除全連接層后模型訓(xùn)練更快并且減輕了過擬合。

    二是Inception?V1中精心設(shè)計的Inception?Module提高了參數(shù)的利用效率,其結(jié)構(gòu)如圖10所示。這一部分也借鑒了Network?In?Network的思想,形象的解釋就是Inception?Module本身如同大網(wǎng)絡(luò)中的一個小網(wǎng)絡(luò),其結(jié)構(gòu)可以反復(fù)堆疊在一起形成大網(wǎng)絡(luò)。

    (點(diǎn)擊放大圖像)

    我們再來看Inception?Module的基本結(jié)構(gòu),其中有4個分支:第一個分支對輸入進(jìn)行1*1的卷積,這其實也是NIN中提出的一個重要結(jié)構(gòu)。1*1的卷積是一個非常優(yōu)秀的結(jié)構(gòu),它可以跨通道組織信息,提高網(wǎng)絡(luò)的表達(dá)能力,同時可以對輸出通道升維和降維。

    可以看到Inception?Module的4個分支都用到了1*1卷積,來進(jìn)行低成本(計算量比3*3小很多)的跨通道的特征變換。

    第二個分支先使用了1*1卷積,然后連接3*3卷積,相當(dāng)于進(jìn)行了兩次特征變換。第三個分支類似,先是1*1的卷積,然后連接5*5卷積。最后一個分支則是3*3最大池化后直接使用1*1卷積。

    Inception?Module的4個分支在最后通過一個聚合操作合并(在輸出通道數(shù)這個維度上聚合)。

    同時,Google?Inception?Net還是一個大家族,包括:

    • 2014年9月的論文Going?Deeper?with?Convolutions提出的Inception?V1(top-5錯誤率6.67%)。
    • 2015年2月的論文Batch?Normalization:?Accelerating?Deep?Network?Training?by?Reducing?Internal?Covariate提出的Inception?V2(top-5錯誤率4.8%)。
    • 2015年12月的論文Rethinking?the?Inception?Architecture?for?Computer?Vision提出的Inception?V3(top-5錯誤率3.5%)。
    • 2016年2月的論文Inception-v4,?Inception-ResNet?and?the?Impact?of?Residual?Connections?on?Learning提出的Inception?V4(top-5錯誤率3.08%)。

    Inception?V2學(xué)習(xí)了VGGNet,用兩個3*3的卷積代替5*5的大卷積(用以降低參數(shù)量并減輕過擬合),還提出了著名的Batch?Normalization(以下簡稱BN)方法。BN是一個非常有效的正則化方法,可以讓大型卷積網(wǎng)絡(luò)的訓(xùn)練速度加快很多倍,同時收斂后的分類準(zhǔn)確率也可以得到大幅提高。

    BN在用于神經(jīng)網(wǎng)絡(luò)某層時,會對每一個mini-batch數(shù)據(jù)的內(nèi)部進(jìn)行標(biāo)準(zhǔn)化(normalization)處理,使輸出規(guī)范化到N(0,1)的正態(tài)分布,減少了Internal?Covariate?Shift(內(nèi)部神經(jīng)元分布的改變)。

    BN的論文指出,傳統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)在訓(xùn)練時,每一層的輸入的分布都在變化,導(dǎo)致訓(xùn)練變得困難,我們只能使用一個很小的學(xué)習(xí)速率解決這個問題。而對每一層使用BN之后,我們就可以有效地解決這個問題,學(xué)習(xí)速率可以增大很多倍,達(dá)到之前的準(zhǔn)確率所需要的迭代次數(shù)只有1/14,訓(xùn)練時間大大縮短。

    而達(dá)到之前的準(zhǔn)確率后,可以繼續(xù)訓(xùn)練,并最終取得遠(yuǎn)超于Inception?V1模型的性能——top-5錯誤率4.8%,已經(jīng)優(yōu)于人眼水平。因為BN某種意義上還起到了正則化的作用,所以可以減少或者取消Dropout,簡化網(wǎng)絡(luò)結(jié)構(gòu)。

    ResNet技術(shù)特點(diǎn)概要

    ResNet(Residual?Neural?Network)由微軟研究院的Kaiming?He等4名華人提出,通過使用Residual?Unit成功訓(xùn)練152層深的神經(jīng)網(wǎng)絡(luò),在ILSVRC?2015比賽中獲得了冠軍,取得3.57%的top-5錯誤率,同時參數(shù)量卻比VGGNet低,效果非常突出。

    ResNet的結(jié)構(gòu)可以極快地加速超深神經(jīng)網(wǎng)絡(luò)的訓(xùn)練,模型的準(zhǔn)確率也有非常大的提升。

    ResNet最初的靈感出自這個問題:在不斷加神經(jīng)網(wǎng)絡(luò)的深度時,會出現(xiàn)一個Degradation的問題,即準(zhǔn)確率會先上升然后達(dá)到飽和,再持續(xù)增加深度則會導(dǎo)致準(zhǔn)確率下降。

    這并不是過擬合的問題,因為不光在測試集上誤差增大,訓(xùn)練集本身誤差也會增大。假設(shè)有一個比較淺的網(wǎng)絡(luò)達(dá)到了飽和的準(zhǔn)確率,那么后面再加上幾個的全等映射層,起碼誤差不會增加,即更深的網(wǎng)絡(luò)不應(yīng)該帶來訓(xùn)練集上誤差上升。

    而這里提到的使用全等映射直接將前一層輸出傳到后面的思想,就是ResNet的靈感來源。假定某段神經(jīng)網(wǎng)絡(luò)的輸入是x,期望輸出是H(x),如果我們直接把輸入x傳到輸出作為初始結(jié)果,那么此時我們需要學(xué)習(xí)的目標(biāo)就是F(x)=H(x)-x。

    (點(diǎn)擊放大圖像)

    這就是一個ResNet的殘差學(xué)習(xí)單元(Residual?Unit),ResNet相當(dāng)于將學(xué)習(xí)目標(biāo)改變了,不再是學(xué)習(xí)一個完整的輸出H(x),只是輸出和輸入的差別H(x)-x,即殘差。

    (點(diǎn)擊放大圖像)

    上圖所示為VGGNet-19,以及一個34層深的普通卷積網(wǎng)絡(luò),和34層深的ResNet網(wǎng)絡(luò)的對比圖。可以看到普通直連的卷積神經(jīng)網(wǎng)絡(luò)和ResNet的最大區(qū)別在于,ResNet有很多旁路的支線將輸入直接連到后面的層,使得后面的層可以直接學(xué)習(xí)殘差,這種結(jié)構(gòu)也被稱為shortcut或skip?connections。

    傳統(tǒng)的卷積層或全連接層在信息傳遞時,或多或少會存在信息丟失、損耗等問題。ResNet在某種程度上解決了這個問題,通過直接將輸入信息繞道傳到輸出,保護(hù)信息的完整性,整個網(wǎng)絡(luò)則只需要學(xué)習(xí)輸入、輸出差別的那一部分,簡化學(xué)習(xí)目標(biāo)和難度。

    (點(diǎn)擊放大圖像)

    上圖所示為ResNet在不同層數(shù)時的網(wǎng)絡(luò)配置,其中基礎(chǔ)結(jié)構(gòu)很類似,都是前面提到的兩層和三層的殘差學(xué)習(xí)單元的堆疊。

    在使用了ResNet的結(jié)構(gòu)后,可以發(fā)現(xiàn)層數(shù)不斷加深導(dǎo)致的訓(xùn)練集上誤差增大的現(xiàn)象被消除了,ResNet網(wǎng)絡(luò)的訓(xùn)練誤差會隨著層數(shù)增大而逐漸減小,并且在測試集上的表現(xiàn)也會變好。

    (點(diǎn)擊放大圖像)

    小結(jié)

    此就將ALexNet、VGGNet、Inception Net、ResNet四種經(jīng)典的卷積介紹完了,下面我們簡單總結(jié)一下。我們簡單回顧卷積神經(jīng)網(wǎng)絡(luò)的歷史,上圖所示大致勾勒出最近幾十年卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展方向。

    Perceptron(感知機(jī))于1957年由Frank?Resenblatt提出,而Perceptron不僅是卷積網(wǎng)絡(luò),也是神經(jīng)網(wǎng)絡(luò)的始祖。Neocognitron(神經(jīng)認(rèn)知機(jī))是一種多層級的神經(jīng)網(wǎng)絡(luò),由日本科學(xué)家Kunihiko?Fukushima于20世紀(jì)80年代提出,具有一定程度的視覺認(rèn)知的功能,并直接啟發(fā)了后來的卷積神經(jīng)網(wǎng)絡(luò)。

    LeNet-5由CNN之父Yann?LeCun于1997年提出,首次提出了多層級聯(lián)的卷積結(jié)構(gòu),可對手寫數(shù)字進(jìn)行有效識別。可以看到前面這三次關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的技術(shù)突破,間隔時間非常長,需要十余年甚至更久才出現(xiàn)一次理論創(chuàng)新。

    而后于2012年,Hinton的學(xué)生Alex依靠8層深的卷積神經(jīng)網(wǎng)絡(luò)一舉獲得了ILSVRC?2012比賽的冠軍,瞬間點(diǎn)燃了卷積神經(jīng)網(wǎng)絡(luò)研究的熱潮。AlexNet成功應(yīng)用了ReLU激活函數(shù)、Dropout、最大覆蓋池化、LRN層、GPU加速等新技術(shù),并啟發(fā)了后續(xù)更多的技術(shù)創(chuàng)新,卷積神經(jīng)網(wǎng)絡(luò)的研究從此進(jìn)入快車道。

    在AlexNet之后,我們可以將卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展分為兩類,一類是網(wǎng)絡(luò)結(jié)構(gòu)上的改進(jìn)調(diào)整(圖6-18中的左側(cè)分支),另一類是網(wǎng)絡(luò)深度的增加(圖18中的右側(cè)分支)。

    2013年,顏水成教授的Network?in?Network工作首次發(fā)表,優(yōu)化了卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),并推廣了1*1的卷積結(jié)構(gòu)。在改進(jìn)卷積網(wǎng)絡(luò)結(jié)構(gòu)的工作中,后繼者還有2014年的Google?Inception?Net?V1,提出了Inception?Module這個可以反復(fù)堆疊的高效的卷積網(wǎng)絡(luò)結(jié)構(gòu),并獲得了當(dāng)年ILSVRC比賽的冠軍。

    2015年初的Inception?V2提出了Batch?Normalization,大大加速了訓(xùn)練過程,并提升了網(wǎng)絡(luò)性能。2015年年末的Inception?V3則繼續(xù)優(yōu)化了網(wǎng)絡(luò)結(jié)構(gòu),提出了Factorization?in?Small?Convolutions的思想,分解大尺寸卷積為多個小卷積乃至一維卷積。

    而右側(cè)分支上,許多研究工作則致力于加深網(wǎng)絡(luò)層數(shù),2014年,ILSVRC比賽的亞軍VGGNet全程使用3*3的卷積,成功訓(xùn)練了深達(dá)19層的網(wǎng)絡(luò),當(dāng)年的季軍MSRA-Net也使用了非常深的網(wǎng)絡(luò)。

    2015年,微軟的ResNet成功訓(xùn)練了152層深的網(wǎng)絡(luò),一舉拿下了當(dāng)年ILSVRC比賽的冠軍,top-5錯誤率降低至3.46%。

    我們可以看到,自AlexNet于2012年提出后,深度學(xué)習(xí)領(lǐng)域的研究發(fā)展極其迅速,基本上每年甚至每幾個月都會出現(xiàn)新一代的技術(shù)。新的技術(shù)往往伴隨著新的網(wǎng)絡(luò)結(jié)構(gòu),更深的網(wǎng)絡(luò)的訓(xùn)練方法等,并在圖像識別等領(lǐng)域不斷創(chuàng)造新的準(zhǔn)確率記錄。

    CNN的技術(shù)日新月異,當(dāng)然其中不可忽視的推動力是,我們擁有了更快的GPU計算資源用以實驗,以及非常方便的開源工具(比如TensorFlow)可以讓研究人員快速地進(jìn)行探索和嘗試。在以前,研究人員如果沒有像Alex那樣高超的編程實力能自己實現(xiàn)cuda-convnet,可能都沒辦法設(shè)計CNN或者快速地進(jìn)行實驗。

    現(xiàn)在有了TensorFlow,研究人員和開發(fā)人員都可以簡單而快速地設(shè)計神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)并進(jìn)行研究、測試、部署乃至實用。

    答疑環(huán)節(jié)

    Q1:tensorflow的學(xué)習(xí)路線?

    黃文堅:如果想快速入門,可以結(jié)合MNIST數(shù)據(jù)集,嘗試MLP、CNN進(jìn)行圖像分類,而后嘗試在MNSIT上實現(xiàn)AutoEncoder。此后,可以學(xué)習(xí)TensorBoard,這是一個非常方便的可視化工具。之后掌握進(jìn)階的CNN、RNN,強(qiáng)化學(xué)習(xí)訓(xùn)練方式。然后如果有興趣,可以掌握單機(jī)多GPU并行計算,多機(jī)多GPU分布式訓(xùn)練。目前TensorFlow中還推出了很多組件,比如TF.Learn,Slim,XLA、Fold等,可以針對需求探索。

    Q2:目前主流的深度學(xué)習(xí)工具主要包括TensorFlow,Caffe和Mxnet。相比于其他兩個庫,您認(rèn)為TensorFlow的主要優(yōu)勢是哪些?未來TensorFlow的發(fā)展趨勢著眼于哪些方面,謝謝老師~

    黃文堅:Caffe是比較經(jīng)典的老框架,缺陷在于使用配置文件定義網(wǎng)絡(luò)結(jié)構(gòu),調(diào)試網(wǎng)絡(luò)不是很方便,并且基于層的構(gòu)筑方式,一層一層的堆疊網(wǎng)絡(luò),對于一些更靈活的圖的結(jié)構(gòu),表示不方便,并且分布式也不完善。

    MXnet是國人推出的框架,主要作者是陳天奇和李沐。MXNet非常靈活,支持多種編程范式,并且分布式性能很好,支持的前端語言綁定很多。缺點(diǎn)是,開發(fā)團(tuán)隊小,框架產(chǎn)品代碼質(zhì)量穩(wěn)定性不如TensorFlow。并且非常缺完善的文檔和資料。

    TensorFlow是Google大力研發(fā)的框架,大約有100-200人的全職的Engineer在協(xié)作開發(fā),擁有產(chǎn)品級的代碼質(zhì)量,完善的穩(wěn)定,高可靠性,適合生產(chǎn)環(huán)境使用。同時其計算圖定義模式,也非常靈活,可以進(jìn)行各種靈活的調(diào)試。并且目前大部分新推出的Paper和研究,都使用TensorFlow進(jìn)行實現(xiàn),可用的模型代碼非常多。

    在TensorFlow Models庫中,也有大量可靠的開源模型實現(xiàn),比如SyntaxNet,TextSum等。并且TensorFlow在Github上,獲得的star數(shù)名列機(jī)器學(xué)習(xí)庫第一,基本是第2-第10名之和。

    Q3:tensorflow在文本領(lǐng)域表現(xiàn)如何?

    黃文堅:做文本分析和處理,主要使用RNN,少數(shù)情況使用CNN。這兩種網(wǎng)絡(luò)TensorFlow都支持的非常好和完善。并且新推出的TensorFLow Fold支持動態(tài)的批輸入,可以對動態(tài)的RNN結(jié)構(gòu)產(chǎn)生巨大的提速。

    Q4:如何選擇網(wǎng)絡(luò)的層數(shù)和神經(jīng)元個數(shù)?

    黃文堅:深度學(xué)習(xí)的層數(shù)和神經(jīng)元個數(shù)條數(shù)一直是一個經(jīng)驗占比非常重的問題。在TensorFlow中,可以使用TensorBoard觀察train loss和test loss,如果train loss下降慢,并且test loss沒有上升,可以加大模型擬合能力,即加深網(wǎng)絡(luò)和增大神經(jīng)元個數(shù)。如果train loss難以下降,并且test loss開始反彈,則應(yīng)控制模型的容量,即模型的擬合能力,保持層數(shù)和神經(jīng)元個數(shù)不過大,同時使用各種減輕過擬合的方法,比如dropout、batch normalization等。

    如果train loss難以下降,并且test loss開始反彈,則應(yīng)控制模型的容量,即模型的擬合能力,保持層數(shù)和神經(jīng)元個數(shù)不過大,同時使用各種減輕過擬合的方法,比如dropout、batch normalization等。

    Q5:如何將tensorflow應(yīng)用在實際項目中,涉及的數(shù)據(jù)轉(zhuǎn)換及數(shù)據(jù)結(jié)構(gòu)應(yīng)該是怎樣定的?

    黃文堅:TensorFlow的格式可以使用numpy的數(shù)組,輸入數(shù)據(jù)通過placeholder轉(zhuǎn)為tensor,即多維數(shù)組格式,這是TensorFlow的核心數(shù)據(jù)格式。

    同時對有空間關(guān)聯(lián)性和時間管理性的數(shù)據(jù),應(yīng)連接CNN、RNN進(jìn)行處理,其他類型數(shù)據(jù),應(yīng)使用MLP。

    Q6:RNN和CNN分別適用哪些場景?

    黃文堅:CNN適合空間和時間有關(guān)聯(lián)性的場景,比如圖片分類,文本分類,時間序列分類等。

    RNN主要適合有時間關(guān)聯(lián)性的場景,并且對時間先后順序敏感,適合文本分類,語言模型等。

    Q7:我是java程序員,5年工作經(jīng)驗,如何更好學(xué)習(xí)TensorFlow?

    黃文堅:TensorFlow最主流的接口是Python,不過目前也推出了Java接口。如果感興趣,可以直接先從Java接口入手,不過非腳本語言,調(diào)試可能不方便,后期可以再學(xué)習(xí)Python接口。

    Q8:黃老師您好。請問如何看待Keras和Tensorflow的關(guān)系?Keras作為更高層的庫,應(yīng)該和TF一起學(xué)習(xí)掌握還是更推薦底層的TF作為深度學(xué)習(xí)框架的入門呢?

    黃文堅:keras已經(jīng)被合并到TensorFlow中了,目前可以屬于TF的一個組件。推薦先學(xué)習(xí)TensorFlow,掌握一些底層機(jī)制,后面當(dāng)需要快速構(gòu)建大型神經(jīng)網(wǎng)絡(luò)實驗時,可以學(xué)習(xí)keras。并且學(xué)習(xí)過tensorflow后,keras將非常簡單。

    作者介紹

    黃文堅,《TensorFlow實戰(zhàn)》作者,該書獲得Google TensorFlow工程研發(fā)總監(jiān)Rajat Monga、360首席科學(xué)家顏水成教授、北大長江學(xué)者崔斌教授的推薦,出版后曾獲京東、亞馬遜、當(dāng)當(dāng)計算機(jī)類圖書銷量第一,并獲臺灣知名出版社引進(jìn)版權(quán)。現(xiàn)任職PPmoney大數(shù)據(jù)算法總監(jiān),負(fù)責(zé)集團(tuán)的風(fēng)控、理財、互聯(lián)網(wǎng)證券等業(yè)務(wù)的數(shù)據(jù)挖掘工作。Google TensorFlow Contributor。前明略數(shù)據(jù)技術(shù)合伙人,領(lǐng)導(dǎo)了對諸多大型銀行、保險公司、基金公司的數(shù)據(jù)挖掘項目,包括金融風(fēng)控、新聞輿情分析、保險復(fù)購預(yù)測等,并多次獲客戶方報送評獎。曾就職于阿里巴巴搜索引擎算法團(tuán)隊,負(fù)責(zé)天貓上億用戶的個性化搜索系統(tǒng)。曾參加阿里巴巴大數(shù)據(jù)推薦算法大賽,于7000多只隊伍中獲得前10名。本科、研究生畢業(yè)于香港科技大學(xué),在頂級會議和期刊SIGMOBILE MobiCom、IEEE Transactions on Image Processing發(fā)表論文,研究成果獲SIGMOBILE MobiCom最佳移動應(yīng)用技術(shù)獎,并獲得兩項美國專利和一項中國專利。

    轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/9029176.html

    總結(jié)

    以上是生活随笔為你收集整理的CNN浅析和历年ImageNet冠军模型解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。