學習觀察神經網絡:可視化整個模型訓練中卷積層的激活

讀芯術 發佈 2020-01-15T08:13:36+00:00

全文共3425字,預計學習時長10分鐘圖源:www.raincent.com深度學習是機器學習領域中一個新的研究方向,它被引入機器學習使其更接近於最初的目標——人工智慧。

全文共3425字,預計學習時長10分鐘


深度學習是機器學習領域中一個新的研究方向,它被引入機器學習使其更接近於最初的目標——人工智慧。


深度學習是學習樣本數據的內在規律和表示層次,這些學習過程中獲得的信息對諸如文字,圖像和聲音等數據的解釋有很大的幫助。因此,它在搜索技術,數據挖掘,機器學習,機器翻譯,自然語言處理,多媒體學習,語音,推薦和個性化技術,以及其他相關領域都取得了很多成果。


與其他機器學習技術相比,深度學習的主要優勢在於能夠自動學習輸入數據的抽象表示。然而,這一點卻鮮為人知。



早在1969年,Minkey和Papert就出版了一本著作,證明了單層感知器,即人工神經網絡的前身,不能解決異或問題。


對於沒有計算機科學背景或其他行業的人來說,異或問題就是指兩個二進位輸入:A和B。若且唯若A或B中有一個為真時返回真,因此得名「異或(exclusive or」)」。單層感知器不能解決這一問題的原因是它們只能解決線性可分的類。如果設置異或問題的可能輸入及其輸出,可以用下圖說明:


你能在這個圖上畫一條直線,把圓圈和十字分開嗎?


不,你不能,感知器也不能。


幸運的是,某些富有洞察力的人將兩個感知器放在一起,深度學習領域就此誕生。這樣做的原因是,神經網絡的每一層都可以被認為是前一層的嵌入;雖然上圖中的圓圈和十字在初始形態中可能不是線性可分的,但是通過簡單的編碼,它們就變得線性可分了。


記住圖的左上角和右下角。然後,想像一下通過第三維度將圖像對摺,將右上角拖出螢幕,並將其向下壓到左下角。正確的做法應該是這樣的:


現在,你能在這個圖上畫一條直線,把圓圈和十字分開嗎?應該可以了。神經網絡擅長的主要任務是將信息提取出來,並將其編碼為其他更有效的形式。事實上,訓練神經網絡不是為了其預測能力,而是為了發現學習到的表示,這一直是深度學習研究的支柱。


學習觀察


卷積神經網絡(CNNs)是將深度學習應用於圖像數據的最流行的架構。簡單地說,卷積神經網絡學習許多濾波器,將這些濾波器應用到圖像的每個像素及其層上。通過對圖像應用這些濾波器,以及重複的下採樣,神經網絡學會在其第一層識別簡單的、低級的特徵,在其最後一層識別複雜的、高級的特徵。這就是一般的解釋。



如圖所示,模型學習識別各種邊緣,然後是面部特徵,然後是整個人臉(許多中間層被移除)。如果你用谷歌搜索「卷積神經網絡層可視化」,會發現很多類似的圖片。


然而,我從未見過在訓練過程中可視化的卷積神經網絡圖層,所以我想進行一下嘗試。在這個實驗中,我使用了通用的MNIST數據集,這是一組黑白手繪數字,共有六萬個,每個數字的高度和寬度都為28個像素。我使用了一個簡單的卷積模型,如下所示:



可視化


對神經網絡進行了五個epoch的訓練,1024幅圖像分為一小批,共290個訓練步驟。在每一步之後,將一組預先選擇的10個樣本圖像(每個數字中的一個)輸入到模型中,且保存每個卷積層的激活。雖然最近幾年它已經過時了,更容易訓練的ReLU函數更受歡迎,但我還是決定使用tanh作為卷積層中的激活函數。這是因為tanh限制在-1和1之間,使得它易於可視化。當第一層的激活應用於紅藍顏色圖時,結果如下:


Conv1:輸入圖像(頂行)和卷積層1中四個通道的激活。激活範圍從+1(藍色)到0(白色)到-1(紅色)。Frame(左上)是所用的訓練步驟數。

Conv1似乎已經學會了識別第一通道和第二通道中的筆畫寬度,因為每個數字的內側是暗紅色,而外側是淺紅色。在第三和第四通道中,它似乎學會了識別邊緣,數字是藍色的,背景是粉紅色的,數字邊緣是白色的。然而,這些激活是深度學習標準教程中的一小部分,即每個通道將學習一個清晰和獨特的特徵,如垂直和水平邊緣;Conv1在很大程度上複製了原始輸入,並略作了注釋。


Conv2: 設置與Conv1相同。

與Conv1類似,Conv2似乎也在複製原始輸入。第一、第二、第四通道彼此之間幾乎相同,並且與Conv1突出顯示邊緣幾乎相同,第三通道只是對輸入進行模糊複製。


Conv3:設置與Conv1相同,只是採用8個通道。這一層的解析度是原始圖像的一半,因此提高了激活而沒有實現可視化的插值。

在Conv3中,我們看到了可能是第一個真正學習到的特徵。在第六通道,接近訓練結束時,可以看到數字是藍色的,大部分背景是粉紅色的,而數字的每一部分正下方的背景是紅色的。這表明這個通道已經學會識別水平邊緣的底部。同樣,第七通道有紅色的數字,粉紅色的背景,每個數字上方有白色的水平邊緣。然而,其他通道似乎只是簡單複製了原始圖像。


Conv4: 設置同Conv3。

在Conv4中,可以看到更清晰確定的特徵。尤其是,可以看到不同角度的邊緣。第一、第二和第六通道識別水平邊緣的頂部。第三、第七和第八通道識別對角線邊。另外兩個通道則是粗略複製原始圖像。


Conv5:設置同Conv1,只是採用了16個通道。這一層的解析度是原始圖像的四分之一,因此提高了激活而沒有實現可視化的插值。(圖片過大,此處展示完成後)

Conv5進行了大量的下採樣,解析度僅為7x7像素,但其特徵提取似乎更具意義。在訓練的最初階段,每個通道都是粉紅色的背景,缺乏大量信息。到步驟70,層已經學會產生模糊地類似於輸入的斑點。然而,到訓練結束時,這些通道已經明顯地彼此區分開來,並且激活呈現出急劇的變化。由於「獨立特徵」的低解析度和糾纏,因此不清楚這裡學習到了什麼特徵,顯然,此處的每個通道都有各自的意義。


Conv6:此圖像體積過大,所以此處展示訓練完成後的激活。

不幸的是,Conv6超過了Medium的文件大小限制,所以請點擊此處以觀察學習。與Conv5類似,學習到的特徵是清晰可見的,但幾乎不能分辨出它們實際對應的是什麼。


結語


那麼本文講了什麼呢?有三點。


首先,深度學習的結果很少像標準教程所說的那樣清晰明了。許多教科書,包括《深度學習》(Goodfellow等著),將低層卷積層比作Gabor濾波器和其他手動製作的計算機視覺濾波器。儘管該模型在測試數據上達到了95%以上的準確率,但前四個卷積層在特徵提取方面收效甚微。


誠然,這是一個非常簡單的模型,可以完成簡單的任務。而對於更複雜的任務,更高級的模型很可能會學習到一些有用的低級特徵,但深度學習的一般教授方式(以我的經驗來看)表明,即使對於簡單的任務,特徵細化和提取也是必需的;事實顯然並非如此。


第二點是,學習到的特徵不太可能是人類會選擇的、直接的、獨立的特徵。Conv5和Conv6顯然學到了某些特徵,原始圖像的編碼方式使得網絡的密集層可以按照數字類型對它們進行分類,但它們學到的並不會很快地觀察到。


這是深度學習中的一個常見問題,尤其是在生成建模中。在生成建模中,一個模型可能會學習將兩個或更多看似不相關的特徵嵌入作為單一特徵。



第三點是我,筆者作為一名數據科學家,每天都會提醒自己的,那就是把一切都可視化是值得的。我參加這個項目,希望能寫出一篇完全不同的文章。我很高興能展示網絡學習和細化的特性,從低級的邊緣檢測到高級的循環和迴旋。我還發現了一個閒置的傢伙,直到最後都幾乎沒有進行特徵細化。


最值得注意以及令我驚訝的是,一旦層學習了輸入的某種表示,它們在訓練過程中幾乎不會改變。


可視化這一點加強了我對卷積神經網絡訓練的理解。希望你在閱讀完這篇文章後也能學到一些東西。


努力學習,祝你好運~

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後台留言,遵守轉載規範

關鍵字: