脑芯编 | 窥脑究竟,结网造芯(三)

有了神经元,知道了怎么把神经元连成网络,这个系列终于进入了主题——怎么实现神经网络。如果在这个问题上加一个条件,那就是“怎样用芯片实现神经网络的计算”?

 

在回答这个问题以前,让我们先去拜访两位长者——Alan Turing和John Von Neumann,目前大家公认的计算机之父。话说前者才是真的“苟利国家生死以,岂因祸福避趋之”,详见卷福主演的奥斯卡获奖电影《模仿游戏》。



Turing-Von-Neumann架构

为了表达对大师的尊敬,我起了个很干脆的标题。大师之所以是大师,是因为他们定义了在80年前定义了通用计算机的数学模型和体系结构。在这过去的80年里,任何试图推翻这些结构的“投机”分子几乎都没什么好下场。但是,总有人希望推翻这个架构。先简单的描述下两位长者干了什么。

 

Alan Turing在1936年提出了一种具有普适性的逻辑计算模型,证明通过有限状态机完成输入数据的操作,可以实现任意复杂的逻辑运算。图灵机本身描述的场景在现在看来已经没什么意义,但是他第一次完整的定义普适计算机体系机构——一卷很长很长的带子(infinite lengthtape)通过一个有磁头(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)  放弃冯诺依曼架构,完全分布式硬件,像“数据流“一样的风骚走位。

 

这三个选项都有不错的代表,我们慢慢来。



入门
暂无评论
暂无评论~
返回顶部