1958 年,一群奇葩的神經科學家把電極插到喵星人的腦子裡,去觀察視覺皮層的活動。從而推斷生物視覺系統是從物體的小部分入手,
經過層層抽象,最後拼起來送入處理中心,減少物體判斷的可疑性的。這種方法就與bp網路背道而馳。
bp網路認為,大腦每個神經元都要感知物體的全部(全畫素全連線),並且只是簡單的對映,並沒有對物體進行抽象處理。
誰對誰錯呢?卷積神經網路(convolution neural network)最先證明了bp網路的不科學性。
cnn起源於機器學習大師lecun在80年代末搞的支票數字識別神經網路。他在bp網路前面嘗試了多層的卷積、降取樣、以及部分網路連線的創意,
結果訓練效果好得驚人。lecun的導師是hinton,也就是最先在2023年提出深度學習(deep learning)概念的計算機科學家兼神經科學家。
lecun本人也算是半個神經科學家。師徒二人攜手撐起了深度學習的藍天。
卷積運算具有平滑、模糊訊號的效果,它對原始訊號與卷積核鄰域做了乘積加權和。一幅影象可分為雜訊、細節兩部分。
卷積運算合併了訊號部分內容之後,起到了消除雜訊,突出細節兩個作用。同時,卷積運算的引數也是可以由機器自動訓練的,這就成為神經網路的瞄準物件。
cnn中使用的是二維卷積,卷積方式很簡單:參考
上圖為vaild卷積,還有一種full卷積,考慮將卷積核移到源影象之外,vaild卷積維度會變小,full會變大(一般不用)
vaild:dimnew=dimold−filter.dim+1
full:dimnew=dimold+filter.dim−1
當然這是後話。二維離散卷積的定義是這樣的:g與f順序是不一樣的
上圖中黃色3*3卷積核實際上在做滑動乘積之前,被旋轉了180度。
⎡⎣⎢135246⎤⎦⎥=>⎡⎣⎢642531⎤⎦⎥
所以手寫卷積時,千萬不要忘記了卷積核旋轉。
降取樣(pooling)對應乙個size,假如是(2,2),那麼每2x2的畫素會被合併為1個畫素。
有取最大值作為新值的,以便更加突出特徵的max pooling方法。
也有取均值作為新值的,以便更加平滑特徵的mean pooling方法。
當然這些都不是重點,pooling強制把畫素降了乙個量級,①降低了計算量②保證了縮放、旋轉不變性[?]
這是lecun的lenet5結構,通常拿來作為cnn的教學。
首先要區分乙個概念,filter和feature map。feature map就是上面的一塊大板子,size是28x28
filter指的是卷積核,filter的數量決定著下一層大板子的數量,size就是卷積核大小。
卷積嵌入到神經網路裡,就有了乙個權值共享的概念。傳統的神經網路,對28x28畫素,會有784個神經元,如果下一層也有784個神經元,那麼就需要784*784個權值。
但是卷積神經網路裡,將卷積核權值看成是神經元,乙個卷積核才多大?5x5=25罷了,784個畫素共用這25個神經元,滾來滾去,也就是一套權值。
研究表明,卷積核數量與資料量規模沒有多少關係,而且根據視覺系統的特性,隨著層數加深,才有必要增加核數,且不多。比如lenet的卷積層也就6、16個核
這樣,全連線過程中,儘管需要num(層k)*num(層k-1)套權值,但是由於每層feature map數量有限,且一套權值規模又不大,所以訓練起來很輕鬆。
theano的注釋中用4d張量(其實就是個大小為4的陣列)來表示結構轉移,假設乙個batch有500張,都是黑白單通道。
(數,map數,高,寬)---image/input/output, input的map數即為通道數,比如rgb有三個通道,視為3。
(filter數,map數,高,寬)---filter
i/o的轉移如下:(500,1,32,32)=>(500,6,28,28)=>(500,6,14,14)=>(500,16,10,10)=>(500,16,5,5)=>(500,120,1,1)
,下面就是隱層+分類器了。
filter的轉移如下:(6,1,5,5)=>(16,6,5,5)=>(120,16,5,5)
值得注意的是卷積之後的sigmoid,以及偏置b。
因為是全連線,前一層的map卷積並且結果疊加後,送入sigmoid處理。新一層的每張map的每個畫素統一加上b。(theano中把一維b轉成了四維)
也就是說b等於filter的數量,而不是和w的數量一致。tornadomeet中的解釋是錯的。
當然,因為下面還有降取樣,所以sigmoid、偏置b可以留到降取樣結束後再加上去,形成下一層的input。
lecun在構建s2的6個map=>c3的16個map時,並沒有採用全連線的方式,而是採用更切合生物視覺的部分連線。參考tornadomeet的解釋。
這樣,更好的區分了特徵,但是不太好實現。所以theano乾脆就利用conv2d封裝的全連線寫法搞了個簡易版本。
若是具體實現的話,我覺得首先得把output的map給reshape,然後利用這些map,在conv2d手艹16個單map,組合成下一層的input
神經網路 卷積神經網路
這篇卷積神經網路是前面介紹的多層神經網路的進一步深入,它將深度學習的思想引入到了神經網路當中,通過卷積運算來由淺入深的提取影象的不同層次的特徵,而利用神經網路的訓練過程讓整個網路自動調節卷積核的引數,從而無監督的產生了最適合的分類特徵。這個概括可能有點抽象,我盡量在下面描述細緻一些,但如果要更深入了...
神經網路 卷積神經網路
1.卷積神經網路概覽 來自吳恩達課上一張,通過對應位置相乘求和,我們從左邊矩陣得到了右邊矩陣,邊緣是白色寬條,當畫素大一些時候,邊緣就會變細。觀察卷積核,左邊一列權重高,右邊一列權重低。輸入,左邊的部分明亮,右邊的部分灰暗。這個學到的邊緣是權重大的寬條 都是30 表示是由亮向暗過渡,下面這個圖左邊暗...
卷積神經網路 有趣的卷積神經網路
一 前言 最近一直在研究深度學習,聯想起之前所學,感嘆數學是一門樸素而神奇的科學。f g m1 m2 r 萬有引力描述了宇宙星河運轉的規律,e mc 描述了恆星發光的奧秘,v h d哈勃定律描述了宇宙膨脹的奧秘,自然界的大部分現象和規律都可以用數學函式來描述,也就是可以求得乙個函式。神經網路 簡單又...