第一課:計算機視覺
受益于深度學(xué)習(xí)啦辐,計算機視覺是目前快速發(fā)展的領(lǐng)域之一组去,深度學(xué)習(xí)的計算機視覺現(xiàn)在能夠幫助自動駕駛汽車判斷周圍的其他汽車和行人的位置以躲避它們韵丑。也使面部識別比以前任何時候都要好够滑,面部解鎖手機个粱,打開門贾费。展示風(fēng)景钦购、酒店和產(chǎn)品的公司正使用深度學(xué)習(xí)幫助你展示最具吸引力最美或最相關(guān)的圖片,甚至產(chǎn)生了新的藝術(shù)形式褂萧。
深度學(xué)習(xí)的計算機視覺能吸引你們的原因有:
1.計算機視覺的急速發(fā)展能產(chǎn)生全新的應(yīng)用
2.即使你最終沒能親身開發(fā)計算機視覺系統(tǒng)押桃,但是創(chuàng)造力和創(chuàng)新精神在產(chǎn)生新的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和算法方面實際上也啟發(fā)了許多和其他領(lǐng)域的交叉
圖像分類
目標(biāo)檢測
神經(jīng)風(fēng)格轉(zhuǎn)換
挑戰(zhàn):輸入可以任意大
1M大小的圖片有三百萬維的輸入特征。所以如果第一個隱藏層你也許只有1000個隱藏單元导犹,然后總共的權(quán)重 w1矩陣唱凯,將會變成一千乘以三百萬維的矩陣,這個矩陣有三百萬個參數(shù)谎痢,這是非常非常大的磕昼。有那么多的參數(shù),很難獲得足夠的數(shù)據(jù)以避免神經(jīng)網(wǎng)絡(luò)過擬合舶得。
同時掰烟,訓(xùn)練一個有三百萬個參數(shù)的神經(jīng)網(wǎng)絡(luò),對計算量和內(nèi)存需求是不太可行的沐批。
所以需要卷積運算纫骑!它是神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)之一。
用邊緣檢測作為例子來解釋卷積九孩。
第二課:用邊緣檢測的例子來解釋卷積運算
卷積網(wǎng)絡(luò)是神經(jīng)網(wǎng)路的基礎(chǔ)組成單元之一先馆,通過邊緣檢測來學(xué)習(xí)卷積運算是如何進(jìn)行的?
神經(jīng)網(wǎng)絡(luò)的前幾層是如何檢測邊緣的躺彬?并且后幾層可能會檢測對象的某些部分煤墙,而更后的幾層會檢測到某些整個的對象。
舉例:檢測一張圖片中物體是什么宪拥?
你做的第一件事可能是檢測圖片中的垂直邊緣和水平邊緣仿野。
所以你怎么才能在像這樣的圖像中檢測邊緣呢?
灰度圖像只有6x6x1的矩陣(沒有分開的RGB通道)她君,為了檢測垂直邊緣脚作,你能做的是建立一個3x3的矩陣,在池化過程中用卷積神經(jīng)網(wǎng)絡(luò)中的專業(yè)術(shù)語來說在,這會被稱為過濾器球涛,有些科研論文中將它稱為核而不是過濾器劣针。
你需要做的是獲得6x6的圖像并求其卷積,卷積運算用*號代替亿扁。稍微有點遺憾的是這個星號在數(shù)學(xué)中是卷積的標(biāo)準(zhǔn)符號捺典,但是在Python中表示乘法,所以這個星號是雙重用法从祝,即重復(fù)的符號襟己。
這個卷積運算的乘積是一個4x4的矩陣,即4x4的圖像牍陌。運算過程是把過濾器粘貼到你的原始圖像的3x3區(qū)域上稀蟋,然后計算元素積,然后把九個結(jié)果都加起來呐赡。把區(qū)域向右移動一步后,計算第二個元素值骏融。
以此類推...
最終用3x3矩陣卷積6x6矩陣得到一個4x4的矩陣链嘀。這些都是多維的矩陣,左邊的矩陣可以很容易地理解為一個圖像档玻,中間是過濾器怀泊,右邊也是一個圖像。這就是一個垂直邊緣檢測器误趴。
提醒:如果你將這運用到編程語言中霹琼,大部分編程語言都會有一些不同的方法,而不是用一個星號去標(biāo)記卷積凉当。但是所有支持卷積的深度學(xué)習(xí)框架都會有一些函數(shù)實現(xiàn)這個卷積運算枣申。
為什么這是在進(jìn)行垂直邊緣檢測呢?
看另一個例子:
檢測出來的邊緣比較厚是因為我們在例子中用了一個很小的圖像看杭,如果你用一個1000x1000的圖像忠藤,而不是一個6x6的圖像,你會發(fā)現(xiàn)它能很好的檢測出你圖像中的垂直邊緣楼雹。
最右邊的明亮區(qū)域只是用輸出圖像的方式來表示有一個強垂直邊緣正好在圖像的中間模孩。
一個垂直邊緣是一個3x3的區(qū)域因為我們用的是3x3的過濾器,左邊有亮像素贮缅,然后右邊是暗像素榨咐。
卷積運算提供了一個方便的方法去弄清楚如何在圖像中找到這些垂直邊緣。
看完卷積運算的是如何工作以后谴供,那么如何運用卷積運算块茁?
第三課:更多的圖像邊緣檢測
正邊緣和負(fù)邊緣的區(qū)別?即由亮變暗和由暗變亮的邊緣過度憔鬼。其他幾種邊緣檢測器龟劲?以及如何讓算法來學(xué)習(xí)邊緣檢測器而不是手動設(shè)置邊緣檢測器胃夏?
上一講中的圖像翻轉(zhuǎn)以后會發(fā)生什么?
因為亮度變化是相反的昌跌,30也變成了-30仰禀。表明由暗變亮而不是由亮變暗的轉(zhuǎn)換。如果你不在乎這個轉(zhuǎn)換蚕愤,你可以輸出矩陣的絕對值答恶。但是這個過濾器確實能夠區(qū)分亮和暗的邊界。
更多邊界檢測的例子:
3x3的過濾器同樣能夠檢測水平的邊界萍诱,其上方區(qū)域亮悬嗓,下方區(qū)域暗。
可以檢測出正邊界和負(fù)邊界裕坊。中間值10反映了過濾器捕捉到了左邊正邊界的一部分和右邊負(fù)邊界的一部分包竹,因而混在一起從而得到介于兩者之間的值。如果這是一個1000x1000的圖片籍凝,雖然仍然是棋盤形式周瞎,但是就不會有這些元素為10的過渡區(qū)域。這些過渡值相對于圖片的大小會非常小饵蒂。
總而言之声诸,不同的過濾器可以找到垂直和水平的邊界。
事實上退盯,這些3x3的垂直邊界檢測器彼乌,只是一個可能的選擇,在計算機視覺文獻(xiàn)中渊迁,對于哪些數(shù)字組合是最好的仍然存在很大的爭議慰照。
sobel過濾器:這個過濾器的優(yōu)點在于它給中間行賦予了更大的權(quán)重,從而使它更加穩(wěn)定琉朽。
scharr過濾器:這個過濾器有些其他的略微不同的性質(zhì)焚挠。
上面的是垂直邊界檢測器,如果將上面這些矩陣旋轉(zhuǎn)90度就可以得到水平邊界檢測器漓骚, 隨著深度學(xué)習(xí)的發(fā)展蝌衔,我們發(fā)現(xiàn),如果你想要檢測一些復(fù)雜圖片的邊界蝌蹂,可能并不需要計算機視覺的研究人員挑選出這9個矩陣元素噩斟。你可以把矩陣?yán)锏?個元素當(dāng)做參數(shù),通過反向傳播來學(xué)習(xí)得到它們的數(shù)值孤个。目標(biāo)是獲得這9個參數(shù)使得對6x6的圖片剃允,用這個3x3的過濾器進(jìn)行卷積,能得到一個優(yōu)良的邊界檢測器。
在后面的視頻中可以看到斥废,將這9個元素當(dāng)做是參數(shù)學(xué)習(xí)椒楣,如果需要的話,反向傳播可以選擇學(xué)習(xí)得到比前述人們定義的過濾器更加善于捕捉你的數(shù)據(jù)的統(tǒng)計學(xué)特征的過濾器牡肉。
除了垂直和水平過濾器捧灰,同樣能夠?qū)W習(xí)去檢測45度的邊界,無論什么角度统锤,通過將這個數(shù)字設(shè)置為參數(shù)毛俏,從數(shù)據(jù)中自動學(xué)習(xí)得到我們發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)底層特征學(xué)習(xí)的很好,比如邊界饲窿,甚至比計算機視覺研究人員所精心選擇的更加穩(wěn)定煌寇。
但是這些計算仍然是卷積運算,這使得反向傳播可以學(xué)習(xí)任何所需的3x3的過濾器并應(yīng)用到整個圖片的任何位置逾雄,從而得到所需要檢測的特征阀溶。無論是垂直邊界,水平邊界還是傾斜的邊界鸦泳,甚至是一些還沒有名字的過濾器淌哟。
總之:
將這9個數(shù)字當(dāng)做是參數(shù)去學(xué)習(xí),是計算機視覺中一個有用的想法辽故,后面看具體的細(xì)節(jié),你將會學(xué)習(xí)如何利用反向傳播學(xué)習(xí)這9個數(shù)字腐碱。
但我們需要看看基本的卷積運算的一些細(xì)節(jié)和變化誊垢。如何使用填充和不同的步幅?這兩個是卷積神經(jīng)網(wǎng)絡(luò)的卷積底層架構(gòu)非常重要的組成部分症见。
第四課:填充/補白
為了構(gòu)建深層神經(jīng)網(wǎng)絡(luò)喂走,一個你非常需要使用的對基本的卷積操作的改進(jìn)是填充。
使用過濾器進(jìn)行卷積運算的公式是:
如果你有一個nxn的圖片并且想使用一個fxf的過濾器谋作,這樣輸出的維度將會是(n-f+1)x(n-f+1)芋肠。
這其實有兩個缺陷:
1.每一次你使用卷積操作,你的圖像都會縮小遵蚜,你做不了幾次卷積帖池,你的圖片就會變得非常小。比如你有一個一百萬的深度網(wǎng)絡(luò)吭净,如果每層都會縮小圖片一點睡汹,這樣一百層以后就會得到一個非常小的圖片。
所以每次你想檢測邊界或者其他特征時寂殉,都會縮小你的圖片囚巴,這就是一個缺陷。
2.圖片角落或者邊界上的像素,只會在輸出中被使用一次彤叉,因為它只通過3x3過濾器一次庶柿,然而中間的像素則會被過濾很多次。
你丟失了許多圖片上靠近邊界的信息秽浇。
為了同時解決上述兩個問題浮庐,你能做的就是使用卷積操作前,你可以填充圖片兼呵,使用額外的邊緣填充圖片兔辅,在邊界周圍用一個1像素大小的額外邊緣,所以你通過填充就可以保持圖片的原始大小击喂。
通常情況下维苔,如果你使用0來填充,如果p是填充的數(shù)量懂昂,在這種情況下介时,p = 1,因為我們使用了一個1像素的額外邊緣填充了一圈凌彬。這樣輸出就變成了(n+2p-f+1)x(n+2p-f+1)沸柔,這樣保持了原圖片的大小。
這樣做就可以大大降低之前的那種邊界和角落信息被忽略的嚴(yán)重程度铲敛,并且我在這里展示了使用單個像素填充邊緣的效果褐澎,如果你需要,可以使用兩個像素進(jìn)行邊緣填充伐蒋。
到底要填充多少工三?我們有兩個常見的選擇:
valid卷積和came卷積。
valid卷積:沒有填充先鱼。你會得到一個(n-f+1)x(n-f+1)維度的輸出俭正。
另一個常見的填充選擇:came卷積
意思是:你選擇的填充將使得輸出大小等于輸入大小,即
p = (f-1)/2
所以當(dāng)f是奇數(shù)時焙畔,這樣通過選擇填充的大小掸读,你可以保證輸入和輸出的大小相同。
在計算機視覺領(lǐng)域宏多,f基本上使用奇數(shù)儿惫,事實上幾乎永遠(yuǎn)是奇數(shù),很難看到偶數(shù)大小的計算機視覺使用的過濾器f伸但。
f是奇數(shù)的兩個原因:
1.如果f是偶數(shù)姥闪,你會需要一些不對稱的填充,所以f是奇數(shù)砌烁,從而在圖片四周產(chǎn)生相同維度的一個自然填充區(qū)域筐喳。
2.當(dāng)你有一個奇數(shù)大小的過濾器催式,這樣可以有一個中心位置,有時候在計算機視覺領(lǐng)域中避归,有一個特殊點是很好的荣月,因為它可以稱之為中心像素,這樣你就可以描述你過濾器的位置梳毙。
如果閱讀文獻(xiàn)哺窄,會發(fā)現(xiàn)3x3最常見,此外還有一些5x5账锹,7x7萌业。事實上,有些時候我們會用到1x1過濾器和它的原理奸柬,這些奇數(shù)過濾器的使用是約定俗成的生年,我建議你也這么做。
你現(xiàn)在知道了如何使用填充卷積廓奕,為了指定你卷積操作的填充抱婉,你可以指定p的大小,或者你可以說這是一個valid卷積(p=0)抑或是came卷積(有足夠的填充使得輸出和輸入相等)桌粉。
這就是填充蒸绩,那么如何實現(xiàn)帶步長的卷積?
第五課:帶步長的卷積
帶步長的卷積是在卷積神經(jīng)網(wǎng)絡(luò)中組成基礎(chǔ)卷積模塊的另一部分铃肯。
我們使用3X3過濾器對7X7的矩陣進(jìn)行卷積得到一個3x3的輸出患亿。輸入和輸出的維度間關(guān)系可以用以下的方程表示:
如果你有一個nxn大小的圖像,用一個fxf大小的過濾器對這個圖像進(jìn)行卷積押逼,對圖像使用p層填充步藕,并假設(shè)步長為s,得到結(jié)果的維度為(n+2p-f)/s+1 x (n+2p-f)/s+1宴胧。
還有一個細(xì)節(jié):
如果這個分?jǐn)?shù)中,分子不能被分母整除得到整數(shù)怎么辦表锻?
這時我們可以向下取整恕齐,用大括號表示向下取整。floor[z]表示最接近z的小于z的整數(shù)瞬逊。之所以這樣做是因為當(dāng)藍(lán)色區(qū)域被像素或補充的元素填滿時显歧,得到的是正數(shù)。如果藍(lán)色區(qū)域沒有被圖像或圖像加填充部分覆蓋确镊,落在外部時士骤,我們就不能進(jìn)行計算。
這說明3x3過濾器必須全部落在原圖像蕾域,或原圖像加上填充的范圍之內(nèi)拷肌,形成了這樣的約定到旦。
之后,計算輸出維度的正確做法是:如果(n+2p-f)/s不是整數(shù)的話巨缘,就向下取整。
總結(jié)一下維度的計算:
如果你有一個nxn的圖像或矩陣,將其填充p層元素后旅掂,用fxf大小的過濾器悲龟,以步長為s的方式進(jìn)行卷積,輸出的矩陣大小為(n+2p-f)/s+1又固,我們可以選擇這些數(shù)的數(shù)值仲器,使結(jié)果為整數(shù),即向下取整仰冠。
關(guān)于交叉相關(guān)和卷積的說明:
標(biāo)準(zhǔn)的書序課本對卷積的定義:其實是在做元素間相乘并求和之前乏冀,需要做一個另外的步驟,先將3x3過濾器沿水平軸進(jìn)行翻轉(zhuǎn)沪停,同樣地對豎直軸進(jìn)行翻轉(zhuǎn)煤辨,即對水平和豎直軸進(jìn)行鏡像映射,之后將其放到矩陣中木张,計算結(jié)果众辨,之后移動步長,以此類推...
我們在本視頻中討論的卷積將翻轉(zhuǎn)操作省略了舷礼,技術(shù)層面上來說鹃彻,實際上我們在視頻中進(jìn)行的操作,應(yīng)該是交叉相關(guān)妻献,而不是卷積蛛株。但是在深度學(xué)習(xí)文獻(xiàn)中,由于約定育拨,我們將其稱為卷積谨履。
總結(jié)一下:在機器學(xué)習(xí)的約定中,我們通常忽略掉翻轉(zhuǎn)的操作熬丧,技術(shù)上我們進(jìn)行的操作應(yīng)該被稱為交叉相關(guān)笋粟。但是大多數(shù)的深度學(xué)習(xí)文獻(xiàn)將其稱為卷積,所以我們將延續(xù)這一約定析蝴。
事實上害捕,在信號處理或其他數(shù)學(xué)分支領(lǐng)域,對卷積進(jìn)行核翻轉(zhuǎn)闷畸,會使卷積核保持:
這一性質(zhì)在數(shù)學(xué)上叫做結(jié)合率尝盼。
這一性質(zhì)在信號處理領(lǐng)域很有用,但對深度神經(jīng)網(wǎng)絡(luò)而言佑菩,它不重要盾沫,所以元素相乘并求和簡化了代碼裁赠。而且這一改變后,神經(jīng)網(wǎng)絡(luò)照常工作疮跑。
約定上组贺,大部分人把這個叫做卷積,即使數(shù)學(xué)家喜歡稱之為交叉相關(guān)祖娘。
因此失尖,你已經(jīng)看到了如何進(jìn)行卷積,也看到了如何進(jìn)行通過填充和跨步長進(jìn)行卷積渐苏,但是現(xiàn)在我們看到的都是對矩陣進(jìn)行卷積掀潮,如何對三維體積進(jìn)行卷積?這會使卷積操作具有更加強大的魔力琼富。
第七課:超量卷積
你們已經(jīng)理解了卷積在二維圖像中是如何工作的仪吧,那么對三維圖像如何實現(xiàn)算法呢?
RGB圖像是三張6x6圖像的疊加鞠眉,為了檢測這個圖像中圖像邊緣或一些圖片中的其他特征薯鼠,所以你現(xiàn)在應(yīng)該使用的是一個三維過濾器,即過濾器本身將有對應(yīng)的三層械蹋,分別對應(yīng)紅出皇、藍(lán)、綠三個通道哗戈。
6x6x3郊艘,第一個6代表圖像的高度,第二個6代表圖像的寬度唯咬,最后的3代表通道數(shù)目纱注。過濾器有著類似的高度、寬度和通道數(shù)胆胰。并且圖像中的通道數(shù)目必須與過濾器的通道數(shù)目相同狞贱,輸出將會是一個4x4的圖像,即4x4x1蜀涨。
為了簡化3x3的過濾器瞎嬉,而不是理解Wie矩陣的疊加,可以將過濾器畫成三維立方體勉盅。為了計算這個卷積運算的結(jié)果佑颇,是將這個立方體復(fù)制到對應(yīng)圖像區(qū)域顶掉。
運算:
將過濾器三個通道中的數(shù)字分別與原圖像三個通道中的數(shù)字相乘后求和草娜,將這些數(shù)字相加后得到輸出的第一個數(shù)字。移動方塊痒筒,以此類推...
你用這些做了什么呢宰闰?
如果你想要檢測圖片中紅色通道的邊緣茬贵,那么就可以在紅色通道上設(shè)置1 1 1 0 0 0 -1 -1 -1,然后在綠色通道和藍(lán)色通道上全部設(shè)置為0移袍,如果你是用這三層相疊加來獲得你的3x3x3過濾器解藻,那么這個過濾器就可以僅僅檢測紅色通道的垂直邊緣。
或者如果你不介意一個垂直邊緣屬于哪個顏色葡盗,那么你可能想要一個過濾器螟左,在三個通道上都設(shè)置為1 1 1 0 0 0 -1 -1 -1,你就會得到一個邊緣檢測器觅够,能檢測任何顏色的邊緣胶背,通過使用不同的參數(shù),你可以從這個3x3x3的過濾器中得到不同特征的檢測器喘先。
通過計算機視覺領(lǐng)域钳吟,當(dāng)你的輸入有一個固定的高度和寬度和一個固定數(shù)量的通道數(shù),那么你的過濾器可能會有不同的高度窘拯,和不同的寬度红且,但是有相同數(shù)量的通道。
理論上來說涤姊,我們可以有一個只負(fù)責(zé)紅色通道的過濾器暇番,或者一個只負(fù)責(zé)藍(lán)色通道或綠色通道的過濾器,那么再一次的砂轻,你會注意到做一個體積的卷積時奔誓,用一個3x3x3來卷積6x6x3會得到一個4x4的結(jié)果,也是一個二維的輸出搔涝。
現(xiàn)在你知道了如何在體積上做卷積厨喂,最后還有一個對于建立卷積神經(jīng)網(wǎng)絡(luò)非常重要的概念,那就是如果我們不僅僅想要檢測垂直邊緣呢庄呈?
如果我們想同時檢測垂直邊緣和水平邊緣蜕煌,又或者是4度和70度邊緣,即如果你想要同時應(yīng)用多個過濾器呢诬留?
之前可能是一個垂直邊緣檢測器斜纪,或者是檢測其他的什么特征,第二個是個水平邊緣檢測器文兑,那么通過之前的第一個過濾器卷積運算盒刚,我們得到了第一個4x4的輸出,然后用第二個卷機器就能得到一個不同的4x4的輸出绿贞,我們可以把這兩個不同的4x4的輸出因块,把第一個放在前面,第二個放在后面籍铁,將這兩個輸出疊加到一起就可以得到一個4x4x2的輸出體積涡上。這里的2代表我們使用了兩個不同的過濾器趾断。
總結(jié)一下這里的維度:
如果你有nxnxn通道數(shù)量的輸入圖片,你用它來卷積一個fxfxn下標(biāo)c吩愧,同樣地通道數(shù)量芋酌,最后你會得到一個(n-f+1)x(n-f+1)xnc,這里的c是指過濾器的數(shù)量雁佳。
以上就是在立方體上做卷積的概念脐帝,實際上非常強大,其中一小部分作用在于你現(xiàn)在可以直接處理有三個通道的RGB圖像糖权,但是更重要的是腮恩,你現(xiàn)在可以檢測兩個特征,比如垂直温兼、水平邊緣或者10個秸滴,128個甚至幾百個不同的特征,那么這個輸出會是通道的數(shù)目募判,等于過濾器的數(shù)目荡含。
這里有個需要注意的表達(dá)式,我一直在用你的通道數(shù)量作為最后一個維度届垫,而在文獻(xiàn)里人們經(jīng)常稱之為3D立方體的深度释液,這兩種表達(dá)方式,無論是深度還是通道装处,都常出現(xiàn)在文獻(xiàn)中误债,有時候也會說到神經(jīng)網(wǎng)絡(luò)的深度,所以視頻中統(tǒng)一使用通道表示這三個維度的大小妄迁。
現(xiàn)在你知道了如何在立方體上做卷積,應(yīng)該準(zhǔn)備好應(yīng)用卷積神經(jīng)網(wǎng)絡(luò)上其中一層了登淘,具體怎么做呢箫老?
第七課:卷積網(wǎng)絡(luò)的一層
準(zhǔn)備好來構(gòu)建單層卷積神經(jīng)網(wǎng)絡(luò)。
之前我們已經(jīng)提過如何應(yīng)用兩個不同的過濾器黔州,對三維輸入進(jìn)行卷積計算耍鬓。最終我們需要把這些輸出變成單層卷積神經(jīng)網(wǎng)絡(luò),還需要對每一個輸出添加一個偏差(bias)流妻,這里的偏差是一個實數(shù)牲蜀,這里使用廣播機制,我們對16個元素添加同樣的偏差绅这,然后我們可以繼續(xù)添加一些非線性轉(zhuǎn)換ReLu涣达,最終,通過添加偏差和非線性轉(zhuǎn)換,我們得到一個4x4矩陣輸出峭判,最后我們把這兩個輸出放到一起,就計算得到了一個4x4x2的輸出棕叫。
這就是卷積神經(jīng)網(wǎng)絡(luò)的一層林螃。
現(xiàn)在我們把這個例子和非卷積單層前向傳播神經(jīng)網(wǎng)絡(luò)對應(yīng)起來,在神經(jīng)網(wǎng)絡(luò)傳播之前我們需要做:
求解z[l]
利用激活函數(shù)求解a[l]
這里把原始圖像當(dāng)做a[0]俺泣,過濾器的效果和w[l]類似疗认,這里通過卷積計算得到4x4x2的矩陣的過程就和之前w[1]xa[0]類似,輸出也是4x4矩陣伏钠。另外就是添加偏差值横漏,它的作用和z類似。最后通過非線性方程得到最后的輸出熟掂。這里的輸出就是下一層神經(jīng)網(wǎng)絡(luò)的激活函數(shù)缎浇。
以上就是從a[0]得到a[1]的操作:首先是線性計算,然后進(jìn)行卷積赴肚,然后再相乘素跺。因此卷積計算其實就是應(yīng)用線性操作計算,再添加偏差誉券,再通過ReLu操作指厌,使得從a[0]即6x6x3的輸入,經(jīng)過一層神經(jīng)網(wǎng)絡(luò)的傳播得到4x4x2的輸出踊跟,也就是a[1]踩验。
這就是一層神經(jīng)網(wǎng)絡(luò)。
在這個例子中商玫,我們有兩個過濾器箕憾,也就是有兩個特征,因此得到的輸出也是4x4x2拳昌,但如果我們有10個過濾器而不是兩個厕九,那么我們的輸出就是4x4x10,因為這里需要10個這樣的操作地回,然后把結(jié)果放到一起扁远,得到一個4x4x10的a[1]輸出。
看一個練習(xí):假如你的單層神經(jīng)網(wǎng)絡(luò)中有10個而不是2個3x3的過濾器刻像,這層網(wǎng)絡(luò)中有幾個參數(shù)畅买?
每個過濾器都是3x3x3的三維矩陣,因此每個過濾器有27個參數(shù)细睡,也就是有27個數(shù)字需要進(jìn)行訓(xùn)練學(xué)習(xí)得到谷羞,還有一個參數(shù)b,也就是有28個參數(shù)。
對于10個過濾器湃缎,28*10 = 280個參數(shù)犀填。
注意這里:一個很好的特性就是:不管輸入的圖像有多大,比方1000x1000嗓违,5000x5000九巡,這里的參數(shù)個數(shù)都不會改變。因此用10個過濾器來檢測一個圖片的不同特征蹂季,比方垂直邊緣線冕广,水平邊緣線或者其他特征,不管圖片多大偿洁,所有的參數(shù)個數(shù)都是一樣的撒汉。
這個特征使得卷積神經(jīng)網(wǎng)絡(luò)不太容易過擬合。
因此涕滋,比方你訓(xùn)練學(xué)習(xí)得到10個特征檢測器(函數(shù))睬辐,你可以把它們應(yīng)用到非常大的圖像(特征檢測)中,所用的參數(shù)數(shù)目是不變的宾肺,比如這里的280個參數(shù)溉委,相比于圖片大小是非常小的,
現(xiàn)在我們來總結(jié)回顧一下:
用來在卷積神經(jīng)網(wǎng)絡(luò)中描述一層網(wǎng)絡(luò)的(形式化表示的)符號標(biāo)記:
1.f[l]表示過濾器矩陣維度的大小爱榕,這是一個l層大小的fxf的過濾器瓣喊,這里的l表示當(dāng)前層
2.p[l]表示填充的大小,填充的大小也可以通過不同的卷積名稱來定義黔酥,比如valid填充——沒有填充藻三,Same填充——應(yīng)用的填充大小會使得輸出結(jié)果大小和輸入擁有相同的維度大小。
3.s[l]表示步長大小
4.這一層的輸入跪者,是一個多維矩陣棵帽,也就是一個n x n x nc(上一層的通道數(shù)目)我們改變表示方法為(因為這個來自于上一層的激活函數(shù)):
n[l-1] x n[l-1] x nc[l-1]。
目前為止我們的圖像都是長寬想等的渣玲,對于長寬不等的圖像逗概,我們表示為:
n[l-1]h x n[l-1]w x nc[l-1]
這里的h和w表示上一層輸入圖像的長和寬。因此l層的矩陣大小是:
nh * nw * nc
這是第l層的情況忘衍,這一層的輸入是上一層的輸出逾苫,就變?yōu)閘-1。
5.這一層神經(jīng)網(wǎng)絡(luò)的輸出為:
n[l]h x n[l]w x nc[l]
這里輸出的大小的長和寬是由公式:
(n+2p-f)/s + 1決定的枚钓,結(jié)果如果不是整數(shù)的話铅搓,向下取整。
輸出矩陣的長和寬的計算公式:
這就是如何從nh[l-1]到nh[l]搀捷,和從nw[l-1]到nw[l]星掰,那么通道數(shù)目怎么得到呢?
6.nc[l]表示輸出中的通道數(shù)目
我們可以看一下輸出維度的深度,通道數(shù)目的大小是和過濾器數(shù)目一樣的氢烘,比方我們有2個過濾器怀偷,那么我們的輸出就是4x4x2,是二維的播玖,如果過濾器的數(shù)目是10個椎工,我們的輸出就是4x4x10。因此輸出的通道數(shù)目就是我們這一層神經(jīng)網(wǎng)絡(luò)所用的過濾器的數(shù)目黎棠。
7.每個過濾器的大小是f[l] x f[l] x nc[l-1](過濾器的通道數(shù)目)(應(yīng)該和輸入的通道數(shù)目相同)
8.最后通過非線性計算,這一層的輸出镰绎,就是這一層的激活函數(shù)a[l]脓斩,即n[l]h x n[l]w x nc[l],如果你使用向量化實現(xiàn)畴栖,或者批量梯度下降随静,或者是小批量梯度下降,那么就會得到:
A[l] = m * n[l]h x n[l]w x nc[l]
這就是你需要使用的變量的(梯度下降)順序:首先告訴我們訓(xùn)練數(shù)據(jù)的大小吗讶,然后分別加入三個變量燎猛。
9.權(quán)重矩陣w:我們已經(jīng)知道過濾器的維度,即f[l] x f[l] x nc[l-1]照皆,但這只是一個過濾器的維度重绷,我們需要多少過濾器呢?
所有過濾器的權(quán)重的維度就是所有的過濾器的大小總和膜毁,因為最后的數(shù)字大小是l層神經(jīng)網(wǎng)絡(luò)中過濾器的數(shù)畝大小昭卓,所以w的維度是:
f[l] x f[l] x nc[l-1] x nc[l]
10.最后,每個過濾器加上一個偏差瘟滨,即加上一個實數(shù)候醒,因此偏差參數(shù)有nc[l]大小的向量,它會減去一個更為方便的偏差系數(shù)編碼(1, 1, 1,nc[l])杂瘸。
這樣的四維矩陣倒淫,也稱為4維tensor。
這些都是本課程會用到的參數(shù)和符號败玉,其實在一個常見框架中敌土,會有一個參數(shù)來設(shè)置在矩陣的索引中,是要把通道數(shù)目放在最開始還是最后面运翼。
我覺得這些情況都合理纯赎,只要你使用的時候保持前后一致。
本節(jié)課中南蹂,都會保持高和寬兩個維度放在前面犬金,通道維度放到最后。
把重點放在單層卷積神經(jīng)網(wǎng)絡(luò)和神經(jīng)網(wǎng)絡(luò)工作原理以及在這層中激活函數(shù)的計算,還有怎么把激活函數(shù)應(yīng)用到下一層晚顷。
現(xiàn)在你知道了單層卷積神經(jīng)網(wǎng)絡(luò)怎么工作峰伙,下一步我們聯(lián)合幾層神經(jīng)網(wǎng)絡(luò),來討論深度卷積神經(jīng)網(wǎng)絡(luò)该默。
第八課:簡單的卷積網(wǎng)絡(luò)示例
ConvNet中的一個卷積層⊥ィ現(xiàn)在我們來研究一個深度卷積神經(jīng)網(wǎng)絡(luò)的實例。
假如你有一張圖片栓袖,并且你想做圖片分類匣摘,或圖像識別,例如輸入一張圖像x裹刮,判斷是不是一只貓音榜。假設(shè)這個圖像的大小為39x39x3。
因此第0層中的nh和nw都是39捧弃,通道數(shù)為3赠叼,假設(shè)第一層用3x3過濾器,使用步長為1违霞,不使用填充嘴办,使用相同的卷積,用10個過濾器买鸽,那么神經(jīng)網(wǎng)絡(luò)下一層的激活數(shù)就是:37x37x10涧郊,37來自于公式(n + 2p- f)/s +1,10來自于10個過濾器眼五,這是一個有效的卷積底燎,得到nh[1] = nw[1] = 37,nc[1] = 10弹砚,nc[1]同時也等于第一層的過濾器的數(shù)量双仍,這就是第一層的激活的維度a[1]。
假設(shè)你現(xiàn)在有另一個卷積層桌吃,而且假設(shè)你現(xiàn)在使用5x5的過濾器朱沃,以2為步長,沒有填充茅诱,20個過濾器逗物,那么神經(jīng)網(wǎng)絡(luò)下一層的激活數(shù)就是:17x17x20,因為采用2為步長瑟俭,維度收縮的更快翎卓,得到這里的激活的維度a[2]。
再加上最后一個卷積層摆寄,a[3]失暴。
所以你現(xiàn)在做的就是把一個39x39x3的輸入圖像坯门,計算出此圖像的7x7x40特征。
最后逗扒,通常會做的是古戴,如果你把這個7x7x40,把這些特征展開為1960個單元矩肩,扁平化為一個向量现恼,然后將其輸入到一個邏輯回歸或softmax單元,取決于你是在試圖識別有貓/無貓的二元分類還是試圖識別任意的k種東西的多元分類黍檩,這就會給神經(jīng)網(wǎng)絡(luò)的最終預(yù)測輸出叉袍。
所以要清楚,最后一步只是采取這些數(shù)字刽酱,1960個數(shù)字喳逛,并把它們展開為一個非常長的矢量,你可以輸入到softmax直到它能做出最終預(yù)測輸出的一個回歸肛跌。
以上就是一個非常典型的ConvNet的例子艺配。
卷積神經(jīng)網(wǎng)絡(luò)設(shè)計中的很多工作是選擇像這樣的超參數(shù)總單元數(shù)是多少察郁?步長是多少衍慎?填充是多少?或者使用了多少過濾器皮钠?如何做出這些選擇和指導(dǎo)方針是什么稳捆?
但是就目前而言,我們要記住的一件事就是:隨著你建立的神經(jīng)網(wǎng)絡(luò)越來越深麦轰,通常你的輸入圖像都很大乔夯,但是隨著你在神經(jīng)網(wǎng)絡(luò)中的深入,圖像大小逐漸變小款侵,此例中從39變成37到17到7等末荐,而通道的數(shù)目一般會增加,此例中從3到10到20到40新锈。
你會在其他卷積神經(jīng)網(wǎng)絡(luò)中看到這樣的一種常見的趨勢甲脏。
事實證明在一個典型的ConvNet中,通常有三種類型的層妹笆。
1.卷積層块请,通常我們會將其表示為一個Conv層
還有兩種常見的層類型:
2.池層,通常會直接稱為池
3.完全聯(lián)通的層拳缠,F(xiàn)C
雖然我們可能只是使用卷積層來設(shè)計一個相當(dāng)好的神經(jīng)網(wǎng)絡(luò)墩新,大多數(shù)神經(jīng)網(wǎng)絡(luò)架構(gòu)也將有幾個池層和幾個完全連接層。
幸運的是窟坐,池層和完全連接層要比卷積層簡單一些海渊。
下節(jié)課介紹來讓你對卷積神經(jīng)網(wǎng)絡(luò)中的所有常見的層都有一個感覺绵疲。你將會構(gòu)建比我們剛剛展示的更強大的神經(jīng)網(wǎng)絡(luò)。
如何實現(xiàn)一個池層切省?
第九課:池層
除了卷積層以外最岗,ConvNet通常還會使用池化層來減少展示量,一次來提高計算速度朝捆,并使一些特征的檢測功能更強大般渡。
池化的例子(max pooling)之最大池化:
實現(xiàn)方法很簡單:將原始圖像的區(qū)域賦予不同的顏色后,然后將每個輸出值對應(yīng)于顏色區(qū)域的最大值芙盘。
這就如同你使用了一個大小為2的過濾器驯用,因為你選取了一個2x2的區(qū)域,并且使用步長為2儒老,這些實際上是最大池化的超參數(shù)蝴乔。
最大池化背后的機制:
如果你把原始圖像的大小看作是某個特征的集合,即神經(jīng)網(wǎng)絡(luò)某個層中的激活狀態(tài)驮樊,那么一個大的數(shù)字意味著它或許檢測到了一個特定的特征薇正,它或許是一個垂直的邊緣...。
所以最大池化做的是:檢測所有地方的特征囚衔,四個特征中的一個被保留在最大池化的輸出中挖腰。即如果在濾波器中任何地方檢測到了這些特征,就保留最大的數(shù)值练湿,但是如果這個特征沒有檢測到猴仑,可能這個區(qū)域內(nèi)沒有這個特征,因為那些數(shù)值的最大值仍然相當(dāng)小肥哎。
但是不得不承認(rèn):人們選擇使用最大池化辽俗,是因為在很多實驗中發(fā)現(xiàn)它的效果很好。
最大池化有一個有趣的特性:它有一套超參數(shù)篡诽,但是它沒有任何參數(shù)需要學(xué)習(xí)崖飘,實際上沒有任何需要梯度相加算法學(xué)習(xí)的東西,一旦確定了f和s,就確定了計算,而且梯度下降算法不會對其有任何改變歇僧。
看一個有某些不同超參的例子:
我們之前用來計算卷積層輸出大小的公式在最大池化中仍然適用,(n + 2p -f)/s +1赊琳,這個公式仍然可以用于計算最大池化的輸出大小。
以上是二維輸入的最大池化輸出砰碴,如果對于一個三維輸入躏筏,則輸出會具有同樣的維數(shù)。并且計算最大值采樣的方法是使用我們剛剛描述的每個通道的計算過程呈枉,即在不同的層上進(jìn)行最大化取值操作趁尼。
總結(jié):最大值采樣計算是在這些nc個通道上獨立進(jìn)行的埃碱。
還有一類并非經(jīng)常使用的采樣:均值采樣。
均值采樣所做的不是在每個濾波器中取最大值酥泞,而是取其平均值砚殿。
目前最大值采樣的使用通常比均值采樣更多,唯一的例外是有時候深度非常大的神經(jīng)網(wǎng)絡(luò)芝囤,你可以采用均值采樣來合并表示似炎。
總結(jié)一下:
1.采樣的超參是濾波器的大小f(常用值2悯姊,可以近似地把高度和寬度縮小兩倍以上)
2.步長s(常用值2)
3.其他的超參就像一個二進(jìn)制位元羡藐,指示你是使用最大值采樣還是均值采樣
4.如果你愿意有一個罕見的超參:填充(極少使用,有一個例外)悯许,對于最大值采樣的絕大多數(shù)部分仆嗦,是不進(jìn)行任何填充。
5.最大值采樣的輸入是:大小為nh * nw * nc的體數(shù)據(jù)先壕,它會輸出一個如下所述大小的體數(shù)據(jù)[(nh-f)/s+1] x [(nh-f)/s+1] x nc瘩扼,這里輸入通道的數(shù)量等于輸出通道的數(shù)量,因為采樣是獨立的應(yīng)用到每一個通道垃僚。
6.一個值得注意的是:它沒有需要學(xué)習(xí)的參數(shù)集绰,所以在實現(xiàn)剪切的時候,沒有參數(shù)需要通過最大值采樣進(jìn)行調(diào)整冈在,反而是上面的超參需要你設(shè)定一次倒慧,或許是人工設(shè)定或者使用交叉檢驗按摘,它就是一個神經(jīng)網(wǎng)絡(luò)在其中一層計算的確定函數(shù)包券。
現(xiàn)在你知道了如何建立卷幾層和采樣層,讓我們接下來看一個更復(fù)雜的卷積網(wǎng)絡(luò)的例子炫贤,這個例子會引入全連接層溅固。
第十課:CNN例子
你現(xiàn)在已經(jīng)了解了用于創(chuàng)建一個完整的卷積神經(jīng)網(wǎng)絡(luò)的構(gòu)件,看一個例子:
例如你有一個32*32 RGB圖像兰珍,要嘗試識別圖像中是0-9中10個數(shù)字中的哪一個是7侍郭?
這里是用的神經(jīng)網(wǎng)絡(luò)的算法是一種和它非常相似的經(jīng)典的神經(jīng)網(wǎng)絡(luò)的啟發(fā),稱作LeNet-5掠河,這里要展示的很多和LeNet-5不完全一樣亮元,但其中許多參數(shù)的選擇是受它啟發(fā)的。
將原始圖像經(jīng)過過濾器得到conv 1唠摹,那么用了6個過濾器爆捞,加上偏差值,再應(yīng)用非線性勾拉,或許ReLu非線性煮甥,得到了卷積層一的輸出28286盗温,接下來使用一個池化層,最大池化參數(shù)為f = 2成肘, s = 2卖局,沒有填充,得到14146双霍,我們把這層稱為池1輸出砚偶。
事實上在卷積網(wǎng)絡(luò)中有兩種關(guān)于層的說法:
1.將conv 1和池層1兩個單元稱為神經(jīng)網(wǎng)絡(luò)的第一層
2.卷積層為一層,池化層單獨稱為一層
神經(jīng)網(wǎng)絡(luò)中當(dāng)人們說到網(wǎng)絡(luò)層數(shù)的時候洒闸,通常指那些有權(quán)重蟹演,有參數(shù)的網(wǎng)絡(luò)層數(shù)量,因為池化層沒有權(quán)重顷蟀,沒有參數(shù)酒请,只有一些超參數(shù),我會使用卷積層和池化層為一層的說法鸣个。
并且Conv 1和Pool 1名字末尾是1羞反,也表明了我認(rèn)為兩者都是神經(jīng)網(wǎng)絡(luò)層一的組成部分。
接下來囤萤,在14146的基礎(chǔ)上昼窗,再做一次卷積,這次使用55的過濾器涛舍,步長為1澄惊,共10個過濾器,那現(xiàn)在你會得到一個101010的單元富雅,稱為卷積層二掸驱,繼續(xù)最大池化,f = 2没佑,s = 2毕贼,得到55*10大小的池化層2,即可得到神經(jīng)網(wǎng)絡(luò)層二蛤奢。
現(xiàn)在我們把池化層二展開為一個400*1的向量鬼癣,把它想象成為一組展開的神經(jīng)元。
接下來我們要做的是用這400個單元做輸入啤贩,創(chuàng)建一個有120個單元的下一層待秃,這實際上是我們第一個全連接網(wǎng)絡(luò)層,稱之為FC3痹屹,因為這400個輸入單元和120個輸出單元密集的相連章郁,因此這個全連接層和你之前見到的網(wǎng)絡(luò)神經(jīng)層一樣,這不過是一個標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)痢掠,其中被稱為w[3]的權(quán)重矩陣大小為120*400驱犹,因為400個輸入中的每一個單元都和120個輸出的每一個單元相連嘲恍。
所以被稱為全連接網(wǎng),并且這里還有個偏差參數(shù)雄驹,大小也將是120的向量佃牛,因為有120個輸出。
最后一步医舆,讓我們在120的單元的基礎(chǔ)上再加一層俘侠,這次讓它變得更小,假設(shè)我們84個單元最終蔬将。我將它稱為全連接網(wǎng)絡(luò)層4爷速,即FC4,最終我們獲得了可以用于softmax層的84個實數(shù)霞怀。
如果你嘗試做手寫識別惫东,那將是一個有著10個輸出的softmax層。
以上就是一個相對典型的展示了一個卷積神經(jīng)網(wǎng)絡(luò)的大致構(gòu)成毙石。其中的超參數(shù)選取的原則之后討論廉沮,一個常用的法則實際上是不要試著創(chuàng)造你自己的超參數(shù)組,而是看文獻(xiàn)徐矩,看別人使用的超參數(shù)滞时,從中選取一組可能適用于你的超參數(shù)。
目前我只想指出:經(jīng)常隨著神經(jīng)網(wǎng)絡(luò)的深入滤灯,高度nh和寬度nw會減小坪稽,從3232變成2020到1414再到1010,最終為5*5鳞骤,因此當(dāng)你深入下去通常寬度和高度都會變小窒百,然而通道數(shù)量會增加,從3到6最后是全連接網(wǎng)絡(luò)層弟孟。
另一種常見的神經(jīng)網(wǎng)絡(luò)模型是:
一個或多個卷積網(wǎng)絡(luò)層接著一層池化層贝咙,再接著一個或多個卷積層疊加一層池化層样悟,然后疊加幾層全連接層拂募,也許最后還疊加一個Softmax層,如上所述的就是一個常見的神經(jīng)網(wǎng)絡(luò)模型窟她。
回顧一下神經(jīng)網(wǎng)絡(luò)的一些細(xì)節(jié):
如激活輸入的尺寸陈症,大小和網(wǎng)絡(luò)參數(shù)數(shù)量...
分析得到:
首先最大池化層是沒有任何參數(shù)的
其次,注意卷積層趨向于擁有越來越少的參數(shù)
實際上震糖,多數(shù)參數(shù)在神經(jīng)網(wǎng)絡(luò)的全連接層上
同時录肯,隨著神經(jīng)網(wǎng)絡(luò)的深入,你也會發(fā)現(xiàn)激活輸入的大小也逐漸變小吊说,如果減少的太快论咏,通常也不利于網(wǎng)絡(luò)性能优炬。
你會發(fā)現(xiàn)許多卷積神經(jīng)網(wǎng)絡(luò)有著與此相似的特性和模式。
你已經(jīng)了解了神經(jīng)網(wǎng)絡(luò)的基本構(gòu)件:卷積神經(jīng)網(wǎng)絡(luò)厅贪、卷積層蠢护、池化層和全連接層,如何利用這些基本構(gòu)件構(gòu)造一個有用的神經(jīng)網(wǎng)絡(luò)养涮?
把這些構(gòu)件組合到一起實際上需要相當(dāng)?shù)亩床炝叮艺J(rèn)為最好的辦法就是去學(xué)習(xí)一定數(shù)量的實例,看看人家是如何做的贯吓?從中獲得靈感如何把這些構(gòu)件組合到一起懈凹。
既然給出了一些實例,你就可以直接在自己的應(yīng)用程序中使用別人已經(jīng)開發(fā)的架構(gòu)悄谐。
為什么要用卷積介评,它的優(yōu)缺點是什么?以及如何把它們組合到一起爬舰?如何通過訓(xùn)練集來訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)威沫。
第十一課:為什么要進(jìn)行卷積?
為什么把卷積放在神經(jīng)網(wǎng)絡(luò)中會如此有用洼专?如何把卷積和神經(jīng)網(wǎng)絡(luò)結(jié)合在一起棒掠?如果你有一個帶有標(biāo)簽的訓(xùn)練數(shù)據(jù)集,如何用它來訓(xùn)練這個卷積神經(jīng)網(wǎng)絡(luò)屁商?
卷積層和只用完全連接的神經(jīng)層相比有兩大優(yōu)勢:
參數(shù)共享和連接的稀疏性
例如你有一個32323的圖片烟很,加上6個5*5的過濾器,得到一個28x28x6的輸出結(jié)果蜡镶。
所以雾袱,如果你是創(chuàng)建一個一層有3072個單元的神經(jīng)網(wǎng)絡(luò),下一層是4704個單元官还,然后你連接每一個這些神經(jīng)元芹橡,接著是權(quán)重矩陣,這些參數(shù)的權(quán)重矩陣是3072*4704望伦,結(jié)果約是1400萬個林说,這樣就有很多參數(shù)需要訓(xùn)練。
當(dāng)然如今你可以訓(xùn)練比1400萬更多的參數(shù)的神經(jīng)網(wǎng)絡(luò)屯伞,但是考慮到這僅僅是一個很小的圖像腿箩,卻有如此多的參數(shù)需要訓(xùn)練,如果有一個1000x1000的圖像劣摇,這個權(quán)重矩陣會變的更大珠移。
但是如果你看這個卷積層的參數(shù)總數(shù):每個過濾器有25個參數(shù),加上每個過濾器的偏置參數(shù)有26個參數(shù),你有6個過濾器钧惧,所以相乘后就得到156個參數(shù)暇韧,所以這個卷積層的參數(shù)總數(shù)仍然很少。
卷積神經(jīng)網(wǎng)絡(luò)參數(shù)較少的原因有兩個:
1.參數(shù)共享浓瞪。參數(shù)共享是源于在特征檢測器中锨咙,例如垂直邊緣檢測對于圖像的一部分是有用的,那么對于另一部分可能也是有用的追逮,這意味著酪刀,如果你用一個3x3過濾器來檢測垂直邊緣,那么你就可以用這個3x3過濾器一直過濾下去钮孵,對于所有的這些特征檢測器骂倘,所有的輸出結(jié)果在你的輸入圖像許多不同的位置使用相同的參數(shù)。即檢測比如說垂直邊緣或者其他的一些特征巴席,我認(rèn)為這對簡單的特征例如邊緣历涝,以及更高層次的特征,比如檢測眼睛漾唉、臉荧库、貓、或者其他東西都是可以的赵刑。
共享參數(shù)在這個例子中用相同的參數(shù)來計算所有16個輸出結(jié)果分衫,是減少參數(shù)個數(shù)的方法之一。如果你有 一個數(shù)據(jù)集般此,在左上角和右下角有不同的分布蚪战,這兩塊也許看上去不同,但是它們已經(jīng)足夠相似铐懊,它們已經(jīng)可以使用相同的特征探測器邀桑,效果是一樣的。
2.卷積神經(jīng)網(wǎng)絡(luò)避免只有相對較少的參數(shù)方法是建立稀疏的聯(lián)系科乎。
每一個輸出值的特征輸出值只和9個特征輸入值相連壁畸,其他像素格子不會影響到這個輸出值。
因此茅茂,通過這兩個機制捏萍,一個只有很少的參數(shù)神經(jīng)網(wǎng)絡(luò),可以用少于30個單元的訓(xùn)練數(shù)據(jù)集來訓(xùn)練玉吁。
有時照弥,卷積神經(jīng)網(wǎng)絡(luò)會被用來捕捉平移不變,卷積結(jié)構(gòu)可以幫助神經(jīng)網(wǎng)絡(luò)編譯进副,即使圖片平移,同樣還會產(chǎn)生相似的特征。
平移之前和平移之后的圖層就會幫助神經(jīng)網(wǎng)絡(luò)自然而然地學(xué)會更穩(wěn)定或者更佳的捕捉到平移不變所需要的特性影斑。
以上就是卷積神經(jīng)網(wǎng)絡(luò)在計算機視覺中表現(xiàn)比較好的原因给赞。
最后,綜上所述矫户,看看如何訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò)片迅?
貓?zhí)綔y器:
x:一個圖像
y:二進(jìn)制標(biāo)簽
選擇卷積神經(jīng)網(wǎng)絡(luò),插入圖像皆辽,神經(jīng)卷積柑蛇,池化層,全連接層...輸出y帽
卷積神經(jīng)網(wǎng)絡(luò)層和完全連接層將有各種參數(shù)w和偏差b驱闷,所以任何參數(shù)的設(shè)置耻台,讓你定義一個類似于我們之前看到的代價函數(shù)。
我們隨機初始化w和b的參數(shù)空另,你可以計算J的值盆耽,作為整個訓(xùn)練集的神經(jīng)網(wǎng)絡(luò)預(yù)測損失的總和。
訓(xùn)練神經(jīng)網(wǎng)絡(luò):使用梯度下降或者一些類似的算法扼菠,比如梯度下降動量法摄杂,RMSprop、Adam或者其他算法循榆,為了優(yōu)化所有的神經(jīng)網(wǎng)絡(luò)參數(shù)析恢,來試圖降低代價函數(shù)J,這樣你就會發(fā)現(xiàn)秧饮,你建立起了一個非常有效的貓?zhí)綔y器或其他檢測器氮昧。
你現(xiàn)在已經(jīng)看到了卷積神經(jīng)網(wǎng)絡(luò)的所有基本組成構(gòu)件,以及如何將它們組成一個有效的圖像識別系統(tǒng)浦楣。
卷積神經(jīng)網(wǎng)絡(luò)中的超參數(shù)設(shè)置袖肥?
通過一些具體的例子和一些最有效的卷積神經(jīng)網(wǎng)絡(luò),這樣你就可以從中識別到規(guī)律振劳,知道哪些類型的網(wǎng)絡(luò)體系結(jié)構(gòu)是有效的椎组。人們經(jīng)常做的一件事就是:利用其他人已經(jīng)發(fā)現(xiàn)并發(fā)表的研究論文的框架,拿到自己的應(yīng)用程序中使用历恐。
我們還學(xué)到了卷積神經(jīng)網(wǎng)絡(luò)高效的背后機制寸癌,然后在余下的課程中,我們還將看到其他計算機視覺應(yīng)用弱贼,比如對象檢測和神經(jīng)存儲傳輸蒸苇,它們?nèi)绾伪挥脕韯?chuàng)建新的藝術(shù)品?