Наш проект продолжает серию проектов, связанных с простейшими нейронными сетями и снова связан с самообучением. Робот-муравей ANTY, собранный по инструкции из книги Laurens Valk "The LEGO MINDSTORMS EV3 Discovery Book" будет обучаться ходить, не имея изначально ни малейшего представления о том, как это делать. Нейронная сеть робота будет оценивать попытки робота-муравья двигаться, оценивая их с точки зрения скорости движения и сохранения его направления и выстроит в итоге оптимальную взаимосвязь между движениями ног.
Когда мы идем, делаем шаг, другой, то не задумываемся над тем, как синхронизированы наши ноги, какое движение в каждый момент времени должна выполнять одна нога по отношению к другой. Дело в том, что нейронные связи, ответственные за ходьбу у нас давно сформировались и постоянно подкрепляются ежедневными тренировками. Маленький ребенок, который еще только учится ходить находится на этапе формирования таких нейронных связей, он делает шаг за шагом, падает, поднимается, учитывает свои ошибки и снова пробует идти. Несомненно огромную роль в формировании таких взаимосвязей играет его наблюдение за тем, как ходят те, кто уже это умеет, однако научиться ходить он может и без этой визуальной информации.
Давайте попробуем поставить себя на его место. Встаньте на месте и попытайтесь на время забыть, как это - идти. Формально мы знаем, что когда одна наша нога делает шаг, вторая выполняет роль опоры, одновременно немного сгибаясь как пружина, готовая повторить движение другой ноги. Попробуйте сделать несинхронизированные друг с другом шаги, например когда одна нога делает шаг и сделала его на 50% (находится в воздухе), начните такое же движение другой ногой. Скорее всего за такой попыткой последует падение или движение, направленное на то, чтобы его избежать. Варьюируя степень синхронизации ног (0..100%) можно убедиться, что часть таких попыток будет приводить к "топтанию на месте", часть - к движению с поворотом в одну из сторон и только один, узкий диапазон синхронизации ног, приведет к прямолинейной ходьбе.
Конструкцию робота-муравья из книги мы оставили практически без изменений, однако в хвосте вместо датчика цвета мы установили гироскоп. Он понадобится для оценки степени отклонения от прямолинейного курса в процессе обучения нейронной сети.
Нейронная сеть робота-муравья, которую мы будем обучать в этом проекте, будет действовать по следующему алгоритму:
Когда мы идем, делаем шаг, другой, то не задумываемся над тем, как синхронизированы наши ноги, какое движение в каждый момент времени должна выполнять одна нога по отношению к другой. Дело в том, что нейронные связи, ответственные за ходьбу у нас давно сформировались и постоянно подкрепляются ежедневными тренировками. Маленький ребенок, который еще только учится ходить находится на этапе формирования таких нейронных связей, он делает шаг за шагом, падает, поднимается, учитывает свои ошибки и снова пробует идти. Несомненно огромную роль в формировании таких взаимосвязей играет его наблюдение за тем, как ходят те, кто уже это умеет, однако научиться ходить он может и без этой визуальной информации.
Давайте попробуем поставить себя на его место. Встаньте на месте и попытайтесь на время забыть, как это - идти. Формально мы знаем, что когда одна наша нога делает шаг, вторая выполняет роль опоры, одновременно немного сгибаясь как пружина, готовая повторить движение другой ноги. Попробуйте сделать несинхронизированные друг с другом шаги, например когда одна нога делает шаг и сделала его на 50% (находится в воздухе), начните такое же движение другой ногой. Скорее всего за такой попыткой последует падение или движение, направленное на то, чтобы его избежать. Варьюируя степень синхронизации ног (0..100%) можно убедиться, что часть таких попыток будет приводить к "топтанию на месте", часть - к движению с поворотом в одну из сторон и только один, узкий диапазон синхронизации ног, приведет к прямолинейной ходьбе.
Конструкцию робота-муравья из книги мы оставили практически без изменений, однако в хвосте вместо датчика цвета мы установили гироскоп. Он понадобится для оценки степени отклонения от прямолинейного курса в процессе обучения нейронной сети.
Нейронная сеть робота-муравья, которую мы будем обучать в этом проекте, будет действовать по следующему алгоритму:
- Пара моторов, которые управляют движениями ног робота-муравья могут быть рассинхронизированы в диапазоне 0..360 градусов. Разобьем этот интервал на 36 отрезков. Это мы сделаем только из экономии времени на обучение сети. можно работать и с 360 различными углами.
- Каждый из 36 возможных углов между ходовыми моторами свяжем с нейроном сети. Так как изначально нейронная сеть не обучена, каждый из вариантов синхронизации ног равноценен. Запишем в каждый нейрон начальный вес - 1.
- Цикл обучения нейронной сети начинается со случайного выбора нейрона с учетом его веса.
- Выбрав нейрон, синхронизируем ноги робота-муравья в соответствии с углом, связанным с выбранным нейроном
- После синхронизации запоминаем расстояние до препятствия впереди и угол разворота на гироскопе
- Делаем несколько шагов вперед
- Оцениваем, изменился ли угол, если он изменился несущественно (робот не отклонился от курса), проверяем сократилось ли расстояние до препятствия и насколько
- Если робот продвинулся вперед - увеличиваем вес нейрона
- Если робот не продвинулся вперед, то есть топчется на месте или пошел назад - уменьшаем вес нейрона, однако не менее чем до 1
- Повторяем цикл обучения до тех пор, пока робот не будет выполнять шаги правильно и двигаться прямолинейно
Исходный код: