Czy możliwe jest uruchomienie sieci neuronowej na mikrokontrolerze


23

Czy możesz zaimplementować prostą sieć neuronową w mikroprocesorze, takim jak Arduino Uno, do wykorzystania w uczeniu maszynowym?


2
Z ciekawości dlaczego miałbyś chcieć?
Josh Vander Hook

1
Nie jestem ekspertem w tej dziedzinie, ale ostatnio słyszałem, że szkolenie NN odbyło się w symulacji, a NN został zaimplementowany na podwoziu i prawdopodobnie z kontrolerem wyższego poziomu niż Arduino.
Josh Vander Hook

1
Cóż, nie musisz go łączyć, po prostu trenuj NN w symulacji, a następnie wyodrębnij topologię NN, w tym wagi krawędzi i połączenia węzłów. Następnie programujesz NN (to tylko równanie, które musisz rozwiązać). Wydaje mi się, że zanim podejmiesz ten projekt, potrzeba trochę więcej badań.
Josh Vander Hook

1
Prawdopodobnie warto wspomnieć, że mam 16 lat, a to moja główna praca z elektroniką w liceum.
Jordan

1
W takim razie zakładam, że próbujesz to zrealizować, wykraczając poza obowiązek.
Joe Baker

Odpowiedzi:


10

Czy możesz trenować sieć neuronową na mikrokontrolerze? Może, ale proszę nie próbuj. Czy możesz użyć NN do klasyfikacji itp. Na mikrokontrolerze? Jasne, o ile można obliczyć wynik propagacji wartości węzłów i krawędzi oraz obsługi mnożenia.


1
Zgadzam się. Zakładając, że możesz uzyskać sieć neuronową o wymaganej złożoności, aby trenować na Arduino, nadal będziesz gotów na niesamowitą ilość czasu na szkolenie. Szkolenie NN poza statkiem to logiczna droga.
fgb

23

Z pewnością można to zaimplementować na Arduino. Oto 3 takie biblioteki Arduino, które implementują sieci neuronowe:

Złożoność sieci, którą może obsłużyć Arduino, to osobne pytanie, zwłaszcza jeśli chodzi o szkolenie - dziesiątki tysięcy iteracji danych treningowych. Trening na szybkiej maszynie, a następnie kopiowanie ciężarów neuronów do Arduino będzie mądrzejszym sposobem na rozwinięcie implementacji.


5

Tak. Jeśli uruchomisz go tylko w trybie przekazywania do przodu i trenujesz offline w innym miejscu:

Zaprogramowałem 3-warstwowy (5-5-2) feedforward ANN na Arduino UNO. Działał na mobilnym robocie. Ilekroć robot uderzył w coś, ponownie trenował sieć. Przekazywana część sieci działała w czasie rzeczywistym; podczas gdy trening propagacji wstecznej trwał około ~ 5 do 20 sekund. Przypuszczam, że możesz przyciąć rozmiar sieci, a także zabawę z parametrami, aby działała ona nieco szybciej, ale jeśli planujesz zrobić wsteczną propagację na Arduino, myślę, że byłoby to zbyt wolno.

Oto kilka pomysłów na przyspieszenie:

  • Użyj stałego vs zmiennoprzecinkowego (dla MCU bez FPU)
  • Użyj MCU, który ma FPU
  • tanh
  • Niech faza szkolenia odbywa się offline na komputerze

Oto krótki write-up zrobiłem sieci.


3

Tak, rzeczywiście, możliwe jest osadzenie sieci neuronowej w mikrokontrolerach. Jest wiele takich przykładów w literaturze naukowej, ale mogę przytoczyć uderzający przykład tego, co można zrobić za pomocą bardzo prostego MCU, jeśli jesteś wystarczająco inteligentny. W Evolutionary Bits'n'Spikes autorzy opisują implementację sieci neuronowej wzbogacającej w czasie rzeczywistym ORAZ algorytm genetyczny do jej szkolenia w celu sterowania robotem różnicowym. Cały kod działa w niewielkim MCU PIC16F628 4MHz osadzonym w robocie Alice o przekątnej 1 cala sześciennego.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.