如何设计神经网络
的有关信息介绍如下:希望通过一个物体(机械杆)的运动的轨迹作为神经网络的输入,其若干个相关的机械参数作为网络的输出,对网络进行训练。初步想法有两个:一是分析出运动轨迹按照时序的坐标变化,并利用RNN网络进行训练;二是以运动轨迹的图像为输入,利用卷积网络来分析。目前不是很清晰如何设计网络输出部分,若以多输出的全连接层作为网络最终输出,是否需要将输出数据进行正则化处理呢?求指点。
1. 算法的类型
设计一个硬件平台,首先我们要考虑算法是通用的还是专用的。一般来说,深度神经网络应用主要使用的是专用算法,但也不排除需要一些比较通用的算法作为辅助。在这种情况下,可能我们需要不同的类型的硬件来进行支持。比如我们之前在介绍DSP IP的文章中提到过,目前支持神经网络的DSP IP往往用一个比较通用的处理器实现传统的computer vision算法和控制功能,而用一个专门的convolution加速器实现卷积操作。更进一步,我们还需要看看算法是控制为主(control)和数据运算为主(computation),前者比较适合用CPU来实现,而后者则比较适合采用专用架构。
2. 对灵活性和可扩展性的需求
我们要对应用的灵活性需求做出一个评估,这对于架构设计非常重要。简单来说,需要灵活,可扩展的应用,采用可编程,可配置的处理器实现比较合适;反之,可以用纯硬件电路来实现,已达到最优的效率。有些情况下,灵活性是为了Future-proof,希望硬件平台可以支持未来的未知应用,延长生命周期;而有些时候,灵活性是因为需求中的不确定性(uncertainty),希望可以在需求不清晰的时候尽量覆盖更多的情况(比如支持多种参数的选择);还有一些时候,灵活性是因为对设计和验证能力没信心,希望通过灵活的设计可以在出现bug的时候有绕开的机会。不管怎么说,灵活性是以增加成本,牺牲效率为代价的。对于功耗和成本敏感的应用,over-design和under-design同样可怕。
3.处理性能
确定处理性能指标的重要性不用再强调了。在深度神经网络应用中,一个比较常见的指标是GOPS(Giga Operations Per Second),是指每秒需要完成的操作(包括乘法,加法,访存等)的数量。由于神经网络最主要的运算是MAC(multiply–accumulate),也有时候也拿单位时间的MAC数需求作为性能指标的。处理的性能还可以分为峰值的需求和平均的情况。这对于硬件设计,特别是低功耗相关的设计还是非常重要的。
4. 能耗
功耗是一个应用的关键约束条件,一般可以用峰值能耗(W),峰值电流(A);平均能耗,平均电流来表示。这个指标首先来自应用场景的供电能力和成本要求。对于一个硬件系统来说,各个部分的能耗是需要协调规划的。而这个指标也是芯片设计中的一个重要指导条件。
5.效率
效率指标主要是指能耗效率(消耗单位能量能够进行多少运算)和面积效率(单位的芯片面积支持的运算能力)。在神经网络实现中,常见的能耗效率指标是GOPS/W(每瓦的能量可以支持的GOPS),或者TOPS/W。而面积效率好像没有很统一的指标。
6.实时性需求
实时性也是一个应用的重要约束条件。具体来说实时性还包括两个层面,第一是要求处理的latency尽量短。在这个层面上,无人驾驶汽车的实时性要求就非常高,必须在很短时间内根据sensor的信息做出操作反应;而一般的机器人,移动速度比较慢,就不需要很强的实时性。另一个层面是predictable latency,就是处理延时要求可以预测。对实时性要求高的应用,需要一般需要使用专用处理器和实时操作系统(RTOS)。
7.成本
实现一个应用的成本是多方面的,在之前的文章(脉动阵列 - 因Google TPU获得新生)里
提到了nonrecurring cost(设计 design)和recurring cost(器件 parts)的概念。前者和设计难度以及架构的选择有很大关系,在相同难度的情况下,选择成熟,简单的设计或者IP都可以降低设计成本;后者则主要和产品(比如芯片)的出货量,生命周期等因素有关。对于很多应用来说,成本往往是决定性因素。而降低成本在很多时候比提高性能更有技术挑战。
8. Time to Market
最后,前面说的这些因素都可能被上市时间的要求打败。Google TPU(Google TPU 揭密)就选择一个相对简单的硬件架构和比较平庸的性能优化目标,这和它的部署时间的要求不无关系。