腦芯編:窺腦究竟,結網造芯
9月份時,機器之心曾發文章宣布「機器之心」和「矽說」將共同推出系列文章「腦芯編」,揭秘類腦晶元的過去、如今與將來。本文是此專題的第二篇,窺腦究竟,結網造芯。
〈二〉
幾重卷積幾重生
蜘蛛結網,是為了捕食昆蟲;
蜘蛛俠結網,是為了拯救世界;
碼農 Data Scientist (~ds~) 結網,是為了——
換一個角度看世界,
英語叫做: Representation。
如果你只想知道一個關於神經網路的常識,我認為上面這個單詞是最不應該錯過的。就像每個學模擬電子學的人,其實歸根結底就是學了兩個字——放大。
話接上回,我們說到,通過一系列乘累加和非線性激活函數,我們就可以實現一個神經元。而關鍵的問題就是如何把神經元們連起來。解決這個問題之前,我們先要明白神經網路的作用——通過一系列線性和非線性的變化重新將輸入信息映射成為表達事物的本質的簡化特徵。
如果你覺得上面一句的每個字都認識,卻不知道他在說什麼,那麼我們來看一個經典的例子——人類的視覺皮層(Visual Cortex)。
視覺皮層, 一場生物與 AI 的偉大握手
碼農老師的生物課又來了……
你有沒有想過當你看到生命中一個重要的人的時候,比如說基友(碼農怎麼會有妹紙?),你是看到是他/她的鼻子,眼睛,臉上的痘痘,昨晚熬夜的黑眼圈……但是這些東西最後都只留下了一個映像——我面基了。可是你有沒有想過從你看到圖像,到你得到的結論,無數的信息都已經沒有過濾,你的腦子完成了一次將 4K3D 圖像壓縮成兩個字的過程,到底發生了什麼事?
這個過程就是從信息經過視覺皮層(神經網路??)的過程。從前到後,他經過了幾站:
(1)始發站——視網膜,比較像是一個電子系統的感測器,用來接收信號;
(2)快速交流道——LGN,他是將左右眼看到的信號重新編碼後傳遞給視覺皮層,像是一個電子系統中的主控處理器與匯流排(請原諒我不說 LGN 的中文,因為說了你也記 不住);
(3)第一站——主視覺區 V1,第一層神經網路,司「邊界檢測(Edge Detection)」一職,這可能是神經元數量最豐富的一個區域;
(4)第二站——次視覺區 V2,第二層神經網路,司「基礎特徵提取」一職,歸納視覺信號的形狀、大小、顏色、頻率……
(5)第三站——V3,司「位置「,也是個過渡區,一條線上你有些站你不知道為什麼會停~
(6)V4 分支終點站 1——換乘 inferotemporal Cortex,近深度智能 TE 區,司」目標識別「~~~終於終於我認出基友來了,撒花~~
(7)V5 分支終點站 2——換乘 Parietal Cortex, 進深度智能 MST 區,司「空間運動分析」。
視覺皮層可能是目前為止人類認識的最透徹的大腦部分,不過,好像建立在無數的活體實驗上。。。即使如此,還是有很多未知的空間亟待生物學家探索。
不知道讀到這裡,對人工智慧略有了解的你有沒有覺得這堂生物課在哪裡見過?先做邊界檢測,在再做特徵提取,在進行分類識別,這不就是大名鼎鼎的
C N N
LeNet/VGG/AlexNet
卷積,讓加速成為一種可能
其實在神經網路領域裡,目前為止唯一能算的上前所未有成功的就是 CNN(Convolution Neural Network,卷積神經網路)。最早的 CNN 可以追溯到 98 年 Yann LeCun 的一篇如何識別手寫數字的 paper,這裡出現了第一個 CNN 的雛形 LeNet:
從結構上來,CNN 繼承了視覺皮層中對信號處理「層」的概念,雖然不是那麼的 100% 的吻合,但是 CNN 的初級層往往用來做「邊界檢測」這樣的簡單的特徵提取,而在深度層重新組合初級層的信息成為抽象的再表達(Representation), 最後交給事件的發生的相關概率歸納出事物的本質。
另外,一個比較不太準確的趨勢是神經元的數量隨層的深度逐漸減少,但是單個神經元的粗壯程度(輸入數量)隨層的深度逐漸增加。視覺皮層也具有相似的規律,V1 的數量多,但是結構比較簡單,但到了 V4/V5,鏈接變得很複雜,但占的區域卻比 V1 小的多。
然而,這些都不做電路的人重點。對於硅工們而言 CNN 獲得巨大成功的原因在於
它極大地節省了神經網路的硬體開銷
使神經元為單位作加速器成為了可能
(1)CNN 定義了一種更高能效的元操作——卷積核
關於卷積是什麼,大家可以去參考一篇《一文讀懂卷積神經網路》(廣泛地轉載於各大公眾號間),下圖是我目前看到的最形象的卷積描述。
該圖片源自網路,感謝原 gif 作者
其本質就是對於一個區塊,判斷和自己係數組成的「基」區塊的相似程度,得到的分數越高就越相似。這樣,當一種「基區塊」被賦予一種特徵是,即使用於整張圖片的特徵提取,他的係數也是固定的,因此大量的係數載入操作可以被省略。同時,一個固定大小的「卷積核」成為了比「乘累加」更高階、更高效的原子操作,在現代計算機體系結構中,實現越複雜,但操作越固定的加速器,其效率和速度的提升也就越大。
(2)Pooling——是垃圾就要扔掉
CNN 網路的另一個巨大貢獻就是在卷積層和層之間,設置了一個」垃圾箱「,把上一層產生的無效信息都扔掉,避免了超大規模的數據傳輸和存儲。大家把這叫做 Pooling,我又要來吐槽那個中國人給他取了個」池化「的名字,雖然我也找不到更好的名字,但根本無法幫助理解。Pooling 的策略很多,最常見的是 max pooling 就是留個最大的,然後又其他都扔掉。
(3)「亂擼」?(ReLU)
LeNet 後期發展到 AlexNet 後,激活函數也從 sigmoid 變成了 ReLu,他們的圖形曲線大概如下所示。用腳趾頭也知道,Relu 操作的實現就是把符號位為負置 0 就好了。至於 sigmoid 么,傳承自經典機器學習回歸理論,是 e 指數的除法操作,編譯後簡直就是一場噩夢,我們先把他當作一個古老的神話就好了。
以上種種硬體實現的簡化,加上 CNN 的巨大勝利,都當讓硅工們看到了直接從電路角度優化的角度切入人工智慧晶元的可能。但是,也發現了一個問題,傳統的硬體加速的演算法往往是做死的,比如橢圓加密,浮點乘除等等。但是 CNN 的元操作——卷積核——雖然模式固定,但是其每一層的卷積核數量和層數卻是紛繁複雜,固定的硬體並不能實現網路的可塑性(structural plasticity)?
那該怎麼辦?下一次,我們先來回顧下 CPU 的發展歷程,看看現代處理器的」形與令「。
「幾重卷積幾重生」——你看懂神經網路的卷積了?還有「重生」呢~限於篇幅,只能等番外了。
就到這裡,且聽下回分解。
〈三〉
夢裡不問形與令
世界上有兩種管家
一種是 Batman 的 Alfred
能服務能做飯能偽裝能打架
狠起來超人也不是干不過
另一種是天朝的大內總管
掌印秉筆,啥事不會
老大又吩咐了就去傳個話
你腦子裡的 CPU 是哪一種?
有了神經元,知道了怎麼把神經元連成網路,這個系列終於進入了主題——怎麼實現神經網路。如果在這個問題上加一個條件,那就是「怎樣用晶元實現神經網路的計算」?
在回答這個問題以前,讓我們先去拜訪兩位長者——Alan Turing 和 John Von Neumann,目前大家公認的計算機之父。話說前者才是真的「苟利國家生死以,豈因禍福避趨之」,詳見卷福主演的奧斯卡獲獎電影《模仿遊戲》。
圖靈-馮-諾依曼架構
為了表達對大師的尊敬,我起了個很乾脆的標題。大師之所以是大師,是因為他們定義了在 80 年前定義了通用計算機的數學模型和體系結構。在這過去的 80 年裡,任何試圖推翻這些結構的「投機」分子幾乎都沒什麼好下場。但是,總有人希望推翻這個架構。先簡單的描述下兩位長者幹了什麼。
Alan Turing 在 1936 年提出了一種具有普適性的邏輯計算模型,證明通過有限狀態機完成輸入數據的操作,可以實現任意複雜的邏輯運算。圖靈機本身描述的場景在現在看來已經沒什麼意義,但是他第一次完整的定義普適計算機體系機構——一卷很長很長的帶子(infinite length tape)通過一個有磁頭 (head) 的有限狀態表 (finite state table) 進行讀取/處理/改寫的機器。
圖靈機:帶子、磁頭和狀態機
9 年後,Von Neumann 把帶子改叫做「Memory」,狀態表叫做「CPU」,磁頭改叫做「Connection (Bus)」,換了一副圖,就有了史稱「馮諾依曼架構」的現代計算機體系結構。
教科書上會說這個結構有啥特點,這是讓你背的。其實很簡單,圖靈-馮諾依曼架構最大的特點是把計算任務分為了 2 個部分——數據存儲 (memory) 和數據處理 (processor)。處理器幾乎不能存數據,存儲器幾乎不能算數據。兩部分用一種連接方式 (bus) 按一定規則通信。涇渭分明的特點讓馮諾依曼架構處理事情起來特別有條理,就像「男主外女主內」的家庭角色分配一樣,在硬體資源極度受限的情況下,成為了自動化發展的中堅力量。
馮諾依曼架構有一個升級版,叫做哈佛 (Harvard) 架構,把存儲空間分為了指令 (instruction) 存儲和數據存儲,對應不一樣的操作。目前的主流嵌入式微處理器基本採用這個架構,但 Anyway 這並不重要。
馮諾依曼架構在過去的 60 年稱霸人間,如果這項專利申請成功的話,這一定是史上最賺錢的專利。可是,馮諾依曼架構在經歷了各種法院撕逼後,被判定為一項沒有收益人的專利……(Youyou Tu 和青蒿素在這面前簡直不值一提)
成也蕭何 – x86 的不可一世
雖然馮老爺子在自己的架構下發明了人類第一台計算機,ENIAC 和 EDVAC,但諾依曼的真正崛起還是要歸功於 x86。如果你不知道 80x86 是什麼,那只能說明我們已經有代溝了,嗯,很深深的代溝。
Intel 自 1978 年推出 8086 後,x86 體系架構就一直是電腦(上到伺服器,下到平板電腦)核心處理晶元的不二選擇。
Intel x86 i7 版圖
順便做個普及,在馮諾依曼架構下,每個處理器會幹的事情是有限制的,通常這個限制叫做指令集。它規定 CPU 的基本操作,沒有指令集 (instruction set) 定義的複雜操作可以通過基本操作的組合來完成,比如指令集里沒有乘法,那我們可以通過一定數量的加法來完成。
在馮老爺子的機構里,誰的指令集越大,可以訪問的存儲空間越大,誰就越牛逼。x86 的指令集從 8086 到 i7 不斷擴張與膨脹,最終成為了一個會算雙精單精、矢量圖像,多核多線程多 Cache 的巨無霸。簡單的說,到 2013 年的時候,史上最強 core 已經無所不能了。可是歷史不斷在重演一幕就是,當絕頂高手號稱要獨孤求敗的時候,不知道哪裡竄出來的毛小夥子可能一個起手式就把你撂倒了。聖經里大衛王這麼幹掉了 Goliath,《倚天屠龍記》里,張無忌這麼稱霸了光明頂。
那誰是 x86 的張無忌呢?
移動設備,RISC 的春天
獨孤求敗的 x86 其實有個致命的缺陷——能效,通俗地說就是「做一次」要花費的能量。可是每塊肌肉都很發達的 muscleman 總是要比一般人多吃幾碗飯吧。我們現在能買到的 i7 即使在省電模式也要消費超過 47W 的功耗。本省 47W 不算什麼,但是蘋果喬大叔的出現,讓 47W 一下子很麻煩。
Iphone/Ipad 和一系列手持的充電設備對瓦級以上的功耗是非常敏感的!x86 的功耗導致它「充電 2 小時使用 5 分鐘」的悲慘結局。肌肉男瘦身變成筋肉男的必然的命運。
這時,x86,或者說是 intel 的張無忌出現了—ARM Cortex RISC. 所謂 RSIC 就是精簡指令集(Reduced Instruction Set),他能幹的事情很有限,但是他的功耗低。X86 在其巔峰時期無數次地戰勝過 RISC,以至於 ARM 出現時並有沒足夠重視他,那時候 Intel 還在和 AMD 搶 64 位 x86 的主導權呢。
為什麼無數次敗下陣來的 RISC 可以最終成功呢?因為這次,他尋找到了一個 partner——加速器。在移動端的應用設備里,其實也有很對需要強大計算消耗的進程,這是 RISC 本省無法勝任的。但是,實際應用上,往往這些進程是有固定的模式和使用場景的。比如手機在通話時的語音編解碼,拍照時的圖像 處理(俗稱「美顏」)和無線通信是的編解碼。對於這樣一個經常重複,且模式固定的高通量計算,可以在匯流排上加入一個專用模塊(ASIC)加速,在處理專用任務是 ASIC 的能效又比通用處理器高很多。下圖就是 ARM 有名的產品之一 A9,除了 CPU 外,它的浮點與超標量計算(NEON)都被移到了 CPU 外(一般來說,這不能算作加速器)
這就是開頭的那個故事,你每天充的電不夠「超人」吃的,與只能換個塊頭小,但是能夠指揮其他人的總管。
敗也蕭何 – 馮諾依曼瓶頸
「涇渭分明,靠匯流排連」的馮諾依曼架構帶來了單核/少核時代計算機的春天,但馮諾依曼架構的致命缺陷——馮諾依曼瓶頸——也悄悄地增長。隨著摩爾定律的發展,遠距離的搬移大規模數據早已取代了計算本身,成為制約高效計算的重要瓶頸,對於 x86 結構,有太多指令可以直接穿過匯流排訪問存儲空間。
在 RISC+加速器的體系結構里,匯流排作為「總管」和「內務府」、「上書房」、「御膳房」間的橋樑,更是好不吃緊。當瓶頸出現在通信上時,馮諾依曼架構就體現出了它垂垂老矣的一面。
這個問題,在實時處理的人工智慧場景下顯得格外突出,信號從入到出,都是按照是數據流 (Data flow) 的傳輸模式一幀一幀地來。這一特徵在類腦的神經網路實現中就更加明顯。如果每一個卷積的係數都要去雲深不知處的存儲海洋里去尋找,那神經元的處理效率會非常低。簡單地說:
誰腦子 TM 的是一半純記憶
一半純分析的呢?
腦子么,都是左右開工的。邊走邊忘,雁過留痕,卻也是舊相識,恢復不出來一個一毛一樣的。
所以,擺在類腦芯面前的路有三條:
(1)採用馮諾依曼經典架構,把神經元計算寫在指令集里,反正是超人,技多不壓身;
(2)採用 RISC+神經元/神經網路加速器,給「總管」再開個府唄;
(3)放棄馮諾依曼架構,完全分布式硬體,像「數據流「一樣的風騷走位。
這三個選項都有不錯的代表,我們慢慢來。
夢裡不問形與令,你知道計算機形(體系結構)和令(指令集)了么?
※人工智慧法官:科學家開發出用於審訊的計算機程序
※犯罪技術將與人工智慧一同進化
※消滅網路色情?人工智慧並不能做到
※揭秘微軟量子計算研究:拓撲量子計算機
※Emotech:如何打造一款類人腦情感互動機器人
TAG:機器之心 |