É possível executar uma rede neural em um microcontrolador

23

Você poderia implementar uma rede neural simples em um microprocessador como o Arduino Uno para ser usado no aprendizado de máquina?

Jordânia
fonte
2
Por curiosidade, por que você iria querer?
Josh Vander Gancho
1
Não sou especialista nesta área, mas, pela última vez que ouvi falar, o treinamento do NN foi feito em simulação e o NN foi implementado em um chassi, e provavelmente um com um controlador de nível superior ao do Arduino.
Josh Vander Gancho
1
Bem, você não precisa vinculá-lo, basta treinar o NN na simulação e extrair a topologia do NN, incluindo pesos de borda e links de nós. Então você programa o NN (é apenas uma equação que você precisa resolver). Acho que é necessário um pouco mais de pesquisa antes de você assumir esse projeto.
Josh Vander Gancho
1
Provavelmente vale a pena mencionar que tenho 16 anos e este é o meu principal trabalho em eletrônica no ensino médio.
Jordânia
1
Nesse caso, presumo que você esteja indo além do chamado do dever na tentativa de implementar isso?
Joe Baker

Respostas:

10

Você poderia treinar uma rede neural em um microcontrolador? Talvez, mas por favor não tente. Você poderia usar um NN para classificação, etc. em um microcontrolador? Claro, desde que você possa calcular o resultado da propagação dos valores do nó e da aresta e manipular as multiplicações.

Josh Vander Hook
fonte
1
Eu concordo. Supondo que você possa obter uma rede neural da complexidade necessária para treinar no Arduino, você ainda terá uma quantidade insana de tempo de treinamento. O treinamento externo do NN é o caminho lógico a seguir.
Fev
23

Certamente é possível implementar isso em um Arduino. Aqui estão três bibliotecas do Arduino que implementam redes neurais:

A complexidade da rede com a qual o Arduino pode lidar é uma questão separada, especialmente quando se trata de treinamento - dezenas de milhares de iterações nos dados de treinamento. Treinar em uma máquina rápida e depois copiar os pesos dos neurônios para o Arduino será uma maneira mais inteligente de desenvolver sua implementação.

Ian
fonte
5

Sim. Se você o executa apenas no modo feed-forward e faz seu treinamento off-line em outro lugar:

Programei uma ANN de feedforward de 3 camadas (5-5-2) em uma UNO do Arduino. Ele rodava em um robô móvel. Sempre que o robô atingisse algo, ele treinaria novamente a rede. A porção de feedforward da rede foi executada em tempo real; enquanto o treinamento de propagação traseira era da ordem de 5 a 20 segundos. Suponho que você possa cortar o tamanho da rede, bem como jogar com os parâmetros para torná-la um pouco mais rápida, mas se você planeja fazer uma retropropagação em um Arduino, acho que seria muito lento.

Alguns pensamentos para acelerar as coisas incluem:

  • Use ponto fixo versus ponto flutuante (para MCU sem FPU)
  • Use um MCU que tenha uma FPU
  • Use uma função de ativação mais simples (por exemplo, tanh) em vez de sigmoide
  • A fase de treinamento ocorre offline em um PC

Aqui está uma rápida descrição que fiz da rede.

Yahma
fonte
3

Sim, é possível incorporar redes neurais em microcontroladores. Existem muitos exemplos disso na literatura científica, mas posso citar um exemplo impressionante do que pode ser feito com um MCU muito simples se você for inteligente o suficiente. Em Evolutionits Bits'n'Spikes , os autores descrevem a implementação de uma rede neural de pico em tempo real E um algoritmo genético para treiná-la, a fim de controlar um robô de roda diferencial. Todo o código é executado em um pequeno MCU PIC16F628 de 4MHz incorporado ao robô Alice de 1 polegada cúbica.

abey
fonte