0
| 本文作者: AI研習(xí)社-譯站 | 2018-03-28 16:09 |
雷鋒網(wǎng)按:本文為雷鋒字幕組編譯的技術(shù)博客,原標(biāo)題Capsule Neural Networks: The Next Neural Networks? Part 1: CNNs and their problems.,作者為Tomer Eldor。
翻譯 | 陳曉璇 劉寧 魏洪貴 整理 | 凡江
“普通的”卷積神經(jīng)網(wǎng)絡(luò)是當(dāng)前機(jī)器學(xué)習(xí)領(lǐng)域最熱的一個概念, 但是它也有一些問題,例如不能識別空間關(guān)系,比如說圖片或其他數(shù)據(jù)里不同部分之間的相對位置關(guān)系。Hinton最近提出的膠囊神經(jīng)網(wǎng)絡(luò)也許能幫助我們解決包括這一問題和其他問題。
這篇文章是膠囊神經(jīng)網(wǎng)絡(luò)系列教程的一部分。作為第一篇文章,將介紹常規(guī)(卷積)神經(jīng)網(wǎng)絡(luò)以及它的一些問題。
神經(jīng)網(wǎng)絡(luò)可能是當(dāng)下機(jī)器學(xué)習(xí)領(lǐng)域最熱的部分。 近幾年,神經(jīng)網(wǎng)絡(luò)得到眾多開發(fā)者不斷的改善,也更方便使用。但是,這些改進(jìn)通常都是一些簡單的修改, 例如增加一些層,或者簡單的改進(jìn)激活函數(shù),但是并沒有引進(jìn)全新的架構(gòu)或思路。Geoffery Hinton 是包括神經(jīng)網(wǎng)絡(luò)在內(nèi)的很多廣泛使用的深度學(xué)習(xí)算法的創(chuàng)始人之一,考慮到他有著神經(jīng)科學(xué)和人工智能的雙重背景,取得這些成就也就不會太讓人意外。
2017年10月底, Geoffrey Hinton, Sara Sabour, 和 Nicholas Frosst 在Google Brain發(fā)表了題為“Dynamic Routing Between Capsules(膠囊間的動態(tài)路由)”的論文,給神經(jīng)網(wǎng)絡(luò)領(lǐng)域帶來了一些新的東西。這很令人興奮,因為這樣大的創(chuàng)新已經(jīng)很久沒人做到了,圍繞它很可能有更多的研究點被激發(fā)出來。
基點:卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò) (CNNs) 是一種很靈活的機(jī)器學(xué)習(xí)模型,它的設(shè)計靈感來源于人腦的處理問題的方式。
神經(jīng)網(wǎng)絡(luò)通過整合多層“神經(jīng)元”來將原始數(shù)據(jù)處理成特定的模式或?qū)ο蟆?/p>
卷積神經(jīng)網(wǎng)絡(luò)的一個主要構(gòu)建塊是“卷積層”(名字的由來)。它有什么作用? 它將前一層的原始數(shù)據(jù)作為輸入,找到其中蘊(yùn)含的模式信息,傳到下一層來更好地理解更大的圖片。
如果你剛接觸神經(jīng)網(wǎng)絡(luò),想要理解它,我建議你:
1. 看看 3Blue1Brown 的視頻,很生動形象。
2. 有關(guān)文字和視頻方面更細(xì)節(jié)的教程,可以查看beginner’s blogpost
3. 如果你有能力處理更細(xì)節(jié)的數(shù)學(xué)問題,你可以看看斯坦福CS231的課程。
如果你以上幾點都沒有做到,可以通過讀下面的簡介后再繼續(xù)。
CNNs的靈感來源
我們從頭說起。 神經(jīng)網(wǎng)絡(luò)將原始數(shù)據(jù)作為輸入。假設(shè)有一只手繪的小狗,你第一眼看到它時,大腦會自動將它識別為一只狗。但是對計算機(jī)來說,這張圖片僅僅是一個關(guān)于有很多數(shù)字的數(shù)組。數(shù)組中的數(shù)值代表不同顏色通道的像素強(qiáng)度。如果是只有黑白的圖片,我們只需要用一個表示像素灰度值的數(shù)組來表示圖片即可。

用于網(wǎng)絡(luò)識別的示例。來源: The Sun, image: lovable dog rescue
我們的目標(biāo)是什么? 是讓網(wǎng)絡(luò)在視覺層面搞清圖片里有什么(這個數(shù)字序列代表著什么)。一種方式是自下而上的方式: 讓網(wǎng)絡(luò)從聚焦一小部分像素開始,理解它們代表什么(例如一些線段和曲線:像這張圖片中狗的耳朵的曲線,瞳孔的圓?。? 然后將這些線組合起來,來描述更大的對象(例如耳朵,鼻子,嘴,眼睛),同樣的去學(xué)習(xí)這些部分組成的更大的對象 (例如,臉,腿,尾巴),最終使網(wǎng)絡(luò)對狗做出整體的理解。
網(wǎng)絡(luò)是通過層之間數(shù)據(jù)的從頭到尾的傳遞實現(xiàn)這一功能的。
如果你不了解這個過程,可以看看我的關(guān)于CNNs結(jié)構(gòu)的總結(jié): 理解卷積神經(jīng)網(wǎng)絡(luò)
萬一你沒讀過,而且不了解這些,下面是從我那些總結(jié)里提煉出來更簡短的總結(jié)。
關(guān)于卷積神經(jīng)網(wǎng)絡(luò)的理解
卷積層;第一層卷積層將圖片映射到較低緯度的空間—?歸納出一組像素點(例如5×5的像素塊)的信息—它是垂直的還是水平的線?是什么形狀的曲線? 這個過程首先是對應(yīng)元素相乘,然后將這些乘積相加為一個數(shù),即得到filter輸出。
這就引出了神經(jīng)元或者說卷積核的概念。每個卷積核都會對特定的模式(豎直線?水平線?等等)做出反應(yīng)。 從第一層的像素傳到神經(jīng)元時,會激活和它的結(jié)構(gòu)相匹配的神經(jīng)元,依據(jù)就是這個像素塊和卷積核的相似程度。
激活函數(shù)(通常用 “ReLU”)層—?每個卷積層后,都要添加一個非線性層 (又叫激活函數(shù)層), 從而給系統(tǒng)引入非線性,使得系統(tǒng)能學(xué)習(xí)到數(shù)據(jù)間的非線性關(guān)系。ReLU 是一個很簡單的激活函數(shù):它把負(fù)輸入置零0,正輸入保持原值。
池化層;這層被用來減少冗余信息, 總結(jié)我們關(guān)于一個區(qū)域已知的信息,并進(jìn)一步精煉這些信息。例如,“MaxPooling”方法就是選取一組數(shù)的最大值?—?—例如,電腦會認(rèn)為 “在這個5×5的像素塊中, 影響最大的是255這個像素點. ”盡管不能確定這個值是哪個像素點,但是確切位置并沒有那么重要,知道它大概位置就好了。 ( 注意:這個方法并不好。會造成信息的丟失。膠囊網(wǎng)絡(luò)就沒采用這個操作,這是一個重要的進(jìn)步。)
Dropout 層;這一層通過隨機(jī)的將一些激活了的神經(jīng)元置零來實現(xiàn)“dropout”。這么做會使網(wǎng)絡(luò)更加健壯(有點類似于你吃了不干凈的東西,卻幫助強(qiáng)化了你的免疫系統(tǒng) 這么做之后網(wǎng)絡(luò)對一些小的改變也能免疫了) 還會減小過擬合。 只有訓(xùn)練時會使用Dropout。
最后的全連接層;對于分類問題,我們希望最后一層不同的神經(jīng)元代表不同類別。這一層關(guān)注前一層的輸出,(即高階特征的激活圖)并確定出哪些特征與某個類相關(guān)。
SoftMax?層;有時加上這一層來表示每一類的輸出,并把這個輸出傳遞給損失函數(shù)。 Softmax 代表了不同類輸出的概率分布。
通常,有更多的提供非線性和保留維度(就像在邊緣周圍填充0)的網(wǎng)絡(luò)層,它們能夠幫助改善神經(jīng)網(wǎng)絡(luò)的魯棒性以及防止過度擬合。但是接下來有一些基本概念你需要理解。
現(xiàn)在,重要的一點是,這些層只能是有序列的聯(lián)結(jié)在一起。這和膠囊神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)相反。

神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),來自谷歌的文章,是Szegedy,Toshev&Erhan提出的神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)有什么問題?
如果您對此感興趣,請觀看Hinton的課,里面講解的就是這個問題。下面是膠囊神經(jīng)網(wǎng)絡(luò)能夠改善這些問題的幾個要點:
Hinton說,膠囊神經(jīng)網(wǎng)絡(luò)擁有很少層級的分支結(jié)構(gòu)(網(wǎng)絡(luò)由以神經(jīng)元組成的層組成,就是這樣),并且這使我們需要將每一層的神經(jīng)元分組到“膠囊”里面,這種“膠囊”就像小模塊,在小模塊里面會進(jìn)行大量的計算,然后輸出一個匯總結(jié)果。
問題一:“池化”使信息丟失
CNN運用“池化”或與之等效的方法來“總結(jié)”小區(qū)域中發(fā)生的情況,并理解圖像中越來越大的塊。這是一個讓CNN網(wǎng)絡(luò)運作良好的解決方案之一,但與此同時它會丟失寶貴的信息。
膠囊神經(jīng)網(wǎng)絡(luò)會計算一個小特征和大特征的姿態(tài)關(guān)系(跨越邊界和旋轉(zhuǎn))。
這些信息的丟失會造成空間信息的丟失。
問題2:CNN沒有考慮圖像的每一部分之間的空間關(guān)系。也就是說,它們也對于物體的方向過于敏感了
二次抽樣(和池化)使圖片失去了精確的空間關(guān)系,例如鼻子和嘴巴。身份特性的識別需要精確的空間關(guān)系。——Hinton,2012,在演講中
CNN不會考慮底層對象之間的空間關(guān)系。通過這些平層中的神經(jīng)元將它們看到的物體照亮,它們識別到了那個物體呈現(xiàn)出的形態(tài)。但是它們會傳遞到其他激活和合并圖層,并傳遞到下一層神經(jīng)元(過濾器),而不會意識到我們在該單層中識別的這些對象之間的關(guān)系。
他們只是說明他們的存在。
所以一個(簡單的)神經(jīng)網(wǎng)絡(luò)能夠?qū)筒_和畢加索歸類為小狗,“小狗 - 斗牛梗混合”也能同樣的被很好的識別。

普通的(卷積)神經(jīng)網(wǎng)絡(luò)能夠?qū)⑦@兩只可愛的狗視為同類型的狗臉,因為它并不介關(guān)心組成狗臉的元素在空間中相對于彼此的位置。畢加索(左邊的狗)將幸運的不會被模型分錯,但我們真的想要有一個模型可以認(rèn)識到,這不是一個常見的柯基犬 - 斗牛犬混合狗的例子。圖片來源:愛犬救援
神經(jīng)網(wǎng)絡(luò)會將這兩只小狗是被為典型“小狗 - 斗牛?;旌稀?,因為他們的圖像特征都符合面部卷積層的情況,例如:
if: (2 eyes & pitbullmix_snout
+ pitbullmix_wet_nose & mouth)
then: pitbullmix_face
不正確地激活pitbullmix_face的神經(jīng)元,而不是像下面這樣的東西:
if: 2 eyes
& BELOW: pitbullmix_snout
& pitbullmix_wet_nose
& BELOW: mouth
then: pitbullmix_face
相反地,膠囊神經(jīng)網(wǎng)絡(luò)反映方向信息和內(nèi)容,并連接神經(jīng)元與膠囊以推斷空間關(guān)系并保留姿勢信息。
缺少將膠囊分組的呈現(xiàn)、姿態(tài)計算和膠囊之間的重疊檢查,會導(dǎo)致下一個問題。
問題3:CNN不能將對幾何關(guān)系的理解傳遞到新的視點上
為了正確給圖像分類,這使他們對原始圖像更加敏感。
CNN擅長解決那些與他們訓(xùn)練的模型相似的問題,它可以把圖像或者目標(biāo)物體分類的非常好。
但當(dāng)物件有一些旋轉(zhuǎn)角度時,尤其是3D的情況,CNN則識別不出來。
一種解決方案是人為地創(chuàng)建傾斜展示的圖像或圖像組,并將它們添加到“訓(xùn)練”集中。 但是,這樣仍然缺乏一個更為穩(wěn)健的結(jié)構(gòu)。
對不變視點的空間關(guān)系姿態(tài)進(jìn)行編碼
所以,我們應(yīng)該怎樣編碼3D物體之間的空間關(guān)系呢?
Hinton從一個已經(jīng)被解決的問題領(lǐng)域——3D 計算機(jī)圖形學(xué)中取得靈感。
在3D圖形中,姿態(tài)矩陣是表示對象之間關(guān)系的特殊技術(shù)。 姿勢本質(zhì)上是代表平移加旋轉(zhuǎn)的矩陣。 現(xiàn)在我們得到了它。 我們可以使用子對象之間的姿態(tài)關(guān)系保留空間關(guān)系信息; 測量物體之間的相對旋轉(zhuǎn)和平移作為4D姿態(tài)矩陣。
這對于理解膠囊之間的動態(tài)路徑選擇很重要。
現(xiàn)在我們知道了神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)以及空間識別的問題,我們可以繼續(xù)了解最近發(fā)展出的解決方式:膠囊神經(jīng)網(wǎng)絡(luò)。這將是我們下一篇的主題。請繼續(xù)收看!
更多文章,關(guān)注雷鋒網(wǎng) 雷鋒網(wǎng)雷鋒網(wǎng)
添加雷鋒字幕組微信號(leiphonefansub)為好友
備注「我要加入」,To be an AI Volunteer !

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。