0
本文作者: 楊曉凡 | 2018-06-30 16:13 |
雷鋒網(wǎng) AI 科技評(píng)論按:這篇博客來(lái)自 Jetpac(現(xiàn)被谷歌收購(gòu)) CTO、蘋果畢業(yè)生、TensorFlow 團(tuán)隊(duì)成員 Pete Warden。文中討論了當(dāng)要識(shí)別的對(duì)象出現(xiàn)在圖像中的不同位置時(shí),CNN 是如何應(yīng)對(duì)、識(shí)別的。Pete Warden 給出的解釋也許算不上完善,而且也仍然無(wú)法保證能夠消除位置的影響,但這是一個(gè)不錯(cuò)的開(kāi)始。雷鋒網(wǎng) AI 科技評(píng)論全文編譯如下。
一位正在學(xué)習(xí)用卷積神經(jīng)網(wǎng)絡(luò)做圖像分類的工程師最近問(wèn)了我一個(gè)有趣的問(wèn)題:模型是如何學(xué)會(huì)辨別位于圖片中不同位置的物體的呢?由于解釋這個(gè)問(wèn)題需要大費(fèi)些周章,我決定在這里把它們寫下來(lái),以幫助其他有類似困惑的人理解這個(gè)問(wèn)題。
上面這兩張示例圖就可以表示我的這位朋友的問(wèn)題。
如果你想要識(shí)別出所有包含太陽(yáng)形狀的圖像,你要怎么保證不管這個(gè)太陽(yáng)形狀在哪里,模型都能把它識(shí)別出來(lái)呢?之所以這是一個(gè)有趣的問(wèn)題,是因?yàn)樵谀阃耆斫膺@個(gè)問(wèn)題之前,需要三個(gè)階段的啟蒙:
階段一:如果你未曾嘗試過(guò)計(jì)算機(jī)編程,這個(gè)問(wèn)題看上去很簡(jiǎn)單,因?yàn)楸鎰e位置的差異對(duì)我們的眼睛和大腦來(lái)說(shuō)沒(méi)有任何難度。
階段二:如果你嘗試過(guò)用傳統(tǒng)的編程方法解決過(guò)類似的問(wèn)題,你可能會(huì)感到窒息,因?yàn)槟悴粌H知道處理這種差異會(huì)有多難,也明白更艱難的是向你的客戶解釋它的技術(shù)含量。
階段三:作為一個(gè)得到認(rèn)證的深度學(xué)習(xí)權(quán)威人士,你可能會(huì)摸摸胡子然后微笑,很欣慰這些瑣碎的問(wèn)題是由你建立的網(wǎng)絡(luò)處理的而不是你本人。
我的朋友正處于啟蒙的第三階段,但也已經(jīng)粗淺的了解了一些原理可以解釋為什么 CNN 可以很好的處理這類問(wèn)題。我并不會(huì)聲稱我對(duì)此有什么新見(jiàn)解,但經(jīng)過(guò)過(guò)去幾年在圖像模型領(lǐng)域的工作經(jīng)驗(yàn)我也有了一些自己的想法,結(jié)合學(xué)術(shù)圈子里師生之間口口相傳的說(shuō)法,我想將我所知道的分享給大家。歡迎大家補(bǔ)充與此相關(guān)的優(yōu)秀文章連接,由于我的解釋僅僅是基于我作為一名成熟的工程師的直覺(jué)和經(jīng)驗(yàn)而來(lái)的,請(qǐng)大家?guī)椭腋玫某鋵?shí)和提升這個(gè)解釋。
首先要知道的是,神經(jīng)網(wǎng)絡(luò)并不是天然地對(duì)位置識(shí)別的問(wèn)題免疫的。我最開(kāi)始遇到這個(gè)問(wèn)題是我當(dāng)用 ImageNet 中的圖片訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)。ImageNet 歷史悠久,最初搜集者們利用谷歌圖片搜索通過(guò)搜索類名稱從公共網(wǎng)絡(luò)中采集示例圖片,之后再人工從中剔除不正確的圖像。我的好朋友 Tom White 就熱衷于在這項(xiàng)剔除異常的工作中挖掘奇聞異事,比如許多女模特的照片出現(xiàn)在了垃圾車類別里(參見(jiàn)改進(jìn)模型架構(gòu)遇到了瓶頸?你該考慮改善自己的數(shù)據(jù)了!)。Andrej Karpathy 通過(guò)完成手動(dòng)標(biāo)記圖片的繁重工作,也對(duì)數(shù)據(jù)集的特點(diǎn)有了更深的理解。
說(shuō)了剛才這么多,我的意思是,訓(xùn)練數(shù)據(jù)集中的所有圖片都是由人拍攝出來(lái),然后發(fā)布在知名網(wǎng)站上的。這意味著訓(xùn)練集中的圖像會(huì)比隨機(jī)截屏得來(lái)的要更專業(yè),都有一個(gè)布局良好的實(shí)物主體,通常在靠近中間位置,平視視角拍攝,并占據(jù)了畫面的大部分。相比之下,如果有人用手機(jī)攝像頭對(duì)準(zhǔn)一個(gè)物體拍照想讓模型給它分類,這樣的照片就很有可能有著奇怪的角度。它可能是俯視拍攝的,也可能只拍到物體的一部分,這就意味著,如果讓模型識(shí)別手機(jī)拍攝的照片,它的表現(xiàn)就會(huì)比發(fā)表的論文里的準(zhǔn)確率差的多,因?yàn)橛?xùn)練模型用的數(shù)據(jù)和用戶想要識(shí)別的圖片差別太大。如果你的安卓設(shè)備上安裝了 TensorFlow 分類應(yīng)用,你現(xiàn)在還能看到類似的問(wèn)題。分類模型在手機(jī)上變得不好使還不是最糟糕的,因?yàn)橹辽偈謾C(jī)用戶們拍照的時(shí)候還是有一定的取景的。機(jī)器人以及類似設(shè)備上的圖像識(shí)別就是一個(gè)嚴(yán)重得多的問(wèn)題。由于這些設(shè)備的攝像頭的指向是完全隨機(jī)的,在 ImageNet 上訓(xùn)練的模型表現(xiàn)可謂是非常糟糕。我經(jīng)常建議開(kāi)發(fā)這些 app 的開(kāi)發(fā)者用和目標(biāo)設(shè)備類似的設(shè)備拍的照片作為訓(xùn)練數(shù)據(jù)集,畢竟除了取景之外,鏡頭等其他因素也有一些區(qū)別。
即便照片是人工選出的,ImageNet 中的圖像在物體位置上還是有很多差異,所以神經(jīng)網(wǎng)絡(luò)是如何處理它們的呢? 其中的一個(gè)秘訣是,訓(xùn)練過(guò)程中通常會(huì)專門在輸入中加入人工的偏移,神經(jīng)網(wǎng)絡(luò)就需要學(xué)會(huì)處理這類差異。
在這圖片被輸入到模型之前,它們有可能會(huì)被隨機(jī)的裁剪。所有的輸入都會(huì)被縮小到一個(gè)標(biāo)準(zhǔn)尺寸(一般是 200×200 或 300×300),這就將每張圖片里物體出現(xiàn)的位置和大小隨機(jī)化了,還有可能會(huì)剪切掉物體的一部分。模型始終都會(huì)依據(jù)預(yù)測(cè)的準(zhǔn)確性得到懲罰或是獎(jiǎng)賞,所以為了獲得好的評(píng)分它必須在帶有這些不同的狀況下還能猜出圖片里的物體。這解釋了為什么神經(jīng)網(wǎng)絡(luò)會(huì)學(xué)習(xí)如何處理位置差異。
但這還沒(méi)有結(jié)束。
為了繼續(xù)深入,我必須得插入一些公認(rèn)說(shuō)法和類比。我沒(méi)有可以支撐接下來(lái)的解釋的研究,但在我的實(shí)驗(yàn)和與其他實(shí)踐者的討論中,這一理論是被廣泛接受的。
自從開(kāi)創(chuàng)性的神經(jīng)網(wǎng)絡(luò) AlexNet 開(kāi)始,CNN 的工作方式就是基于一系列連續(xù)的層,依次接收輸入數(shù)據(jù)后最終形成分類操作。我們將初始層看作邊緣探測(cè)器,尋找最基礎(chǔ)的像素規(guī)律,之后的圖層將初始圖層得出的規(guī)律作為輸入,進(jìn)行更高級(jí)別概念的預(yù)測(cè),如此循序漸進(jìn)??纯匆粋€(gè)典型的神經(jīng)網(wǎng)絡(luò)第一層過(guò)濾器是如何工作的會(huì)幫助你更好的理解這個(gè)過(guò)程:
這張圖展示的是每個(gè)過(guò)濾器所要查找的內(nèi)容,有些是不同走向的邊,其他的是色彩或角。遺憾的是這里無(wú)法用簡(jiǎn)明的圖像將之后幾層的情況表達(dá)出來(lái),如果你想更深入的了解這方面的內(nèi)容,Jason Yosinki 還有他的研究伙伴提供了一些不錯(cuò)的參考文獻(xiàn)。
下面的概念圖可以幫助理解剛才說(shuō)的內(nèi)容。
第一層要尋找的是一些很簡(jiǎn)單的特征,比如水平邊、角、以及純色塊。這與之前 CaffeNet 可視化的那張圖要表達(dá)的類似。這些過(guò)濾器對(duì)輸入圖像進(jìn)行地毯式的瀏覽,當(dāng)找到所須內(nèi)容時(shí),就輸出一張突出了其所在位置的熱力圖。
理解第二層發(fā)生了什么就有點(diǎn)難了。第一層過(guò)濾器輸出的熱力圖被逐個(gè)分配到激活層的通道中,因此第二層的輸入會(huì)有上百個(gè)通道,而不是像典型圖像那樣只有三到四個(gè)。第二層的任務(wù)是要在從這些熱力圖中找出更復(fù)雜的特征。如果要在圖中識(shí)別出太陽(yáng)的一瓣,這一瓣一端有一個(gè)角,另一端是一條垂直線,中間填上黃色。每個(gè)特征由輸入激活層的通道表示,第二層中,「朝左的一瓣」過(guò)濾器就負(fù)責(zé)尋找同時(shí)符合這三個(gè)條件的通道組合。在僅有一個(gè)或兩個(gè)條件滿足的通道組合所在的位置,不會(huì)有輸出,只有當(dāng)滿足所有條件的通道組合(只有在那些滿足全部三個(gè)條件的位置),輸出會(huì)呈現(xiàn)激活狀態(tài)。
與第一層一樣,第二層也有很多過(guò)濾器,它們表示的是更高一級(jí)的概念,像「朝上的一瓣」、「朝右的一瓣」等等。這很難用圖來(lái)表示,籠統(tǒng)來(lái)講就是會(huì)輸出一個(gè)有很多通道的層,每個(gè)通道都表征著這一級(jí)別的概念。
隨著學(xué)習(xí)深度加深,層要表達(dá)的概念就越來(lái)越高級(jí)。例如,第三或第四層通過(guò)將輸入通道表征的概念進(jìn)行組合,如果有黃色的、被花瓣圍繞著的圓,就會(huì)顯示出激活。寫一個(gè)分類器把圖像中的太陽(yáng)找到就這樣簡(jiǎn)單地做到了?,F(xiàn)實(shí)中分類器不會(huì)像我之前例子中那樣把概念切割的如此清楚,因?yàn)榉诸惼鲿?huì)自己學(xué)習(xí)如何拆解問(wèn)題,而不是以人類所能理解的分類方式來(lái)運(yùn)行,但基本原理就是如此。
文章到現(xiàn)在還沒(méi)能解釋神經(jīng)網(wǎng)絡(luò)如何識(shí)別位置之間的差異。因此最后,你還需要了解另一種設(shè)計(jì)圖像分類 CNN 網(wǎng)絡(luò)時(shí)候的常見(jiàn)做法。隨著網(wǎng)絡(luò)的層次越來(lái)越深,通道的數(shù)量會(huì)顯著增加,圖像的尺寸則會(huì)縮小。縮小的過(guò)程由池化層完成,過(guò)去是利用平均池化但最近流行用最大池化來(lái)做。兩者的效果相近。
比如現(xiàn)在要將這張圖被縮小為原來(lái)的一半,對(duì)每一個(gè)輸出像素,我們以 2×2 的輸入塊為單位從中選出值最大的,因此這一過(guò)程被稱為最大池化。而在平均池化中,是將這四個(gè)值的平均值傳遞到下一層。
這一池化過(guò)程會(huì)不斷重復(fù),把值在網(wǎng)絡(luò)中傳遞下去。也就是說(shuō),最終,圖像尺寸可能會(huì)從 300×300 縮小到 13×13。這樣大的收縮量意味著位置變量的數(shù)量會(huì)大大縮減。就拿上面的例子來(lái)說(shuō),太陽(yáng)只能在余下的 13 行、13 列像素中出現(xiàn)。如此一來(lái)任何小的位置差異都被隱藏起來(lái),因?yàn)楸舜司哂形⑿〔町惖妮敵鲈谧畲蟪鼗^(guò)程都被融合在一起了。這使得最終分類器在位置差異問(wèn)題的處理上會(huì)進(jìn)行得更加有序順利,因?yàn)樗幚淼氖菍⒃瓐D信息精簡(jiǎn)許多以后的圖像。
這就是我對(duì)分類器在處理位置變化問(wèn)題上的解釋,但對(duì)類似的問(wèn)題,比如不同時(shí)間位置上的音頻信號(hào)又是如何呢?最近我對(duì)一種可以替代池化,被稱為「擴(kuò)張」或者又叫「空洞」卷積的方法很感興趣。與最大池化一樣,它產(chǎn)出的是一個(gè)更小的圖像,但工作原理是基于卷積方法本身的。不同于池化是采集相鄰的輸入像素,它對(duì)樣本的選取是跨越式的,因此采集范圍可以非常大。這使得擴(kuò)張卷積可以很快的將非局部的信息整合到一起,成為一個(gè)更簡(jiǎn)潔有序的形式,這是 DeepMind 的 WaveNet 論文中的神奇的方法的一部分,能夠用卷積而不是循環(huán)神經(jīng)網(wǎng)絡(luò)來(lái)解決基于時(shí)間的問(wèn)題。
我對(duì)此感到很興奮,因?yàn)檠h(huán)神經(jīng)網(wǎng)絡(luò)的速度是個(gè)痛點(diǎn)。如果你要處理批量大小為 1 的數(shù)據(jù),這在即時(shí)應(yīng)用中是個(gè)很典型的問(wèn)題,大部分計(jì)算都是矩陣和向量之間的乘法,計(jì)算強(qiáng)度相當(dāng)于全連接層。由于每個(gè)權(quán)重只會(huì)用到一次,這類計(jì)算受限于計(jì)算機(jī)的存儲(chǔ)能力而不是運(yùn)算能力,而卷積卻恰恰相反。因此我非常希望這種方法可以廣泛應(yīng)用于其他領(lǐng)域。
謝謝大家能看到這里。我希望這能幫到大家,歡迎大家在評(píng)論區(qū)或 Twitter 上對(duì)此提出改善的建議。
via petewarden.com,雷鋒網(wǎng) AI 科技評(píng)論編譯
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見(jiàn)轉(zhuǎn)載須知。