本视频重点介绍了查找表优化功能,为sigmoid函数生成高效查找表,该函数是深度学习网络中使用的关键激活函数。然后我们比较Arduino应得的相对加速®和意法半导体®利用发现板生成的代码对硬件进行循环仿真。
查找表是嵌入式设计的关键构造,通常用于加速算法的某些函数的运行时执行。例如,复杂的三角函数经常被更有效的LUT实现所替代。
让我们来做一个简单的实验——将同样的原理应用到sigmoid函数上,来研究如何加速深度学习推理的性能,尤其是在边缘部分。
s型函数是神经网络的关键构造单元,也是深度学习网络中常用的非线性激活函数之一。
这里我们有一个简单的Simulink子系统,万博1manbetx它对sigmoid函数进行建模。我将使用查找表优化器应用程序来生成一个最佳的LUT,指定输入和输出数据类型。因为这是一个有界函数,我可以指定输出的界限最后输出的公差为1%。
一旦优化问题得到解决,我们可以查看比较图来验证LUT近似的误差是否在我们指定的容忍范围内。
接下来,让我们从sigmoid函数和生成的LUT生成C代码,并将其部署到像Arduino板一样的cortex M平台上。
我们使用半实物仿真来运行来自Simulink的输入生成的代码。万博1manbetx在这种模式下运行代码会有一些开销,但这仍然可以很好地比较相对的执行速度。
正如你可以从执行个人资料中看到,该LUT是2.5×在Arduino的速度更快。我反复在基于Cortex-M7意法半导体发现板相同的测试。这里是表示相对加速用不同的数据类型的查找表的曲线图。
事实上,如果您可以在所有神经元之间共享查找表近似值,那么这种情况会进一步扩大,进一步降低执行速度的数量级。你可以用其他的激活函数做同样的实验,比如双曲正切。
要了解更多关于优化LUTs的设计,请参考视频下面的其他链接。
您也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。