Как я нейронку в «динозаврика» играть учил

Вступление


Одним обычным днём я сидел в интернете, вдруг его отключили. Вспомнив про старую пасхалку от Google, а именно про бегающего динозаврика на странице ошибки. Изучая машинное обучение и вспомнив проект Mari/O, я решил сделать что-то похожее, хотелось чтобы искусственная нейронная сеть научилась играть в «Динозаврика» на уровне реального человека.

image

Для выполнения поставленной цели было решено использовать Генетические алгоритмы, то есть заставить динозавров ‘Эволюционировать’.

Генетический алгоритм


Так что такое этот генетический алгоритм?

Генети́ческий алгори́тм — это алгоритм поиска, используемый для решения задач оптимизации и моделирования путём случайного подбора, комбинирования и вариации искомых параметров с использованием механизмов, аналогичных естественному отбору в природе. Является разновидностью эволюционных вычислений, с помощью которых решаются оптимизационные задачи с использованием методов естественной эволюции, таких как наследование, мутации, отбор и кроссинговер. Отличительной особенностью генетического алгоритма является акцент на использование оператора «скрещивания», который производит операцию рекомбинации решений-кандидатов, роль которой аналогична роли скрещивания в живой природе.

image

Разработка


Принцип работы нашей программы (как мы уже говорили) основаны на машинном «обучение с подкреплением». Описать принцип работы я постараюсь в нескольких словах:

В каждом поколении выбираются несколько лучших представителей. На их основе создаётся новое. На основе различного «веса» нейронных связей и входной информации (дистанция до преграды, и её высота) принимается решение о действие конкретного представителя вида.

image

Надеюсь всё понятно.

Заключение


В итоге наша «Генетическая модель» достигла 332 тысячи очков за 219 генераций.

image

Есть возможный потенциал в достижении больших результатов.

Но пока ещё стоит над многим поработать.

P.S.: Спасибо за прочтение! Кстати мы хотели показать в прямом эфире процесс обучения нейронки. Посмотреть можно тут.

Upd. Тем временем программа набрала 942 тысячи очков.
Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 31

    +3
    а где-нибудь код посмотреть можно?
      0
      Поддерживаю, было бы интересно посмотреть и самому поиграться.
        +3
        Болтовня ничего не стоит. Покажите мне код. © Линус Торвальдс
          0
          Спасибо за интерес! Вряд ли в одном комментарии можно описать весь код, как по мне, лучше написать 2 часть статьи. Если будет свободное время и если это кому-то будет интересно, то я постараюсь написать более подробно.
          +5
          ГА никаким боком к нейроалгоритмам не относятся.
            +1
            Это один из методов настройки весов.
              +3
              Тем не менее это не нейроалгоритм. Максимум — один из алгоритмов для машинного обучения. Без критики к самому методу ГА, он очень крутой (либо я обыватель, что более вероятно).
                0

                Ну если так рассуждать, то тогда "нейроалгоритм" — это матричное умножение.

                  0
                  Как по мне, «нейроалгоритм» это, как минимум, backpropagation (в том или ином виде).

                  Иначе и random-guess-on-each-epoch можно за способ настройки весов принять…
                    0
                    Как по мне, «нейроалгоритм» это, как минимум, backpropagation (в том или ином виде).

                    Backpropagation это лишь метод быстрого получения частных производных от функции ошибки по весам нейронной сети. Далее полученные производные используются для корректировки весов другими алгоритмами, например стохастическим градиентным спуском. Но, на самом деле, не только им, этих методов очень много…

                    Кстати, градиентный спуск — это он тогда «нейроалгоритм»? :))
                +2
                Если так рассуждать, то конечно. Но тогда к НА относятся языки, на которых они реализуются, ЦП, на которых выполняются, прослойки между клавиатурой и креслом и т.п. вещи. Автор банально не разбирается в матчасти, заявляя, что «внутри у ней нейронка», не понимая, что кросинговер, мутации и отбор по фитнесс-функции — это имитация «генетики» и «естественного отбора», а не обучения с подкреплением и нейропластичности.
              0

              Y==Z?

                0
                Нет, Z, как показано, отражает дистанцию (красная линия), а X — это высота (зелёная линия).
                0
                А что под капотом? Как управляли? webDriver ом?
                Я тоже думал об этом во время отсутствия интернета)))), но мне виделось, что это можно реализовать без стратегии просто анализом того, что есть на экране.
                  +6
                  Я, конечно, сильно извиняюсь, но статья получилась вида: «нарисовать сову очень просто — сначала рисуем два кружочка, а потом дорисовываем остальную сову».
                  А, я понял. Это банальная попытка раскрутки своего канала на youtube. Картинка из одной статьи с Вики, ссылка на другую статью, минимальный набор пустого текста, и в конце ссылка на свой канал. Бяка, в общем.
                  Плохо, что такие пустышки стали на Хабр пролезать. Надеюсь, что вас отправят в хабро-яму за использование сайта в рекламных целях.
                    +3
                    Из-за новой политики Хабра в отношение статьей и контента, качество контента, как по мне, сильно пострадало. Может я просто раньше не столько времени сидел на хабре, но сейчас в тред попадают откровенное «пустые» или даже «рекламные» статьи.
                      0
                      Добрый день! Сообщите, пожалуйста, что именно в статье вам кажется рекламой?
                        +1
                        Добрый.
                        Мне показалось, что я достаточно подробно изложил свою точку зрения в своём предыдущем комментарии. Фактически, единственным уникальным содержанием статьи является ссылка на канал youtube. Ну и ещё пара кадров, предположительно из единственного видео на этом канале.
                        0
                        Спасибо за ваше мнение! Статью я не старался сделать рекламной, но видно вам кажется иначе. В следующие разы постараюсь писать более насыщенный текст.
                          0

                          А я подумал, что интернет включили и на этом все оборвалось…
                          А ведь вкладка провисела несколько дней в очереди на чтение в надежде увидеть что-то интересное.

                          +1
                          Показалось, что где-то видел, полез искать. Нашлось это (за авторством code bullet):

                          видео

                            0
                            Показалось, что где-то видел, полез искать. Нашлось это ...

                            А тут симпатичнее:
                              0
                              Забавно, только это не динозаврик :-)
                                0
                                Спасибо, я это видео видел. Но меня вдохновила другая работа.
                                0
                                Здорово! Спасибо за наводку.
                                  0
                                  :)
                                  0
                                  В чем преимущества использование ГА в этой задаче перед специальными методами для Deep Reinforcement Leqrning? Q-learning, Policy Gradients и еще over9000 появляющихся постоянно хитрых методов, которые я не знаю? Хотя здесь, думаю, хватило бы и Q-Learning.
                                    0
                                    С этим трудно поспорить, да и незачем… Ведь в этом вы правы. Просто на момент создания я был заинтересован в создании ГА. А так Q-Learning подойдёт лучше.
                                    +3
                                    Принцип работы нашей программы (как мы уже говорили) основаны на машинном «обучение с подкреплением». Описать принцип работы я постараюсь в нескольких словах:

                                    В каждом поколении выбираются несколько лучших представителей. На их основе создаётся новое. На основе различного «веса» нейронных связей и входной информации (дистанция до преграды, и её высота) принимается решение о действие конкретного представителя вида.

                                    Да уж… :))) Посмеялся :) срочно уберите в черновики ЭТО, пока живы :)))
                                      0
                                      Можете подробней описать, что вам не понравилось в данном куске текста? Заранее спасибо за помощь в улучшение моей первой статьи!
                                        +1
                                        Хорошо. Напишу :)
                                        Во первых, это не просто «кусок текста», а отрывок Вашей стати. Про свою статью я не напишу «кусок текста». Все же надо писать не «куски текста», а делиться чем-то, что может быть интересно и другим.

                                        Насчет этого отрывка. Если честно, я с ходу влепил минус статье и в карму минус тоже. Вообще, думал, что заминусуют жестко и сразу, но Вы, похоже, подкупаете всех какой-то наивностью что ли :)
                                        По этому отрывку. Что бы писать слова «основаны на машинном <обучение с подкреплением>», стоит хотя бы немного ознакомится с темой, что значат эти слова. На самом деле, это невероятно крутая вещь, с которой довольно много кто играется, но результаты довольно противоречивы. Если начнете вникать в тему, поймете о чем я. Для начала рекомендую прочесть азы, это «Саттон Ричард С., Барто Эндрю Г. Обучение с подкреплением».

                                        В общем и целом, обучение с подкреплением не связано с нейронными сетями, с генетическими алгоритмами тоже. В классическом виде оно строится на таблице. Но нейронную сеть «прикрутить» можно, что несколько лет назад доказали ребята, достигнув очень много удивительных результатов. Оказалось, что можно прикрутить сверточные сети, подав изображения с экрана аркадной игры (atari), и алгоритм учится, и начинает играть очень неплохо. Проводились хакатоны, даже в Физтехе (https://habr.com/ru/post/264871/). Конечно, в «контуре обучения» с подкреплением были не только сверточные сети, на эту тему было написано немало научных публикаций.
                                        Сам я тоже экспериментировал и с табличным Q-лернингом, и с использованием нейросетей, и со многим другим тоже.

                                        По статье. Тут, на хабре, народ, которому нужна конкретика. Это по телевизору можно рассказать про летающих дракончиков. А тут нужен реальный программный код, что бы каждый мог взять и запустить дракончика сам. Посмотреть, как летает, (поговорить с ним :), изменить код и улучшить результаты :)

                                        Минус в карму сменил на плюс, к сожалению, ноль сайт не позволяет сделать. Надеюсь, следующая статья будет лучше :)

                                        Кстати, генетические алгоритмы мне очень нравятся, возможно, я скоро о них напишу статью)

                                    Only users with full accounts can post comments. Log in, please.