¿Es posible ejecutar y entrenar una red neuronal en un microcontrolador de 8 bits?

11

Recientemente leí sobre redes neuronales en entornos restringidos (en particular, Implementación de una red neuronal en un microcontrolador económico de ocho bits ) y sus aplicaciones a dispositivos IoT (por ejemplo, regresión para predecir cosas basadas en entradas de sensores, etc.).

Esto parece ideal para aplicaciones simples donde el procesamiento no es crítico con el tiempo, y los datos a procesar serán relativamente poco frecuentes. Sin embargo, investigaciones adicionales sugieren que entrenar una red neuronal en un entorno con recursos limitados es una mala idea (vea la respuesta a ¿Es posible ejecutar una red neuronal en un microcontrolador? ).

¿Esto todavía se aplica al enfoque de Cotton, Wilamowski y Dündar que relacioné? ¿Sería necesario entrenar una red diseñada para un uso bajo de recursos en un dispositivo más potente en mi red IoT?

Por contexto, si tuviera un sensor que transmite la configuración de calor, estoy considerando una red neuronal como se describe en el documento para predecir la configuración deseada de la caldera en función de eso y la hora del día, etc. La capacitación sería útil para cambiar la red neuronal salidas basadas en más datos proporcionados por el usuario. Esta pregunta de Quora describe bien un escenario similar y discute los detalles de implementación para una red neuronal, pero mi pregunta se centra más en si funcionaría la red en el actuador.

Aurora0001
fuente
Curiosidades, ¿tiene la intención de ejecutar una red neuronal en cada nodo de sensor / actuador o en algún "cerebro" (semi) centralizado (entonces, por supuesto, la restricción de 8 bits no se aplicaría necesariamente)?
Ghanima
@Ghanima si es posible, me gustaría hacerlo en el nodo del actuador para guardar la capa adicional de complejidad, aunque no estoy seguro de si eso funcionaría con las limitaciones limitadas.
Aurora0001
@ Aurora0001 Es posible que el controlador particular que ubique aquí no sea adecuado para entrenar su NN, pero existen esfuerzos concertados en el mundo de la visión por computadora para hacer exactamente eso. Si está tratando de encontrar un microcontrolador con una arquitectura adecuada para tales tareas, le sugiero que busque en las empresas que desarrollan este tipo de hardware para la industria de la visión por computadora. Estoy seguro de que algunos de ellos pueden reutilizarse y adaptarse a sus necesidades. Un buen lugar para comenzar
grldsndrs
@grldsndrs fantástico, gracias por la referencia. Siéntase libre de publicarlo como una respuesta adicional si cree que es suficiente (ciertamente estaría contento con eso)
Aurora0001
1
Un procesador de 8 bits puede hacer cualquier cosa que un procesador de texto más amplio puede hacer, solo quizás (depende de la tarea) más lentamente. Sin embargo, los procesadores de 8 bits tienden a tener un espacio de direcciones nativo limitado, lo que significa que deben usar medios indirectos para administrar memorias muy grandes, y en el caso de los microcontroladores tienden a enviarse con cantidades comparativamente pequeñas de memoria en chip. Cada vez hay menos diferencias de costos más allá del extremo más bajo: el principal impulsor del costo de MCU es posiblemente recuerdos, no el ancho de ALU.
Chris Stratton el

Respuestas:

9

Según el primer artículo , correr no es un problema. Ese era el propósito. Solo hay una limitación en los pesos máximos:

Actualmente, la limitación de la arquitectura integrada en este microcontrolador está limitada solo por el número de pesos necesarios. La red neuronal está actualmente limitada a 256 pesos. Sin embargo, para la mayoría de las aplicaciones integradas, este peso de 256 no debería limitar el sistema.


En cuanto a la capacitación, hasta donde entiendo la implementación descrita, el controlador PIC recibe parámetros de una fuente externa.

Los cálculos hacia adelante de la red neuronal se escriben de manera que cada neurona se calcule individualmente en una serie de bucles anidados. El número de cálculos para cada bucle y los valores para cada nodo se almacenan en una matriz simple en la memoria.

[...]

Estas matrices contienen la arquitectura y los pesos de la red. Actualmente, para fines de demostración, estas matrices están precargadas en el momento en que se programa el chip, pero en la versión final esto no sería necesario. El microcontrolador podría modificarse fácilmente para que contenga un cargador de arranque simple que haga uso del puerto serie RS232 integrado que recibiría los datos de los pesos y la topografía desde una ubicación remota. Esto permitiría modificar los pesos o incluso toda la red mientras el chip está en el campo.

Sospecho que el entrenamiento también se realiza externamente.

El documento también proporciona referencias para los entrenadores de redes neuronales que probablemente se usaron para determinar los valores preprogramados en la memoria del PIC.

Ahora, he examinado el primero que describe arquitecturas de red y algoritmos para usar con ellos. Pero el software Neural Network Trainer utilizado aquí está implementado en MATLAB.

Actualmente, hay muy poco software de entrenamiento de redes neuronales disponible que capacitará a las redes completamente conectadas. Por lo tanto, se ha desarrollado un paquete con una interfaz gráfica de usuario en MATLAB para ese propósito. Este software permite al usuario ingresar fácilmente arquitecturas muy complejas, así como pesos iniciales, parámetros de entrenamiento, conjuntos de datos y la elección de varios algoritmos potentes.

Tengo que mencionar que las redes completamente conectadas tienen un número de pesos más bajo para una misma tarea que una arquitectura capa por capa. Eso lo hace más adecuado para microcontroladores.

No soy un experto en redes neuronales y es bastante complejo, así que puedo estar equivocado, pero según estos documentos, diría que el enfoque de Cotton, Wilamowski y Dündar requiere una plataforma externa y más poderosa para realizar la capacitación.


Acerca de ejecutar una red neuronal en un microcontrolador, ST Microelectronics acaba de anunciar un kit de herramientas STM32Cube.AI: Convierta redes neuronales en código optimizado para STM32 para convertir redes neuronales pre-entrenadas de bibliotecas populares a la mayoría de sus MCU STM32.

Bence Kaulics
fuente