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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

2020-12-09 深度学习 卷积神经网络结构分析

發(fā)布時(shí)間:2025/3/21 卷积神经网络 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2020-12-09 深度学习 卷积神经网络结构分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 結(jié)構(gòu)總覽

首先我們分析下傳統(tǒng)神經(jīng)網(wǎng)絡(luò)對(duì)于圖片的處理,如果還是用CIFAR-10上的圖片,共3072個(gè)特征,如果普通網(wǎng)絡(luò)結(jié)構(gòu)輸入那么第一層的每一個(gè)神經(jīng)單元都會(huì)有3072個(gè)權(quán)重,如果更大的像素的圖片進(jìn)入后參數(shù)更多,而且用于圖片處理的網(wǎng)絡(luò)一般深度達(dá)10層之上,加在一起參數(shù)的量實(shí)在太大,參數(shù)過多也會(huì)造成過擬合,而且圖片也有自身的特點(diǎn),我們需要利用這些特點(diǎn),將傳統(tǒng)網(wǎng)絡(luò)改革,加快處理速度和精確度。
我們注意到圖片的像素是由3個(gè)通道構(gòu)成的,我們就利用了這個(gè)特點(diǎn)將其神經(jīng)元安置到了三維空間(width, height, depth),分別對(duì)應(yīng)著圖片的32x32x3(以CIFAR為例)如下圖:

紅色是輸入層這里的深度是3,輸出層是1x1x10的結(jié)構(gòu)。其他幾層的含義后面會(huì)介紹,現(xiàn)在先知道每層都是height × width × depth結(jié)構(gòu)

2. 卷積神經(jīng)網(wǎng)絡(luò)的層

卷積神經(jīng)網(wǎng)絡(luò)有三種層:卷積層、池化層和全連接層(Convolutional Layer, Pooling Layer, 及 Fully-Connected Layer)。
以處理CIFAR-10的卷積神經(jīng)網(wǎng)絡(luò)為例,簡(jiǎn)單的網(wǎng)絡(luò)應(yīng)包含這幾層:
[INPUT - CONV - RELU - POOL - FC]也就是[輸入-卷積-激活-池化-分類得分],各層分述如下:

  • INPUT [32x32x3] 輸入長(zhǎng)32寬32帶有三個(gè)通道的圖片
  • CONV :計(jì)算圖片的局部區(qū)域,如果我們想要使用12個(gè)過濾器fliters,他的體積將是 [32x32x12].
  • RELU :還是一個(gè)激勵(lì)層max(0,x) ,尺寸還是 ([32x32x12]).
  • POOL: 沿著圖片的(width, height)采樣, 減小長(zhǎng)寬的維度,例如得到的結(jié)果是 [16x16x12].
  • FC (i.e. fully-connected) 計(jì)算分類得分最終尺寸是 [1x1x10], 這層是全連接的,每一個(gè)單元都與前一層的各個(gè)單元連接。

注意:
1. 卷及神經(jīng)網(wǎng)絡(luò)包含不同的層 (e.g. CONV/FC/RELU/POOL 也是最受歡迎的)
2. 每一層都輸入輸出3d結(jié)構(gòu)的數(shù)據(jù),除了最后一層
3. 有些層可能沒有參數(shù),有些層可能有參數(shù) (e.g. CONV/FC do, RELU/POOL don’t)
4. 有些層可能有超參數(shù)有些層也可能沒有超參數(shù)(e.g. CONV/FC/POOL do, RELU doesn’t)
下圖是一個(gè)例子,沒法用三維表示只能展成一列的形式了。

下面展開討論各層具體細(xì)節(jié):

2.1 卷積層

卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心層,大大提高了計(jì)算效率。
卷積層由很多過濾器組成,每個(gè)過濾器都只有一小部分,每次只與原圖像上的一小部分連接,UFLDL上的圖:

這是一個(gè)過濾器不停滑動(dòng)的結(jié)果,
我們這里要更深入些,我們輸入的圖像是一個(gè)三維的,那么每個(gè)過濾器也是有三個(gè)維度,假設(shè)我們的過濾器是5x5x3的那么我們也會(huì)得到一個(gè)類似于上圖的激活值的映射也就是convolved feature 下圖中叫作 activion map,其計(jì)算方法是wT×x+bwT×x+b其中w是5x5x3=75個(gè)數(shù)據(jù),也就是權(quán)重,他是可以調(diào)節(jié)的。
我們可以有多個(gè)過濾器:


更深入一些,當(dāng)我們滑動(dòng)的時(shí)候有三個(gè)超參數(shù):
1. 深度,depth,這是過濾器的數(shù)量決定的。
2. 步長(zhǎng),stride,每次滑動(dòng)的間隔,上面的動(dòng)畫每次只滑動(dòng)1個(gè)數(shù),也就是步長(zhǎng)為1.
3. 補(bǔ)零數(shù), zero-padding,有時(shí)候根據(jù)需要,會(huì)用零來(lái)拓展圖像的面積,如果補(bǔ)零數(shù)為1,變長(zhǎng)就+2,如下圖中灰色的部分就是補(bǔ)的0

下面是一個(gè)一維的例子:

其輸出的空間維度計(jì)算公式是

(W?F+2P)/S+1(W?F+2P)/S+1


其中w是輸入的尺寸,f是過濾器的尺寸,p是補(bǔ)零的尺寸,s是步長(zhǎng),圖中如果補(bǔ)零為1那么輸出為5個(gè)數(shù),步長(zhǎng)為2輸出為3個(gè)數(shù)。
到現(xiàn)在為止我們好像都沒有涉及到?神經(jīng)這個(gè)概念哇,現(xiàn)在我們就從神經(jīng)角度來(lái)理解:
上面提到每一個(gè)激活值都是:?wT×x+bwT×x+b,這個(gè)公式我們熟悉哇,這就是神經(jīng)元的得分公式呀,所以我們可以將每一個(gè) activation map 其看做是一個(gè)filter的杰作,如果有5個(gè)過濾器,就會(huì)有5個(gè)不同的filter同時(shí)連接一個(gè)部分。
卷積神經(jīng)網(wǎng)絡(luò)還有一個(gè)重要的特征:?權(quán)重共享:在同一個(gè)filter上的不同的神經(jīng)單元(滑動(dòng)窗口)的權(quán)重是相同的。這樣以來(lái)大大減少了權(quán)重的數(shù)量。
這樣每一層權(quán)重相同,每一個(gè)過濾器計(jì)算的結(jié)果都是一個(gè)卷積(后來(lái)還會(huì)加一個(gè)偏差b):

這也是卷積神經(jīng)網(wǎng)絡(luò)的名字的來(lái)源。
下面這張圖是錯(cuò)誤的,請(qǐng)看官網(wǎng)?http://cs231n.github.io/convolutional-networks/#conv,找出其中的錯(cuò)誤就明白卷積的工作原理了。

雖然這里吧每一個(gè)filter的權(quán)重w變?yōu)槎鴣?lái)三部分,但是在神經(jīng)元里還是用了wx+b的形式。
- 反向傳播:這種卷積的反向傳播還是卷積,計(jì)算過程也比較簡(jiǎn)便
- 1x1 convolution:一些文章用了1*1的卷積, 比如最開始的?Network in Network. 這樣可以有效的做多個(gè)內(nèi)積, 輸入有三層,那么每層至少要有三個(gè)w,也就是把上面的動(dòng)態(tài)圖的filter變?yōu)?x1x3.
-Dilated convolutions.最近又有研究(?e.g. see paper by Fisher Yu and Vladlen Koltun) 對(duì)卷積層添加了一個(gè)超參數(shù):dilation。這是對(duì)filter的進(jìn)一步控制,我們開一下效果:dilation等于0時(shí),這樣計(jì)算卷積w[0]x[0] + w[1]x[1] + w[2]x[2];dilation =1時(shí)變成了這樣w[0]x[0] + w[1]x[2] + w[2]x[4];也就是我們要處理的圖像中每個(gè)隔了個(gè)1. 這就允許了利用更少的層來(lái)融合空間信息. 例如我們用了兩個(gè) 3x3 CONV layers在最頂層 ,這是第二層起到了 感受5x5 ( effective receptive field)的作用. 如果使用dilated convolutions 那么這個(gè)effective receptive field會(huì)以指數(shù)形式增長(zhǎng).

?

2.2 池化層

上面可以知道在卷積層之后得到的結(jié)果還是挺多,而且由于滑動(dòng)窗口的存在,很多信息也有重合,于是有了池化pooling 層,他是將卷積層得到的結(jié)果無(wú)重合的分來(lái)幾部分,然后選擇每一部分的最大值,或者平均值,或者2范數(shù),或者其他你喜歡的值,我們以取最大值的max pool為例:

- 反向傳播:最大值的梯度我們之前在反向傳播的時(shí)候就已經(jīng)學(xué)習(xí)過了,這里一般都跟蹤最大的激活值,這樣在反向傳播的時(shí)候會(huì)提高效率.
- Getting rid of pooling. 一些人認(rèn)為pooling是沒有必要的,如The All Convolutional Net?,很多人認(rèn)為沒有池層對(duì)于生成式模型(generative models)很重要,似乎以后的發(fā)展中,池層可能會(huì)逐漸減少或者消失。

2.3 其他層

  • Normalization Layer,以前的時(shí)候用normalization 層的模擬人腦的抑制作用,但是逐漸認(rèn)為沒有多大的幫助,于是用的少了,這篇論文里有介紹其作用 Alex Krizhevsky’s cuda-convnet library API.
  • Fully-connected layer,這個(gè)全連接層和以前學(xué)過的一樣,前面提到過最后的分類層是全連接層。
  • 2.4 Converting FC layers to CONV layers

    全連接層和卷積層除了連接方式不一樣,其計(jì)算方式都是內(nèi)積,可以相互轉(zhuǎn)換:
    1. FC如果做CONV layer 的工作就相當(dāng)于其矩陣的多數(shù)位置都是0(稀疏矩陣)。
    2. FC layer 如果被轉(zhuǎn)變?yōu)?CONV layer. 相當(dāng)于每一層的局部連接變?yōu)榱巳挎溄尤鏔C layer with K=4096的輸入是7×7×512那么對(duì)應(yīng)的卷積層為 F=7,P=0,S=1,K=4096輸出為1×1×4096。
    例子:
    假設(shè)一個(gè)cnn輸入 224x224x3圖像,經(jīng)過若干變化之后某一層輸出 7x7x512 到這里之后使用兩4096的FC layer及最后一個(gè)1000的FC計(jì)算分類得分下面是把這三層fc轉(zhuǎn)化為Conv 的過程:
    1. 使用 F=7的conv layer 輸出為 [1x1x4096];
    2. 使用F=1的過濾器,輸出為 [1x1x4096];
    3. 使用F=1的卷積層,輸出為 [1x1x1000]。

    每次轉(zhuǎn)化都會(huì)將FC的參數(shù)轉(zhuǎn)變?yōu)閏onv的參數(shù)形式. 如果在轉(zhuǎn)變后的系統(tǒng)中傳入更大的圖片,也會(huì)非常快速的向前運(yùn)算。例如將384x384的圖像輸入上面的系統(tǒng),會(huì)在最后三層之前得到[12x12x512]的輸出, 經(jīng)過上面轉(zhuǎn)化的conv 層會(huì)得到 [6x6x1000], ((12 - 7)/1 + 1 = 6). 我們一下就得出了6x6的分類結(jié)果。
    這樣一次得到的比原來(lái)使用迭代36次得到的要快。這是實(shí)際應(yīng)用中的技巧。
    另外我們可以用兩次步長(zhǎng)16的卷積層代替一次步長(zhǎng)為32的卷積層來(lái)輸入上面的圖片,提高效率。

    3 搭建卷積神經(jīng)網(wǎng)絡(luò)

    下面我們就用CONV, POOL,FC ,RELU 搭建一個(gè)卷積神經(jīng)網(wǎng)絡(luò):

    3.1 層次結(jié)構(gòu)

    我們按照以下結(jié)構(gòu)搭建

    INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC
    • ?

    其中N >= 0 (一般N <= 3), M >= 0, K >= 0 (一般K < 3).
    這里要注意:我們更傾向于使用多層小size的CONV。
    為什么呢?
    比如3個(gè)3x3的和一個(gè)7x7的conv層,他們都可以 得到7x7的receptive fields.但是3x3的有以下優(yōu)點(diǎn):
    1. 3層的非線性組合要比一層線性組合表達(dá)能力強(qiáng);
    2. 3層小尺寸的卷積層的參數(shù)數(shù)量要少,3x3x3<7x7;
    3. 反向傳播中我們需要使用更多的內(nèi)存來(lái)儲(chǔ)存中間層結(jié)果。

    值得注意的是Google’s Inception architectures 及Residual Networks from Microsoft Research Asia. Both 等創(chuàng)造了相比以上結(jié)構(gòu)更加復(fù)雜的連接結(jié)構(gòu)。

    3.2 層的大小

  • 輸入層:輸入層一般是2的指數(shù)形式比如 32 (e.g. CIFAR-10), 64, 96 (e.g. STL-10), or 224 (e.g. common ImageNet ConvNets), 384, 512等.
  • 卷積層:一般是小的過濾器比如3x3或者最大 5x5,步長(zhǎng)設(shè)為1,當(dāng)加入補(bǔ)零時(shí)卷積層可能不會(huì)改變輸入的尺寸,如果必須使用大的過濾器,那么經(jīng)常在第一層使用補(bǔ)零的方法P=(F?1)/2。
  • 池化層:常見的設(shè)置是使用2x2的最大池化層,很少有超過3x3的最大池化層。
  • 如果我們的步長(zhǎng)大于1或者沒有補(bǔ)零,我們需要非常注意看是否我們的步長(zhǎng)和顧慮器是否足夠健壯,我們的網(wǎng)絡(luò)是否均勻?qū)ΨQ連接。
  • 步長(zhǎng)為1表現(xiàn)更好,對(duì)池化也更有兼容新.
  • 補(bǔ)零的好處:如果不補(bǔ)零那么邊緣的信息會(huì)很快被拋棄
  • 要考慮到電腦的內(nèi)存限制。例如輸入 224x224x3 圖片,過濾器為 3x3 共64 filters,padding 為1 這樣每張圖片需要72MB 內(nèi)存 ,但是GPU上運(yùn)行的話,內(nèi)存可能不夠所以可能會(huì)調(diào)整下參數(shù)比如 filter為 7x7,stride 為 2 (ZF net). 或者filer11x11 , stride of 4.(AlexNet)
  • 3.3 案例

  • LeNet. 第一個(gè)成功應(yīng)用的cnn( Yann LeCun in 1990’s). 他的強(qiáng)項(xiàng)是杜zip codes, digits, etc.
  • AlexNet. 第一個(gè)廣泛的應(yīng)用于計(jì)算機(jī)視覺, (by Alex Krizhevsky, Ilya Sutskever and Geoff Hinton). ImageNet ILSVRC challenge in 2012 大放異彩,與LeNet結(jié)構(gòu)類似不過更深更大,多層卷積層疊加。
  • ZF Net. The ILSVRC 2013 winner ( Matthew Zeiler and Rob Fergus). It became known as the ZFNet (short for Zeiler & Fergus Net).調(diào)整了Alexnet的結(jié)構(gòu)參數(shù), 擴(kuò)大了中間卷積層 使第一層的過濾器和步長(zhǎng)都減小了.
  • GoogLeNet. The ILSVRC 2014 winner(Szegedy et al. from Google.) 極大的減少了參數(shù)數(shù)量 (由 60M到4M). 使用Average Pooling代替了 ConvNet的第一個(gè)FC層, 消除了大量的參數(shù),有很多的變體如:Inception-v4.
  • VGGNet. The runner-up in ILSVRC 2014 ( Karen Simonyan and Andrew Zisserman )證明了深度的好處. 可以在Caffe上使用. 但是參數(shù)太多,(140M),計(jì)算量大 . 不過現(xiàn)在已經(jīng)正實(shí)有很多不需要的參數(shù)可以去除。
  • ResNet. (Kaiming He et al).winner of ILSVRC 2015. 截止2016年5月10,這是一種最先進(jìn)的模型. 現(xiàn)在也有了改進(jìn)版?Identity Mappings in Deep Residual Networks (published March 2016).
    其中VGG的計(jì)算花費(fèi)為:
  • INPUT: [224x224x3] memory: 224*224*3=150K weights: 0 CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*3)*64 = 1,728 CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*64)*64 = 36,864 POOL2: [112x112x64] memory: 112*112*64=800K weights: 0 CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*64)*128 = 73,728 CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*128)*128 = 147,456 POOL2: [56x56x128] memory: 56*56*128=400K weights: 0 CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*128)*256 = 294,912 CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824 CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824 POOL2: [28x28x256] memory: 28*28*256=200K weights: 0 CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*256)*512 = 1,179,648 CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296 CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296 POOL2: [14x14x512] memory: 14*14*512=100K weights: 0 CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 POOL2: [7x7x512] memory: 7*7*512=25K weights: 0 FC: [1x1x4096] memory: 4096 weights: 7*7*512*4096 = 102,760,448 FC: [1x1x4096] memory: 4096 weights: 4096*4096 = 16,777,216 FC: [1x1x1000] memory: 1000 weights: 4096*1000 = 4,096,000TOTAL memory: 24M * 4 bytes ~= 93MB / image (only forward! ~*2 for bwd) TOTAL params: 138M parameters
    • ?

    注意到內(nèi)存使用最多的時(shí)候在開始幾個(gè)CONV layers, 參數(shù)基本都在最后幾個(gè)FC層第一個(gè)FC有100M個(gè)!

    3.4 內(nèi)存使用

    內(nèi)存主要在以下幾個(gè)方面消耗較多
    1. 大量的激活值和梯度值。測(cè)試時(shí)可以只儲(chǔ)存當(dāng)前的激活值丟棄之前的在下方幾層激活值會(huì)大大減少激活值的儲(chǔ)存量。
    2. 參數(shù)的儲(chǔ)存,在反向傳播時(shí)的梯度及使用 momentum, Adagrad, or RMSProp時(shí)的緩存都會(huì)占用儲(chǔ)存,所以估計(jì)參數(shù)使用的內(nèi)存時(shí)一般至少要乘以3倍
    3. 每次網(wǎng)絡(luò)運(yùn)行都要記住各種信息比如圖形數(shù)據(jù)的批量等
    如果估計(jì)網(wǎng)絡(luò)需要的內(nèi)存太大,可以適當(dāng)減小圖片的batch,畢竟激活值占用了大量的內(nèi)存空間。

    其他資料

  • Soumith benchmarks for CONV performance
  • ConvNetJS CIFAR-10 demo?瀏覽器的ConvNets實(shí)時(shí)演示.
  • Caffe,流行的ConvNets工具
  • State of the art ResNets in Torch7
  • ?

    總結(jié)

    以上是生活随笔為你收集整理的2020-12-09 深度学习 卷积神经网络结构分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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