machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Как нейронная сеть нашла лазейку в моей игре?

Дата публикации Jun 5, 2019

фотоАдам МуизнаUnsplash

Прежде чем смотреть вкакИИ контролировал мою игру, давайте познакомимся с основами«Нейроэволюцией»чтобы понятьЗачемэто произошло.

Есть 2 основные вещи, вовлеченные внейроэволюцией
1.Генетический алгоритм
2.Нейронная сеть

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

Концепция этого алгоритма основана на теории эволюции Дарвина.

Это основные этапы Генетического алгоритма ...

  1. Создатьслучайная популяция
  2. Рассчитатьфитнескаждого члена населения
  3. выполнятьестественный отбор
  4. выполнятькроссоверс естественно отобранными членами
  5. Случайно применитьмутацияна потомках в результате кроссоверов
  6. Новое население создано, отбросьте старое поколение и перейдите кшаг 2

Видите, вы можете понять это из эволюции реального мира людей или других живых существ, но, в конце концов, имейте в виду, что генетический алгоритм в основномалгоритм поиска,

Рассмотрим этот график, допустим, что вы хотите найти точку (x, y) так, чтобы«Г»значение у него максимальное. Изначально график будет полностью неисследован, поэтому вы не уверены«Г»значение для любых других точек на графике, кроме начальной точки.

Мы можем применить много алгоритмов поиска, чтобы сделать это для нас, но давайте посмотрим, как это сделает генетический алгоритм.

Шаг: случайное население

Во-первых, в GA (Генетический алгоритм) мы начнем с нескольких случайных точек, или мы можем сказать случайные догадки из пространства решений. Например, на приведенном выше графике мы видим, что'Икс'значение может быть любым от -3 до +3, и тот же диапазон идет для«У»,

Таким образом, наши случайные догадки могут выглядеть как ...

Если мы говорим с точки зрения GA, это былослучайная популяцияпоколение. В основном мы создали случайную совокупность (x, y) пар, каждая из которых будет иметь«Г»ценность. Эти'Икс'значение и«У»значение можно рассматривать какгены,

Шаг: Расчет фитнеса

Теперь приходитфитнес-расчетэто потому, что мы хотим судить о том, какое из случайных предположений лучше других, и нам нужно что-то для сравнения.
Таким образом, мы должны определитьфитнес-функция, который скажет, насколько подходит это случайное предположение. В этом примере это довольно просто, так как нам нужна пара (x, y) с максимальным значением «z», поэтому для некоторого случайного предположения их значение «z» может выступать в качестве показателя пригодности.

пригодность (x, y) = z-значение

Итак, теперь, учитывая эту фитнес-функцию, мы ищем z-значение для каждой точки и получаем соотношение между ними, как показано ниже.

фитнес (-2,2, 2,3)> фитнес (0,1, -2,4)> фитнес (2.0, 1.4)> фитнес (1,0, 2,0)

Шаг: естественный отбор

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

«Выживание сильнейшего» - Чарльз Дарвин

Например, скажем, пары(-2,2, 2,3)&(0,1, -2,4)быть выбранным.

Шаг: кроссовер

Следующий шагкроссоверили просто говоря, эти 2 гена, выбранные естественным образом, смешиваются и образуют новую гибридную паруака потомство!

(Кроссовер)

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

Шаг: мутация

Теперь, на этих новых потомках, мы выполняем«Мутация», что означает случайное изменение значений генов. Хотя возникновение мутации зависит отчастота мутацийЕсли частота мутаций равна 100%, то все сгенерированные потомки будут мутированы, если частота мутаций равна 5%, то только 5% потомков будут мутированы.

(Мутация)

На рисунке выше показано, как«У»значение было случайно видоизменено до -2,3.
Мутация сделана для сохранения разнообразия в популяции, потому что если популяция останется почти такой же, мы не сможем исследовать график столько, сколько нам нужно, и в результате мы не достигнем самой высокой точки ,

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

На этом этапе мы отбросим старое поколение и снова начнем выполнять те же шаги из расчета пригодности для этого нового поколения.

(это грубая общая картина GA)

Поскольку этот цикл продолжает идти, через некоторое время все члены сходятся к одной и той же точке, которая будет самой высокой точкой в ​​пространстве решений, и это наша цель, и именно тогда этот алгоритм останавливается.

Videos Рекомендуемые видео по этой теме 👇
Генетический алгоритм: Введение | Поезд кодирования
Обучение: генетические алгоритмы | MIT OCW


Нейронная сеть

Биологический нейрон (Источник изображения: Википедия)

Идея нейронной сети происходит от самого человеческого мозга. Эта концепция объясняет, как мы учим вещи, основываясь на том, что мы можем применить ту же концепцию, чтобы заставить компьютер учиться!

Искусственная нейронная сеть (ANN) основана на биологической нейронной сети, хотя они не совсем совпадают, ANN можно рассматривать как абстракцию реальной биологической нейронной сети.

нейрон

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

(Искусственный нейрон)

Представьте себе этот нейрон как функцию, которая принимает набор входных данных (действительное число) и выдает один выход. Итак, теперь вопрос в том, что эта функция делает со своими входами для получения результата.
Вы видите на иллюстрации выше нейрона, каждое входное значение передается нейрону через ребро, и это ребро имеет'вес'связано с этим.

т.е. когда вход «x1» поступает в нейрон через ребро с весом «w1», как показано на диаграмме, значение в нейроне становится x1 * w1.

(Операции, происходящие внутри нейрона)

Затем все такие значения, полученные от разных входных ребер, суммируются, а затем есть также значение, называемое«Смещение»связано с нейроном, который вычитается из этой суммы, а затем этот результат передается вфункция активации.

Что это за функция активации? Есть много вариантов для этого, скажем, этосигмовидная функция.

Сигмовидная функция (Источник изображения: Википедия)

Эта функция берет любое действительное число и сдавливает его между 0 и 1.

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

Хорошо, нейрон в порядке, но какая от этого польза?
Например, вы можете реализоватьИ Воротас нейроном!

Поскольку выходные данные представляют собой значение, заданное функцией sigmoid, оно может варьироваться от 0 до 1. Итак, если мы получимвыход <0,5,мы рассмотримрезультат = 0
Точно так же, есливыход> 0.5мы рассмотримрезультат = 1

позволятьw1 = 2.0,w2 = 2,0а такжесмещение = 3,0

Теперь давайте проверим это со всеми входами

еслих = 0, у = 0
выход
= сигмоид (x * w1 + y * w2-bias)
= сигмовидная (0 * 2 + 0 * 2 -3)
= сигмоид (-3)
= 0,04743

выход <0,5, результат = 0

еслих = 0, у = 1
выход
= сигмоид (x * w1 + y * w2-bias)
= сигмовидная (0 * 2 + 1 * 2 -3)
= сигмовидная (-1)
= 0,26894

выход <0,5, результат = 0

еслих = 1, у = 0
выход
= сигмоид (x * w1 + y * w2-bias)
= сигмовидная (1 * 2 + 0 * 2 -3,5)
= сигмовидная (-1)
= 0,26894

выход <0,5, результат = 0

еслих = 1, у = 1
выход
= сигмоид (x * w1 + y * w2-bias)
= сигмовидная кишка (1 * 2 + 1 * 2 -3,5)
= сигмоид (1,0)
= 0,73106

выход> 0.5, результат = 1

Но как мы нашли такойвесаа такжесмещение? это«Настройка весов и уклонов»частьэто все гдеучусьлогикаидет. После настройки схемы входов и выходов все, что нам нужно сделать, это просто найти соответствующие значения для этих весов и смещений! По сути, это то, что обучение в двух словах! Мы скоро вернемся к учебной части.

Теперь, вероятно, вы чувствуете, как,«И ворота скучны ... Разве мы не можем сделать немного более крутой вещи?»
Конечно! Мы, конечно, будем, но прежде позвольте мне сказать вам, что одного нейрона недостаточно для решения всех видов проблем, поскольку они способны решать тольколинейно отделимыйпроблемы.

Неформально говоря, вам нужно больше нейронов, чтобы делать классные вещи!

Многослойная Искусственная Нейронная Сеть

Многослойный ИНН на помощь!
Имеет 3 вида слоев:

  1. Входной слой
  2. Скрытый слой
  3. Выходной слой
(Многослойная искусственная нейронная сеть)

Может быть более одного скрытого слоя, это зависит от варианта использования. Количество нейронов в каждом слое также зависит от варианта использования. Каждый нейрон связан со всеми нейронами следующего слоя (хотя они могут быть частично связаны). Каждый нейрон имеет значение смещения, и каждое соединение имеет связанный с ним вес. Процесс обработки от входов к выходам слой за слоем называетсяупреждение,

Чтобы понять это, представьте себе всю эту нейронную сеть какфункция, который может принимать входы и возвращать выходы
Например, вы можете спроектировать ANN, который будет принимать стороны прямоугольника в качестве входных данных и область прямоугольника в качестве выходных данных, но это мы можем сделать самостоятельно с помощью простой логики.
Но мы используем нейронную сеть, когда вывод прямой логики не так прост. Рассмотрим проблему написания компьютерной программы, которая делает снимки рукописных цифр и угадывает, что это за цифра. В этом случае входными нейронами будут все пиксели, а выходными будут 10 нейронов для всех цифр, и вы можете экспериментировать для скрытых слоев.

Рукописный классификатор обратной связи ANN (Источник: 3blue1brown)

Хорошо, эта часть ввода и вывода в порядке, но что с весами и уклонами? Это то, что сделает эти результаты возможными, без правильных весов и смещений, нейронная сеть - просто глупость!

ИНС со случайными весами и уклонами (Источник: 3blue1brown)

Итак, как нейронная сеть учится?

Есть несколько подходов к этому. Один из них - инициализировать ANN со случайными весами и обучать его некоторым помеченным набором данных, и на основе ошибок мы продолжаем корректировать его весовые коэффициенты с помощью обратного распространения, в котором используется концепция, называемая градиентным спуском. Этот тип обучения называетсяКонтролируемое обучение,

Мы также можем использоватьУсиление обучения, Здесь агенты начинают работать в произвольно инициализированном состоянии и продолжают корректировать результаты своих действий. Мы можем применить генетический алгоритм для достижения такого поведения, давайте посмотрим на это в следующем разделе.

Video Рекомендуемое видео на эту тему 👇
Но что такое нейронная сеть? | 3blue1brown


нейроэволюцией

Развиваясьнейронные сетис помощьюгенетический алгоритмэто «нейроэволюция».
При этом термин «нейроэволюция» имеет смысл, верно?

Нейронная сеть + Эволюция = Нейроэволюция

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

Мы генерируем несколько ANN, инициализированных со случайными весами для их соединений, таким образом,случайная популяцияANNs. Таким образом, здесь все эти случайно сгенерированные веса привели бы к каким-то глупым ANN, но, поскольку они случайные, некоторые ANN будут менее глупыми, а некоторые - более глупыми. Мы знаем, что должна делать эта нейронная сеть, поэтому по ее производительности мы можем вычислить еефитнес, Здесь веса и уклоны были бы генами ANN. На основании значений пригодности и распределения вероятностейестественный отборпроизойдет. ДлякроссоверЕстественно отобранные веса и смещения ANN будут смешаны для формирования гибридного ANN. В течениемутацияНекоторые веса и смещения случайным образом изменяются незначительно. Благодаря естественному отбору, переходам и мутациям по мере продвижения вперед с новыми поколениями, ANN начинают улучшаться в направлении, определяемом функцией фитнеса.

(Базовый алгоритм нейроэволюции)

Это все еще алгоритм поиска. Ранее, когда мы пытались найти лучшее(х, у)точка с помощью GA, мы на самом деле изучали 2-мерное пространствоОсь абсцисса такжеY-ось.Точно так же здесь предполагается измерение для веса каждого соединения ANN и смещения каждого нейрона. Трудно представить это визуально, но в основном мы исследуем пространство измерений всех весов и смещений и пытаемся найти лучший вектор весов и смещений в этом Космос.

Поскольку мы поддерживаем этот цикл, в конечном итоге ANN должен вести себя так, как мы ожидали.

Video Рекомендуемое видео на эту тему 👇
Введение в нейроэволюцию | Поезд кодирования


Беда нейронной сети

Я был вдохновлен этимFlappy Bird с нейроэволюциейпроблема кодирования, когда они используют нейроэволюцию, чтобы позволить компьютеру научиться играть в игру самостоятельно.проверить живую версию своего проекта,

Итак, я хотел сделать аналогичный проект в какой-то другой игре, поэтому я начал искать простую игру, в которой я мог бы применить этот алгоритм.

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

Сейчас этот проект состоял из 2 частей:

  1. Разработайте и внедрите игру
  2. Применить алгоритм нейроэволюции на нем

Теперь, разрабатывая игру ... Короче говоря, я придумал эту игру под названием«Побег прыгать»(друг помог мне с именем 🙃)

(Я играю в игру побег прыжок)

Здесь вы контролируете этот красный шар с помощью клавиш со стрелками, и вы должныпобегчерез илиПрыгатьчерез пространство между трубами(черные полосы)прежде чем он сжимаетты(красный шар), в какой момент обе трубы закроются, неизвестно в начале, поэтому вы должны быстро оценить, когда они появятся. Если вы находитесь на рабочем столе, вы можете попробовать эту игру прямо сейчас сэта ссылка Попробуйте и посмотрите, сколько вы можете выиграть, а потом посмотрите, сколько ИИ забил сам!

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

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

(ANN архитектура, которую я использовал)

Для нейроэволюции мы инициализируем игру несколькими шарами, каждый из которых имеет свой собственный ИНС (как показано на диаграмме выше), который принимает решение за них. ANN принимает входные данные в каждом кадре и предпринимает действия на основе выходных данных ANN.

(Входы и выходы ANN в коде)

Эта функция выше из класса "Ball". Он показывает, как он передает входы в ANN и как он использует выходы ANN для принятия решения о том, прыгать или двигаться.

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

(Инициирующий алгоритм нейроэволюции)

Итак, вот как это выглядит, теперь, если вы видели, как этолетящая птицаЕсли учиться играть самостоятельно, используя этот алгоритм, вы можете себе представить, как должна была пройти эта игра. Он должен был научиться играть, как обычно, что-то похожее на то, что я играл в первой показанной анимации.

Итак, я запускал его в течение нескольких поколений и был удивлен тем, что он сделал с игрой, мне казалось, что компьютер высмеивает мою игру 😂

Вот что он узнал через несколько поколений (анимация воспроизводилась со скоростью 4x)

Таким образом, этот алгоритм нашел место, где он может постоянно прыгать и проигрывать игру! Вот Это Да! Хотя поначалу мне было немного грустно оттого, что в мою игру было слишком легко играть, потом я понял, чтоискусственный интеллектСказав это, я понял, что просто случайно использовал ИИ, чтобы найти лазейку в игре, так было лучше.

Хотя я никогда не исправлял эту лазейку 😜, возможно, я просто оставлю код таким образом.

Это оно!

Если вы хотите увидеть это моделирование и поиграть с ним,Оформить заказ
Если вы хотите взглянуть на этот код, вот ссылка на егоGitHub репозиторий

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map