Часть 2: ИИ

Если вы еще не ознакомились с первой частью этой серии, обязательно сделайте это здесь: https://medium.com/@anaypant212/creating-a-genetic-algorithm-for-flappy-bird-54590f6e56b3

Кроме того, не забудьте проверить весь код на Github для этого проекта вhttps://github.com/anaypant/anaypant.github.io в папке Flappy Bird. .

Модель

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

Однако в этом блоге я объясню, как вы можете использовать контролируемое обучение, чтобы научить ИИ играть во Flappy Bird!

Примечание. Этот метод использования данных, полученных ранее, для обучения ИИ называется контролируемым обучением. Генетические алгоритмы обычно относятся к обучению с подкреплением*, которое будет обсуждаться ниже.

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

Это можно реализовать во Flappy Bird. Однако есть три обязательных препятствия:

  1. Как мы покажем игру ИИ?
  2. Что мы хотим, чтобы ИИ сказал нам?
  3. Как мы создаем обучающие данные для использования ИИ?

1. Понимание игры

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

Решение? Выбор наших входов!

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

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

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

Примечание. В своем алгоритме я использовал скорость птицы по оси Y, расстояние по x до центра зазора трубы и расстояние по y до центра зазора трубы в качестве трех входных данных. Не стесняйтесь пробовать разные!

2. Давай поиграем!

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

Опять же, мы можем использовать себя в качестве аналогии того, как модель изучает игру. Представьте модель в виде ребенка, а входные данные — в виде словесной задачи, скажем, в математической викторине. Без какого-либо обучения мозг ребенка недоразвит, поэтому он выдаст совершенно случайный ответ. Независимо от того, правильный ответ или нет (обычно это не так), главное, чтобы ребенок научился.

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

Это действительно похоже на ИИ! Сначала модель понятия не имеет, что делать с предоставленной ей информацией, и выдает неверный ответ. Однако, если дать ему достаточно времени и данных (эти дополнительные задачи со словами) для обучения, он в конечном итоге станет естественным для предсказания точных ответов в игре.

Данные об обучении, данные птице, действительно важны. Вернемся к примеру со словами.

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

Эта проблема в науке о данных называется «переоснащением»: подгонка модели слишком долго или со слишком большим количеством данных, что затрудняет прогнозирование новых данных. Чтобы этого не допустить, вы можете проверить надежность модели, протестировав ее на новых данных. Несмотря на то, что модель A лучше, чем модель B с обучающими данными, модель B может работать лучше в реальности, потому что модель A была переобучена.

Как получить данные о тренировках?

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

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

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

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

Обязательно следите за моим последним блогом из этой серии: Генетический алгоритм Flappy Bird!

Спасибо за прочтение! :)