當前位置:
首頁 > 最新 > 你所不能不知道的CNN

你所不能不知道的CNN

說起CNN,最初人們想到的都是某電視台,但等過幾年,人們想起的多半是深度學習了。

應該說, CNN是這兩年深度學習風暴的罪魁禍首, 自2012年, 正是它讓打入冷宮的神經網路重見天日並且建立起自己在人工智慧王國的霸主地位。

如過你認為深度學習是只能用來理解圖像的,你就大錯特錯了, 因為它的用途太廣了,上至文字,中有圖像, 下至音頻, 從手寫數字識別到大名鼎鼎的GAN對抗學習, 都離不開它。

不過要了解CNN,還是拿圖像做例子比較恰當。一句話來說CNN圖像處理的本質,就是信息抽取, 巨大的網路可以抽取一步步得到最關鍵的圖像特徵, 我們有時也叫自動的特徵工程。

CNN的建造靈感來自於人類對視覺信息的識別過程。 人腦對物體的識別的第一個問題是: 對應某一類對象的圖像千千萬, 比如一個蘋果, 就有各種狀態的成千上萬狀態, 我們識別物體的類別,事實上是給這成千上萬不同的圖片都打上同一個標籤。

CNN的靈感來自人大腦

物理里管這種一個事物的結果與一些列的變化都沒有關的特性,叫不變性, 比如如果你轉動一個蘋果任何一個角度它都是蘋果, 這就是蘋果有旋轉不變性,但是數字6就不行, 如果你給它旋轉特定角度它就變成9了, 它就沒有旋轉不變性。

我們人通常可以無視這些變化認出事物來,也就是把和這種變化有關的信息忽略。如果我們對圖像進行識別, 事實上我們的演算法就要有人的這種本領, 首先讓它學會什麼東西與真實的物體信息是無關的。

就拿數字識別舉個例子吧, 一個數字是什麼,雖然與旋轉的角度有關係, 但與它在圖片中的上下左右沒關係, 我們管這種不變性叫平移不變性。

解決這個問題,最粗暴的一個方法是製造很多的樣本,比如把「1」 放在很多不同的位置,然後讓機器在錯誤中學習。 然後窮盡所有的位置, 不過我相信沒有人是這麼完成對物體的識別的。

那怎麼辦?CNN中的卷積正是這一問題的答案,因為卷積操作本身具有平移不變性(我知道聽起來不明覺厲 ,請看下文)。

卷積,顧名思義, 「卷」有席捲的意思,「積「 有乘積的意思。 卷積實質上是用一個叫kernel的矩陣,從圖像的小塊上一一貼過去,一次和圖像塊的每一個像素乘積得到一個output值, 掃過之後就得到了一個新的圖像。我們用一個3*3的卷積卷過一個4*4的圖像, 看看取得的效果。

卷積的數學過程

一個卷積核就像一個小小的探測器, 它的DNA是被刻錄在卷積核的數字里的, 告訴我們它要幹什麼, 而卷積核掃過圖片,只要它的DNA是不變的,那麼它在圖片上下左右的哪個位置看到的結果都相同, 這變是卷積本身具有平移不變性的原理。 由於這種不變性, 一個能夠識別1的卷積在圖片的哪個位置都可以識別1,一次訓練成本,即可以對任何圖片進行操作。

圖像處理領域,卷積早已有另一個名字 , 叫做濾鏡,濾波器, 我們把圖像放進去,它就出來一個新圖像,可以是圖像的邊緣,可以是銳化過的圖像,也可以是模糊過的圖像。

如果大家玩過photoshop, 大家都會發現裡面有一些濾鏡,比如說銳化,模糊, 高反差識別這一類,都是用著類似的技術,這樣的技術所作的事情是圖像的每個小片用一個矩陣進行處理,得到一個畫面的轉換 。 我們有時候會說低通和高通濾鏡 ,低通濾鏡通常可以用來降噪, 而高通則可以得到圖像的細微紋理。 你玩photoshop,玩的就是卷積,卷積核裡面的數字定了, 它的功能也就定了。

為什麼這樣做有效果了?因為圖像的特徵往往存在於相鄰像素之間, kernel就是通過計算小區域內像素的關係來提取局部特徵,可以理解為一個局部信息的感測器, 或物理里的運算元。

比如提到的邊緣提取濾鏡, 它所做的物理操作又稱為拉普拉斯, 只有像素在由明亮到變暗的過程里它才得1, 其他均得0,因此它所提取的圖像特徵就是邊緣。 事實上我們知道圖像中的信息往往包含在其邊緣,你給以一個人畫素描, 一定能夠完全識別這個人 。 我們通過尋找到信息的關鍵載體-邊緣, 而把其他多餘的信息過濾掉,得到了比第一層更好處理的圖像, 大大減少了需要搜索圖像的可能性。

卷積的邊緣抽取過程

常用於卷積的Kernel本質是兩個: 第一, kernel具有局域性, 即只對圖像中的局部區域敏感, 第二, 權重共享。 也就是說我們是用一個kernel來掃描整個圖像, 其中過程kernel的值是不變的。這點就可以保證剛剛說的平移不變形。 比如說你識別一個物體, 顯然你的識別不應該依賴物體的位置。 和位置無關, 及平移不變。

那捲積如何幫你從不同的圖形中識別數字1了?數字的尖銳的線條會讓卷積的值很高(響起警報)。無論你1出現在圖像中的哪一個位置, 我的局部掃描+統一權重演算法都給你搞出來, 你用同一個識別1的卷積核來掃過圖片,voila,任何一個位置我都給你找出來。

那捲積和神經網路有什麼關係了?答案是卷積掃過圖像,每一個卷積核與圖像塊相乘的過程,都可以看作是一個獨立的神經元用它的神經突觸去探測圖像的一個小局部,然後再做一個決策,就是我看到了什麼或沒看到什麼。整個卷積過程, 不就對應一層神經網路嗎?啊哈, 整個卷積過程相當於一層神經網路!

一個個小探測器一般的神經元

剛剛說了卷積是一個能夠對圖片中任何位置的同一類信息進行抽取的工具, 那麼我們還講到我們除了抽取, 還要做的一個工作是,取出重要信息,扔掉不重要的,實現這一個的操作,叫做pooling

但是大家注意,這個時候如果原圖像是28*28, 那麼從kernel里出來的圖形依然是28*28, 而事實上, 事實是上, 大部分時候一個圖像的局部特徵的變化都不會是像素級。我們可以把局部特徵不變形看做一個假設, 把這個假設作為一個數學公式加入到卷積層里幫我們過濾冗餘信息, 這就是pooling所做的事情 -也就是扔掉你周邊得和你長得差不多得那些像素。

Max Pooling的數學過程

Pooling的本質即降採樣,以提升統計效率,用一個比較冠冕的話說是利用局部特徵不變性降維 ,pooling的方法很多,常見的叫做max pooling,就是找到相鄰幾個像素里值最大的那個作為代表其它扔掉。

這樣經過從卷積到pooling的過程, 在識別1的任務里,我們可以驗明在每個小區域里有沒有存在邊緣, 從而找到可能存在1的區域。 在pooling的終結點, 我們得到的是一個降低維度了的圖像,這個圖像的含義是告訴你在原有的圖像的每個區域里是含有1還是不含有1, 又叫做特徵圖。

好了,我們可以從一堆圖片中識別出1了, 那麼我們怎麼搞定2呢? 我們把2寫成一個Z型, 你有沒有思路我們如何做到這點? 我們不能只識別豎著的線條,還需要識別橫向的線條,記住,一個卷積層只搞定一個特徵,如果你既要找豎線也要找橫線, 我們需要兩個不同的卷積層,並且把他們並聯在一起,

手寫數字識別

然後呢? 橫線對應一張特徵圖, 豎線對應另一個張特徵圖, 如果要識別2, 你無非需要比較這兩張特徵圖,看是否有哪個位置兩個特徵圖同時發生了警報(既有橫線又有豎線)。

這個比較的過程,我們還是可以用一個卷積搞定(理由依然是平移不變性)!

這個時候, 新的卷積層對之前並連的兩個卷積的結果做了一個綜合, 或者說形成了一個特徵之特徵, 即橫向和豎線交叉的特徵。

這裡把我們的理論可以更上一層路。 深度意味著什麼? 我們想一下, 要正確的識別一個圖像,你不可能只看變,也不可能只看邊角, 你要對圖像的整體有認識才知道張三李四。 也就是說我們要從局部關聯進化到全局關聯, 真實的圖像一定是有一個全局的,比如手我的臉, 只有我的眼鏡,鼻子耳朵都被一起觀察時候才稱得上我的臉,一個只要局部,就什麼都不是了。如何提取全局特徵?

從一個層次到另一個層次的遞進, 通常是對上一層次做橫向以及縱向的整合(圖層間的組合或圖層之內的組合或兩者),我們的特徵組合是基於之前已經通過pooling降低維度的圖層,因此事實上每一個神經元決策的信息相對上一層都更多,我們用一個學術名詞 – 感受野來表述一個神經元決策所涵蓋的像素多少, 上一層次看到更多的輸入神經元, 因此感受野看更多了 。 越靠近頂層的神經元, 所要做的事情就越接近全局關聯。

越深,感受野越大, 表示越抽象

這和物理學的一個基本方法--尺度變換有著異曲同工之妙(我們後面講), 也是提取全局信息的一個非常核心的辦法,我管它叫級級遞進法。 你一級一級的進行對畫面進行降採樣, 把圖像里的四個小格子合成一個, 再把新的圖像里四個小格子合成一個, 直到一個很大的圖像被縮小成一個小樣。每一層的卷積,都不是一個卷積,而是一組執行不同特徵提取的卷積網路,比如我剛剛說的 不同方向的邊緣溝成的一組卷積, 你可以想像後面有不同大小的角度組成的一組網路, 他體現了在一個空間尺度上我們所能夠達到的特徵工程。

如此級級互聯, 越靠上層感受野就越大。 整個CNN網路如同一封建等級社會,最上層的,就是君王,它是整個集團唯一具有全局視野的人,下一級別, 是各大領主,然後是領主上的風塵,騎士,知道農民(底層神經元)。

我們把剛剛的全局換一個詞叫抽象。深度卷積賦予了神經網路以抽象能力。 這樣的一級級向上卷積做基變換的過程,有人說叫搞基(深度學習就是搞基),深一點想叫表徵, 和人的思維做個比喻就是抽象。 抽象是我在很深的層次把不同的東西聯繫起來,CNN教會了我們事先抽象的一種物理方法。

到目前為止, 我所描述的是都是一些人工的特徵工程,即使網路在深,頂多說的上是深度網路,而與學習無關。我們說這樣一個系統(mxnxpxz), 我們要人工設計,幾乎窮經皓首也可能做的都是錯的。我們說, 這樣的一個結構, 只能靠機器自己學,這就是深度學習的本質了, 我們通過幾條basic假設(正則)和一個優化函數,讓優化(進化)來尋找這樣一個結構。 Basic假設無非圖像的幾個基本結構, 體現在幾個不變形上,物理真是好偉大啊。

深度學習的訓練,就是計算機幫助人完成了機器學習最難的一步特徵工程(特徵工程本質就是基變換啊)。以前人類窮盡腦汁思考如何做圖像識別, 是尋找人是如何識別圖像的, 希望把人能用來識別物體的特徵輸入給計算機, 但是現在通過深度卷積,計算機自己完成了這個過程。

卷積網路在2012 年的發展趨勢, 大家可以關注幾個方向:

1, 更深的模型 : 從AlexNet到VCG19 ,High way network 再到殘差網路, 一個主要的發展趨勢是更深的模型。 當你採用更深的模型,經常你會發現一些神奇的事情發生了。 當然網路的寬度(通道數量)也在增加。

這只是最初級的CNN

這也只是小菜一碟

2, 更通暢的信息交換 : 深,帶來的第一個問題是訓練困難, 反向傳播難以傳遞。 從殘差網路, 到目前開始流行的Dense Network, 一個主要的發展趨勢是不同層級間的信息的交換越來越通暢。 我們逐步在不同層之間加入信息的直連通道。

Dense Network

3, 與監督學習之外的學習方法的結合, 如遷移學習, 半監督學習, 對抗學習, 和強化學習。 後兩者的有趣程度遠超監督學習。

4, 輕量化, CNN網路越來越深, 使得網路的文件動輒裝不下, 這點使得CNN網路的輕量化部署成為重點, 我們希望在性能和能耗中取中。 一個很好的辦法是對網路權重進行減枝,去掉不重要的權重, 另外一個是把每個權重的數據位數本身縮減,甚至是使用0和1表示, 雖然看上去我們丟失了很多信息, 但是由於巨大網路中的信息是統計表達的,我們到底損失多大還真不一定。

酷似生物過程的剪枝處理

以上是CNN的小結, 不要以為圖像處理與你無關,我剛剛說的其實一篇文章如果你把它轉化為一個矩陣無非一個圖像, 一段音頻你給它轉換成一個矩陣無非一個圖像, 你看, 都可以和CNN掛鉤。

我想說,無論你是做什麼的, 無論是苦逼的計算機工程師, 遊戲設計師,還是外表高大上的金融分析師,甚至作為一個普通消費者, 你的生活以後都和CNN脫不開干係了 , 預知更多情報還請關註:

巡洋艦的深度學習實戰課程, 手把手帶你進行深度學習實戰, 課程涵蓋機器學習,深度學習, 深度視覺, 深度自然語言處理, 以及極具特色的深度強化學習,看你能不能學完在你的領域跨學科的應用深度學習驚艷你的小夥伴,成為身邊人眼中的大牛。剛剛講的方法都將在課程里詳細展開。

目前課程線下版本已經基本報名完畢(特殊申請可加一到兩個名額), 為了緩解眾多異地學員的需求, 我們提出一個線上加線下的課程簡版, 課程包括全部課程視頻, notebook作業, 和一個課程模塊的來京線下實踐機會, 名額限5名,預報從速,

有興趣的可加 陳欣 微信 :

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 混沌巡洋艦 的精彩文章:

TAG:混沌巡洋艦 |