1.1 神经网络的结构
经过几年的发展,神经网络的应用领域已经非常广泛。没有一种硬件架构能够支持所有的神经网络,从能效比角度来看也是如此,因为不同领域的神经网络的结构可能差异较大,所以设计硬件加速器架构时应该对某个或者某类应用领域有所侧重。当然,也不应该走向另外一个极端,即仅支持某个特定的神经网络。
神经网络算法日新月异,演进迅速。专用性过强会大大增加项目风险,虽然硬件架构支持所应用领域的主流神经网络,但也要对算法留有一定的演进空间。这需要对神经网络进行抽象和总结,找出共性并实现。对神经网络进行抽象和总结,可从以下几个方向入手。
❑浏览目标领域及其邻域的神经网络,了解其功能、结构、异于其他网络的关键点,对神经网络进行分类。
❑对于目标领域的神经网络进行进一步分析,掌握其网络结构并分类总结,了解数据流向,对整体所需算力、参数量进行统计,对带宽需求做到心中有数。
❑对于目标领域的神经网络,找到不同网络中重复出现的基本块,抽取其计算过程、数据流向等信息。
❑对于目标网络中的基本块进一步分析,对具体运算细节进行归纳。
❑对于归纳出来的算法细节,根据需要挑选出要实现的部分算法之后,考虑硬件架构的细节。
本书将重点介绍图像相关的神经网络加速器的设计,即具有图像识别、目标检测、语义分割等功能的神经网络。我们可以将这些神经网络的结构分成以下几类。
第一类是直筒形结构的神经网络。顾名思义,这类神经网络的结构较单一,基本没有分支、循环等结构,是最传统的CNN(Convolutional Neural Network,卷积神经网络)。神经网络的输入到输出结构很简单,像一个直筒,数据传递的路径始终只有一个。AlexNet、GoogleNet、MobileNet等都属于这类神经网络。
第二类是并行结构的神经网络。这类神经网络包括单网络内多分支并行和多网络并行两种。对于具有多网络并行结构的神经网络,不同并行分支网络可能是同构的,也可能是异构的。对于同构子网络之间的参数,可能是复用的,也可能是不复用的。DeepID属于这类神经网络。
第三类是级联结构的神经网络。和并行结构的神经网络类似,这类神经网络一般也由多个子网络组成,区别在于级联结构的神经网络中,各个子网络级联而成,下一级网络需要使用上一级网络的输出结构。CRAFT(Character Region Awareness For Text detection,字符位置可感知的文本检测)就属于这类神经网络。
第四类是并串混合结构的神经网络。在整体网络的子网络之间,既有并联又有串联,结构复杂。StuffNet、Attention-Net、MR-CNN、Multipath属于此类网络。
除了上述几种类型,还有很多神经网络需要仔细研究,比如以R-FCN(Region-based Fully Convolutional Net,基于区域的全卷积网络)为代表的Faster RCNN系列、以RestNet为代表的具有Skip结构的神经网络以及具有Inception结构的神经网络、全卷积网络等。从硬件架构的角度,我们不需要记住所有的神经网络,只需对具有代表性的神经网络反复钻研、仔细分析,确保最后的硬件实现是和算法等价的。尤其是现阶段神经网络的可解释性机制尚不清晰,如果硬件实现和算法不一致,有可能差之毫厘,谬以千里。