本视频重点介绍了查找表优化功能,该功能可为sigmoid函数生成高效的查找表,sigmoid函数是深度学习网络中使用的关键激活函数。然后比较Arduino Due上的相对加速比®和意法半导体®discovery board使用生成的代码进行硬件在环仿真。
查找表是嵌入式设计的关键构造,通常用于加速算法某些函数的运行时执行。例如,复杂的trig函数通常被更高效的LUT实现所取代。
让我们尝试一个简单的实验——将相同的原理应用于sigmoid函数,以研究我们如何加速深度学习推理性能,尤其是在边缘。
sigmoid函数是神经网络的关键构建块,是深度学习网络中常用的非线性激活函数之一。
这里我们有一个简单的Simulink子系统,金宝app它对sigmoid函数进行建模。我将使用Lookup Table Optimizer应用程序生成最佳LUT,指定输入和输出数据类型。因为这是一个有界函数,所以我可以指定输出的界,最后指定输出的公差为1%。
一旦优化问题得到解决,我们可以查看比较图,以验证LUT近似的误差是否在我们指定的公差范围内。
现在作为下一步,让我们从sigmoid函数和生成的LUT生成C代码,并将其部署到cortex M平台,如Arduino板。
我们使用硬件在环仿真,使用Simulink的输入运行生成的代码。在这种模式下运行代码会有一些开销,但这仍然可以很好地比较相对执行速度。金宝app
从执行配置文件中可以看出,Arduino上的LUT速度快2.5倍。我在基于Cortex M7的STMicro discovery板上重复了相同的测试。下面的图显示了不同数据类型的查找表的相对加速。
事实上,如果您可以在所有神经元之间共享查找表近似值,这可以放大,从而进一步将执行速度降低几个数量级。你可以用其他激活函数做同样的实验,比如双曲正切函数。
要了解有关在设计中优化LUT的更多信息,请参阅视频下面的其他链接。
您还可以从以下列表中选择网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家/地区网站未针对您所在地的访问进行优化。