標籤:

從下往上看 第十五部分 CNN-整體到局部

PS在頭上:這節CNN的理解上還是存在明顯的偏差,找時間從新寫吧。

看過RNN,回過頭FNN的其他可能性,我們從圖片說起。用數碼技術採樣的照片是一個二維的點陣結構。

放大觀察這個小人的圖像可知道,這個圖片的信息包含兩部分的內容:

1.在刪格上的點的顏色。

2.點在圖片中的相對位置。

如若希望使用一個MLP來處理這個圖片的信息該怎麼辦?最直接的想法就是保持結構上的一致性,用足夠數量的MPN來對應每一個點。這樣可以保證上面的兩類信息在輸入過程中都可以得到續存。

這邏輯上是可行的,通過構建一個2D的MPN節點確實可以完全映射這些信息。問題只是出現在計算資源的消耗上。上面是一個2x2的圖像,但現實中的圖片可不是這麼小的尺寸。對一個1920x1024的普通圖片,光是映射層就需要消耗兩百萬左右的MPN描述資源,更不用考慮前向的連接所需耗費的資源。

因此對FNN對圖像的處理通常需要藉助其他的圖形學工具直接把關鍵信息拿出來,再用FNN做處理和分類,最後再用分類演算法或數據對比的手段獲得最終的要求。早先的面部識別就是按照這個邏輯來處理圖片,通過圖形學演算法直接把多點或7點的特徵拿到,再做處理。這種工作模式下FNN不是必須的,這些提取特徵的具體演算法是基於對圖像信息的認知建模得以完成,只要能實現最終的分類需求,就可以滿足整體設計需要。

這些通過建模提取出來的特徵信息被稱為Feature。Feature本身是通過從原有的圖片信息中通過計算得出的,上圖中女子面部的特徵點線之間的相對關係有賴於一個建模得出的方法從原有的圖片信息中「提取」出來。這也就是說這個點線信息原是被混疊在初始信息中的。建模得出圖形演算法是一個「顯化」局部信息的過程。

換角度看這個問題,信息本身沒有改變,只是這個處理過程使得某些局部信息變得明顯可利用而已。一定程度上這是在再表徵原始的數據。再回想SVM-kernel,SVM kernel的變換是否變得有意義了?從這個角度說,feature的提取過程是使得特徵信息「顯化」的過程。

回想FNN的計算特點是去建模過程,如果能解決大量的變數輸入到MLP的問題,通過「搜索參數」獲得近似模型,就可以在無法對輸入準確建模的情況下直接進行處理數據,通過訓練FNN自己就可以構建這種Feature的提取。所以核心問題就是兩個:

1.如何把高維度的原始信息直接映射進網路

2.如果有效的調整複雜網路的參數

CNN(Convolutional Neural Network )就是解決第一個問題的一種方法,它針對頻域表徵的數據提供了一套方法。既然是卷積,要先確定誰和誰卷的問題.我們從邏輯上一步步來。

先複習一下卷積,跳過它在時域裡面的表達,直接看頻域(DT)。頻域內它做一個頻率的乘法。時域的突變在頻域內對應衝擊,是遇上變化的邊界是向中心集中的頻域數據。因此,在頻域乘上一個高斯分布可以把邊界區域的信息加強,「顯化」出來。在時域上看,這個動作完全可以通過一個卷積運算完成。所以對頻域錶針的數據,卷積的目標是增強「邊界」。功能上面向edge(邊界可視作顏色或亮度的跳變)這個具體feature提取。

上圖就是一個例子,對於一個確定的filter(參與卷積的具體矩陣),這個動作就把源信息轉化為一個小尺寸的矩陣。因此卷積層尺寸是會相對的縮小輸入層的MPN矩陣尺寸。

這個卷積過程恰好可以用MP神經元來完成。因此接收信息的神經元的層次就變化的簡單了。對卷積過程產生的尺寸"縮減"而言,僅能做到filter矩陣的一半。連續掃描7的filter只能縮小32輸入內容的到29.這遠遠不夠,因此需要在別的環節尋求辦法。回過頭看看人是怎麼做的。

人和猴子在這部分上的結構基本是一樣的。前端是眼球,主體是個光學鏡頭,在眼球的最後端的紫色部分是retina。神經是從後面的紫色引出部分導出信息的。

retina是兩層細胞組合成的結構,藍色的部分叫做photoreceptor,相當於CCD上面的pixel.每個具體的pixel對應光學區域的這種關係被叫做receptive fields 也就是大多CNN教程中說的感知野.(在皮質層面也有感知野的概念存在拆開放到看HTM的時候在從新理一遍關於皮質的問題) 這些photoreceptor裡面分兩種細胞cones和rods,分別用於強光和弱光照環境。這些細胞在靠近中間的地方比較密集,而對於邊緣地方就比較稀疏。白天用的cones大概只有6百萬左右。是的,比你的攝像頭弱很多,而且這些pixel一次活動大約需要100ms的時間,而人視覺幀率大概是30fps。所以同時大概只有1/3左右,等效下來大概2百來萬像素左右,這和神經節細胞(就是上圖的紫色部分)的數量基本相當。

從另外一個角度想,為何這等效200萬的信息能「看到」如此清晰內容,確實讓人稱奇。這種神奇的現象來自於photoreceptor的分布不均勻,中間區域的photoreceptor是十分密集的。在局部上它的解析度十分的高。結合receptive field的想法,這就等於說真實看到的是一個中間清楚,邊緣模糊的圖像。但按直覺而言,似乎整個畫面都是清楚的,這是如何做到的?一種解釋是眼球的運動。這個過程就像全景攝像一樣,眼球的抖動和移動在畫面上掃過。這些連續的信息被送到皮質中,由皮質再來合成這個完全清晰的圖像。所以畫面真的是「看」到的么?看和想像似乎是同一回事,都是一種感覺。上面這個圖是一個視覺區域V1的信息流動方向示意。你可以想這裡面做了多少工作。

回到演算法上來,如何讓簡單的卷積層連接到複雜的輸入信息?動態連接-對圖片整體掃描這樣的思路就不難理解了。在一個時刻MPN只連接到一個輸入的局部範圍上。按順序生成卷積輸出序列。序列的深度我們希望多少?這取決於我們實際需要關聯的區域的大小和卷積網路輸入的大小。換個角度就是你希望拼接多大的圖。因此我們不需要增加MPN的節點數量通過動態的連接就可做到映射信息到卷積產生的feature space上。而這個掃描序列直接按照我們掃描的位置順序存放就可以得到完整的卷積後圖片信息。因此這裡無論圖片有多大,我們的卷積網路參數數量是固定的。卷積網路網路表達式,就是所謂的卷積核。從這個角度看它是一個核函數。與svm-kernel的表達的內涵十分一致。

把圖片縮小後輸入一個全連接的FNN做分類處理。就完成了整個過程,下圖是一個用卷積網路做數字識別的例子。

比較一般的FNN,通常FNN面向一個擬合過程,目標是使得FNN能有效的在計算上接近F(x).而CNN面向的是頻域特性的縮放,它更多是一種kernel方法,面向特徵提取,能否有效的找到feature才是我們訓練CNN的objective .CNN在等效結構上和普通的FNN毫無區別,唯獨節點參數共享這一特性使其被等效為小網路掃描大平面的過程。能否說CNN這種工作方式與感知野是對等的,個人覺得沒有太大聯繫。材料喜歡這麼說,對比前面我陳列的視覺系統資料起碼我看不到這兩個掃描機制的類同。

總結一下CNN本身的特性決定了其本身是面向Feature提取的一種網路結構。在使用目的上與FNN去建模的過程是不同的,選取網路結構是否使用CNN還是需要針對信息本身特性來決定的。了解到此還沒看到內部的細節,CNN的具體結構和優化方法再後面再另挖坑。

到這裡,ANN中的典型結構就說完了,就目前看到的內容而言,ANN與生物機制看不到太大的關係。如果目的只是學ANN,照我的看法基本沒有必要學習生物機制,下面我打算總結一下ANN結構的運作邏輯。
推薦閱讀:

GAN之父:讓機器擁有天賦 我還在對付利用AI作惡的人
受限玻爾茲曼機(RBM)學習筆記
一個專門用來模仿飛蛾識別味道的神經網路,說明了為什麼飛蛾的學習速度遠超機器
膠囊網路結構Capsule初探
無人駕駛汽車決策規則提取演算法和換道策略匯總

TAG:神經網路 |