文字层一点就变红_学习观察神经网络:可视化整个模型训练中卷积层的激活
全文共3425字,預計學習時長10分鐘
圖源:www.raincent.com
深度學習是機器學習領域中一個新的研究方向,它被引入機器學習使其更接近于最初的目標——人工智能。
深度學習是學習樣本數據的內在規律和表示層次,這些學習過程中獲得的信息對諸如文字,圖像和聲音等數據的解釋有很大的幫助。因此,它在搜索技術,數據挖掘,機器學習,機器翻譯,自然語言處理,多媒體學習,語音,推薦和個性化技術,以及其他相關領域都取得了很多成果。
與其他機器學習技術相比,深度學習的主要優勢在于能夠自動學習輸入數據的抽象表示。然而,這一點卻鮮為人知。
圖源:Sian Molloy
早在1969年,Minkey和Papert就出版了一本著作,證明了單層感知器,即人工神經網絡的前身,不能解決異或問題。
對于沒有計算機科學背景或其他行業的人來說,異或問題就是指兩個二進制輸入:A和B。當且僅當A或B中有一個為真時返回真,因此得名“異或(exclusive or”)”。單層感知器不能解決這一問題的原因是它們只能解決線性可分的類。如果設置異或問題的可能輸入及其輸出,可以用下圖說明:
世界上最爛的井字游戲(來源:維基共享資源)
你能在這個圖上畫一條直線,把圓圈和十字分開嗎?
不,你不能,感知器也不能。
幸運的是,某些富有洞察力的人將兩個感知器放在一起,深度學習領域就此誕生。這樣做的原因是,神經網絡的每一層都可以被認為是前一層的嵌入;雖然上圖中的圓圈和十字在初始形態中可能不是線性可分的,但是通過簡單的編碼,它們就變得線性可分了。
記住圖的左上角和右下角。然后,想象一下通過第三維度將圖像對折,將右上角拖出屏幕,并將其向下壓到左下角。正確的做法應該是這樣的:
仔細看的話會發現我沒什么藝術細胞
現在,你能在這個圖上畫一條直線,把圓圈和十字分開嗎?應該可以了。神經網絡擅長的主要任務是將信息提取出來,并將其編碼為其他更有效的形式。事實上,訓練神經網絡不是為了其預測能力,而是為了發現學習到的表示,這一直是深度學習研究的支柱。
學習觀察
卷積神經網絡(CNNs)是將深度學習應用于圖像數據的最流行的架構。簡單地說,卷積神經網絡學習許多濾波器,將這些濾波器應用到圖像的每個像素及其層上。通過對圖像應用這些濾波器,以及重復的下采樣,神經網絡學會在其第一層識別簡單的、低級的特征,在其最后一層識別復雜的、高級的特征。這就是一般的解釋。
圖片來源:卷積深度信念網絡用于分層表示的可擴展無監督式學習,Lee等著。
如圖所示,模型學習識別各種邊緣,然后是面部特征,然后是整個人臉(許多中間層被移除)。如果你用谷歌搜索“卷積神經網絡層可視化”,會發現很多類似的圖片。
然而,我從未見過在訓練過程中可視化的卷積神經網絡圖層,所以我想進行一下嘗試。在這個實驗中,我使用了通用的MNIST數據集,這是一組黑白手繪數字,共有六萬個,每個數字的高度和寬度都為28個像素。我使用了一個簡單的卷積模型,如下所示:
網絡結構包括6個卷積層和3個密集層
可視化
對神經網絡進行了五個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類似,學習到的特征是清晰可見的,但幾乎不能分辨出它們實際對應的是什么。
訓練過程中的精度和損耗(categorical_crossentropy)
結語
那么本文講了什么呢?有三點。
首先,深度學習的結果很少像標準教程所說的那樣清晰明了。許多教科書,包括《深度學習》(Goodfellow等著),將低層卷積層比作Gabor濾波器和其他手動制作的計算機視覺濾波器。盡管該模型在測試數據上達到了95%以上的準確率,但前四個卷積層在特征提取方面收效甚微。
誠然,這是一個非常簡單的模型,可以完成簡單的任務。而對于更復雜的任務,更高級的模型很可能會學習到一些有用的低級特征,但深度學習的一般教授方式(以我的經驗來看)表明,即使對于簡單的任務,特征細化和提取也是必需的;事實顯然并非如此。
第二點是,學習到的特征不太可能是人類會選擇的、直接的、獨立的特征。Conv5和Conv6顯然學到了某些特征,原始圖像的編碼方式使得網絡的密集層可以按照數字類型對它們進行分類,但它們學到的并不會很快地觀察到。
這是深度學習中的一個常見問題,尤其是在生成建模中。在生成建模中,一個模型可能會學習將兩個或更多看似不相關的特征嵌入作為單一特征。
圖源:百家號
第三點是我,筆者作為一名數據科學家,每天都會提醒自己的,那就是把一切都可視化是值得的。我參加這個項目,希望能寫出一篇完全不同的文章。我很高興能展示網絡學習和細化的特性,從低級的邊緣檢測到高級的循環和回旋。我還發現了一個閑置的家伙,直到最后都幾乎沒有進行特征細化。
最值得注意以及令我驚訝的是,一旦層學習了輸入的某種表示,它們在訓練過程中幾乎不會改變。
可視化這一點加強了我對卷積神經網絡訓練的理解。希望你在閱讀完這篇文章后也能學到一些東西。
努力學習,祝你好運~
留言點贊關注
我們一起分享AI學習與發展的干貨
如轉載,請后臺留言,遵守轉載規范
總結
以上是生活随笔為你收集整理的文字层一点就变红_学习观察神经网络:可视化整个模型训练中卷积层的激活的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js中for循环调用回调函数,一直循环最
- 下一篇: 经典数据结构——堆的实现