Pull to refresh

Comments 47

ага, а потом
туц
image

и в конечном итоге
тык
image
Новый уровень жанра programming game с ботами.
Что с «противоречивыми» оценками? Например — взрывать бочку впритык к себе — плохо, а взрывать бочку которая впритык к противнику — хорошо? Это закладывалось в изначальные знания сети, или она этому училась сама? И училась ли?

P.S. Судя по видео, переключение «боевой» и «исследовательской» сети происходит топорно — бот не умеет стрелять во врага и «стрейфится» по направлению к аптечке/патронам. Да и просто в «боевой» бот обычно либо стоит либо бежит только вперёд.
Да, переключение явно топорное.
С бочками, думаю, что сеть можно было бы обучить, если пускать её на уровень с кучей бочек. А так она даже вряд ли их научилась детектировать. Они не выводились в feature вектор состояния из движка, как я понимаю.

Кто-то на ютубе писал в стиле: «кардинальное отличие поведения от детей! дети не пропускают ни одной бочки, когда учатся играть!».
кардинальное отличие поведения от детей!


Да! Было-бы намного круче, если бы сеть в первых циклах обучения пыталась различными способами взаимодействовать с объектами, и на основе этого уже выделяла их в разные группы враг/предмет/и т.п.
Но разве дети взрывают бочки не потому что взрыв «красиво нарисован»? Причём взрыв — не самое важное. Я лично постоянно их взрывал именно поэтому. А бот не знает понятий «красиво», «взрыв» и тому подобных.
разве дети взрывают бочки не потому что взрыв «красиво нарисован»?

Нет — потому что раздаётся классный звук "БАБАХ!!!"

Не на всех были хорошие звуковые в то время, когда бабахало. Иногда из спикера доносился просто скрежет, а на «БАБАХ!!!»
С бочкой оценка не такая уж и противоречивая. Сеть вырабатывает признаки близко/далеко, позиции врагов. Эти признаки вырабатываются в процессе обучения и потом к конкретному набору признаков привязывается действие, стрелять или не стрелять.
Более интересная задача как найти в большом пространстве возможных состояний наиболее интересные области и прицельно исследовать именно их. То есть например повзаимодействовать с бочкой, а не изучать, к примеру, что бывает от выстрелов в разные конфигурации стен.
Что с «противоречивыми» оценками? Например — взрывать бочку впритык к себе — плохо, а взрывать бочку которая впритык к противнику — хорошо? Это закладывалось в изначальные знания сети, или она этому училась сама? И училась ли?

Тогда нужна сеть-стратег, которая принимает решения более высокого уровня. При этом исследователь только генерирует для стратега и для война выявленные им закономерности мира типа: "врагов можно подстрелить рикошетом" или "в моём мире есть проёмы и зеркала, отличающиеся только цветом притолки". а стратег и воин принимают решения на основании подтвердившихся закономерностей и собственного опыта.
Кстати, а как сеть поведёт себя на уровне типа "зеркального лабиринта", с очень большим количеством переотражений противника в зеркальных поверхностях?

Трудно поверить в такой KDR судя по видео. Опять таки, если противник попал в прицел, то ему уже не отвертеться. Обработка каждого кадра в несколько проходов в секунду не даст уйти из под прицела. Это уже получается AIM и за такое банят вообще-то :)
Интересно было-бы посмотреть на соревнования этих сетей, как на один из вариантов киберспорта среди программистов. Только не в 2,5D, а в полноценном 3D.
Да, 90% качества этой сети это на мой взгляд и есть aimbot:)
Человека сеть побеждает с неплохим отрывом
Непонятно почему. Более активное/агрессивное поведение?
По идее, бот должен быть более предсказуемым. Человек должен понимать то, что если бот сейчас не в бою, его надо искать в местах расположения патронов/аптечек.
авторы… сделали две независимых сети. Одна сеть умела искать аптечки и патроны. Вторая делать фраги.

Если монстров не видно, то используются решения «исследовательской сети», после появления монстра решения «боевой».

Как мне кажется, человек, который будет отстреливаясь от бота собирать аптечки/броню/патроны (т.е. держа в голове план уровня, во время боя задним ходом бежать к местам расположения аптечек — совмещая бой с пополнением запасов) должен у бота выигрывать. Хуже точность? Почему сеть показывает лучший результат?
Я боюсь, что дум это это квака. Тут всё же тактика контроля карты не позволяет быть более кривым в стрельбе.
Нейросеть потребуется слишком большая иначе будут интерфернции. Большая сеть => дольше обучение, больше ресурсов и т.д. В общем эффективнее будет разбить на несколько независимых сетей. Просто помимо проблемы тренировки коэффициентов присутствует еще и проблема выбора топологии и размера сети — а это тоже нетривиальная задача. Ну просто физически нашлепать и обучить сетку из нескольких миллиардов хаотично организованных нейронов несколько проблено, эволюции на это потребовалось на это много-много лет и один фиг получим набор узкоспециализированных подсетей :-) У нас же тоже НС дифференцирована
UFO just landed and posted this here
Этот метод работает. Об этом много говорилось в более ранних статьях. Но этот путь оооочень долгий и требовательный к ресурсам. Поэтому стараются как-то ускорить обучение, это тоже довольно интересное занятие
ну сеть научится поднимать частоту процессора в DosBox и fps до 200-300 и сможет за 8 минут сыграть матч, потом научится запускать несколько процессов обучения параллельно, а потом, когда научится зарабатывать на роликах в ютубе «Как пройти казаков 2 за 2 часа» скопит денег на амазон EC2 и уже с них захватит весь мир онлайна и тут она поймёт что её враги не здесь, а где-то рядом…

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

UFO just landed and posted this here
Да, это используется очень часто. Это помогает максимально быстро набрать банк наиболее разнообразного опыта для обучения.
переименуйте статью — зашёл случайно, набор букв мне ничего не говорит, а тут оказывается про ИИ, играющий в шутер по картинке с экрана. Круто же!
>>При обучении использовалась некоторая дополнительная информация от движка
Что за информация? Мне кажется это ключевое, а не описано.
Формат данных — boolean в стиле «вижу монстра», «вижу аптечку», «вижу амуницию».
Я не очень в курсе как в этом думе с наведением на цель, но мне кажется что позиционирование перекрестья у него точнее/быстрее чем у человека, что несколько упрощает ему задачу в плане k/d. А так круто конечно.
Это не впервые. Нейросеть уже давно обучали играть в Кваку, Анреал, Марио, ПакМен и т.п. используя только информацию с экрана. Но это только один подход, В гонках будет проще использовать уже систему направленных сенсоров. И это было задолго до новомодного глубоко обучения (профит о которой разве что в появлении памяти, о чем собственно известно эдак с 80-ых годов наверное). Да профит от модульной сети в играх тоже известен.
По использованию нейросетей в играх на мой взгляд самым интересным было применение нейроэволюционных алгоритмов (например, NEAT и проект NERO по нему).
А приведите пример про Q, Unreal, и.т.д. Ни разу такого не видел.
Марио через Q-Learning как я понял не взлетел.
Ну вот можете поискать статью Neuroevolution in games: State of the art and open challenges.
Там например что-то типа обзора разных методов для разных игр. В общем сравниваются разные алгоритмы, сети, подходы к управлению и получению информации из окружающего мира и т.п. Как раз там указан Q2 в котором использовался визуальный вход 14x2. Дальше можно пойти по ссылкам. На ютубе можно найти MarI/O — там тоже используется визуальный вход (но очень примитивный) а в качестве алгоритма выступает NEAT ( на сайте университета Техаса по нему полно инфы). В Interactively Evolved Modular Neural Networks for Game Agent Control рассматривают преимущества модульной нейросети (одна нейросеть управляет движением, другая управляет стрельбой) по сравнению с единой нейросетью на примере игры XNA NET Rummble (старая демонстрашка XNA).
Это вот так навскидку. По UT находил кучу статей, где вообще для каждого аспекта игры (смена оружия, поиск бонусов, стрельбу, передвижение и т.п.) была своя сеть (охрененно сложная модульная сеть) но всех названий не упомню уже. А так вообще дофига статей и даже целых дипломов и диссертаций. Проблема только в том, что подавляющее большинство статей которые я читал на эту тему находятся в репозитариях за доступ к которым надо платить — поэтому читать я их могу только на работе.

Ну а что касается безмодельного обучения в общем, то там действительно сложно взлететь — во-первых очень длительный процесс обучения, во-вторых, это тот самый случай когда программа умнее программиста. Например, когда я обучал ропатов убивать ропатов и поленился взяв фитнесс функцию из 5 слагаемых: Положительное — попадания и время жизни, негативные — получение урона, промахи попадание по союзнику, к 60-ому поколению боты разбредались по карте максимально далеко друг от друга и расстреливали препятствия (попадания по всем объектам считались положительными если dammager.team!=hitted.team) — все живы-здоровы, получают очки и никто не умирает, а самое главное неподвижные объекты никуда не убегут и обеспечат хороший процент попаданий, а самое главное сдачи не дадут.
Спасибо. А есть видюшки с примерой работы таких сетей?
Но всё же тут интересно, что все аспекты игры собраны более-менее в одной сети с единым пайплайном тренировки. Понятно, что чтобы сделать aimbot, никакой нейронной сети не нужно. Так же как для того чтобы сделать бота, который по триггерам бегает.
Если не ошибаюсь, нейронные сети для ИИ использовались также в Black & White и Creatures.
Еще в FEAR, Sims, L4D и даже в Крайзисе говорят они где-то там есть.
В общем с 10-ок игр точноберется. Правда чо там внутри зарыто — я хз.
Проблема в том что говнокодеров разбирающихся в ИИ на самом деле очень мало, задачи там сложные и даже тут на Хабре считают что лучше нафигачить 100500 if...then...else чем морочить голову всякими сложными вещами. Это вот недавно снова пошла мода на все эти нейросети и генетические алгоритмы.
А так у меня была когда то древнейшая книга (она была древней уже когда я учился в универе) которая как раз была посвящена как можно вставить академический ИИ в игры, еще и на примере ботов из Кваки и были там не только нейросети.
Мне кажется, что вместо предпоследней картинки должна быть какая-то другая, не совпадающая с последней.
Вот я одного не очень понял как это картинки экрана подсовывали ИИ?
Может проще ИИ научить лазить в видеопамять напрямую?
Не, не проще. Это же исследование. Куда проще было собирать его из готовых кусочков, а не городить своё. Они взяли уже готовый api, из которого можно всё вытащить — http://vizdoom.cs.put.edu.pl/ взяли какой-то фреймворк который LSTM и свёрточные сети поддерживает. И скрестили.
Страшно подумать, что можно будет скрестить на коленке лет через 10
LSTM? А у них при этом не возникали проблемы с корреляцией данных, из-за чего experience replay вводили?
Возникали, там даже какой-то график есть.
Они в итоге учили на небольших последовательностях где-то по десятку кадров. При этом первые 5 кадров служили для того, чтобы накопить аккумулятор LSTM — обучения не происходило. А апдейтили веса только на последних нескольких кадрах. Там вообще целая пачка таких маленьких аджастментов. Та же e-greed стратегия.
Я не разу Q-Learning не обучал, поэтому важность и специфику этих мелочей мне сложно оценить.
Интересно радуется ли нейросеть когда выигрывает и расстраивается ли когда ее убивают?

Моделирование живого — уже сейчас этим занимаются — OpenWorm
(https://habrahabr.ru/post/208036/). И уже сейчас задаются вопросом — а чувствует эта модель живого существа боль? При желании можно скачать и поиграться.

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

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

Sign up to leave a comment.

Articles