是否可以在 8 位微控制器上运行和训练神经网络?

物联网 智能家居 微控制器 机器学习
2021-06-19 00:30:56

我最近阅读了有关受限环境中的神经网络(特别是廉价的 8 位微控制器上的神经网络实现)及其在物联网设备中的应用(例如基于传感器输入预测事物的回归等)。

这对于处理时间要求不高的简单应用程序来说似乎是理想的,并且要处理的数据相对较少。然而,进一步的研究表明,在资源受限的环境中训练神经网络是一个糟糕的主意(请参阅是否有可能在微控制器上运行神经网络的答案)。

这是否仍然适用于我链接的 Cotton、Wilamowski 和 Dündar 的方法?是否有必要在我的物联网网络中更强大的设备上训练一个专为低资源使用而设计的网络?

就上下文而言,如果我有一个传感器传输热量设置,我正在考虑论文中描述的神经网络,以根据该设置和一天中的时间等预测所需的锅炉设置。训练将有助于改变神经网络的设置输出基于用户提供的更多数据。这个 Quora 问题很好地描述了一个类似的场景,并讨论了神经网络的实现细节,但我的问题更侧重于在执行器本身上运行网络是否可行。

1个回答

根据第一篇论文,运行不是问题。这就是目的。只有最大重量有限制:

目前,对嵌入在该微控制器中的架构的限制仅受所需权重数量的限制。神经网络目前限制为 256 个权重。然而,对于大多数嵌入式应用程序,这 256 个重量不应限制系统。


至于训练,据我了解所描述的实现,PIC 控制器从外部源接收参数。

编写神经网络前向计算,以便在一系列嵌套循环中单独计算每个神经元。每个循环的计算次数和每个节点的值都存储在内存中的一个简单数组中。

[...]

这些数组包含网络的架构和权重。目前,出于演示目的,这些阵列在芯片编程时预加载,但在最终版本中,这不是必需的。微控制器可以很容易地修改为包含一个简单的引导加载程序,它利用板载 RS232 串行端口从远程位置接收重量和地形数据。这将允许在芯片处于现场时修改权重甚至整个网络。

我怀疑培训也是在外部进行的。

该论文还提供了神经网络训练器的参考,这些训练器可能用于确定预编程到 PIC 内存中的值。

现在,我研究了第一个描述网络架构和算法的文章。但是这里使用的神经网络训练器软件是在 MATLAB 中实现的。

目前,可以训练全连接网络的神经网络训练软件非常少。因此,为此目的在 MATLAB 中开发了一个带有图形用户界面的包。该软件允许用户轻松输入非常复杂的架构以及初始权重、训练参数、数据集以及几种强大算法的选择。

我不得不提到,与逐层架构相比,完全连接的网络对于同一任务具有更低的权重数。这使得它更适合微控制器。

我不是神经网络专家,它非常复杂,所以我可能是错的,但基于这些论文,我会说 Cotton、Wilamowski 和 Dündar 的方法需要一个外部的、更强大的平台来执行训练。


关于在微控制器上运行神经网络,ST Microelectronics 刚刚发布了一个工具包STM32Cube.AI:将神经网络转换为 STM32 的优化代码,预训练的神经网络从流行的库转换为大多数 STM32 MCU。