É possível executar e treinar uma rede neural em um microcontrolador de 8 bits?

11

Recentemente, li sobre redes neurais em ambientes restritos (em particular, Uma implementação de rede neural em um microcontrolador barato de oito bits ) e suas aplicações em dispositivos IoT (por exemplo, regressão para prever coisas baseadas em entradas de sensores, etc.).

Isso parece ideal para aplicativos simples em que o processamento não é de tempo crítico e os dados a serem processados ​​serão relativamente pouco frequentes. No entanto, pesquisas adicionais sugerem que o treinamento de uma rede neural em um ambiente com recursos limitados é uma péssima idéia (consulte a resposta para É possível executar uma rede neural em um microcontrolador ).

Isso ainda se aplica à abordagem de Cotton, Wilamowski e Dündar que eu vinculei? Seria necessário treinar uma rede projetada para baixo uso de recursos em um dispositivo mais poderoso na minha rede IoT?

Por um contexto, se eu tivesse um sensor transmitindo a configuração de calor, estou considerando uma rede neural, conforme descrito no artigo, para prever a configuração desejada da caldeira com base nisso e na hora do dia, etc. O treinamento seria útil para alterar as configurações da rede neural. saídas com base em mais dados fornecidos pelo usuário. Essa pergunta do Quora descreve bem um cenário semelhante e discute os detalhes de implementação de uma rede neural, mas minha pergunta é mais focada em saber se a operação da rede no próprio atuador funcionaria.

Aurora0001
fonte
Curios, você pretende executar uma rede neural em cada nó sensor / atuador ou em algum "cérebro" (semi-) centralizado (então é claro que a restrição de 8 bits não se aplicaria necessariamente)?
Ghanima
@Ghanima, se possível, eu gostaria de fazê-lo no nó do atuador para salvar a camada extra de complexidade, embora não tenha certeza se isso funcionaria com as restrições limitadas.
Aurora0001
@ Aurora0001 O controlador específico que você instala aqui pode não ser adequado para treinar seu NN, mas existem esforços conjuntos no mundo da visão computacional incorporada para fazer exatamente isso. Se você estiver tentando encontrar um microcontrolador com uma arquitetura adequada para essas tarefas, sugiro que você procure as empresas que desenvolvem esse tipo de hardware para o setor de visão computacional. Estou certo de que parte disso pode ser reaproveitada e adaptada às suas necessidades. Um bom lugar para começar
grldsndrs 15/12
@grldsndrs fantástico, obrigado pela referência. Sinta-se livre para publicá-la como uma resposta adicional se você sentir que é o suficiente (eu certamente ser feliz com ele)
Aurora0001
1
Um processador de 8 bits pode fazer qualquer coisa que um processador de palavras mais amplo, apenas talvez (depende da tarefa) mais lentamente. No entanto, os processadores de 8 bits tendem a ter um espaço de endereço nativo limitado, o que significa que devem usar meios indiretos para gerenciar memórias muito grandes e, no caso de microcontroladores, tendem a enviar quantidades comparativamente pequenas de memória no chip. Há cada vez mais pouca diferença de custo além da extremidade inferior - o principal fator de custo da MCU é sem dúvida as memórias, não a largura da ALU.
Chris Stratton

Respostas:

9

De acordo com o primeiro artigo , correr não é um problema. Esse era o objetivo. Somente há uma limitação nos pesos máximos:

Atualmente, a limitação na arquitetura incorporada neste microcontrolador é limitada apenas pelo número de pesos necessários. A rede neural está atualmente limitada a 256 pesos. No entanto, para a maioria dos aplicativos incorporados, esse peso de 256 não deve limitar o sistema.


Quanto ao treinamento, tanto quanto eu entendo a implementação descrita, o controlador PIC recebe parâmetros de uma fonte externa.

Os cálculos de encaminhamento da rede neural são escritos para que cada neurônio seja calculado individualmente em uma série de ciclos aninhados. O número de cálculos para cada loop e os valores para cada nó são todos armazenados em uma matriz simples na memória.

[...]

Essas matrizes contêm a arquitetura e os pesos da rede. Atualmente, para fins de demonstração, essas matrizes são pré-carregadas no momento em que o chip é programado, mas na versão final isso não seria necessário. O microcontrolador pode ser facilmente modificado para conter um carregador de inicialização simples que faça uso da porta serial RS232 integrada que receberia os dados dos pesos e da topografia de um local remoto. Isso permitiria que os pesos ou mesmo toda a rede fossem modificados enquanto o chip estivesse em campo.

Suspeito que o treinamento também seja realizado externamente.

O artigo também fornece referências para instrutores de redes neurais que provavelmente foram usados ​​para determinar os valores pré-programados na memória do PIC.

Agora, examinei o primeiro, que descreve arquiteturas e algoritmos de rede para usar com eles. Mas o software Neural Network Trainer usado aqui é implementado no MATLAB.

Atualmente, há muito pouco software de treinamento de rede neural disponível que treinará redes totalmente conectadas. Assim, um pacote com uma interface gráfica do usuário foi desenvolvido no MATLAB para esse fim. Este software permite ao usuário inserir facilmente arquiteturas muito complexas, além de pesos iniciais, parâmetros de treinamento, conjuntos de dados e a escolha de vários algoritmos poderosos.

Devo mencionar que as redes totalmente conectadas têm um número menor de pesos para uma mesma tarefa que uma arquitetura camada por camada. Isso o torna mais adequado para microcontroladores.

Não sou especialista em redes neurais e é bastante complexo, pois posso estar errado, mas com base nesses documentos, diria que a abordagem de Cotton, Wilamowski e Dündar requer uma plataforma externa mais poderosa para realizar o treinamento.


Sobre a execução de uma rede neural em um microcontrolador, a ST Microelectronics acaba de anunciar um kit de ferramentas STM32Cube.AI: Converter redes neurais em código otimizado para STM32 para converter redes neurais pré-treinadas de bibliotecas populares para a maioria de seus MCUs STM32.

Bence Kaulics
fonte