¿Es posible ejecutar una red neuronal en un microcontrolador?

23

¿Podría implementar una red neuronal simple en un microprocesador como el Arduino Uno para usar en el aprendizaje automático?

Jordán
fuente
2
Por curiosidad, ¿por qué quieres hacerlo?
Josh Vander Hook
1
No soy un experto en esta área, pero lo último que escuché fue que la capacitación del NN se realizó en simulación, y el NN se implementó en un chasis, y probablemente uno con un controlador de nivel superior al Arduino.
Josh Vander Hook
1
Bueno, no tiene que vincularlo, solo entrena el NN en simulación, luego extrae la topología del NN, incluidos los pesos de borde y los enlaces de nodo. Luego programa el NN (es solo una ecuación que tiene que resolver). Creo que parece que se necesita un poco más de investigación antes de emprender este proyecto.
Josh Vander Hook
1
Probablemente valga la pena mencionar que tengo 16 años y este es mi trabajo principal de electrónica para la escuela secundaria.
Jordan
1
En ese caso, supongo que vas más allá del deber al intentar implementar esto.
Joe Baker,

Respuestas:

10

¿Podría entrenar una red neuronal en un microcontrolador? Quizás, pero por favor no lo intentes. ¿Podría usar un NN para clasificación, etc. en un microcontrolador? Claro, siempre que pueda calcular el resultado de propagar los valores de nodo y borde y manejar las multiplicaciones.

Josh Vander Hook
fuente
1
Estoy de acuerdo. Suponiendo que pueda obtener una red neuronal de la complejidad requerida para entrenar en el Arduino, todavía estará preparado para una cantidad increíble de tiempo de entrenamiento. El entrenamiento externo de la NN es el camino lógico a seguir.
fgb
23

Ciertamente es posible implementar esto en un Arduino. Aquí hay 3 bibliotecas Arduino que implementan redes neuronales:

La complejidad de la red que el Arduino puede manejar es una pregunta separada, especialmente cuando se trata de capacitación: decenas de miles de iteraciones sobre datos de capacitación. El entrenamiento en una máquina rápida y luego copiar los pesos de las neuronas al Arduino será una forma más inteligente de desarrollar su implementación.

Ian
fuente
5

Sí. Si solo lo ejecuta en modo de avance y realiza su entrenamiento fuera de línea en otro lugar:

Programé un ANN de avance de 3 capas (5-5-2) en un Arduino UNO. Funcionó con un robot móvil. Cada vez que el robot golpeara algo, volvería a entrenar la red. La porción de alimentación de la red se ejecutó en tiempo real; mientras que el entrenamiento de propagación hacia atrás tomó del orden de ~ 5 a 20 segundos. Supongo que podría recortar el tamaño de la red, así como el juego con los parámetros para que se ejecute un poco más rápido, pero si planea hacer propagación hacia atrás en un Arduino, creo que sería demasiado lento.

Algunas ideas para acelerar las cosas incluyen:

  • Use punto fijo vs punto flotante (para MCU sin una FPU)
  • Use una MCU que tenga una FPU
  • tanh
  • Hacer que la fase de entrenamiento ocurra fuera de línea en una PC

He aquí una rápida escritura hasta que hice de la red.

Yahma
fuente
3

Sí, de hecho, es posible incrustar redes neuronales en microcontroladores. Hay muchos ejemplos de esto en la literatura científica, pero puedo citar un ejemplo sorprendente de lo que se puede hacer con un MCU muy simple si eres lo suficientemente inteligente. En Evolutionary Bits'n'Spikes , los autores describen la implementación de una red neuronal con picos en tiempo real Y un algoritmo genético para entrenarlo, a fin de controlar un robot de rueda diferencial. Todo el código se ejecuta en una pequeña MCU PIC16F628 de 4MHz integrada en el robot Alice de 1 pulgada cúbica.

abey
fuente