動機
與其他機器學(xué)習(xí)技術(shù)相比,深度學(xué)習(xí)的主要優(yōu)勢在于它能夠自動學(xué)習(xí)輸入數(shù)據(jù)的抽象表示。 但是,并非總是如此。 早在1969年,Minsky和Papert出版了一本書,該書(除其他事項外)證明了單層感知器(人工神經(jīng)網(wǎng)絡(luò)的祖先)無法解決XOR問題。 對于我們這些沒有計算機科學(xué)背景的人,XOR問題的任務(wù)是接受兩個二進(jìn)制輸入A和B,并且僅當(dāng)A或B中只有一個為真時才返回true,因此名稱為“ 異或”或XOR。 單層感知器無法解決此問題的原因是它們只能解析線性可分離的類。 如果要為XOR問題及其輸出繪制可能的輸入,則該空間應(yīng)如下所示:
The world’s worst game of tic-tac-toe (source: wikimedia commons)
現(xiàn)在,您可以在此圖像上繪制一條直線并將圓與十字分開嗎? 劇透:您不能,感知器也不能。 幸運的是,勇敢的先驅(qū)者擁有將兩個感知器結(jié)合在一起的見識,并且深度學(xué)習(xí)領(lǐng)域誕生了(或多或少)。 之所以可行,是因為神經(jīng)網(wǎng)絡(luò)的每一層都可以看作是前一層的嵌入。 盡管上圖中的圓圈和十字可能無法以其原始形式線性分離,但可以通過簡單的編碼進(jìn)行線性分離。 拍攝圖像的左上角和右下角,并將它們保持在您的腦海中。 然后,借助您的想象力,將圖像對折至第三維的一半,將右上角拖出屏幕,然后將其向下壓回到左下角。 如果操作正確,它將看起來像這樣:
If you look closely, you may notice I’m not an artist
現(xiàn)在,您可以在此圖像上繪制一條直線并將圓與十字分開嗎? 我衷心希望如此。 這種獲取信息并將其編碼為其他更有用形式的動作是神經(jīng)網(wǎng)絡(luò)擅長的主要任務(wù)。 實際上,訓(xùn)練神經(jīng)網(wǎng)絡(luò)不是為了具有預(yù)測能力,而是為了發(fā)現(xiàn)它們所獲得的學(xué)習(xí)表現(xiàn),已經(jīng)成為深度學(xué)習(xí)研究的主要內(nèi)容。
學(xué)會看
卷積神經(jīng)網(wǎng)絡(luò)(CNN)是將深度學(xué)習(xí)應(yīng)用于圖像數(shù)據(jù)的最受歡迎的體系結(jié)構(gòu)。 簡而言之,CNN可以學(xué)習(xí)許多過濾器,它們適用于圖像的每個像素及其層。 通過將這些過濾器應(yīng)用于圖像以及重復(fù)進(jìn)行下采樣,神經(jīng)網(wǎng)絡(luò)將學(xué)會在其第一層中識別簡單的低層特征,并在其最后一層中識別復(fù)雜的高層特征。 至少,這就是通常的解釋方式。
Image Source: Convolutional Deep Belief Networks for Scalable Unsupervised Learning of Hierarchical Representations, by Lee et al.
如您所見,模型學(xué)會了識別各種邊緣,然后識別出面部特征,然后識別出整個面部(去除了許多中間層)。 如果您使用Google“卷積神經(jīng)網(wǎng)絡(luò)層可視化”,則會發(fā)現(xiàn)大量上述圖片。 但是,我從未在訓(xùn)練過程中看到CNN圖層的可視化,所以我想我會看到它們的外觀。 在此探索中,我使用了常見的MNIST數(shù)據(jù)集,即一組60,000個黑白手繪數(shù)字,每個數(shù)字的高度和寬度為28像素。 我使用了一個簡單的卷積模型,如下所示:
The network architecture, including 6 convolutional layers and 3 dense layers
可視化
對神經(jīng)網(wǎng)絡(luò)進(jìn)行了五個時期的訓(xùn)練,最小批量為1024個圖像,總共290個訓(xùn)練步驟。 在每個步驟之后,將一組預(yù)先選擇的十個樣本圖像(每個數(shù)字之一)輸入模型,并保存每個卷積層的激活。 盡管tanh近年來它不再流行,而是支持更易于訓(xùn)練的,但我還是決定將tanh用作卷積層中的激活函數(shù)。 這是因為tanh限制在-1和1之間,使其易于可視化。 將第一層的激活應(yīng)用于紅藍(lán)色色圖時,結(jié)果如下:
Conv1: The input images (top row) and the activations of the four channels in convolutional layer 1. Activations range from +1 (blue) to 0 (white) to -1 (red). Frame (top left) is the number of training steps applied.
Conv1似乎已學(xué)會識別第一和第二通道的筆劃寬度,因為每個數(shù)字的內(nèi)部為深紅色,而外部為淺紅色。在第三和第四通道中,似乎已經(jīng)學(xué)會了邊緣的概念,其中數(shù)字為藍(lán)色,背景為粉紅色,數(shù)字邊緣為白色。然而,這些激活是深度學(xué)習(xí)規(guī)范所建議的一個長遠(yuǎn)目標(biāo),那就是每個通道都將學(xué)習(xí)一個清晰而獨特的功能,例如垂直和水平邊緣。 Conv1在很大程度上復(fù)制帶有少量注釋的原始輸入。
Conv2: The same setup as Conv1.
與Conv1相似,Conv2也似乎正在再現(xiàn)原始輸入。 通道1、2和4彼此幾乎相同,并且與Conv1中看到的邊緣突出顯示行為幾乎相同,通道3只是輸入的模糊再現(xiàn)。
Conv3: The same setup as Conv1, except with eight channels instead of four. This layer has half the resolution as the original image, so activations were upscaled without interpolation for visualization.
在Conv3中,我們看到了可能是第一個真正了解的功能。在第六個通道中,在訓(xùn)練即將結(jié)束時,我們看到數(shù)字是藍(lán)色的,大多數(shù)背景是粉紅色的,而數(shù)字每個部分正下方的背景是紅色。這表明該通道已學(xué)會識別水平邊緣的底部。同樣,第七個通道在每個數(shù)字上方都有紅色數(shù)字,粉紅色背景和白色水平邊緣。但是,其他通道似乎只是原始圖像的簡單復(fù)制。
Conv4: The same setup as Conv3.
在Conv4中,我們看到了更清晰定義的功能。 特別是,我們看到了不同角度的邊緣。 第一,第二和第六通道標(biāo)識水平邊緣的頂部。 第三,第七和第八通道標(biāo)識對角線邊緣。 其他兩個通道是原始圖像的粗略復(fù)制。
Conv5: The same setup as Conv1, except with sixteen channels instead of four. This layer has one-quarter the resolution of the original image, so activations were upscaled without interpolation for visualization.
Conv5進(jìn)行了大幅下采樣,分辨率僅為7x7像素,但似乎具有有意義的特征提取。 在訓(xùn)練的最早步驟中,每個通道都是粉紅色的,幾乎沒有任何信息。 到了步驟70,該層已學(xué)會產(chǎn)生模糊地類似于輸入的斑點。 但是,在訓(xùn)練結(jié)束時,通道之間已經(jīng)明顯地區(qū)分開,并且在激活方面顯示出急劇的變化。 由于分辨率低和我們稱之為獨立功能的糾結(jié),目前尚不清楚在這里學(xué)到了哪些功能,但是很顯然,這里的每個通道都有一些有用的功能。
Conv6: The gif was too large for Medium, so these are the activations after training has completed.
不幸的是,Conv6文件太大,沒有上傳動圖。與Conv5相似,學(xué)習(xí)到的功能清晰可見,但是幾乎無法分辨出它們實際對應(yīng)的含義。
Accuracy and loss (categorical_crossentropy) during training
得到教訓(xùn)
那么這個故事的寓意是什么?我建議有三個。
首先,深度學(xué)習(xí)成果很少像教科書所建議的那樣清晰。許多教科書,包括深度學(xué)習(xí)(Goodfellow等人),都將低級卷積層比作Gabor濾鏡和其他手工制作的計算機視覺濾鏡。盡管該模型在測試數(shù)據(jù)上的準(zhǔn)確性達(dá)到了95%以上,但是就特征提取而言,前四個卷積層所做的很少。當(dāng)然,對于一個非常簡單的任務(wù)來說,這是一個非常簡單的模型,而且為一個更艱巨的任務(wù)而訓(xùn)練的更復(fù)雜的模型可能至少學(xué)到了一些有用的低級功能,但是通常采用深度學(xué)習(xí)的方式進(jìn)行教學(xué)(在我的經(jīng)驗)表明,即使對于簡單的任務(wù),特征的優(yōu)化和提取也是不可避免的;顯然不是這樣。
第二個教訓(xùn)是,學(xué)習(xí)的功能不太可能是人類可能會選擇的直觀,獨立的特質(zhì)。 Conv5和Conv6清楚地學(xué)到了一些東西,并且原始圖像的編碼方式使得網(wǎng)絡(luò)的密集層可以按數(shù)字類型對它們進(jìn)行分類,但是他們學(xué)會了檢測的內(nèi)容并不能立即顯而易見。 這是深度學(xué)習(xí)中的一個常見問題,尤其是在生成建模中,模型可能會學(xué)習(xí)將兩個或多個看似無關(guān)的特質(zhì)嵌入為單個功能。
這是第三課,這是我作為數(shù)據(jù)科學(xué)家在工作中每天都想起的一課,那就是可視化所有內(nèi)容。 我參加了這個項目,期望寫一篇非常不同的文章。 我很高興展示從低級邊緣檢測到高級循環(huán)和旋轉(zhuǎn)的網(wǎng)絡(luò)學(xué)習(xí)和優(yōu)化功能。 取而代之的是,我發(fā)現(xiàn)一個懶散的漫步,直到第11個小時才具有完善的功能。 最值得注意的是,我驚訝地發(fā)現(xiàn),一旦各層學(xué)會了輸入的某種表示形式,它們在訓(xùn)練過程中幾乎就不會改變。 可視化增強了我對卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的理解。 希望您也從這里學(xué)到了一些東西。
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5500瀏覽量
121111 -
卷積神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
4文章
367瀏覽量
11863
發(fā)布評論請先 登錄
相關(guān)推薦
評論