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

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

0

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

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

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

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

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

目錄

● 視覺感知

       ● 畫面識(shí)別是什么

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

● 圖像表達(dá)

        ● 畫面識(shí)別的輸入 

        ● 畫面不變形

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

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

       ● 局部連接

       ● 空間共享

       ● 輸出空間表達(dá)

       ● Depth維的處理

       ● Zero padding

       ● 形狀、概念抓取

       ● 多filters

       ● 非線性

       ● 輸出尺寸控制

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

       ● Max pooling

       ● 全連接層

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

● 畫面不變性的滿足

       ● 平移不變性

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

       ● 尺寸不變性

       ● Inception的理解

       ● 1x1卷積核理解

       ● 跳層連接ResNet


視覺感知

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

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

先觀看幾組動(dòng)物與人類視覺的差異對(duì)比圖。

  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ò)——介紹

(更多對(duì)比圖請(qǐng)參考鏈接

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

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

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

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

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

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

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

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

  1. 老婦與少女

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

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

  2. 海豚與男女

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

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

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

圖像表達(dá)

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

在自然界中,是物體的反光,那么在計(jì)算機(jī)中,圖像又是如何被表達(dá)和存儲(chǔ)的呢?

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

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

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

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

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

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

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

畫面不變性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

局部連接

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

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

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

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

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

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

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

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

空間共享

當(dāng)filter掃到其他位置計(jì)算輸出節(jié)點(diǎn)時(shí),,包括是共用的。

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

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

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

輸出表達(dá)

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

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

這也就是你們?cè)诰W(wǎng)上所看到的下面這張圖。在看這張圖的時(shí)候請(qǐng)結(jié)合上圖的連接一起理解,即輸入(綠色)的每九個(gè)節(jié)點(diǎn)連接到輸出(粉紅色)的一個(gè)節(jié)點(diǎn)上的。

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

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

Depth維的處理

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

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

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

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

類比:想象在切蛋糕的時(shí)候,不管這個(gè)蛋糕有多少層,通常大家都會(huì)一刀切到底,但是在長(zhǎng)和寬這兩個(gè)維上是局部切割。

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

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

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

  • 在輸入depth為時(shí):2x2x個(gè)輸入節(jié)點(diǎn)連接到1個(gè)輸出節(jié)點(diǎn)上。


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

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

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

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

計(jì)算例子:用表示red channel的編號(hào)為0的輸入節(jié)點(diǎn),表示green channel編號(hào)為5個(gè)輸入節(jié)點(diǎn)。表示blue channel。如式子(4)所表達(dá),這時(shí)的一個(gè)輸出節(jié)點(diǎn)實(shí)際上是12個(gè)輸入節(jié)點(diǎn)的線性組合。

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

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

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

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

Zero padding

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

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

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

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

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

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

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

形狀、概念抓取

知道了每個(gè)filter在做什么之后,我們?cè)賮硭伎歼@樣的一個(gè)filter會(huì)抓取到什么樣的信息。

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

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


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

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

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

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

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

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

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

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

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

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

多filters

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

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

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

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

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

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

如下圖所示,當(dāng)我們?cè)黾右粋€(gè)filter(紫色表示)后,就又可以得到一個(gè)Feature Map。 將不同filters所卷積得到的Feature Maps按順序堆疊后,就得到了一個(gè)卷積層的最終輸出。

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

卷積層的輸入是長(zhǎng)方體,輸出也是長(zhǎng)方體。

這樣卷積后輸出的長(zhǎng)方體可以作為新的輸入送入另一個(gè)卷積層中處理。

加入非線性

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

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

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

輸出長(zhǎng)方體

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

這里直接用CS231n的Summary:

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

計(jì)算例子:請(qǐng)?bào)w會(huì)CS231n的Convolution Demo部分的演示。

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

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

因?yàn)榫矸e層的每個(gè)輸出節(jié)點(diǎn)都是由若干個(gè)輸入節(jié)點(diǎn)的線性組合所計(jì)算。 因?yàn)檩敵龅墓?jié)點(diǎn)個(gè)數(shù)是,所以就有個(gè)線性組合。

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

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

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

最后我們得到:

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

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

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

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

Max pooling

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

max pooling的操作如下圖所示:整個(gè)圖片被不重疊的分割成若干個(gè)同樣大小的小塊(pooling size)。每個(gè)小塊內(nèi)只取最大的數(shù)字,再舍棄其他節(jié)點(diǎn)后,保持原有的平面結(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,卻不會(huì)損壞識(shí)別結(jié)果。 這意味著卷積后的Feature Map中有對(duì)于識(shí)別物體不必要的冗余信息。 那么我們就反過來思考,這些“冗余”信息是如何產(chǎn)生的。

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

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

但是Max pooling也有不好的地方。因?yàn)椴⒎撬械淖ト《枷裆蠄D的例子。有些周邊信息對(duì)某個(gè)概念是否存在的判定也有影響。 并且Max pooling是對(duì)所有的Feature Maps進(jìn)行等價(jià)的操作。就好比用相同網(wǎng)孔的漁網(wǎng)打魚,一定會(huì)有漏網(wǎng)之魚。

全連接層

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

卷積神經(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的一個(gè)原因:模型將特征抓取層和分類層合在了一起。 負(fù)責(zé)特征抓取的卷積層主要是用來學(xué)習(xí)“如何觀察”。

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

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

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

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

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

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

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

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

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

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

   ● DenseNet:將跨層連接從頭進(jìn)行到尾。

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

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

   ● 去掉parameters過多的全連接層

   ● Inception(稍后會(huì)對(duì)其中的細(xì)節(jié)進(jìn)行說明)

   ● 跳層連接

不變性的滿足

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

需要明白的是為什么加入不變性可以提高網(wǎng)絡(luò)表現(xiàn)。 并不是因?yàn)槲覀冇昧烁趴岬奶幚矸绞剑羌尤肓讼闰?yàn)知識(shí),無需從零開始用數(shù)據(jù)學(xué)習(xí),節(jié)省了訓(xùn)練所需數(shù)據(jù)量。 思考表現(xiàn)提高的原因一定要從訓(xùn)練所需要的數(shù)據(jù)量切入。 提出滿足新的不變性特點(diǎn)的神經(jīng)網(wǎng)絡(luò)是計(jì)算機(jī)視覺的一個(gè)主要研究方向。

平移不變性

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

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

因?yàn)榭臻g共享,在不同位置的同一形狀就可以被等價(jià)識(shí)別,所以不需要對(duì)每個(gè)位置都進(jìn)行學(xué)習(xí)。

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

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

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

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

Deformable Convolutional Networks似乎是對(duì)此變性進(jìn)行了進(jìn)行增強(qiáng)。

尺寸不變性

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

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

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

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

Inception

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

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

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

接下來我們?cè)倏从疫叺倪@個(gè)結(jié)構(gòu),多了很多藍(lán)色的1x1卷積。 這些1x1卷積的作用是為了讓網(wǎng)絡(luò)根據(jù)需要能夠更靈活的控制數(shù)據(jù)的depth的。

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

1x1卷積核

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

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

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

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

跳層連接

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

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

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

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

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

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

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

同時(shí),因?yàn)镽esNet使用了跳層連接的方式。也不需要max pooling對(duì)保留低層信息時(shí)所產(chǎn)生的冗余信息進(jìn)行去除。

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

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

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

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

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

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

后續(xù)

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

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

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

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

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

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

分享:

編輯

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