0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文帶你徹底了解卷積神經(jīng)網(wǎng)絡(luò)

Linux愛好者 ? 來源:SimpleAI ? 作者:Beyond ? 2021-10-26 09:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

卷積神經(jīng)網(wǎng)絡(luò)是一種曾經(jīng)讓我無論如何也無法弄明白的東西,主要是名字就太“高級”了,網(wǎng)上的各種各樣的文章來介紹“什么是卷積”尤為讓人受不了。聽了吳恩達(dá)的網(wǎng)課之后,豁然開朗,終于搞明白了這個東西是什么和為什么。我這里大概會用6~7篇文章來講解CNN并實現(xiàn)一些有趣的應(yīng)用??赐曛蟠蠹覒?yīng)該可以自己動手做一些自己喜歡的事兒了。

一、引子:邊界檢測我們來看一個最簡單的例子:“邊界檢測(edge detection)”,假設(shè)我們有這樣的一張圖片,大小8×8:圖片中的數(shù)字代表該位置的像素值,我們知道,像素值越大,顏色越亮,所以為了示意,我們把右邊小像素的地方畫成深色。圖的中間兩個顏色的分界線就是我們要檢測的邊界。怎么檢測這個邊界呢?

我們可以設(shè)計這樣的一個 濾波器(filter,也稱為kernel),大小3×3:然后,我們用這個filter,往我們的圖片上“蓋”,覆蓋一塊跟filter一樣大的區(qū)域之后,對應(yīng)元素相乘,然后求和。計算一個區(qū)域之后,就向其他區(qū)域挪動,接著計算,直到把原圖片的每一個角落都覆蓋到了為止。這個過程就是 “卷積”。

(我們不用管卷積在數(shù)學(xué)上到底是指什么運(yùn)算,我們只用知道在CNN中是怎么計算的。)

這里的“挪動”,就涉及到一個步長了,假如我們的步長是1,那么覆蓋了一個地方之后,就挪一格,容易知道,總共可以覆蓋6×6個不同的區(qū)域。那么,我們將這6×6個區(qū)域的卷積結(jié)果,拼成一個矩陣:誒?!發(fā)現(xiàn)了什么?

這個圖片,中間顏色淺,兩邊顏色深,這說明咱們的原圖片中間的邊界,在這里被反映出來了!從上面這個例子中,我們發(fā)現(xiàn),我們可以通過設(shè)計特定的filter,讓它去跟圖片做卷積,就可以識別出圖片中的某些特征,比如邊界。

上面的例子是檢測豎直邊界,我們也可以設(shè)計出檢測水平邊界的,只用把剛剛的filter旋轉(zhuǎn)90°即可。對于其他的特征,理論上只要我們經(jīng)過精細(xì)的設(shè)計,總是可以設(shè)計出合適的filter的。我們的CNN(convolutional neural network),主要就是通過一個個的filter,不斷地提取特征,從局部的特征到總體的特征,從而進(jìn)行圖像識別等等功能。那么問題來了,我們怎么可能去設(shè)計這么多各種各樣的filter呀?

首先,我們都不一定清楚對于一大推圖片,我們需要識別哪些特征,其次,就算知道了有哪些特征,想真的去設(shè)計出對應(yīng)的filter,恐怕也并非易事,要知道,特征的數(shù)量可能是成千上萬的。其實學(xué)過神經(jīng)網(wǎng)絡(luò)之后,我們就知道,這些filter,根本就不用我們?nèi)ピO(shè)計,每個filter中的各個數(shù)字,不就是參數(shù)嗎,我們可以通過大量的數(shù)據(jù),來 讓機(jī)器自己去“學(xué)習(xí)”這些參數(shù)嘛。這,就是CNN的原理。二、CNN的基本概念1.padding 填白

從上面的引子中,我們可以知道,原圖像在經(jīng)過filter卷積之后,變小了,從(8,8)變成了(6,6)。假設(shè)我們再卷一次,那大小就變成了(4,4)了。這樣有啥問題呢?

主要有兩個問題:

每次卷積,圖像都縮小,這樣卷不了幾次就沒了;

相比于圖片中間的點,圖片邊緣的點在卷積中被計算的次數(shù)很少。這樣的話,邊緣的信息就易于丟失。

為了解決這個問題,我們可以采用padding的方法。我們每次卷積前,先給圖片周圍都補(bǔ)一圈空白,讓卷積之后圖片跟原來一樣大,同時,原來的邊緣也被計算了更多次。比如,我們把(8,8)的圖片給補(bǔ)成(10,10),那么經(jīng)過(3,3)的filter之后,就是(8,8),沒有變。我們把上面這種“讓卷積之后的大小不變”的padding方式,稱為 “Same”方式,

把不經(jīng)過任何填白的,稱為 “Valid”方式。這個是我們在使用一些框架的時候,需要設(shè)置的超參數(shù)。2.stride 步長

前面我們所介紹的卷積,都是默認(rèn)步長是1,但實際上,我們可以設(shè)置步長為其他的值。

比如,對于(8,8)的輸入,我們用(3,3)的filter,

如果stride=1,則輸出為(6,6);

如果stride=2,則輸出為(3,3);(這里例子舉得不大好,除不斷就向下取整)3.pooling 池化

這個pooling,是為了提取一定區(qū)域的主要特征,并減少參數(shù)數(shù)量,防止模型過擬合。

比如下面的MaxPooling,采用了一個2×2的窗口,并取stride=2:除了MaxPooling,還有AveragePooling,顧名思義就是取那個區(qū)域的平均值。4.對多通道(channels)圖片的卷積(重要?。?/p>

這個需要單獨提一下。彩色圖像,一般都是RGB三個通道(channel)的,因此輸入數(shù)據(jù)的維度一般有三個:(長,寬,通道)。

比如一個28×28的RGB圖片,維度就是(28,28,3)。前面的引子中,輸入圖片是2維的(8,8),filter是(3,3),輸出也是2維的(6,6)。如果輸入圖片是三維的呢(即增多了一個channels),比如是(8,8,3),這個時候,我們的filter的維度就要變成(3,3,3)了,它的 最后一維要跟輸入的channel維度一致。

這個時候的卷積,是三個channel的所有元素對應(yīng)相乘后求和,也就是之前是9個乘積的和,現(xiàn)在是27個乘積的和。因此,輸出的維度并不會變化。還是(6,6)。但是,一般情況下,我們會 使用多了filters同時卷積,比如,如果我們同時使用4個filter的話,那么 輸出的維度則會變?yōu)椋?,6,4)。我特地畫了下面這個圖,來展示上面的過程圖中的輸入圖像是(8,8,3),filter有4個,大小均為(3,3,3),得到的輸出為(6,6,4)。

我覺得這個圖已經(jīng)畫的很清晰了,而且給出了3和4這個兩個關(guān)鍵數(shù)字是怎么來的,所以我就不啰嗦了(這個圖畫了我起碼40分鐘)。其實,如果套用我們前面學(xué)過的神經(jīng)網(wǎng)絡(luò)的符號來看待CNN的話,

我們的輸入圖片就是X,shape=(8,8,3);

4個filters其實就是第一層神金網(wǎng)絡(luò)的參數(shù)W1,,shape=(3,3,3,4),這個4是指有4個filters;

我們的輸出,就是Z1,shape=(6,6,4);

后面其實還應(yīng)該有一個激活函數(shù),比如relu,經(jīng)過激活后,Z1變?yōu)锳1,shape=(6,6,4);

所以,在前面的圖中,我加一個激活函數(shù),給對應(yīng)的部分標(biāo)上符號,就是這樣的:

f672abf4-3582-11ec-82a8-dac502259ad0.jpg

【個人覺得,這么好的圖不收藏,真的是可惜了】三、CNN的結(jié)構(gòu)組成上面我們已經(jīng)知道了卷積(convolution)、池化(pooling)以及填白(padding)是怎么進(jìn)行的,接下來我們就來看看CNN的整體結(jié)構(gòu),它包含了3種層(layer):1. Convolutional layer(卷積層—CONV)

由濾波器filters和激活函數(shù)構(gòu)成。

一般要設(shè)置的超參數(shù)包括filters的數(shù)量、大小、步長,以及padding是“valid”還是“same”。當(dāng)然,還包括選擇什么激活函數(shù)。2. Pooling layer (池化層—POOL)

這里里面沒有參數(shù)需要我們學(xué)習(xí),因為這里里面的參數(shù)都是我們設(shè)置好了,要么是Maxpooling,要么是Averagepooling。

需要指定的超參數(shù),包括是Max還是average,窗口大小以及步長。

通常,我們使用的比較多的是Maxpooling,而且一般取大小為(2,2)步長為2的filter,這樣,經(jīng)過pooling之后,輸入的長寬都會縮小2倍,channels不變。3. Fully Connected layer(全連接層—FC)

這個前面沒有講,是因為這個就是我們最熟悉的家伙,就是我們之前學(xué)的神經(jīng)網(wǎng)絡(luò)中的那種最普通的層,就是一排神經(jīng)元。因為這一層是每一個單元都和前一層的每一個單元相連接,所以稱之為“全連接”。

這里要指定的超參數(shù),無非就是神經(jīng)元的數(shù)量,以及激活函數(shù)。接下來,我們隨便看一個CNN的模樣,來獲取對CNN的一些感性認(rèn)識上面這個CNN是我隨便拍腦門想的一個。它的結(jié)構(gòu)可以用:

X→CONV(relu)→MAXPOOL→CONV(relu)→FC(relu)→FC(softmax)→Y

來表示。這里需要說明的是,在經(jīng)過數(shù)次卷積和池化之后,我們 最后會先將多維的數(shù)據(jù)進(jìn)行“扁平化”,也就是把 (height,width,channel)的數(shù)據(jù)壓縮成長度為 height × width × channel 的一維數(shù)組,然后再與 FC層連接,這之后就跟普通的神經(jīng)網(wǎng)絡(luò)無異了。

可以從圖中看到,隨著網(wǎng)絡(luò)的深入,我們的圖像(嚴(yán)格來說中間的那些不能叫圖像了,但是為了方便,還是這樣說吧)越來越小,但是channels卻越來越大了。在圖中的表示就是長方體面對我們的面積越來越小,但是長度卻越來越長了。四、卷積神經(jīng)網(wǎng)絡(luò) VS. 傳統(tǒng)神經(jīng)網(wǎng)絡(luò)其實現(xiàn)在回過頭來看,CNN跟我們之前學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),也沒有很大的差別。

傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),其實就是多個FC層疊加起來。

CNN,無非就是把FC改成了CONV和POOL,就是把傳統(tǒng)的由一個個神經(jīng)元組成的layer,變成了由filters組成的layer。那么,為什么要這樣變?有什么好處?

具體說來有兩點:1.參數(shù)共享機(jī)制(parameters sharing)

我們對比一下傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的層和由filters構(gòu)成的CONV層:

假設(shè)我們的圖像是8×8大小,也就是64個像素,假設(shè)我們用一個有9個單元的全連接層:那這一層我們需要多少個參數(shù)呢?需要 64×9 = 576個參數(shù)(先不考慮偏置項b)。因為每一個鏈接都需要一個權(quán)重w。那我們看看 同樣有9個單元的filter是怎么樣的:其實不用看就知道,有幾個單元就幾個參數(shù),所以總共就9個參數(shù)!因為,對于不同的區(qū)域,我們都共享同一個filter,因此就共享這同一組參數(shù)。

這也是有道理的,通過前面的講解我們知道,filter是用來檢測特征的,那一個特征一般情況下很可能在不止一個地方出現(xiàn),比如“豎直邊界”,就可能在一幅圖中多出出現(xiàn),那么 我們共享同一個filter不僅是合理的,而且是應(yīng)該這么做的。由此可見,參數(shù)共享機(jī)制,讓我們的網(wǎng)絡(luò)的參數(shù)數(shù)量大大地減少。這樣,我們可以用較少的參數(shù),訓(xùn)練出更加好的模型,典型的事半功倍,而且可以有效地 避免過擬合。

同樣,由于filter的參數(shù)共享,即使圖片進(jìn)行了一定的平移操作,我們照樣可以識別出特征,這叫做 “平移不變性”。因此,模型就更加穩(wěn)健了。2.連接的稀疏性(sparsity of connections)

由卷積的操作可知,輸出圖像中的任何一個單元,只跟輸入圖像的一部分有關(guān)系:而傳統(tǒng)神經(jīng)網(wǎng)絡(luò)中,由于都是全連接,所以輸出的任何一個單元,都要受輸入的所有的單元的影響。這樣無形中會對圖像的識別效果大打折扣。比較,每一個區(qū)域都有自己的專屬特征,我們不希望它受到其他區(qū)域的影響。正是由于上面這兩大優(yōu)勢,使得CNN超越了傳統(tǒng)的NN,開啟了神經(jīng)網(wǎng)絡(luò)的新時代。

責(zé)任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4812

    瀏覽量

    103209
  • 卷積
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    18730

原文標(biāo)題:從此明白了卷積神經(jīng)網(wǎng)絡(luò)(CNN)

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    BP神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的比較

    BP神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)在多個方面存在顯著差異,以下是對兩者的比較: 、結(jié)構(gòu)特點 BP神經(jīng)網(wǎng)絡(luò) : BP
    的頭像 發(fā)表于 02-12 15:53 ?589次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的比較

    神經(jīng)網(wǎng)絡(luò),也稱為全連接神經(jīng)網(wǎng)絡(luò)(Fully Connected Neural Networks,F(xiàn)CNs),其特點是每層的每個神經(jīng)元都與下
    的頭像 發(fā)表于 11-15 14:53 ?1770次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本原理與算法

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)是類包含卷積計算且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò)(Feedf
    的頭像 發(fā)表于 11-15 14:47 ?1734次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本概念、原理及特點

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是種深度學(xué)習(xí)算法,它在圖像識別、視頻分析、自然語言處理等領(lǐng)域有著廣泛的應(yīng)用。本文將詳細(xì)介紹卷積
    的頭像 發(fā)表于 07-11 14:38 ?2366次閱讀

    BP神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的關(guān)系

    BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是兩種在人工智能和機(jī)器學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 07-10 15:24 ?2393次閱讀

    循環(huán)神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的區(qū)別

    結(jié)構(gòu)。它們在處理不同類型的數(shù)據(jù)和解決不同問題時具有各自的優(yōu)勢和特點。本文將從多個方面比較循環(huán)神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的區(qū)別。 基本概念 循環(huán)神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-04 14:24 ?2026次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的實現(xiàn)原理

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積
    的頭像 發(fā)表于 07-03 10:49 ?1104次閱讀

    bp神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)區(qū)別是什么

    結(jié)構(gòu)、原理、應(yīng)用場景等方面都存在定的差異。以下是對這兩種神經(jīng)網(wǎng)絡(luò)的比較: 基本結(jié)構(gòu) BP神經(jīng)網(wǎng)絡(luò)種多層前饋神經(jīng)網(wǎng)絡(luò),由輸入層、隱藏層和
    的頭像 發(fā)表于 07-03 10:12 ?2555次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)分類方法有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)是種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像分類、目標(biāo)檢測、語義分割等計算機(jī)視覺任務(wù)。本文將詳細(xì)介紹卷積
    的頭像 發(fā)表于 07-03 09:40 ?994次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)分類有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像分類、目標(biāo)檢測、語義分割等領(lǐng)域。本文將詳細(xì)介紹CNN在分類任務(wù)中的應(yīng)用,包括基本結(jié)構(gòu)、關(guān)鍵技術(shù)、常見網(wǎng)絡(luò)架構(gòu)以及實際應(yīng)用案例。
    的頭像 發(fā)表于 07-03 09:28 ?1428次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積
    的頭像 發(fā)表于 07-03 09:15 ?920次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理與實現(xiàn)

    1.卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。 卷積
    的頭像 發(fā)表于 07-02 16:47 ?1234次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)及其功能

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積
    的頭像 發(fā)表于 07-02 14:45 ?3543次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、語音識別、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積
    的頭像 發(fā)表于 07-02 14:44 ?1290次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)和bp神經(jīng)網(wǎng)絡(luò)的區(qū)別

    化能力。隨著深度學(xué)習(xí)技術(shù)的不斷發(fā)展,神經(jīng)網(wǎng)絡(luò)已經(jīng)成為人工智能領(lǐng)域的重要技術(shù)之卷積神經(jīng)網(wǎng)絡(luò)和BP神經(jīng)
    的頭像 發(fā)表于 07-02 14:24 ?6065次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品