雷锋网按:本文作者痴笑,矽说(微信号:silicon_talks)主笔。本文为《脑芯编:窥脑究竟,织网造芯》系列第二篇。
〈二〉几重卷积几重生
蜘蛛结网,是为了捕食昆虫;
蜘蛛侠结网,是为了拯救世界;
码农Data Scientist (~ds~) 结网,是为了——
换一个角度看世界,
英语叫做: Representation。
如果你只想知道一个关于神经网络的常识,我认为上面这个单词是最不应该错过的。就像每个学模拟电子学的人,其实归根结底就是学了两个字——放大。
话接上回,我们说到,通过一系列乘累加和非线性激活函数,我们就可以实现一个神经元。而关键的问题就是如何把神经元们连起来。解决这个问题之前,我们先要明白神经网络的作用——通过一系列线性和非线性的变化重新将输入信息映射成为表达事物的本质的简化特征。
如果你觉得上面一句的每个字都认识,却不知道他在说什么,那么我们来看一个经典的例子——人类的视觉皮层(Visual Cortex)。
视觉皮层, 一场生物与AI的伟大握手
码农老师的生物课又来了……
你有没有想过当你看到生命中一个重要的人的时候,比如说基友(码农怎么会有妹纸?),你是看到是他/她的鼻子,眼睛,脸上的痘痘,昨晚熬夜的黑眼圈……但是这些东西最后都只留下了一个映像——我面基了。可是你有没有想过从你看到图像,到你得到的结论,无数的信息都已经没有过滤,你的脑子完成了一次将4K3D图像压缩成两个字的过程,到底发生了什么事?
这个过程就是从信息经过视觉皮层(神经网络??)的过程。从前到后,他经过了几站:
(1)始发站——视网膜 ,比较像是一个电子系统的传感器,用来接收信号;
(2)快速交流道——LGN,他是将左右眼看到的信号重新编码后传递给视觉皮层,像是一个电子系统中的主控处理器与总线(请原谅我不说LGN的中文,因为说了你也记 不住) ;
(3)第一站——主视觉区V1,第一层神经网络,司“边界检测(Edge Detection)”一职,这可能是神经元数量最丰富的一个区域;
(4)第二站——次视觉区V2,第二层神经网络,司“基础特征提取”一职,归纳视觉信号的形状、大小、颜色、频率……
(5)第三站—— V3,司“位置“,也是个过渡区,一条线上你有些站你不知道为什么会停~
(6)第四站——V4/V5(MT)分支,深度神经网络,各司“色彩/运动”;
(6)V4分支终点站1——换乘inferotemporal Cortex,近深度智能TE区,司 ”目标识别“ ~~~终于终于我认出基友来了,撒花~~
(7)V5分支终点站2——换乘Parietal Cortex, 进深度智能MST区,司“空间运动分析”。
视觉皮层可能是目前为止人类认识的最透彻的大脑部分,不过,好像建立在无数的活体实验上。。。即使如此,还是有很多未知的空间亟待生物学家探索。
不知道读到这里,对人工智能略有了解的你有没有觉得这堂生物课在哪里见过? 先做边界检测,在再做特征提取,在进行分类识别,这不就是大名鼎鼎的
卷积,让加速成为一种可能
其实在神经网络领域里,目前为止唯一能算的上前所未有成功的就是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的元操作——卷积核——虽然模式固定,但是其每一层的卷积核数量和层数却是纷繁复杂,固定的硬件并不能实现网络的可塑性(structual plasticity)?
那该怎么办?下一次,如何利用具有高度可编程性的CPU来配置不同结构的神经网络——计算机的”形与令“。就到这里,且听下回分解。
特别鸣谢复旦大学脑芯片研究中心提供技术咨询,欢迎有志青年报考。