Можно ли запустить нейронную сеть на микроконтроллере

23

Не могли бы вы реализовать простую нейронную сеть на микропроцессоре, таком как Arduino Uno, для использования в машинном обучении?

Иордания
источник
2
Из любопытства, почему вы хотите?
Джош Вандер Хук
1
Я не эксперт в этой области, но в последний раз я слышал, что обучение NN проводилось в симуляции, а NN был реализован на шасси, и, вероятно, с контроллером более высокого уровня, чем Arduino.
Джош Вандер Хук
1
Что ж, вам не нужно связывать его, вы просто обучаете NN моделированию, а затем извлекаете топологию NN, включая веса ребер и связи узлов. Затем вы программируете NN (это просто уравнение, которое вы должны решить). Я думаю, что, кажется, нужно немного больше исследований, прежде чем приступить к этому проекту.
Джош Вандер Хук
1
Наверное, стоит упомянуть, что мне 16 лет, и это моя основная работа по электронике в старшей школе.
Иордания
1
В таком случае, я полагаю, что вы пытаетесь воплотить это в реальность?
Джо Бейкер

Ответы:

10

Не могли бы вы обучить нейронную сеть на микроконтроллере? Может быть, но, пожалуйста, не пытайтесь. Не могли бы вы использовать NN для классификации и т. Д. На микроконтроллере? Конечно, до тех пор, пока вы можете вычислить результат распространения значений узлов и ребер и обработать умножения.

Джош Вандер Хук
источник
1
Я согласен. Предполагая, что вы можете получить нейронную сеть необходимой сложности для обучения на Arduino, вы все равно будете готовы к безумному количеству тренировочного времени. Обучение NN за бортом - логичный путь.
ФГБ
23

Это, безусловно, возможно реализовать на Arduino. Вот 3 таких библиотеки Arduino, которые реализуют нейронные сети:

Сложность сети, с которой может справиться Arduino, - это отдельный вопрос, особенно когда речь идет об обучении - десятки тысяч итераций на обучающих данных. Тренировка на быстрой машине, а затем копирование весов нейронов в Arduino будет более разумным способом разработки вашей реализации.

Ян
источник
5

Да. Если вы запускаете его только в режиме прямой связи и проводите обучение в другом месте:

Я запрограммировал 3-слойный (5-5-2) ANN с прямой связью на Arduino UNO. Это бежало на мобильном роботе. Всякий раз, когда робот ударяет что-то, он переучивает сеть. Прямая часть сети работала в режиме реального времени; в то время как тренировка обратного распространения заняла порядка ~ 5-20 секунд. Я полагаю, вы могли бы урезать размер сети, а также играть с параметрами, чтобы заставить ее работать немного быстрее, но если вы планируете делать обратное распространение на Arduino, я думаю, что это будет слишком медленно.

Некоторые мысли для ускорения вещей включают в себя:

  • Использовать фиксированную или плавающую точку (для MCU без FPU)
  • Используйте MCU с FPU
  • TANH
  • Проводить этап обучения в автономном режиме на ПК

Вот краткое описание, которое я сделал для сети.

Yahma
источник
3

Да, действительно, в микроконтроллеры можно встроить нейронную сеть. Подобных примеров в научной литературе много, но я могу привести яркий пример того, что можно сделать с помощью очень простого MCU, если вы достаточно умны. В Evolutionary Bits'n'Spikes авторы описывают реализацию всплеска нейронной сети в реальном времени И генетического алгоритма для ее обучения, чтобы управлять роботом с дифференциальным колесом. Весь код работает в крошечном микроконтроллере PIC16F628 с тактовой частотой 4 МГц, встроенном в робота Alice размером 1 кубический дюйм.

Abey
источник