Вступление
Одним обычным днём я сидел в интернете, вдруг его отключили. Вспомнив про старую пасхалку от Google, а именно про бегающего динозаврика на странице ошибки. Изучая машинное обучение и вспомнив проект Mari/O, я решил сделать что-то похожее, хотелось чтобы искусственная нейронная сеть научилась играть в «Динозаврика» на уровне реального человека.
Для выполнения поставленной цели было решено использовать Генетические алгоритмы, то есть заставить динозавров ‘Эволюционировать’.
Генетический алгоритм
Так что такое этот генетический алгоритм?
Генети?ческий алгори?тм — это алгоритм поиска, используемый для решения задач оптимизации и моделирования путём случайного подбора, комбинирования и вариации искомых параметров с использованием механизмов, аналогичных естественному отбору в природе. Является разновидностью эволюционных вычислений, с помощью которых решаются оптимизационные задачи с использованием методов естественной эволюции, таких как наследование, мутации, отбор и кроссинговер. Отличительной особенностью генетического алгоритма является акцент на использование оператора «скрещивания», который производит операцию рекомбинации решений-кандидатов, роль которой аналогична роли скрещивания в живой природе.
Разработка
Принцип работы нашей программы (как мы уже говорили) основаны на машинном «обучение с подкреплением». Описать принцип работы я постараюсь в нескольких словах:
В каждом поколении выбираются несколько лучших представителей. На их основе создаётся новое. На основе различного «веса» нейронных связей и входной информации (дистанция до преграды, и её высота) принимается решение о действие конкретного представителя вида.
Надеюсь всё понятно.
Заключение
В итоге наша «Генетическая модель» достигла 332 тысячи очков за 219 генераций.
Есть возможный потенциал в достижении больших результатов.
Но пока ещё стоит над многим поработать.
P.S.: Спасибо за прочтение! Кстати мы хотели показать в прямом эфире процесс обучения нейронки. Посмотреть можно тут.
Upd. Тем временем программа набрала 942 тысячи очков.
Комментарии (31)
gasizdat
25.04.2019 16:10+2ГА никаким боком к нейроалгоритмам не относятся.
usdglander
25.04.2019 16:45Это один из методов настройки весов.
tchspprt
25.04.2019 18:09Тем не менее это не нейроалгоритм. Максимум — один из алгоритмов для машинного обучения. Без критики к самому методу ГА, он очень крутой (либо я обыватель, что более вероятно).
usdglander
25.04.2019 18:12Ну если так рассуждать, то тогда "нейроалгоритм" — это матричное умножение.
barkalov
25.04.2019 18:48Как по мне, «нейроалгоритм» это, как минимум, backpropagation (в том или ином виде).
Иначе и random-guess-on-each-epoch можно за способ настройки весов принять…kuza2000
26.04.2019 20:12Как по мне, «нейроалгоритм» это, как минимум, backpropagation (в том или ином виде).
Backpropagation это лишь метод быстрого получения частных производных от функции ошибки по весам нейронной сети. Далее полученные производные используются для корректировки весов другими алгоритмами, например стохастическим градиентным спуском. Но, на самом деле, не только им, этих методов очень много…
Кстати, градиентный спуск — это он тогда «нейроалгоритм»? :))
gasizdat
26.04.2019 09:17+1Если так рассуждать, то конечно. Но тогда к НА относятся языки, на которых они реализуются, ЦП, на которых выполняются, прослойки между клавиатурой и креслом и т.п. вещи. Автор банально не разбирается в матчасти, заявляя, что «внутри у ней нейронка», не понимая, что кросинговер, мутации и отбор по фитнесс-функции — это имитация «генетики» и «естественного отбора», а не обучения с подкреплением и нейропластичности.
stalker1984
25.04.2019 16:43Y==Z?
MrNereof Автор
26.04.2019 20:12Нет, Z, как показано, отражает дистанцию (красная линия), а X — это высота (зелёная линия).
j8kin
25.04.2019 17:04А что под капотом? Как управляли? webDriver ом?
Я тоже думал об этом во время отсутствия интернета)))), но мне виделось, что это можно реализовать без стратегии просто анализом того, что есть на экране.
old_bear
25.04.2019 17:04+2Я, конечно, сильно извиняюсь, но статья получилась вида: «нарисовать сову очень просто — сначала рисуем два кружочка, а потом дорисовываем остальную сову».
А, я понял. Это банальная попытка раскрутки своего канала на youtube. Картинка из одной статьи с Вики, ссылка на другую статью, минимальный набор пустого текста, и в конце ссылка на свой канал. Бяка, в общем.
Плохо, что такие пустышки стали на Хабр пролезать. Надеюсь, что вас отправят в хабро-яму за использование сайта в рекламных целях.loony_dev
25.04.2019 17:09Из-за новой политики Хабра в отношение статьей и контента, качество контента, как по мне, сильно пострадало. Может я просто раньше не столько времени сидел на хабре, но сейчас в тред попадают откровенное «пустые» или даже «рекламные» статьи.
Exosphere
25.04.2019 19:56Добрый день! Сообщите, пожалуйста, что именно в статье вам кажется рекламой?
old_bear
26.04.2019 02:17Добрый.
Мне показалось, что я достаточно подробно изложил свою точку зрения в своём предыдущем комментарии. Фактически, единственным уникальным содержанием статьи является ссылка на канал youtube. Ну и ещё пара кадров, предположительно из единственного видео на этом канале.
MrNereof Автор
26.04.2019 20:13Спасибо за ваше мнение! Статью я не старался сделать рекламной, но видно вам кажется иначе. В следующие разы постараюсь писать более насыщенный текст.
QtRoS
28.04.2019 23:07А я подумал, что интернет включили и на этом все оборвалось…
А ведь вкладка провисела несколько дней в очереди на чтение в надежде увидеть что-то интересное.
vyo
25.04.2019 18:31Показалось, что где-то видел, полез искать. Нашлось это (за авторством code bullet):
видео
VereVa
а где-нибудь код посмотреть можно?
loony_dev
Поддерживаю, было бы интересно посмотреть и самому поиграться.
Andrew_Pinkerton
Болтовня ничего не стоит. Покажите мне код. © Линус Торвальдс
MrNereof Автор
Спасибо за интерес! Вряд ли в одном комментарии можно описать весь код, как по мне, лучше написать 2 часть статьи. Если будет свободное время и если это кому-то будет интересно, то я постараюсь написать более подробно.