Как создать искусственный интеллект?

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

Стадия 1. Разочарование
Когда мы говорим о создании хотя бы простых ботов, глаза наполняются блеском, а в голове мелькают сотни идей, что он должен уметь делать. Однако, когда дело доходит до реализации, оказывается, что ключом к разгадке реальной модели поведения является. математика. Если быть немного конкретнее, то вот список её разделов, которые необходимо проштудировать хотя бы в формате университетского образования:
Теория вероятностей и математическая статистика.
Это тот научный плацдарм, на котором будут строится ваше дальнейшее программирование. Без знания и понимания этой теории все задумки быстро разобьются о взаимодействие с человеком, ведь искусственный разум на самом деле не больше, чем набор формул.
Стадия 2. Принятие
Когда спесь немного сбита студенческой литературой, можно приступать к изучению языков. Бросаться на LISP или другие функциональные языки пока не стоит, для начала надо научиться работать с переменными и однозначными состояниями. Как для быстрого изучения, так и дальнейшего развития прекрасно подойдёт Python, но в целом можно взять за основу любой язык, имеющий соответствующие библиотеки.
Стадия 3. Развитие
Теперь переходим непосредственно к теории ИИ. Их условно можно разделить на 3 категории:
Слабый ИИ – боты, которых мы видим в компьютерных играх, или простые подручные помощники, вроде Siri. Они или выполняют узкоспециализированные задачи или являются незначительным комплексом таковых, а любая непредсказуемость взаимодействия ставит их в тупик.
Сильный ИИ – это машины, интеллект которых сопоставим с человеческим мозгом. На сегодняшний день нет реальных представителей этого класса, но компьютеры, вроде Watson очень близки к достижению этой цели.
Совершенные ИИ – будущее, машинный мозг, который превзойдёт наши возможности. Именно об опасности таких разработок предупреждают Стивен Хоккинг, Элон Маск и кинофраншиза «Терминатор».
Естественно, начинать следует с самых простых ботов. Для этого вспомните старую-добрую игру «Крестики-нолики» при использовании поля 3х3 и постарайтесь выяснить для себя основные алгоритмы действий: вероятность победы при безошибочных действиях, наиболее удачные места на поле для расположения фигуры, необходимость сводить игру к ничьей и так далее.
Сыграв несколько десятков партий и анализируя собственные действия, вы наверняка сможете выделить все важные аспекты и переписать их в машинный код. Если нет, то продолжайте думать, а эта ссылка здесь полежит на всякий случай.
К слову, если вы всё-таки взялись за язык Python, то создать довольно простого бота можно обратившись к этому подробному мануалу. Для других языков, таких как C++ или Java, вам также не составит труда найти пошаговые материалы. Почувствовав, что за созданием ИИ нет ничего сверхъестественного, вы сможете смело закрыть браузер и приступить к личным экспериментам.
Стадия 4. Азарт
Теперь, когда дело сдвинулось с мёртвой точки, вам наверняка хочется создать что-то более серьёзное. В этом вам поможет ряд следующих ресурсов:
Как вы поняли даже из названий, это API, которые позволят без лишних затрат времени создать некоторое подобие серьёзного ИИ.

Стадия 5. Работа
Теперь же, когда вы уже вполне ясно представляете, как ИИ создавать и чем при этом пользоваться, пора выводить свои знания на новый уровень. Во-первых, для этого потребуется изучение дисциплины, которое носит название «Машинное обучение». Во-вторых, необходимо научиться работать с соответствующими библиотеками выбранного языка программирования. Для рассматриваемого нами Python это Scikit-learn, NLTK, SciPy, PyBrain и Nump. В-третьих, в развитии никуда не обойтись от функционального программирования. Ну и самое главное, вы теперь сможете читать литературу о ИИ с полным пониманием дела:
И да, вся или почти вся литература по данной тематике представлена на иностранном языке, поэтому если хотите заниматься созданием ИИ профессионально необходимо подтянуть свой английский до технического уровня. Если вы только начинаете путь к мечте, советуем записаться на бесплатный двухчасовой интенсив по основам программирования.
В остальном, ваше дальнейшее развитие будет зависеть лишь от практики и желания усложнять алгоритмы. Но будьте осторожны: возможно совершенный искусственный разум опасен для человечества?
Освоить востребованную профессию в Data Science можно всего за полтора года на курсах GeekBrains. После учёбы вы сможете работать по специальностям Data Scientist, Data Analyst, Machine Learning, Engineer Computer Vision-специалист или NLP-специалист.
Практический геймдизайн: создание ИИ для своей игры
Некоторое время назад мне понадобилось разобраться в создании ИИ для игр, и вот, что я успел выяснить.
Когда мне понадобиться разработать ИИ, я последовательно пройду следующие пункты:
- Придумать ИИ с интересным поведением
- Очеловечить ИИ
- Разработать алгоритм поведения
- Детализировать алгоритм
Сегодня мы поговорим о первом из них.
В этой статье я буду рассуждать о ИИ на примере шутеров. Жанр известный большинству, а даже те, кто в шутеры не играют, смотрели боевики, и примерно представляют как могут вести себя люди в перестрелках.
Подумайте, кого вы обычно называете умными людьми. Мое мнение такое:
Во-первых, умный человек должен обладать хорошим уровнем осознания. Он умеет анализировать мир и происходящее в нем, и делать правильные выводы.
Но просто получить информацию недостаточно, нужно отреагировать. Принять правильное решение. Чем решение эффективнее, тем оно умнее.
Представьте себе свой любимый шутер. Когда вы врываетесь в комнату с противником, вы прекрасно знаете, зачем вы там: вы пришли убивать. Вы ожидаете, что враг схватится за оружие, и будет сопротивляться. Если бот вежливо ждет, пока вы его застрелите — где-то он сглупил. Или не понял, что происходит, то есть, сделал неправильный вывод из имеющихся данных. Или не придумал, что с этим делать.
Получается, что наделить бота интеллектом — значит дать ему способность действовать, адекватно ситуации, в которой он находится.
Тут перед нами возникает первая проблема и вопрос в создании ИИ.
Для большинства качество ИИ определяется его способностью противостоять лучшим из людей. Поэтому всех так взбудоражила победа AlphaGO над чемпионами по игре в Го. «Вот это интеллект!» — сказала общественность. Но в этой статье вы не найдете советов о том, как создать что-то подобное.
Нас, гейм-дизайнеров, не интересует ИИ, который будет гарантированно побеждать игрока — ведь тот приходит в игру, чтобы побеждать самому. Но ИИ должен создавать игроку достойную конкуренцию. Потому, что конкуренция — это суть того, что я называю играми.
Почему мы играем в ладушки? Мы конкурируем за право называть себя самым ловким. Если я могу прихлопнуть твою ладонь, а ты мою — нет, значит я ловчее. Нам, людям, приятно обладать такими качествами, как ловкость, сила, смекалка — это повышает нашу самооценку, дарит спокойствие и уверенность.
Но поскольку это сравнительные качества, нам нужен достойный соперник для их подтверждения. Никто не хочет быть умнее, чем табуретка, или сильнее младенца.
Получается, что адекватное поведение для игрового ИИ — вовсе не самое эффективное, а самое интересное. Можно сказать, что сверхзадача хорошего ИИ — максимально красиво проиграть игроку. Так, чтобы у него сложилось полное ощущение собственного величия.
Понятие «интересный» в данном случае включает в себя как силы, так и слабости, которыми нужно наделить ИИ, чтобы заставить игрока использовать для победы свои навыки — те качества, которыми он гордится.
Вы сейчас разрабатываете игру? Вы знаете, какие навыки требуются для нее? Если нет, то самое время подумать об этом.
Поскольку мы говорим о шутерах, предлагаю выделить следующие навыки:
- Мелкая моторика
- Внимательность
- Управление
- Реакция
- Принятие решений
С первыми четырьмя все ясно. Мелкая моторика — способность проводить тонкие манипуляции с геймпадом и мышью. Управление — умение «чувствовать» своего персонажа и грамотно им оперировать: быстро и аккуратно двигаться, переключаться между оружием, делать «распрыжку». Что такое реакция, и внимательность, известно всем.
Про принятие решений давайте скажем чуть больше.
Может быть не очевидно, но принимать решения нужно в любой игре. Посмотрите на этот график.
Он гласит, что решения, которые мы принимаем в играх, отличаются по двум критериям: их сложность, и скорость, с которой их нужно принять.
Точки на этом графике — два условных полюса. Справа внизу TBS, то есть пошаговые стратегии. В этом жанре игроку нужно принимать самые сложные и дальновидные решения, но вообще без ограничения по времени.
Слева вверху — FPS, то есть шутеры от первого лица. В них мы принимаем самые простые решения, но с чудовищной скоростью.
Вопросы, которые задает нам шутер, почти риторические. Что делать, если рядом упала граната? Мы знаем ответ! Нужно лишь обработать какие-то минимальные входные данные (нотификатор гранаты висит на экране справа, значит двигаться нужно влево) — и бежать со всех ног.
Или вот сложнее: вы бежали к двери в Black Ops 4, а из нее, у вас перед носом, выскочил другой игрок. Нужно определить, что выгоднее: открывать огонь, или шагнуть ему на встречу, и вломить прикладом. Это зависит от кучи факторов: расстояние между вами, его здоровье, направление движения. Сама по себе задача простая, но необходимость решить ее за доли секунды, усложняет ее кардинально.
После того, как мы определились с навыками, пора внедрить в ИИ поведение, которое заставит игрока их использовать.
Давайте рассмотрим как это сделать на примитивном примере.
По этой ссылке можно скачать прототип top-down шутера.
- Синяя штука — игрок
- Оранжевые штуки- враги
- Бегать на WASD
- Целиться и стрелять мышью
- Перезапустить фазу — SPACE
Кнопки 1-8 включают разные настройки поведения, которые иллюстрируют определенный уровень проработанности ИИ.
Запускайте прототип, и
Нажмите кнопку «1», чтобы включить первую фазу. Для следующих фаз — соответствующие кнопки. Для фазы 2 — кнопку «2», и так далее.
На этой фазе бот имеет самое простое поведение. У него нет различных «состояний». Он всегда в состоянии атаки, всегда знает, где игрок. Он обучен преследовать игрока, если тот убегает, наводиться на него, и непрерывно стрелять.
На этой фазе у игрока и противника отключен урон, поэтому игры как таковой нет. Здесь нельзя ни выиграть, ни проиграть.
Поторопитесь открыть огонь! Теперь вы можете наносить урон своими выстрелами, как и ИИ-оппонент. Но игры все еще нет.
Почему? Потому, что за несколько секунд обоюдной стрельбы, враг гарантированно погибает. Если хотите убить его еще раз, нажмите SPACE.
Чтобы погибнуть, нужно постараться. Специально подождать, пока противник нанесет вам урон, а потом вступить в бой. Иначе он погибает первым, благодаря пониженным характеристикам.
Этому миру лично вы — такой смелый, такой ловкий стрелок ! — не нужны. С этим врагом справится и ваша бабушка.
На этой фазе противник получает почти двойное повышение урона. Стреляйте как можете, но вы все равно будете умирать раз за разом.
Это — момент истины. В предыдущей фазе для победы нужно было лишь зажать одну кнопку, и пуская слюни смотреть, как полоска здоровья ИИ непрерывно убывает. А теперь вы поменялись местами.
Это и есть тот момент, когда интерактивное, но бессмысленное действо превращается в игру. Игрок спрашивает: что мне сделать, чтобы победить? Мы должны дать ему ответ.
Обратите внимание на появившиеся красные полоски, отражающие сектор стрельбы противника.
В этой фазе мы отключили мгновенное наведение на цель, и установили скорость прицеливания.
Начинайте двигаться по кругу вокруг противника. Вы увидите, что его прицел немного не успевает за вами. К чему это приводит?
Игра вынуждает вас использовать навык управления. Это и есть ответ на вопрос игрока, который указывает ему правильное поведение.
Управление — это сейчас то, что создает разницу между победой, и поражением. Стоя на месте, вы проигрываете. Двигаясь — вы мешаете врагу попадать по вам, уменьшаете входящий урон, и в конце-концов побеждаете. Чем более точный круг вы будете описывать вокруг врага, тем больше пуль вы избежите — ваша цель каждый момент времени двигаться перпендикулярно его прицельной линии.
Заметьте, что такое поведение противника интуитивно понятно: всем нам известно, что стрелять в подвижную цель тяжелее, чем в статическую. Мы просто наделили ИИ таким же недостатком, какой есть у любого человека.
Включаем пятую фазу — и противник теперь тоже двигается.
Управление усложняется. Теперь центр круга, по которому нужно двигаться, все время меняется.
Добавляется еще один навык — мелкая моторика. Нужно аккуратно двигать мышью, чтобы прицел не сходил с врага, и нанесение урона не прекращалось.
Такие простые элементы поведения — ограниченная скорость наведения, и перемещение — а игроку уже нужно применять два разных навыка для победы.
Давайте снова выключим нанесение урона, чтобы спокойно посмотреть на ситуацию.
На этой фазе вместо одного противника, появляются сразу пять. Но на геймплей это кардинально не влияет. Поскольку противники держатся поблизости, и перемещаются в примерно одинаковой области, игроку не нужно менять свое поведение.
Если он будет двигаться неправильно — цена его ошибки увеличится, поскольку он поймает не одну пулю, а все пять. Но в целом ему нужно делать то же, что и раньше: нарезать круги, вокруг противников.
А что если научить их работать в группе?
На этой фазе каждому противнику назначается своя позиция, вокруг игрока. Боты медленно, но неумолимо окружают протагониста, и игрок попадает под перекрестный огонь.
Что это дает нам? Цели игрока больше не формируют единое облако. Они рассеиваются, и ему приходится фокусироваться на каждой отдельно. Если им удается окружить его — их расположение приходится держать в голове, ведь поле обзора ограничено.
Двигаться в разных ситуациях тоже нужно по разному. Пока враги далеко, нужно избегать их, чтобы не попасть в кольцо. Но если ты уже в нем — тебе нужно ринуться на одного из врагов, чтобы прорвать окружение, и расположить всех противников с одной стороны.
Так добавляя одну механику за другой, мы создаем геймплей. Создаем среду, в которой игроку нужно бороться за победу, применяя свои способности. И это примитивный TDS — какого геймплейного разнообразия можно было бы добиться в полноценном шутере?
Ранее в фазе 4 мы допустили ошибку. Мы позволили игроку «ломать» наш ИИ.
Такое происходит, когда поведение бота недостаточно проработано, и может быть эксплуатированно игроком.
В фазе 3 алгоритм прицеливания работает так: есть направление в котором расположен игрок, и есть текущее направление прицела. Текущее направление сдвигается к игроку со скоростью 0.7 градусов в кадр.
Это приводит к тому, что ИИ тем тяжелее целиться, чем ближе находится игрок — хотя с точки зрения реализма это нелепость. Если же забежать к боту за спину, он будет проворачиваться на 180 градусов минимум 5 секунд, за которые его можно изрешетить. Это и есть огрех поведения, который позволяет ломать ИИ. Мы хотели заставить игрока двигаться, а он может избежать этого простым трюком.
В фазе 8 скорость прицеливания подвешена на «резинку». Теперь она тем больше, чем больше разница между текущим направлением прицела, и направлением на игрока.
При непрерывном движении прицел все так же не успевает за игроком, позволяя избегать урона. Если же зайти боту за спину — он развернется почти мгновенно, не позволяя игроку стоять на одном месте.
Если бы мы задались целью довести этот прототип до ума, совершенствовать поведение ботов можно было очень долго. Всегда стоит думать о том, каким способом можно сломать поведение вашего ИИ, и предотвращать это.
Вы получили основу для начала разработки своего ИИ. Попробуйте пройти те же шаги, что и я в этой статье
- Определить навыки, требующиеся для вашей игры
- Придумать, какое поведение ИИ вынудит игрока использовать эти навыки
- Подумать, как можно будет сломать ваш ИИ, и как этого избежать
В следующих статьях мы поговорим о том, зачем ИИ человекоподобность, и как ее реализовать, как написать алгоритм, для придуманного ИИ, и как его детализировать.
Как создать искусственный интеллект? (Почти) исчерпывающее руководство

На этой неделе вы могли прочитать крайне мотивирующей кейс от ученика GeekBrains Валерия Турова, который изучил профессию «Программист Java», где он рассказал об одной из своих целей, которая привела в профессию — желанию познать принцип работы и научиться создавать самому игровых ботов.
А ведь действительно, именно желание создать совершенный искусственный интеллект, будь то игровая модель или мобильная программа, сподвигла на путь программиста многих из нас. Проблема в том, что за тоннами учебного материала и суровой действительностью заказчиков, это самое желание было заменено простым стремлением к саморазвитию. Для тех, кто так и не приступил к исполнению детской мечты, далее краткий путеводитель по созданию настоящего искусственного разума.
Стадия 1. Разочарование
Когда мы говорим о создании хотя бы простых ботов, глаза наполняются блеском, а в голове мелькают сотни идей, что он должен уметь делать. Однако, когда дело доходит до реализации, оказывается, что ключом к разгадке реальной модели поведения является математика. Да-да, искусственный интеллект куда сложнее написания прикладных программ — одних знаний о проектировании ПО вам не хватит.
Математика — этот тот научный плацдарм, на котором будет строиться ваше дальнейшее программирование. Без знания и понимания этой теории все задумки быстро разобьются о взаимодействие с человеком, ведь искусственный разум на самом деле не больше, чем набор формул.
Стадия 2. Принятие
Когда спесь немного сбита студенческой литературой, можно приступать к практике. Бросаться на LISP или другие функциональные языки пока не стоит — сначала стоит освоиться с принципами проектирования ИИ. Как для быстрого изучения, так и дальнейшего развития прекрасно подойдёт Python — это язык, чаще всего используемый в научных целях, для него вы найдете множество библиотек, которые облегчат ваш труд.
Стадия 3. Развитие
Теперь переходим непосредственно к теории ИИ. Их условно можно разделить на 3 категории:
- Слабый ИИ – боты, которых мы видим в компьютерных играх, или простые подручные помощники, вроде Siri. Они или выполняют узкоспециализированные задачи или являются незначительным комплексом таковых, а любая непредсказуемость взаимодействия ставит их в тупик.
- Сильный ИИ – это машины, интеллект которых сопоставим с человеческим мозгом. На сегодняшний день нет реальных представителей этого класса, но компьютеры, вроде Watson очень близки к достижению этой цели.
- Совершенные ИИ – будущее, машинный мозг, который превзойдёт наши возможности. Именно об опасности таких разработок предупреждают Стивен Хоккинг, Элон Маск и кинофраншиза «Терминатор».
Естественно, начинать следует с самых простых ботов. Для этого вспомните старую-добрую игру «Крестики-нолики» при использовании поля 3х3 и постарайтесь выяснить для себя основные алгоритмы действий: вероятность победы при безошибочных действиях, наиболее удачные места на поле для расположения фигуры, необходимость сводить игру к ничьей и так далее.
Сыграв несколько десятков партий и анализируя собственные действия, вы наверняка сможете выделить все важные аспекты и переписать их в машинный код. Если нет, то продолжайте думать, а эта ссылка здесь полежит на всякий случай.
К слову, если вы всё-таки взялись за язык Python, то создать довольно простого бота можно, обратившись к этому подробному мануалу. Для других языков, таких как C++ или Java, вам также не составит труда найти пошаговые материалы. Почувствовав, что за созданием ИИ нет ничего сверхъестественного, вы сможете смело закрыть браузер и приступить к личным экспериментам.
Стадия 4. Азарт
Теперь, когда дело сдвинулось с мёртвой точки, вам наверняка хочется создать что-то более серьёзное. В этом вам поможет ряд следующих ресурсов:
Как вы поняли даже из названий, это API, которые позволят без лишних затрат времени создать некоторое подобие серьёзного ИИ.
Стадия 5. Работа
Теперь же, когда вы уже вполне ясно представляете, как ИИ создавать и чем при этом пользоваться, пора выводить свои знания на новый уровень. Во-первых, для этого потребуется изучение дисциплины, которое носит название «Машинное обучение». Во-вторых, необходимо научиться работать с соответствующими библиотеками выбранного языка программирования. Для рассматриваемого нами Python это Scikit-learn, NLTK, SciPy, PyBrain и Numpy. В-третьих, в развитии никуда не обойтись от функционального программирования. Ну и самое главное, вы теперь сможете читать литературу о ИИ с полным пониманием дела:
-
, Ян Миллингтон; , Роберт Найсторм;
- AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and Java, Джордж Люгер, Уильям Стбалфилд;
- Computational Cognitive Neuroscience, Рэнделл О’Рейли, Юко Мунаката; , Стюарт Рассел, Питер Норвиг.
И да, вся или почти вся литература по данной тематике представлена на иностранном языке, поэтому если хотите заниматься созданием ИИ профессионально — необходимо подтянуть свой английский до технического уровня. Впрочем, это актуально для любой сферы программирования, не правда ли?
В остальном же ваше дальнейшее развитие будет зависеть лишь от практики и желания усложнять алгоритмы. Но будьте осторожны: возможно, совершенный искусственный разум опасен для человечества?