2
本文作者: 矽說 | 2016-12-15 08:53 |
雷鋒網(wǎng)按:本文作者癡笑,矽說(微信號:silicon_talks)主筆。本文為《腦芯編:窺腦究竟,織網(wǎng)造芯》系列第二篇。
〈二〉幾重卷積幾重生
蜘蛛結(jié)網(wǎng),是為了捕食昆蟲;
蜘蛛俠結(jié)網(wǎng),是為了拯救世界;
碼農(nóng)Data Scientist (~ds~) 結(jié)網(wǎng),是為了——
換一個角度看世界,
英語叫做: Representation。
如果你只想知道一個關(guān)于神經(jīng)網(wǎng)絡(luò)的常識,我認(rèn)為上面這個單詞是最不應(yīng)該錯過的。就像每個學(xué)模擬電子學(xué)的人,其實歸根結(jié)底就是學(xué)了兩個字——放大。
話接上回,我們說到,通過一系列乘累加和非線性激活函數(shù),我們就可以實現(xiàn)一個神經(jīng)元。而關(guān)鍵的問題就是如何把神經(jīng)元們連起來。解決這個問題之前,我們先要明白神經(jīng)網(wǎng)絡(luò)的作用——通過一系列線性和非線性的變化重新將輸入信息映射成為表達事物的本質(zhì)的簡化特征。
如果你覺得上面一句的每個字都認(rèn)識,卻不知道他在說什么,那么我們來看一個經(jīng)典的例子——人類的視覺皮層(Visual Cortex)。
視覺皮層, 一場生物與AI的偉大握手
碼農(nóng)老師的生物課又來了……
你有沒有想過當(dāng)你看到生命中一個重要的人的時候,比如說基友(碼農(nóng)怎么會有妹紙?),你是看到是他/她的鼻子,眼睛,臉上的痘痘,昨晚熬夜的黑眼圈……但是這些東西最后都只留下了一個映像——我面基了??墒悄阌袥]有想過從你看到圖像,到你得到的結(jié)論,無數(shù)的信息都已經(jīng)沒有過濾,你的腦子完成了一次將4K3D圖像壓縮成兩個字的過程,到底發(fā)生了什么事?
這個過程就是從信息經(jīng)過視覺皮層(神經(jīng)網(wǎng)絡(luò)??)的過程。從前到后,他經(jīng)過了幾站:
(1)始發(fā)站——視網(wǎng)膜 ,比較像是一個電子系統(tǒng)的傳感器,用來接收信號;
(2)快速交流道——LGN,他是將左右眼看到的信號重新編碼后傳遞給視覺皮層,像是一個電子系統(tǒng)中的主控處理器與總線(請原諒我不說LGN的中文,因為說了你也記 不住) ;
(3)第一站——主視覺區(qū)V1,第一層神經(jīng)網(wǎng)絡(luò),司“邊界檢測(Edge Detection)”一職,這可能是神經(jīng)元數(shù)量最豐富的一個區(qū)域;
(4)第二站——次視覺區(qū)V2,第二層神經(jīng)網(wǎng)絡(luò),司“基礎(chǔ)特征提取”一職,歸納視覺信號的形狀、大小、顏色、頻率……
(5)第三站—— V3,司“位置“,也是個過渡區(qū),一條線上你有些站你不知道為什么會停~
(6)第四站——V4/V5(MT)分支,深度神經(jīng)網(wǎng)絡(luò),各司“色彩/運動”;
(6)V4分支終點站1——換乘inferotemporal Cortex,近深度智能TE區(qū),司 ”目標(biāo)識別“ ~~~終于終于我認(rèn)出基友來了,撒花~~
(7)V5分支終點站2——換乘Parietal Cortex, 進深度智能MST區(qū),司“空間運動分析”。
視覺皮層可能是目前為止人類認(rèn)識的最透徹的大腦部分,不過,好像建立在無數(shù)的活體實驗上。。。即使如此,還是有很多未知的空間亟待生物學(xué)家探索。
不知道讀到這里,對人工智能略有了解的你有沒有覺得這堂生物課在哪里見過? 先做邊界檢測,在再做特征提取,在進行分類識別,這不就是大名鼎鼎的
卷積,讓加速成為一種可能
其實在神經(jīng)網(wǎng)絡(luò)領(lǐng)域里,目前為止唯一能算的上前所未有成功的就是CNN (Convolution Neural Network,卷積神經(jīng)網(wǎng)絡(luò))。最早的CNN可以追溯到98年Yann LeCun的一篇如何識別手寫數(shù)字的paper,這里出現(xiàn)了第一個CNN的雛形LeNet:
從結(jié)構(gòu)上來,CNN繼承了視覺皮層中對信號處理“層”的概念,雖然不是那么的100%的吻合,但是CNN的初級層往往用來做“邊界檢測”這樣的簡單的特征提取,而在深度層重新組合初級層的信息成為抽象的再表達(Representation),最后交給事件的發(fā)生的相關(guān)概率歸納出事物的本質(zhì)。
另外,一個比較不太準(zhǔn)確的趨勢是神經(jīng)元的數(shù)量隨層的深度逐漸減少,但是單個神經(jīng)元的粗壯程度(輸入數(shù)量)隨層的深度逐漸增加。視覺皮層也具有相似的規(guī)律,V1的數(shù)量多,但是結(jié)構(gòu)比較簡單,但到了V4/V5,鏈接變得很復(fù)雜,但占的區(qū)域卻比V1小的多。
然而,這些都不是做電路的人重點。
對于硅工們而言,CNN獲得巨大成功的原因在于:它極大地節(jié)省了神經(jīng)網(wǎng)絡(luò)的硬件開銷,使神經(jīng)元為單位作加速器成為了可能。
(1) CNN定義了一種更高能效的元操作——卷積核
關(guān)于卷積是什么,大家可以去參考一篇《一文讀懂卷積神經(jīng)網(wǎng)絡(luò)》(廣泛地轉(zhuǎn)載于各大公眾號間),下圖是我目前看到的最形象的卷積描述。
該圖片源自網(wǎng)絡(luò),感謝原gif作者
其本質(zhì)就是對于一個區(qū)塊,判斷和自己系數(shù)組成的“基”區(qū)塊的相似程度,得到的分?jǐn)?shù)越高就越相似。這樣,當(dāng)一種“基區(qū)塊”被賦予一種特征是,即使用于整張圖片的特征提取,他的系數(shù)也是固定的,因此大量的系數(shù)加載操作可以被省略。同時,一個固定大小的“卷積核”成為了比“乘累加”更高階、更高效的原子操作,在現(xiàn)代計算機體系結(jié)構(gòu)中,實現(xiàn)越復(fù)雜,但操作越固定的加速器,其效率和速度的提升也就越大。
(2) Pooling —— 是垃圾就要扔掉
CNN網(wǎng)絡(luò)的另一個巨大貢獻就是在卷積層和層之間,設(shè)置了一個”垃圾箱“,把上一層產(chǎn)生的無效信息都扔掉,避免了超大規(guī)模的數(shù)據(jù)傳輸和存儲。大家把這叫做Pooling,我又要來吐槽那個中國人給他取了個”池化“的名字,雖然我也找不到更好的名字,但根本無法幫助理解。Pooling的策略很多,最常見的是max pooling就是留個最大的,然后又其他都扔掉。
(3) “亂擼”? (ReLU)
LeNet后期發(fā)展到AlexNet后,激活函數(shù)也從sigmoid變成了ReLu,他們的圖形曲線大概如下所示。用腳趾頭也知道,Relu操作的實現(xiàn)就是把符號位為負(fù)置0就好了。至于sigmoid么,傳承自經(jīng)典機器學(xué)習(xí)回歸理論,是e指數(shù)的除法操作,編譯后簡直就是一場噩夢,我們先把他當(dāng)作一個古老的神話就好了。
以上種種硬件實現(xiàn)的簡化,加上CNN的巨大勝利,都當(dāng)讓硅工們看到了直接從電路角度優(yōu)化的角度切入人工智能芯片的可能。但是,也發(fā)現(xiàn)了一個問題,傳統(tǒng)的硬件加速的算法往往是做死的,比如橢圓加密,浮點乘除等等。但是CNN的元操作——卷積核——雖然模式固定,但是其每一層的卷積核數(shù)量和層數(shù)卻是紛繁復(fù)雜,固定的硬件并不能實現(xiàn)網(wǎng)絡(luò)的可塑性(structual plasticity)?
那該怎么辦?下一次,如何利用具有高度可編程性的CPU來配置不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)——計算機的”形與令“。就到這里,且聽下回分解。
特別鳴謝復(fù)旦大學(xué)腦芯片研究中心提供技術(shù)咨詢,歡迎有志青年報考。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。