丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能 正文
發(fā)私信給雷鋒專欄
發(fā)送

0

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

本文作者: 雷鋒專欄 2017-07-04 17:16
導(dǎo)語:這里對卷積神經(jīng)網(wǎng)絡(luò)的講解主要是以不同的思考側(cè)重展開,通過對卷積神經(jīng)網(wǎng)絡(luò)的分析,進一步理解神經(jīng)網(wǎng)絡(luò)變體中“因素共享”這一概念。

雷鋒網(wǎng)按:本文來源 知乎,作者:YJango,雷鋒網(wǎng)授權(quán)轉(zhuǎn)載。

PS:YJango是我的網(wǎng)名,意思是我寫的教程,并不是一種網(wǎng)絡(luò)結(jié)構(gòu)。。

關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的講解,網(wǎng)上有很多精彩文章,且恐怕難以找到比斯坦福的CS231n還要全面的教程。 所以這里對卷積神經(jīng)網(wǎng)絡(luò)的講解主要是以不同的思考側(cè)重展開,通過對卷積神經(jīng)網(wǎng)絡(luò)的分析,進一步理解神經(jīng)網(wǎng)絡(luò)變體中“因素共享”這一概念。

注意:該文會跟其他的現(xiàn)有文章有很大的不同。讀該文需要有本書前些章節(jié)作為預(yù)備知識,不然會有理解障礙。沒看過前面內(nèi)容的朋友建議看公開課視頻:深層神經(jīng)網(wǎng)絡(luò)設(shè)計理念。當中的知識可以更好的幫助理解該文。

gitbook首發(fā)閱讀地址:卷積神經(jīng)網(wǎng)絡(luò)——介紹, 看前先刷新瀏覽器

如果要提出一個新的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),首先就需要引入像循環(huán)神經(jīng)網(wǎng)絡(luò)中“時間共享”這樣的先驗知識,降低學(xué)習(xí)所需要的訓(xùn)練數(shù)據(jù)需求量。 而卷積神經(jīng)網(wǎng)絡(luò)同樣也引入了這樣的先驗知識:“空間共享”。下面就讓我們以畫面識別作為切入點,看看該先驗知識是如何被引入到神經(jīng)網(wǎng)絡(luò)中的。

目錄

● 視覺感知

       ● 畫面識別是什么

        ● 識別結(jié)果取決于什么

● 圖像表達

        ● 畫面識別的輸入 

        ● 畫面不變形

● 前饋神經(jīng)網(wǎng)絡(luò)做畫面識別的不足

● 卷積神經(jīng)網(wǎng)絡(luò)做畫面識別

       ● 局部連接

       ● 空間共享

       ● 輸出空間表達

       ● Depth維的處理

       ● Zero padding

       ● 形狀、概念抓取

       ● 多filters

       ● 非線性

       ● 輸出尺寸控制

       ● 矩陣乘法執(zhí)行卷積

       ● Max pooling

       ● 全連接層

       ● 結(jié)構(gòu)發(fā)展

● 畫面不變性的滿足

       ● 平移不變性

       ● 旋轉(zhuǎn)和視角不變性

       ● 尺寸不變性

       ● Inception的理解

       ● 1x1卷積核理解

       ● 跳層連接ResNet


視覺感知

一、畫面識別是什么任務(wù)?

學(xué)習(xí)知識的第一步就是明確任務(wù),清楚該知識的輸入輸出。卷積神經(jīng)網(wǎng)絡(luò)最初是服務(wù)于畫面識別的,所以我們先來看看畫面識別的實質(zhì)是什么。

先觀看幾組動物與人類視覺的差異對比圖。

  1. 蒼蠅的視覺和人的視覺的差異

    YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

    YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

2. 蛇的視覺和人的視覺的差異

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

(更多對比圖請參考鏈接

通過上面的兩組對比圖可以知道,即便是相同的圖片經(jīng)過不同的視覺系統(tǒng),也會得到不同的感知。

這里引出一條知識:生物所看到的景象并非世界的原貌,而是長期進化出來的適合自己生存環(huán)境的一種感知方式。 蛇的獵物一般是夜間行動,所以它就進化出了一種可以在夜間也能很好觀察的感知系統(tǒng),感熱。

任何視覺系統(tǒng)都是將圖像反光與腦中所看到的概念進行關(guān)聯(lián)。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

所以畫面識別實際上并非識別這個東西客觀上是什么,而是尋找人類的視覺關(guān)聯(lián)方式,并再次應(yīng)用。 如果我們不是人類,而是蛇類,那么畫面識別所尋找的?就和現(xiàn)在的不一樣。

畫面識別實際上是尋找(學(xué)習(xí))人類的視覺關(guān)聯(lián)方式?,并再次應(yīng)用

二、圖片被識別成什么取決于哪些因素?

下面用兩張圖片來體會識別結(jié)果取決于哪些因素。

  1. 老婦與少女

    YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

    請觀察上面這張圖片,你看到的是老婦還是少女? 以不同的方式去觀察這張圖片會得出不同的答案。 圖片可以觀察成有大鼻子、大眼睛的老婦。也可以被觀察成少女,但這時老婦的嘴會被識別成少女脖子上的項鏈,而老婦的眼睛則被識別為少女的耳朵。

  2. 海豚與男女

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

上面這張圖片如果是成人觀察,多半看到的會是一對親熱的男女。倘若兒童看到這張圖片,看到的則會是一群海豚(男女的輪廓是由海豚構(gòu)造出的)。所以,識別結(jié)果受年齡,文化等因素的影響,換句話說:

圖片被識別成什么不僅僅取決于圖片本身,還取決于圖片是如何被觀察的。

圖像表達

我們知道了“畫面識別是從大量的數(shù)據(jù)中尋找人類的視覺關(guān)聯(lián)方式?,并再次應(yīng)用。 其中是輸入,表示所看到的東西。輸出,表示該東西是什么。

在自然界中,是物體的反光,那么在計算機中,圖像又是如何被表達和存儲的呢?

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

圖像在計算機中是一堆按順序排列的數(shù)字,數(shù)值為0到255。0表示最暗,255表示最亮。 你可以把這堆數(shù)字用一個長長的向量來表示,也就是tensorflow的mnist教程中784維向量的表示方式。 然而這樣會失去平面結(jié)構(gòu)的信息,為保留該結(jié)構(gòu)信息,通常選擇矩陣的表示方式:28x28的矩陣。

上圖是只有黑白顏色的灰度圖,而更普遍的圖片表達方式是RGB顏色模型,即紅(Red)、綠(Green)、藍(Blue)三原色的色光以不同的比例相加,以產(chǎn)生多種多樣的色光。

這樣,RGB顏色模型中,單個矩陣就擴展成了有序排列的三個矩陣,也可以用三維張量去理解,其中的每一個矩陣又叫這個圖片的一個channel。

在電腦中,一張圖片是數(shù)字構(gòu)成的“長方體”??捎?寬width, 高height, 深depth 來描述,如圖。YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

畫面識別的輸入是shape為(width, height, depth)的三維張量。

接下來要考慮的就是該如何處理這樣的“數(shù)字長方體”。

畫面不變性

在決定如何處理“數(shù)字長方體”之前,需要清楚所建立的網(wǎng)絡(luò)擁有什么樣的特點。 我們知道一個物體不管在畫面左側(cè)還是右側(cè),都會被識別為同一物體,這一特點就是不變性(invariance),如下圖所示。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

我們希望所建立的網(wǎng)絡(luò)可以盡可能的滿足這些不變性特點。

為了理解卷積神經(jīng)網(wǎng)絡(luò)對這些不變性特點的貢獻,我們將用不具備這些不變性特點的前饋神經(jīng)網(wǎng)絡(luò)來進行比較。

圖片識別--前饋神經(jīng)網(wǎng)絡(luò)

方便起見,我們用depth只有1的灰度圖來舉例。 想要完成的任務(wù)是:在寬長為4x4的圖片中識別是否有下圖所示的“橫折”。 圖中,黃色圓點表示值為0的像素,深色圓點表示值為1的像素。 我們知道不管這個橫折在圖片中的什么位置,都會被認為是相同的橫折。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

若訓(xùn)練前饋神經(jīng)網(wǎng)絡(luò)來完成該任務(wù),那么表達圖像的三維張量將會被攤平成一個向量,作為網(wǎng)絡(luò)的輸入,即(width, height, depth)為(4, 4, 1)的圖片會被展成維度為16的向量作為網(wǎng)絡(luò)的輸入層。再經(jīng)過幾層不同節(jié)點個數(shù)的隱藏層,最終輸出兩個節(jié)點,分別表示“有橫折的概率”和“沒有橫折的概率”,如下圖所示。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

下面我們用數(shù)字(16進制)對圖片中的每一個像素點(pixel)進行編號。 當使用右側(cè)那種物體位于中間的訓(xùn)練數(shù)據(jù)來訓(xùn)練網(wǎng)絡(luò)時,網(wǎng)絡(luò)就只會對編號為5,6,9,a的節(jié)點的權(quán)重進行調(diào)節(jié)。 若讓該網(wǎng)絡(luò)識別位于右下角的“橫折”時,則無法識別。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

解決辦法是用大量物體位于不同位置的數(shù)據(jù)訓(xùn)練,同時增加網(wǎng)絡(luò)的隱藏層個數(shù)從而擴大網(wǎng)絡(luò)學(xué)習(xí)這些變體的能力。

然而這樣做十分不效率,因為我們知道在左側(cè)的“橫折”也好,還是在右側(cè)的“橫折”也罷,大家都是“橫折”。 為什么相同的東西在位置變了之后要重新學(xué)習(xí)?有沒有什么方法可以將中間所學(xué)到的規(guī)律也運用在其他的位置? 換句話說,也就是讓不同位置用相同的權(quán)重。

圖片識別--卷積神經(jīng)網(wǎng)絡(luò)

卷積神經(jīng)網(wǎng)絡(luò)就是讓權(quán)重在不同位置共享的神經(jīng)網(wǎng)絡(luò)。

局部連接

在卷積神經(jīng)網(wǎng)絡(luò)中,我們先選擇一個局部區(qū)域,用這個局部區(qū)域去掃描整張圖片。 局部區(qū)域所圈起來的所有節(jié)點會被連接到下一層的一個節(jié)點上。

為了更好的和前饋神經(jīng)網(wǎng)絡(luò)做比較,我將這些以矩陣排列的節(jié)點展成了向量。 下圖展示了被紅色方框所圈中編號為0,1,4,5的節(jié)點是如何通過連接到下一層的節(jié)點0上的。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

這個帶有連接強弱的紅色方框就叫做 filter 或 kernel 或 feature detector。 而filter的范圍叫做filter size,這里所展示的是2x2的filter size。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

第二層的節(jié)點0的數(shù)值就是局部區(qū)域的線性組合,即被圈中節(jié)點的數(shù)值乘以對應(yīng)的權(quán)重后相加。 用表示輸入值,表示輸出值,用圖中標注數(shù)字表示角標,則下面列出了兩種計算編號為0的輸出值的表達式。

注:在局部區(qū)域的線性組合后,也會和前饋神經(jīng)網(wǎng)絡(luò)一樣,加上一個偏移量。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

空間共享

當filter掃到其他位置計算輸出節(jié)點時,,包括是共用的。

下面這張動態(tài)圖展示了當filter掃過不同區(qū)域時,節(jié)點的鏈接方式。 動態(tài)圖的最后一幀則顯示了所有連接。 可以注意到,每個輸出節(jié)點并非像前饋神經(jīng)網(wǎng)絡(luò)中那樣與全部的輸入節(jié)點連接,而是部分連接。 這也就是為什么大家也叫前饋神經(jīng)網(wǎng)絡(luò)(feedforward neural network)為fully-connected neural network。 圖中顯示的是一步一步的移動filter來掃描全圖,一次移動多少叫做stride。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

空間共享也就是卷積神經(jīng)網(wǎng)絡(luò)所引入的先驗知識。

輸出表達

如先前在圖像表達中提到的,圖片不用向量去表示是為了保留圖片平面結(jié)構(gòu)的信息。 同樣的,卷積后的輸出若用上圖的排列方式則丟失了平面結(jié)構(gòu)信息。 所以我們依然用矩陣的方式排列它們,就得到了下圖所展示的連接。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

這也就是你們在網(wǎng)上所看到的下面這張圖。在看這張圖的時候請結(jié)合上圖的連接一起理解,即輸入(綠色)的每九個節(jié)點連接到輸出(粉紅色)的一個節(jié)點上的。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

經(jīng)過一個feature detector計算后得到的粉紅色區(qū)域也叫做一個“Convolved Feature” 或 “Activation Map” 或 “Feature Map”。

Depth維的處理

現(xiàn)在我們已經(jīng)知道了depth維度只有1的灰度圖是如何處理的。 但前文提過,圖片的普遍表達方式是下圖這樣有3個channels的RGB顏色模型。 當depth為復(fù)數(shù)的時候,每個feature detector是如何卷積的?

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

現(xiàn)象:2x2所表達的filter size中,一個2表示width維上的局部連接數(shù),另一個2表示height維上的局部連接數(shù),并卻沒有depth維上的局部連接數(shù),是因為depth維上并非局部,而是全部連接的。

在2D卷積中,filter在張量的width維, height維上是局部連接,在depth維上是貫串全部channels的。

類比:想象在切蛋糕的時候,不管這個蛋糕有多少層,通常大家都會一刀切到底,但是在長和寬這兩個維上是局部切割。

下面這張圖展示了,在depth為復(fù)數(shù)時,filter是如何連接輸入節(jié)點到輸出節(jié)點的。 圖中紅、綠、藍顏色的節(jié)點表示3個channels。 黃色節(jié)點表示一個feature detector卷積后得到的Feature Map。 其中被透明黑框圈中的12個節(jié)點會被連接到黃黑色的節(jié)點上。

  • 在輸入depth為1時:被filter size為2x2所圈中的4個輸入節(jié)點連接到1個輸出節(jié)點上。

  • 在輸入depth為3時:被filter size為2x2,但是貫串3個channels后,所圈中的12個輸入節(jié)點連接到1個輸出節(jié)點上。

  • 在輸入depth為時:2x2x個輸入節(jié)點連接到1個輸出節(jié)點上。


YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

(可從vectary在3D編輯下查看)

注意:三個channels的權(quán)重并不共享。 即當深度變?yōu)?后,權(quán)重也跟著擴增到了三組,如式子(3)所示,不同channels用的是自己的權(quán)重。 式子中增加的角標r,g,b分別表示red channel, green channel, blue channel的權(quán)重。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

計算例子:用表示red channel的編號為0的輸入節(jié)點,表示green channel編號為5個輸入節(jié)點。表示blue channel。如式子(4)所表達,這時的一個輸出節(jié)點實際上是12個輸入節(jié)點的線性組合。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

當filter掃到其他位置計算輸出節(jié)點時,那12個權(quán)重在不同位置是共用的,如下面的動態(tài)圖所展示。 透明黑框圈中的12個節(jié)點會連接到被白色邊框選中的黃色節(jié)點上。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

每個filter會在width維, height維上,以局部連接和空間共享,并貫串整個depth維的方式得到一個Feature Map。

Zero padding

細心的讀者應(yīng)該早就注意到了,4x4的圖片被2x2的filter卷積后變成了3x3的圖片,每次卷積后都會小一圈的話,經(jīng)過若干層后豈不是變的越來越??? Zero padding就可以在這時幫助控制Feature Map的輸出尺寸,同時避免了邊緣信息被一步步舍棄的問題。

例如:下面4x4的圖片在邊緣Zero padding一圈后,再用3x3的filter卷積后,得到的Feature Map尺寸依然是4x4不變。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

通常大家都想要在卷積時保持圖片的原始尺寸。 選擇3x3的filter和1的zero padding,或5x5的filter和2的zero padding可以保持圖片的原始尺寸。 這也是為什么大家多選擇3x3和5x5的filter的原因。 另一個原因是3x3的filter考慮到了像素與其距離為1以內(nèi)的所有其他像素的關(guān)系,而5x5則是考慮像素與其距離為2以內(nèi)的所有其他像素的關(guān)系。

尺寸:Feature Map的尺寸等于(input_size + 2 * padding_size ? filter_size)/stride+1。

注意:上面的式子是計算width或height一維的。padding_size也表示的是單邊補零的個數(shù)。例如(4+2-3)/1+1 = 4,保持原尺寸。

不用去背這個式子。其中(input_size + 2 * padding_size)是經(jīng)過Zero padding擴充后真正要卷積的尺寸。 減去 filter_size后表示可以滑動的范圍。 再除以可以一次滑動(stride)多少后得到滑動了多少次,也就意味著得到了多少個輸出節(jié)點。 再加上第一個不需要滑動也存在的輸出節(jié)點后就是最后的尺寸。

形狀、概念抓取

知道了每個filter在做什么之后,我們再來思考這樣的一個filter會抓取到什么樣的信息。

我們知道不同的形狀都可由細小的“零件”組合而成的。比如下圖中,用2x2的范圍所形成的16種形狀可以組合成格式各樣的“更大”形狀。

卷積的每個filter可以探測特定的形狀。又由于Feature Map保持了抓取后的空間結(jié)構(gòu)。若將探測到細小圖形的Feature Map作為新的輸入再次卷積后,則可以由此探測到“更大”的形狀概念。 比如下圖的第一個“大”形狀可由2,3,4,5基礎(chǔ)形狀拼成。第二個可由2,4,5,6組成。第三個可由6,1組成。


YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

除了基礎(chǔ)形狀之外,顏色、對比度等概念對畫面的識別結(jié)果也有影響。卷積層也會根據(jù)需要去探測特定的概念。

可以從下面這張圖中感受到不同數(shù)值的filters所卷積過后的Feature Map可以探測邊緣,棱角,模糊,突出等概念。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

如我們先前所提,圖片被識別成什么不僅僅取決于圖片本身,還取決于圖片是如何被觀察的。

而filter內(nèi)的權(quán)重矩陣W是網(wǎng)絡(luò)根據(jù)數(shù)據(jù)學(xué)習(xí)得到的,也就是說,我們讓神經(jīng)網(wǎng)絡(luò)自己學(xué)習(xí)以什么樣的方式去觀察圖片。

拿老婦與少女的那幅圖片舉例,當標簽是少女時,卷積網(wǎng)絡(luò)就會學(xué)習(xí)抓取可以成少女的形狀、概念。 當標簽是老婦時,卷積網(wǎng)絡(luò)就會學(xué)習(xí)抓取可以成老婦的形狀、概念。

下圖展現(xiàn)了在人臉識別中經(jīng)過層層的卷積后,所能夠探測的形狀、概念也變得越來越抽象和復(fù)雜。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

卷積神經(jīng)網(wǎng)絡(luò)會盡可能尋找最能解釋訓(xùn)練數(shù)據(jù)的抓取方式。

多filters

每個filter可以抓取探測特定的形狀的存在。 假如我們要探測下圖的長方框形狀時,可以用4個filters去探測4個基礎(chǔ)“零件”。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

因此我們自然而然的會選擇用多個不同的filters對同一個圖片進行多次抓取。 如下圖(動態(tài)圖過大,如果顯示不出,請看到該鏈接觀看),同一個圖片,經(jīng)過兩個(紅色、綠色)不同的filters掃描過后可得到不同特點的Feature Maps。 每增加一個filter,就意味著你想讓網(wǎng)絡(luò)多抓取一個特征。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

這樣卷積層的輸出也不再是depth為1的一個平面,而是和輸入一樣是depth為復(fù)數(shù)的長方體。

如下圖所示,當我們增加一個filter(紫色表示)后,就又可以得到一個Feature Map。 將不同filters所卷積得到的Feature Maps按順序堆疊后,就得到了一個卷積層的最終輸出。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

卷積層的輸入是長方體,輸出也是長方體。

這樣卷積后輸出的長方體可以作為新的輸入送入另一個卷積層中處理。

加入非線性

和前饋神經(jīng)網(wǎng)絡(luò)一樣,經(jīng)過線性組合和偏移后,會加入非線性增強模型的擬合能力。

將卷積所得的Feature Map經(jīng)過ReLU變換(elementwise)后所得到的output就如下圖所展示。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

輸出長方體

現(xiàn)在我們知道了一個卷積層的輸出也是一個長方體。 那么這個輸出長方體的(width, height, depth)由哪些因素決定和控制。

這里直接用CS231n的Summary:

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

計算例子:請體會CS231n的Convolution Demo部分的演示。

矩陣乘法執(zhí)行卷積

如果按常規(guī)以掃描的方式一步步計算局部節(jié)點和filter的權(quán)重的點乘,則不能高效的利用GPU的并行能力。 所以更普遍的方法是用兩個大矩陣的乘法來一次性囊括所有計算。

因為卷積層的每個輸出節(jié)點都是由若干個輸入節(jié)點的線性組合所計算。 因為輸出的節(jié)點個數(shù)是,所以就有個線性組合。

讀過我寫的線性代數(shù)教程的讀者請回憶,矩陣乘矩陣的意義可以理解為批量的線性組合按順序排列。 其中一個矩陣所表示的信息是多組權(quán)重,另一個矩陣所表示的信息是需要進行組合的向量。 大家習(xí)慣性的把組成成分放在矩陣乘法的右邊,而把權(quán)重放在矩陣乘法的左邊。 所以這個大型矩陣乘法可以用表示,其中和都是矩陣。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

卷積的每個輸出是由局部的輸入節(jié)點和對應(yīng)的filter權(quán)重展成向量后所計算的,如式子(2)。 那么中的每一行則是每個filter的權(quán)重,有個; 而的每一列是所有需要進行組合的節(jié)點(上面的動態(tài)圖中被黑色透明框圈中的節(jié)點),也有個。 的列的個數(shù)則表示每個filter要滑動多少次才可以把整個圖片掃描完,有次。 因為我們有多個filters,的行的個數(shù)則是filter的個數(shù)。

最后我們得到:

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

當然矩陣乘法后需要將整理成形狀為的三維張量以供后續(xù)處理(如再送入另一個卷積層)。 則也需要逐步的局部滑動圖片,最后堆疊構(gòu)成用于計算矩陣乘法的形式。

Max pooling

在卷積后還會有一個pooling的操作,盡管有其他的比如average pooling等,這里只提max pooling。

max pooling的操作如下圖所示:整個圖片被不重疊的分割成若干個同樣大小的小塊(pooling size)。每個小塊內(nèi)只取最大的數(shù)字,再舍棄其他節(jié)點后,保持原有的平面結(jié)構(gòu)得出output。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

max pooling在不同的depth上是分開執(zhí)行的,且不需要參數(shù)控制。 那么問題就max pooling有什么作用?部分信息被舍棄后難道沒有影響嗎?

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹


Max pooling的主要功能是downsamping,卻不會損壞識別結(jié)果。 這意味著卷積后的Feature Map中有對于識別物體不必要的冗余信息。 那么我們就反過來思考,這些“冗余”信息是如何產(chǎn)生的。

直覺上,我們?yōu)榱颂綔y到某個特定形狀的存在,用一個filter對整個圖片進行逐步掃描。但只有出現(xiàn)了該特定形狀的區(qū)域所卷積獲得的輸出才是真正有用的,用該filter卷積其他區(qū)域得出的數(shù)值就可能對該形狀是否存在的判定影響較小。 比如下圖中,我們還是考慮探測“橫折”這個形狀。 卷積后得到3x3的Feature Map中,真正有用的就是數(shù)字為3的那個節(jié)點,其余數(shù)值對于這個任務(wù)而言都是無關(guān)的。 所以用3x3的Max pooling后,并沒有對“橫折”的探測產(chǎn)生影響。 試想在這里例子中如果不使用Max pooling,而讓網(wǎng)絡(luò)自己去學(xué)習(xí)。 網(wǎng)絡(luò)也會去學(xué)習(xí)與Max pooling近似效果的權(quán)重。因為是近似效果,增加了更多的parameters的代價,卻還不如直接進行Max pooling。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

但是Max pooling也有不好的地方。因為并非所有的抓取都像上圖的例子。有些周邊信息對某個概念是否存在的判定也有影響。 并且Max pooling是對所有的Feature Maps進行等價的操作。就好比用相同網(wǎng)孔的漁網(wǎng)打魚,一定會有漏網(wǎng)之魚。

全連接層

當抓取到足以用來識別圖片的特征后,接下來的就是如何進行分類。 全連接層(也叫前饋層)就可以用來將最后的輸出映射到線性可分的空間。 通常卷積網(wǎng)絡(luò)的最后會將末端得到的長方體平攤(flatten)成一個長長的向量,并送入全連接層配合輸出層進行分類。

卷積神經(jīng)網(wǎng)絡(luò)大致就是covolutional layer, pooling layer, ReLu layer, fully-connected layer的組合,例如下圖所示的結(jié)構(gòu)。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

這里也體現(xiàn)了深層神經(jīng)網(wǎng)絡(luò)或deep learning之所以稱deep的一個原因:模型將特征抓取層和分類層合在了一起。 負責(zé)特征抓取的卷積層主要是用來學(xué)習(xí)“如何觀察”。

下圖簡述了機器學(xué)習(xí)的發(fā)展,從最初的人工定義特征再放入分類器的方法,到讓機器自己學(xué)習(xí)特征,再到如今盡量減少人為干涉的deep learning。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

結(jié)構(gòu)發(fā)展

以上介紹了卷積神經(jīng)網(wǎng)絡(luò)的基本概念。 以下是幾個比較有名的卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),詳細的請看CS231n。

    ● LeNet:第一個成功的卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用

   ● AlexNet:類似LeNet,但更深更大。使用了層疊的卷積層來抓取特征(通常是一個卷積層馬上一個max pooling層)

   ● ZF Net:增加了中間卷積層的尺寸,讓第一層的stride和filter size更小。

   ● GoogLeNet:減少parameters數(shù)量,最后一層用max pooling層代替了全連接層,更重要的是Inception-v4模塊的使用。

   ● VGGNet:只使用3x3 卷積層和2x2 pooling層從頭到尾堆疊。

   ● ResNet:引入了跨層連接和batch normalization。

   ● DenseNet:將跨層連接從頭進行到尾。

總結(jié)一下:這些結(jié)構(gòu)的發(fā)展趨勢有:

   ● 使用small filter size的卷積層和pooling

   ● 去掉parameters過多的全連接層

   ● Inception(稍后會對其中的細節(jié)進行說明)

   ● 跳層連接

不變性的滿足

接下來會談?wù)勎覀€人的,對于畫面不變性是如何被卷積神經(jīng)網(wǎng)絡(luò)滿足的想法。 同時結(jié)合不變性,對上面提到的結(jié)構(gòu)發(fā)展的重要變動進行直覺上的解讀。

需要明白的是為什么加入不變性可以提高網(wǎng)絡(luò)表現(xiàn)。 并不是因為我們用了更炫酷的處理方式,而是加入了先驗知識,無需從零開始用數(shù)據(jù)學(xué)習(xí),節(jié)省了訓(xùn)練所需數(shù)據(jù)量。 思考表現(xiàn)提高的原因一定要從訓(xùn)練所需要的數(shù)據(jù)量切入。 提出滿足新的不變性特點的神經(jīng)網(wǎng)絡(luò)是計算機視覺的一個主要研究方向。

平移不變性

可以說卷積神經(jīng)網(wǎng)絡(luò)最初引入局部連接和空間共享,就是為了滿足平移不變性。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

因為空間共享,在不同位置的同一形狀就可以被等價識別,所以不需要對每個位置都進行學(xué)習(xí)。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

旋轉(zhuǎn)和視角不變性

個人覺得卷積神經(jīng)網(wǎng)絡(luò)克服這一不變性的主要手段還是靠大量的數(shù)據(jù)。 并沒有明確加入“旋轉(zhuǎn)和視角不變性”的先驗特性。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

Deformable Convolutional Networks似乎是對此變性進行了進行增強。

尺寸不變性

與平移不變性不同,最初的卷積網(wǎng)絡(luò)并沒有明確照顧尺寸不變性這一特點。

我們知道filter的size是事先選擇的,而不同的尺寸所尋找的形狀(概念)范圍不同。

從直觀上思考,如果選擇小范圍,再一步步通過組合,仍然是可以得到大范圍的形狀。 如3x3尺寸的形狀都是可以由2x2形狀的圖形組合而成。所以形狀的尺寸不變性對卷積神經(jīng)網(wǎng)絡(luò)而言并不算問題。 這恐怕ZF Net讓第一層的stride和filter size更小,VGGNet將所有filter size都設(shè)置成3x3仍可以得到優(yōu)秀結(jié)果的一個原因。

但是,除了形狀之外,很多概念的抓取通常需要考慮一個像素與周邊更多像素之間的關(guān)系后得出。 也就是說5x5的filter也是有它的優(yōu)點。 同時,小尺寸的堆疊需要很多個filters來共同完成,如果需要抓取的形狀恰巧在5x5的范圍,那么5x5會比3x3來的更有效率。 所以一次性使用多個不同filter size來抓取多個范圍不同的概念是一種順理成章的想法,而這個也就是Inception。 可以說Inception是為了尺寸不變性而引入的一個先驗知識。

Inception

下圖是Inception的結(jié)構(gòu),盡管也有不同的版本,但是其動機都是一樣的:消除尺寸對于識別結(jié)果的影響,一次性使用多個不同filter size來抓取多個范圍不同的概念,并讓網(wǎng)絡(luò)自己選擇需要的特征。

你也一定注意到了藍色的1x1卷積,撇開它,先看左邊的這個結(jié)構(gòu)。

輸入(可以是被卷積完的長方體輸出作為該層的輸入)進來后,通常我們可以選擇直接使用像素信息(1x1卷積)傳遞到下一層,可以選擇3x3卷積,可以選擇5x5卷積,還可以選擇max pooling的方式downsample剛被卷積后的feature maps。 但在實際的網(wǎng)絡(luò)設(shè)計中,究竟該如何選擇需要大量的實驗和經(jīng)驗的。 Inception就不用我們來選擇,而是將4個選項給神經(jīng)網(wǎng)絡(luò),讓網(wǎng)絡(luò)自己去選擇最合適的解決方案。

接下來我們再看右邊的這個結(jié)構(gòu),多了很多藍色的1x1卷積。 這些1x1卷積的作用是為了讓網(wǎng)絡(luò)根據(jù)需要能夠更靈活的控制數(shù)據(jù)的depth的。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

1x1卷積核

如果卷積的輸出輸入都只是一個平面,那么1x1卷積核并沒有什么意義,它是完全不考慮像素與周邊其他像素關(guān)系。 但卷積的輸出輸入是長方體,所以1x1卷積實際上是對每個像素點,在不同的channels上進行線性組合(信息整合),且保留了圖片的原有平面結(jié)構(gòu),調(diào)控depth,從而完成升維或降維的功能。

如下圖所示,如果選擇2個filters的1x1卷積層,那么數(shù)據(jù)就從原本的depth 3 降到了2。若用4個filters,則起到了升維的作用。

這就是為什么上面Inception的4個選擇中都混合一個1x1卷積,如右側(cè)所展示的那樣。 其中,綠色的1x1卷積本身就1x1卷積,所以不需要再用另一個1x1卷積。 而max pooling用來去掉卷積得到的Feature Map中的冗余信息,所以出現(xiàn)在1x1卷積之前,緊隨剛被卷積后的feature maps。(由于沒做過實驗,不清楚調(diào)換順序會有什么影響。)

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

跳層連接

前饋神經(jīng)網(wǎng)絡(luò)也好,卷積神經(jīng)網(wǎng)絡(luò)也好,都是一層一層逐步變換的,不允許跳層組合。 但現(xiàn)實中是否有跳層組合的現(xiàn)象?

比如說我們在判斷一個人的時候,很多時候我們并不是觀察它的全部,或者給你的圖片本身就是殘缺的。 這時我們會靠單個五官,外加這個人的著裝,再加他的身形來綜合判斷這個人,如下圖所示。 這樣,即便圖片本身是殘缺的也可以很好的判斷它是什么。 這和前饋神經(jīng)網(wǎng)絡(luò)的先驗知識不同,它允許不同層級之間的因素進行信息交互、綜合判斷。

殘差網(wǎng)絡(luò)就是擁有這種特點的神經(jīng)網(wǎng)絡(luò)。大家喜歡用identity mappings去解釋為什么殘差網(wǎng)絡(luò)更優(yōu)秀。 這里我只是提供了一個以先驗知識的角度去理解的方式。 需要注意的是每一層并不會像我這里所展示的那樣,會形成明確的五官層。 只是有這樣的組合趨勢,實際無法保證神經(jīng)網(wǎng)絡(luò)到底學(xué)到了什么內(nèi)容。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

用下圖舉一個更易思考的例子。 圖形1,2,3,4,5,6是第一層卷積層抓取到的概念。 圖形7,8,9是第二層卷積層抓取到的概念。 圖形7,8,9是由1,2,3,4,5,6的基礎(chǔ)上組合而成的。

但當我們想要探測的圖形10并不是單純的靠圖形7,8,9組成,而是第一個卷積層的圖形6和第二個卷積層的8,9組成的話,不允許跨層連接的卷積網(wǎng)絡(luò)不得不用更多的filter來保持第一層已經(jīng)抓取到的圖形信息。并且每次傳遞到下一層都需要學(xué)習(xí)那個用于保留前一層圖形概念的filter的權(quán)重。 當層數(shù)變深后,會越來越難以保持,還需要max pooling將冗余信息去掉。

一個合理的做法就是直接將上一層所抓取的概念也跳層傳遞給下下一層,不用讓其每次都重新學(xué)習(xí)。 就好比在編程時構(gòu)建了不同規(guī)模的functions。 每個function我們都是保留,而不是重新再寫一遍。提高了重用性。

同時,因為ResNet使用了跳層連接的方式。也不需要max pooling對保留低層信息時所產(chǎn)生的冗余信息進行去除。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

Inception中的第一個1x1的卷積通道也有類似的作用,但是1x1的卷積仍有權(quán)重需要學(xué)習(xí)。 并且Inception所使用的結(jié)合方式是concatenate的合并成一個更大的向量的方式,而ResNet的結(jié)合方式是sum。 兩個結(jié)合方式各有優(yōu)點。 concatenate當需要用不同的維度去組合成新觀念的時候更有益。 而sum則更適用于并存的判斷。比如既有油頭發(fā),又有胖身軀,同時穿著常年不洗的牛仔褲,三個不同層面的概念并存時,該人會被判定為程序員的情況。 又比如雙向LSTM中正向和逆向序列抓取的結(jié)合常用相加的方式結(jié)合。在語音識別中,這表示既可以正向抓取某種特征,又可以反向抓取另一種特征。當兩種特征同時存在時才會被識別成某個特定聲音。

在下圖的ResNet中,前一層的輸入會跳過部分卷積層,將底層信息傳遞到高層。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

在下圖的DenseNet中,底層信息會被傳遞到所有的后續(xù)高層。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

后續(xù)

隨著時間推移,各個ResNet,GoogLeNet等框架也都在原有的基礎(chǔ)上進行了發(fā)展和改進。 但基本都是上文描述的概念的組合使用加上其他的tricks。

如下圖所展示的,加入跳層連接的Inception-ResNet。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

但對我而言,真正重要的是這些技巧對于各種不變性的滿足。

雷峰網(wǎng)特約稿件,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

YJango的卷積神經(jīng)網(wǎng)絡(luò)——介紹

分享:

編輯

雷鋒專欄賬號,關(guān)注技術(shù)科普&行業(yè)深度分析!
當月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說