Вступление


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

image

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

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


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

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

image

Разработка


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

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

image

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

Заключение


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

image

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

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

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

Upd. Тем временем программа набрала 942 тысячи очков.

Комментарии (31)


  1. VereVa
    25.04.2019 16:02
    +1

    а где-нибудь код посмотреть можно?


    1. loony_dev
      25.04.2019 16:06

      Поддерживаю, было бы интересно посмотреть и самому поиграться.


    1. Andrew_Pinkerton
      25.04.2019 17:13

      Болтовня ничего не стоит. Покажите мне код. © Линус Торвальдс


    1. MrNereof Автор
      26.04.2019 20:11

      Спасибо за интерес! Вряд ли в одном комментарии можно описать весь код, как по мне, лучше написать 2 часть статьи. Если будет свободное время и если это кому-то будет интересно, то я постараюсь написать более подробно.


  1. gasizdat
    25.04.2019 16:10
    +2

    ГА никаким боком к нейроалгоритмам не относятся.


    1. usdglander
      25.04.2019 16:45

      Это один из методов настройки весов.


      1. tchspprt
        25.04.2019 18:09

        Тем не менее это не нейроалгоритм. Максимум — один из алгоритмов для машинного обучения. Без критики к самому методу ГА, он очень крутой (либо я обыватель, что более вероятно).


        1. usdglander
          25.04.2019 18:12

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


          1. barkalov
            25.04.2019 18:48

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

            Иначе и random-guess-on-each-epoch можно за способ настройки весов принять…


            1. kuza2000
              26.04.2019 20:12

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

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

              Кстати, градиентный спуск — это он тогда «нейроалгоритм»? :))


      1. gasizdat
        26.04.2019 09:17
        +1

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


  1. stalker1984
    25.04.2019 16:43

    Y==Z?


    1. MrNereof Автор
      26.04.2019 20:12

      Нет, Z, как показано, отражает дистанцию (красная линия), а X — это высота (зелёная линия).


  1. j8kin
    25.04.2019 17:04

    А что под капотом? Как управляли? webDriver ом?
    Я тоже думал об этом во время отсутствия интернета)))), но мне виделось, что это можно реализовать без стратегии просто анализом того, что есть на экране.


  1. old_bear
    25.04.2019 17:04
    +2

    Я, конечно, сильно извиняюсь, но статья получилась вида: «нарисовать сову очень просто — сначала рисуем два кружочка, а потом дорисовываем остальную сову».
    А, я понял. Это банальная попытка раскрутки своего канала на youtube. Картинка из одной статьи с Вики, ссылка на другую статью, минимальный набор пустого текста, и в конце ссылка на свой канал. Бяка, в общем.
    Плохо, что такие пустышки стали на Хабр пролезать. Надеюсь, что вас отправят в хабро-яму за использование сайта в рекламных целях.


    1. loony_dev
      25.04.2019 17:09

      Из-за новой политики Хабра в отношение статьей и контента, качество контента, как по мне, сильно пострадало. Может я просто раньше не столько времени сидел на хабре, но сейчас в тред попадают откровенное «пустые» или даже «рекламные» статьи.


    1. Exosphere
      25.04.2019 19:56

      Добрый день! Сообщите, пожалуйста, что именно в статье вам кажется рекламой?


      1. old_bear
        26.04.2019 02:17

        Добрый.
        Мне показалось, что я достаточно подробно изложил свою точку зрения в своём предыдущем комментарии. Фактически, единственным уникальным содержанием статьи является ссылка на канал youtube. Ну и ещё пара кадров, предположительно из единственного видео на этом канале.


    1. MrNereof Автор
      26.04.2019 20:13

      Спасибо за ваше мнение! Статью я не старался сделать рекламной, но видно вам кажется иначе. В следующие разы постараюсь писать более насыщенный текст.


    1. QtRoS
      28.04.2019 23:07

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


  1. vyo
    25.04.2019 18:31

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

    видео


    1. Pochemuk
      25.04.2019 20:51

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

      А тут симпатичнее:


      1. vyo
        25.04.2019 22:34

        Забавно, только это не динозаврик :-)


      1. MrNereof Автор
        26.04.2019 20:16

        Спасибо, я это видео видел. Но меня вдохновила другая работа.


    1. MrNereof Автор
      26.04.2019 20:14

      Здорово! Спасибо за наводку.


    1. MrNereof Автор
      26.04.2019 20:14

      :)


  1. Alex_ME
    25.04.2019 21:19

    В чем преимущества использование ГА в этой задаче перед специальными методами для Deep Reinforcement Leqrning? Q-learning, Policy Gradients и еще over9000 появляющихся постоянно хитрых методов, которые я не знаю? Хотя здесь, думаю, хватило бы и Q-Learning.


    1. MrNereof Автор
      26.04.2019 20:33

      С этим трудно поспорить, да и незачем… Ведь в этом вы правы. Просто на момент создания я был заинтересован в создании ГА. А так Q-Learning подойдёт лучше.


  1. kuza2000
    26.04.2019 01:21

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

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

    Да уж… :))) Посмеялся :) срочно уберите в черновики ЭТО, пока живы :)))


    1. MrNereof Автор
      26.04.2019 20:16

      Можете подробней описать, что вам не понравилось в данном куске текста? Заранее спасибо за помощь в улучшение моей первой статьи!


      1. kuza2000
        27.04.2019 04:47

        Хорошо. Напишу :)
        Во первых, это не просто «кусок текста», а отрывок Вашей стати. Про свою статью я не напишу «кусок текста». Все же надо писать не «куски текста», а делиться чем-то, что может быть интересно и другим.

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

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

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

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

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