В настоящее время я пытаюсь получить ANN, чтобы играть в видеоигру, и я надеялся получить помощь от замечательного сообщества здесь.
Я поселился на Diablo 2. Игра в игру, таким образом, находится в режиме реального времени и с изометрической точки зрения, при этом игрок контролирует одного аватара, с которым камера сосредоточена.
Чтобы сделать вещи конкретными, задача состоит в том, чтобы заставить вашего персонажа x испытать очки, не потеряв здоровье, до 0, где точка опыта достигается путем убийства монстров. Вот пример игрового процесса:
Теперь, поскольку я хочу, чтобы сеть работала исключительно на основе информации, полученной из пикселей на экране, она должна изучить очень богатое представление, чтобы играть эффективно, поскольку это, по-видимому, потребовало бы, чтобы он знал (неявно в наименее), как разделить игровой мир на объекты и как взаимодействовать с ними.
И всю эту информацию нужно научить сети... так или иначе. Я не могу для жизни меня думать о том, как тренировать это. Моя единственная идея - иметь отдельную программу визуально извлекать что-то врожденное хорошее/плохое в игре (например, здоровье, золото, опыт) с экрана, а затем использовать этот стат в процедуре обучения подкреплению. Я думаю, что это будет частью ответа, но я не думаю, что этого будет достаточно; существует слишком много уровней абстракции от необработанного визуального ввода до целевого поведения для такой ограниченной обратной связи для обучения сети в течение моей жизни.
Итак, мой вопрос: какие еще способы вы можете придумать для обучения сети, чтобы выполнить хотя бы часть этой задачи? предпочтительно без изготовления тысяч меченых примеров...
Просто для небольшого направления: я ищу некоторые другие источники обучения подкреплению и/или любые неконтролируемые методы для извлечения полезной информации в этой настройке. Или контролируемый алгоритм, если вы можете думать о способе получения помеченных данных из игрового мира без необходимости его вручную маркировать.
ОБНОВЛЕНИЕ (04/27/12):
Странно, я все еще работаю над этим и, кажется, добиваюсь прогресса. Самый большой секрет для того, чтобы заставить контроллер ANN работать, - это использовать самые передовые архитектуры ANN, соответствующие задаче. Следовательно, я использовал глубокую сеть убеждений, состоящую из факторизованного условного ограничения Boltzmann машины, которые я обучил неконтролируемой манере (по видео мне, играющей в игру) до тонкой настройки с временным разностным обратным распространением (например, обучение усилению со стандартными ANN).
Ищите более ценный ввод, особенно в отношении проблемы выбора действий в режиме реального времени и способа кодирования цветных изображений для обработки ANN:-)
ОБНОВЛЕНИЕ (10/21/15):
Только что вспомнил, что я задал этот вопрос взад и вперед, и подумал, что должен упомянуть, что это уже не сумасшедшая идея. Со времени моего последнего обновления DeepMind опубликовала свою статью о том, как заставить нейронные сети играть в игры atari с визуальных входов. Действительно, единственное, что мешает мне использовать свою архитектуру для игры, ограниченное подмножество Diablo 2, - это отсутствие доступа к основному движку игры. Оказание на экране, а затем перенаправление его в сеть слишком медленно, чтобы тренироваться в разумные сроки. Таким образом, мы, вероятно, не увидим такого бота, играющего Diablo 2 в ближайшее время, но только потому, что он будет играть что-то либо с открытым исходным кодом, либо с доступом API к цели рендеринга. (возможно, землетрясение?)