Создай свой искусственный интеллект. Возможно ли создание искусственного интеллекта

Что надо знать и с чего начать.

На этой неделе вы могли прочитать крайне мотивирующей кейс от

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

Стадия 1. Разочарование

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

    Линейная алгебра;

  • Теория графов;

    Теория вероятностей и математическая статистика.

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

Стадия 2. Принятие

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

Стадия 3. Развитие

Теперь переходим непосредственно к теории ИИ. Их условно можно разделить на 3 категории:

    Слабый ИИ – боты, которых мы видим в компьютерных играх, или простые подручные помощники, вроде Siri. Они или выполняют узкоспециализированные задачи или являются незначительным комплексом таковых, а любая непредсказуемость взаимодействия ставит их в тупик.

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

    Совершенные ИИ – будущее, машинный мозг, который превзойдёт наши возможности. Именно об опасности таких разработок предупреждают Стивен Хоккинг, Элон Маск и кинофраншиза «Терминатор».

Естественно, начинать следует с самых простых ботов. Для этого вспомните старую-добрую игру «Крестики-нолики» при использовании поля 3х3 и постарайтесь выяснить для себя основные алгоритмы действий: вероятность победы при безошибочных действиях, наиболее удачные места на поле для расположения фигуры, необходимость сводить игру к ничьей и так далее.

Как вы поняли даже из названий, это API, которые позволят без лишних затрат времени создать некоторое подобие серьёзного ИИ.

Стадия 5. Работа

Теперь же, когда вы уже вполне ясно представляете, как ИИ создавать и чем при этом пользоваться, пора выводить свои знания на новый уровень. Во-первых, для этого потребуется изучение дисциплины, которое носит название «Машинное обучение» . Во-вторых, необходимо научиться работать с соответствующими библиотеками выбранного языка программирования. Для рассматриваемого нами Python это Scikit-learn, NLTK, SciPy, PyBrain и Nump. В-третьих, в развитии никуда не обойтись от

П.В. Казаков, В.А. Шкаберин
ОСНОВЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА

1. ВВЕДЕНИЕ В ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ

Искусственный интеллект (ИИ) является одним из приоритетных направлений в современной информатике, связанным с созданием следующей ступени ее развития – новых информационных технологий. Их цель – свести к минимуму участие человека как программиста при создании информационных систем, но привлекать его в качестве учителя, партнера человеко-машинной системы. Однако нельзя понимать термин «искусственный интеллект» буквально. Правильнее его воспринимать как некоторое метафорическое наименование совокупности методов, реализация которых на компьютере по- зволяет получать результаты близкие к порождаемым человеческим мышлением.

1.1. Некоторые понятия искусственного интеллекта

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

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

Искусственный интеллект (Artificial Intelligence, AI) как научное направление существует с 1956 года, когда британский математик Алан Тьюринг опубликовал свою статью «Can the Machine Think ?» («Может ли машина мыслить?»). Также он предложил тест проверки программы на интеллектуальность. Он состоял в следующем: организовывалось «общение» между человеком и компьютерной программой, которые размещались в разных комнатах, и до тех пор, пока исследователь не определял, кто за стеной – человек или программа, поведение последней считалось интеллектуальным . Исходя из этого, Тьюринг предложил следующий критерий интеллектуальности программы: «Если поведение вычислительной машины, отвечающей на вопросы, невозможно отличить от поведения человека, отвечающего на аналогичные вопросы, то она обладает интеллектом».

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

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

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

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

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

Второй подход (искусственный разум) рассматривает данные о нейрофизиологических и психологических механизмах интеллектуальной деятельности и разумного поведения человека.

Как создать искусственный интеллект? (Почти) исчерпывающее руководство

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

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

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

К настоящему времени разработано целое множество программный систем, в которых реализованы те или иные технологии ИИ. Такие системы принято называть интеллектуальными системами. К первой из подобных систем относят программу «Логик-Теоретик» (А. Ньюэлл, А. Тьюринг и др.), предназначенную для доказательства теорем исчисления высказываний.

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

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

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

1.2. Основные направления исследований в области искусственного интеллекта

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

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

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

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

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

Программное обеспечение систем искусственного интеллекта.

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

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

Уровень теоретических исследований по искусственному интеллекту в России не уступает мировому. Началом становления этого научного направления в нашей стране следует считать 1954 г., когда в МГУ начал свою работу семинар «Автоматы и мышление» под руководством академика Ляпунова А.А. Впоследствии стали активно развиваться направления, связанные с представлением и обработкой знаний, ситуационным управлением, моделированием рассуждений, распознаванием образов, обработкой естественного языка .

Развитие искусственного интеллекта в современной России связано с образованием в 1988 г. Ассоциации искусственного интеллекта, объединившей научные школы, исследователей по различным направлениям ИИ. Под ее эгидой проводятся различные исследования, организуются семинары для специалистов, устраиваются конференции, издается научный журнал.

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

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

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

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

Соорганизаторами конкурса выступили ученые из университетов Монреаля, Макгилла и Карнеги-Меллон. Принять участие в тестировании диалоговых систем можно по ссылке.

На самом деле, эти идеи не были придуманы сегодня - современные голосовые помощники от Google, Apple, Amazon и других IT-компаний уходят корнями в глубокое прошлое, в самое начало компьютерной эры. Первая такая говорящая машина, получившая имя ELIZA, создана в 1966 году и была, по сути, шуткой, пародией на психотерапевта, дающего бесполезные советы пациенту.

В последующие годы и десятилетия программисты создавали все более сложные и «живые» системы общения с компьютером.

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

- Михаил, с момента создания ELIZA прошло почти 50 лет. Что вообще поменялось за это время и можно ли в принципе ожидать, что в будущем ученым удастся создать такую систему, которую люди не смогут отличить от живого собеседника?

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

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

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

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

- Учитывая присутствие Apple, Google и Amazon на этом рынке, может ли Россия здесь конкурировать? Есть ли какая-то специфика у русского языка, которая может помешать потенциальным конкурентам российских компаний и ученых?

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

С другой стороны, базовые алгоритмы, которые используются в работе Siri, Cortana, Google и других цифровых помощников, никто не скрывает - они доступны для нас как минимум на уровне исследований и концепций.

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

На фото: На фото: Михаил Бурцев, заведующий лабораторией нейронных систем и глубокого обучения МФТИ

Фото: Из личного архива Михаила Бурцева

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

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

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

- Многие ученые, такие как Роджер Пенроуз или Стюарт Хамерофф, считают, что человеческий разум носит квантовую природу и построить его машинный аналог нельзя в принципе. Согласны ли вы с ними или нет?

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

У Пенроуза и Хамероффа есть некий набор гипотез, которые, по их мнению, объясняют то, почему это нельзя сделать. Пока нейрофизиологи не нашли никаких экспериментальных подтверждений того, что эти гипотезы верны, а наш текущий багаж знаний говорит в пользу обратного.

Другое дело, что временные рамки того, когда такая машина будет создана, остаются не до конца определенными. Это может, как мне кажется, произойти не менее чем через 50, а то и 100 лет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

К примеру, подобные системы должны четко уведомлять пользователя о том, к каким последствиям ведет выбор между искусственным интеллектом и обычным врачом. У человека появится выбор - довериться доктору, который будет, к примеру, ошибаться в 10% случаев, или же сделать ставку на машину, которая дает неверный ответ в 3% случаев. В первом случае ответственность за ошибку будет нести доктор, а во втором - сам пользователь.

- В прошлом году компания Microsoft запустила чат-бот Tay. AI, который ей пришлось отключить буквально через сутки из-за того, что пользователи сети превратили «девочку-подростка» в настоящего расиста. Можно ли защитить подобные диалоговые системы от троллей и шутников?

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

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

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

Искусственный интеллект создал нейросеть December 15th, 2017

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


Инженеры из подразделения Google Brain весной текущего года продемонстрировали AutoML. Этот искусственный интеллект умеет без участия человека производить собственные уникальнейшие ИИ. Как выяснилось совсем недавно, AutoML смог впервые создать NASNet, систему компьютерного зрения. Данная технология серьёзно превосходит все созданные ранее людьми аналоги. Эта основанная на искусственном интеллекте система может стать отличной помощницей в развитии, скажем, автономных автомобилей. Применима она и в робототехнике - роботы смогут выйти на абсолютно новый уровень.

Развитие AutoML проходит по уникальной обучающей системе с подкреплением. Речь идёт о нейросети-управленце, самостоятельно разрабатывающей абсолютно новые нейросети, предназначенные для тех или иных конкретных задач. В указанном нами случае AutoML имеет целью производство системы, максимально точно распознающей в реальном времени объекты в видеосюжете.

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

При этом AutoML оценивает работу NASNеt и использует эту информацию для улучшения дочерней сети; этот процесс повторяется тысячи раз. Когда инженеры протестировали NASNet на наборах изображений ImageNet и COCO, она превзошла все существующие системы компьютерного зрения.

В Google официально заявили, что NASNet распознаёт с точностью равной 82,7%. Результат на 1.2 % превышает прошлый рекорд, который в начале осени нынешнего года установили исследователи из фирмы Momenta и специалисты Оксфорда. NASNet на 4% эффективнее своих аналогов со средней точностью в 43,1%.

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

При этом, конечно, возникают этические вопросы, связанные с опасениями по поводу ИИ: что, если AutoML будет создавать системы с такой скоростью, что общество просто за ними не поспеет? Впрочем, многие крупные компании стараются учитывать проблемы безопасности ИИ. Например, Amazon, Facebook, Apple и некоторые другие корпорации являются членами Партнерства по развитию ИИ (Partnership on AI to Benefit People and Society). Институт инженеров и электротехники (IEE) же предложил этические стандарты для ИИ, а DeepMind, например, анонсировал создание группы, которая будет заниматься моральными и этическими вопросами, связанными с применениями искусственного интеллекта.

Впрочем, многие крупные компании стараются учитывать проблемы безопасности ИИ. При этом, конечно, возникают этические вопросы, связанные с опасениями по поводу ИИ: что, если AutoML будет создавать системы с такой скоростью, что общество просто за ними не поспеет? Институт инженеров и электротехники (IEE) же предложил этические стандарты для ИИ, а DeepMind, например, анонсировал создание группы, которая будет заниматься моральными и этическими вопросами, связанными с применениями искусственного интеллекта. Например, Amazon, Facebook, Apple и некоторые другие корпорации являются членами Партнерства по развитию ИИ (Partnership on AI to Benefit People and Society).

Что такое искусственный интеллект?

Автором термина «искусственный интеллект» является Джон Маккарти, изобретатель языка Лисп, основоположник функционального программирования и лауреат премии Тьюринга за огромный вклад в области исследований искусственного интеллекта.
Искусственный интеллект — это способ сделать компьютер, компьютер-контролируемого робота или программу способную также разумно мыслить как человек.

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

Что такое нейронная сеть?

Идея нейросети заключается в том, чтобы собрать сложную структуру из очень простых элементов. Вряд ли можно считать разумным один-единственный участок мозга — а вот люди обычно на удивление неплохо проходят тест на IQ. Тем не менее до сих пор идею создания разума «из ничего» обычно высмеивали: шутке про тысячу обезьян с печатными машинками уже сотня лет, а при желании критику нейросетей можно найти даже у Цицерона, который ехидно предлагал до посинения подбрасывать в воздух жетоны с буквами, чтобы рано или поздно получился осмысленный текст. Однако в XXI веке оказалось, что классики ехидничали зря: именно армия обезьян с жетонами может при должном упорстве захватить мир.
На самом деле нейросеть можно собрать даже из спичечных коробков: это просто набор нехитрых правил, по которым обрабатывается информация. «Искусственным нейроном», или перцептроном, называется не какой-то особый прибор, а всего лишь несколько арифметических действий.

Работает перцептрон проще некуда: он получает несколько исходных чисел, умножает каждое на «ценность» этого числа (о ней чуть ниже), складывает и в зависимости от результата выдаёт 1 или -1. Например, мы фотографируем чистое поле и показываем нашему нейрону какую-нибудь точку на этой картинке — то есть посылаем ему в качестве двух сигналов случайные координаты. А затем спрашиваем: «Дорогой нейрон, здесь небо или земля?» — «Минус один, — отвечает болванчик, безмятежно разглядывая кучевое облако. — Ясно же, что земля».

«Тыкать пальцем в небо» — это и есть основное занятие перцептрона. Никакой точности от него ждать не приходится: с тем же успехом можно подбросить монетку. Магия начинается на следующей стадии, которая называется машинным обучением. Мы ведь знаем правильный ответ — а значит, можем записать его в свою программу. Вот и получается, что за каждую неверную догадку перцептрон в буквальном смысле получает штраф, а за верную — премию: «ценность» входящих сигналов вырастает или уменьшается. После этого программа прогоняется уже по новой формуле. Рано или поздно нейрон неизбежно «поймёт», что земля на фотографии снизу, а небо сверху, — то есть попросту начнёт игнорировать сигнал от того канала, по которому ему передают x-координаты. Если такому умудрённому опытом роботу подсунуть другую фотографию, то линию горизонта он, может, и не найдёт, но верх с низом уже точно не перепутает.

В реальной работе формулы немного сложнее, но принцип остаётся тем же. Перцептрон умеет выполнять только одну задачу: брать числа и раскладывать по двум стопкам. Самое интересное начинается тогда, когда таких элементов несколько, ведь входящие числа могут быть сигналами от других «кирпичиков»! Скажем, один нейрон будет пытаться отличить синие пиксели от зелёных, второй продолжит возиться с координатами, а третий попробует рассудить, у кого из этих двоих результаты ближе к истине. Если же натравить на синие пиксели сразу несколько нейронов и суммировать их результаты, то получится уже целый слой, в котором «лучшие ученики» будут получать дополнительные премии. Таким образом достаточно развесистая сеть может перелопатить целую гору данных и учесть при этом все свои ошибки.

Нейронную сеть можно сделать с помощью спичечных коробков — тогда у вас в арсенале появится фокус, которым можно развлекать гостей на вечеринках. Редакция МирФ уже попробовала — и смиренно признаёт превосходство искусственного интеллекта. Давайте научим неразумную материю играть в игру «11 палочек». Правила просты: на столе лежит 11 спичек, и в каждый ход можно взять либо одну, либо две. Побеждает тот, кто взял последнюю. Как же играть в это против «компьютера»?

Очень просто.

Берём 10 коробков или стаканчиков. На каждом пишем номер от 2 до 11.

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

Нейросеть всегда ходит первой. Для начала посмотрите, сколько осталось спичек, и возьмите коробок с таким номером. На первом ходу это будет коробок №11. Возьмите из нужного коробка любой камешек. Можно закрыть глаза или кинуть монетку, главное — действовать наугад.
Если камень белый — нейросеть решает взять две спички. Если чёрный — одну. Положите камешек рядом с коробком, чтобы не забыть, какой именно «нейрон» принимал решение. После этого ходит человек — и так до тех пор, пока спички не закончатся.

Ну а теперь начинается самое интересное: обучение. Если сеть выиграла партию, то её надо наградить: кинуть в те «нейроны», которые участвовали в этой партии, по одному дополнительному камешку того же цвета, который выпал во время игры. Если же сеть проиграла — возьмите последний использованный коробок и выньте оттуда неудачно сыгравший камень. Может оказаться, что коробок уже пустой, — тогда «последним» считается предыдущий походивший нейрон. Во время следующей партии, попав на пустой коробок, нейросеть автоматически сдастся.

Вот и всё! Сыграйте так несколько партий. Сперва вы не заметите ничего подозрительного, но после каждого выигрыша сеть будет делать всё более и более удачные ходы — и где-то через десяток партий вы поймёте, что создали монстра, которого не в силах обыграть.

Источники:

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


Последнее время все большее внимание ученых привлекает новое направление исследований - эмоциональные вычисления (Affective computing). Роль эмоций в эволюции естественного интеллекта велика, искусственный интеллект пока многое упускает в этом отношении, в нем невозможно воплотить многие явления, связанные с эмоциональной картиной, с эмоциональным состоянием человека. Ученым из области ИИ активно помогают когнитивные нейробиологи, психологи и философы. Нейробиологам удалось показать связь нейромодуляторов, принимающих активное участие в эмоциях человека, с принятием решений. Оказалось, что способность человека быстро принимать решения связана с тем, что информация в нашем мозгу эмоционально «расцвечена», мы часто принимаем решения просто под воздействием того или иного эмоционального импульса. Однако это совсем не так в современных вычислительных системах.

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

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

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

Марвин Мински (пионер в области ИИ и лауреат премии Тьюринга) заметил что эмоциональные циклы могут приводить к длительной «зацикленности». Он называет их «багом», то есть ошибкой: мы можем воспроизводить периодически то или иное эмоциональное состояние. Например, когда мы находимся в депрессии: неоднократно задаемся вопросом «Почему он так ужасно поступил со мной? Это совершенно несправедливо». Или, наоборот, мы воспроизводим эйфорическое состояние: если вы ездили на мотоцикле, то вы все время вспоминаете, как вам «классно» ездить на мотоцикле, просто потому, что вам это нравится. И в действительности вы уже не едете на мотоцикле, а просто вспоминаете это и находитесь в этом цикле.

В работе по интеграции эмоций в ИИ стоит выделить два направления, которые очень тесно связаны. Во-первых, определение эмоций человека по его лицу, жестикуляции и так далее (Affective computing). Это направление, которое очень интенсивно развивается в Соединенных Штатах под руководством Розалинд Пикард в MIT Media Lab. В 1997 году Пикард опубликовала свою книгу Affective Computing, послужившую отправной точкой исследований. В ее лаборатории проводятся интересные эксперименты: участники закрепляют камеры перед собой, с некой периодичностью снимают выражения лиц и одновременно собирают данные в динамике: проводимость кожи, пульс, давление и так далее, ассоциируя эмоциональную реакцию и показания нательных датчиков.

Другое направление, которым в том числе и мы занимаемся (лаборатория машинного понимания ИТИС КФУ), - Affective computation, это воспроизведение человеческих эмоций в вычислительных системах. У машин нет нейронов, нет нейромодуляторов, нет биохимии, есть только вычислительные процессы. Соответствие между вычислительными процессами и мыслительными далеко не линейно. Приходится создавать достаточно сложные теории, чтобы понять, из чего, в целом, собираются те или иные психологические феномены и как мы можем воспроизвести это в вычислительных системах.


Головной мозг человека потребляет примерно 20 Ватт, как лампочка. Последняя симуляция работы 1% головного мозга, проведенная в японском Институте RIKEN в 2013 году, потребовала 250 суперкомпьютеров. Это достаточно серьезный успех. Однако на борту каждого суперкомпьютера находилось 80 000 процессоров, которые потребляли гораздо больше чем 20 Ватт. И при этом симуляция примерно в тысячу раз медленнее реальной работы головного мозга. Пока эффективность явно не на стороне вычислительных систем. Это говорит о том, что нам нужна новая компьютерная архитектура. На ее создание нацелен проект BRAIN: правительство США выделяет $300 млн в год для воспроизведения человеческого мозга в виде микросхем и программного обеспечения.

На сегодняшний день создана нейробиологически инспирированная не-фон-Неймановская архитектура TrueNorth (фон-Неймановская - архитектура обычных компьютеров). Она закладывает основы для нового пути развития вычислительных систем: воссоздания нейронных сетей не с помощью программного обеспечения, а в виде микросхем, «железа». Новые микросхемы моделируют до миллиона нейронов. Специалисты из IBM пошли дальше: они уже создали материнскую плату, в которой собрали массив 4х4, всего 16 млн нейронов.

С одной стороны, это не так много, ибо количество нейронов в коре человеческого мозга от 19 млрд до 23 млрд, а общий объем - 86 млрд. С другой стороны, это уже интересные масштабы. Например, в коре головного мозга мыши - млекопитающего, у которого есть весь необходимый эмоциональный багаж, - только 4 млн нейронов.

Еще интереснее посмотреть на историческую перспективу: в 2011 году у той же IBM была микросхема, которая воспроизводила всего 256 нейронов. Таким образом, произошел скачок на три порядка. Если будет следующий скачок, то, мы сможем выйти на масштабы коры человеческого мозга. И тогда, возможно, появятся самообучающиеся системы сравнимые по мощности с человеческим мозгом.

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

Максим Таланов
кандидат технических наук, руководитель Лаборатории Машинного Понимания Казанского федерального университета, преподаватель Университета Иннополис
forbes.ru

Комментарии: 1

    Сэм Харрис

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

    Михаил Бурцев

    Почему за полвека усилий не удалось создать искусственный интеллект? И как киборги помогают понять работу мозга? Об этом рассказывает Михаил Бурцев, кандидат физико-математических наук, руководитель лаборатории нейронных систем и глубокого обучения МФТИ.

    Виталий Дунин-Барковский

    Как смоделировать мозг? Постижим ли человеческий мозг? Как алгоритмизировать сознание? И можно ли скопировать его на неорганический носитель? Ответы на эти вопросы помогает найти Виталий Дунин-Барковский, доктор физико-математических наук, профессор, заведующий отделом нейроинформатики Центра оптико-нейронных технологий НИИСИ РАН.

    Иван Иванчей

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

    Горбань А. Н.

    Игрушка ли нейрокомпьютер? В чем истинные преимущества нейрокомпьютеров? В каких областях преимущества нейронных систем наиболее очевидны? Избыточность - это хорошо или плохо? Какие задачи под силу только нейрокомпьютеру?

    Евгений Путин

    Евгений Путин, аспирант кафедры «Компьютерные Технологии» университета ИТМО. В рамках диссертации Евгений исследует проблемы интеграции концепции выбора признаков в математический аппарат искусственных нейронных сетей. Евгений расскажет о том, как устроены нейронные сети, что они могут делать сейчас, на что будут способны в недалеком будущем и ждать ли прихода Скайнета.

    Впервые был достигнут масштаб, соответствующий человеческому мозгу - 530 миллиардов нейронов и 137 триллионов синапсов. Симуляция происходила в 1542 раза медленнее реального времени. В ней были задействованы все 1 572 864 ядер и полтора петабайта памяти.

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

    Сергей Марков

    На лекции мы обсудим вторую весну искусственного интеллекта в цифрах и фактах, ключевые работы в области искусственного интеллекта и машинного обучения в 2017 году. Поговорим о распознавании изображений, речи, обработке естественного языка и о других направлениях исследований; обсудим новые модели и оборудование 2017 года. Также поговорим о применении ИИ и машинного обучения в бизнесе, медицине и науке, а также обсудим, чего мы ждем от искусственного интеллекта и машинного обучения в 2018 году.

    Сергей Марков

    Гамбургский счет

    В 1950 году английский ученый Алан Тьюринг в статье "Вычислительные машины и разум" задался вопросом: "Может ли машина понимать человека?". Так родился знаменитый тест Тьюринга, в котором компьютер пытался обмануть людей. Но как компьютер понимает человека и чего он пока понять не может? Об этом по гамбургскому счету мы решили спросить специалиста в области машинного обучения, директора информационных технологий компании "Activebusinesscollection" Сергея Маркова.

  • Tutorial

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

Под катом gif-файлов мегабайт на 10.

Об игре

В игре вы управляете мотоциклом, который оставляет за собой стену из света. Игровое поле ограничено, а у соперников такие же мотоциклы. Мотоцикл едет постоянно, вы лишь можете поворачивать. Свободное место на поле кончается, и избегать препятствия становится сложнее. Побеждает тот, кто дольше всех продержится. Клон игры я сделал браузерным многопользовательским с использованием node.js и socket.io. Управление из двух кнопок – поворот влево и поворот вправо.

Интерфейс бота

Так как я использую socket.io, то обработка игроков на сервере у меня была в виде работы над массивом специальных объектов socket, которые создаёт socket.io. Из этих объектов я использовал только id, функции emit и broadcast. А значит безболезненно для самой игры можно реализовать интерфейс socket и использовать его в обработке, будто играет ещё один пользователь. Я назвал класс BotSocket .
Метод emit(event, data) у бота выполняет почти такие же действия что и у клиента при входящих данных от сервера, а именно:
  1. Сохраняет данные обо всех играющих мотоциклах при их добавлении
  2. Сохраняет ссылку на свой мотоцикл при его добавлении
  3. Обновляет данные обо всех играющих мотоциклах
  4. Сбрасывает состояния при перезапуске игры
Для передачи команд управления своим мотоциклом на сервер потребовалось сохранить ссылку на объект игры, который обрабатывает такие команды от обычных пользователей. Метод класса Game у меня назван onControl(socket, data) , поэтому я добавил метод в BotSocket
BotSocket.prototype.control = function(data) { this.game.onControl(this, data); };
При поступлении от сервера команды обновления данных мотоциклов (было совершено их передвижение) я проверяю, есть ли у меня вообще подконтрольный мотоцикл, не столкнулся ли он еще и был ли он перемещён, и, в случае успеха, я вызываю основной метод для работы ИИ - update() .
Интерфейс готов, теперь можно добавить сам ИИ.

Искусственный интеллект

Как бы громко это не звучало, но в играх игроков, за которых играет компьютер, принято называть именно ИИ, либо ботами. Объект BotSocket обладает необходимыми данными об игре, чтобы принять решение. Вариантов решения может быть всего три:
  1. Ничего делать, ехать прямо
  2. Повернуть направо
  3. Повернуть налево

Когда я решил написать бота, я понятия не имел, как это можно сделать. Я попробовал очень простой код:
BotSocket.prototype.update = function() { var r = Math.random(); if (r > 0.95) { this.control({"button": "right"}); } else if (r >
Поведение было примерно таким:

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

Но хотелось, чтобы он жил как можно больше. Я стал искать информацию о том, как пишут ИИ к играм. Нашел статьи , которые описывали разные подходы. Но я искал что-то чрезвычайно простое. Я нашел на хабре в одной из статей про бота для игры вроде Zuma упоминание волнового метода . Он же алгоритм Ли. Мне он показался очень простым и подходящим. Это алгоритм поиска кратчайшего пути из одной точки в другую по полю, где клетки могут быть либо свободными, либо занятыми. Суть простая. Мы начинаем из точки назначения, присваиваем ей значение 1 и помечаем все соседние свободные клетки цифрой на единицу больше. Затем берём все соседние свободные помеченных и снова помечаем на единицу больше. Так расширяемся на всё поле, пока не дойдем до точки назначения. А путь строим поиском из соседних по уменьшению числа, пока не дойдем до 1. Я смотрел алгоритмы поиска кратчайших путей в графах, но этот мне показался наиболее подходящим.

Я перенёс алгоритм копипастой из страницы в вики, дал ему имя BotSocket.prototype.algorithmLee . Для поля я создал сначала объект battleground , в котором при каждом обновлении помечал занятые точки с их координатами. А в алгоритме Ли сводил это поле к такому же, но с шагом 1.

Нужно было как-то определять точку назначения. Я решил выбирать её случайно через определенные интервалы времени. Сделал метод для поиска случайной свободной точки на поле:
BotSocket.prototype.getDesiredPoint = function() { var point = ; var H = Object.keys(this.battleground).length - 1; var W = Object.keys(this.battleground).length - 1; var x, y, i, j; var found = false; var iter = 0; do { i = this.getRandomInt(1, W); j = this.getRandomInt(1, H); x = i * this.moveStepSize; y = j * this.moveStepSize; if (this.battleground[x][y] === this.BG_EMPTY) { found = true; } iter++; } while (!found && iter < 100); point = ; return point; };

Теперь я мог переписать update:
BotSocket.prototype.update = function() { if (!this.desiredPoint || this.movements % this.updDestinationInterval === 0) { this.desiredPoint = this.getDesiredPoint(); } if (!this.desiredPoint) { return; } var currentPoint = ; var path = this.algorithmLee(currentPoint, this.desiredPoint); if (path && typeof path !== "undefined") { this.moveToPoint(path); } else { this.desiredPoint = this.getDesiredPoint(); } };
Здесь упоминается метод moveToPoint , который поворачивает, если нужно, чтобы достигнуть первую точку из кратчайшего пути с учётом текущего направления.

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

Бот на стороне клиента

Я решил попробовать перенести бота на клиентскую часть. Так как проект на node.js, я могу использовать написанный код для бота и на стороне клиента. Для этого я расширил BotSocket отдельным клиентским файлом, который переопределял методы emit() и control() , чтобы правильно взаимодействовать с сервером без ссылки на объект game.
Локально всё работало отлично, а после деплоя на удалённый сервер была какая-то странная картина:

Долго думая, я понял, что дело в задержке. Бот отправлял команду поворота, но она доходила после обновления его позиции на сервере, отчего он часто не мог попасть на прямой путь к желаемой точке. Но я хотел нормального бота на клиентской стороне. Поэтому решил учитывать задержку. Для этого написал снова расширение BotSocket. Статья получается длинной, так что опишу основные решения. Перед вызовом алгоритма Ли вместо текущей точки я подставлял прогнозируемое положение с учетом текущего положения и направления, а так же множителя задержки. Множитель задержки – это число, во сколько раз превосходит задержка частоту обновления положения на сервере. Предсказание будущей точки мне еще понадобилось в методе moveToPoint() .

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


Мой красненький, остальные серверные.

Самое важное – попробуйте сделать бота сами

Основная цель этой статьи – пробудить интерес к написанию бота. Я сделал много, чтобы победить вашу лень. Для этого я добавил возможность подгружать свой собственный скрипт с ботом, который будет расширять мой базовый клиентский класс. Зайдите на проект и нажмите на текст «Show options for room with your own bot», а затем на кнопку «Create room for test your own bot». Будет создана комната, где можно легко применять ботов, по умолчанию вашим ботом будет бот без учета задержки. Теперь настало время для вашего кода.
Два простых варианта для использования вашего кода в деле, используйте любой:
  1. Выкладывайте js-файл на любой сервер, который будет доступен вашему браузеру. Url к вашему скрипту вставляйте в игре рядом с кнопкой “Load your AI script”. После нажатия на эту кнопку будет создан и заполнен новый объект botSocket , у которого будет вызван метод start() .
  2. Используйте консоль браузера (Firebug – F12, Firefox - Ctrl+Shift+K, Chrome – Ctrl+Shift+J, другие – ).

Если вы определились с методом ввода вашего кода, попробуйте переопределить методы класса BotSocket . Для начала самое простое:
BotSocket.prototype.update = function() { var r = Math.random(); if (r > 0.95) { this.control({"button": "right"}); } else if (r > 0.90) { this.control({"button": "left"}); } }

После этого пересоздайте объект botSocket, введя
botSocket = null;
При этом код на странице сам пересоздаст и заполнит объект. Этим вы измените стандартное поведение бота на случайное. А дальше уже дело для вашей фантазии или глубоких знаний.
Вы так же можете подключить скрипт моего улучшенного бота с учетом задержки, вставив в url для бота https://raw.github.com/rnixik/tronode-js/master/public/javascripts/MyBotSocketClient.js

Заключение

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

Если у вас нет под рукой node.js, вы можете воспользоваться развернутыми мной приложениями:

1) tronode.livelevel.net - самая дешевая VPS на DigitalOcean,
2) tronode-js.herokuapp.com - бесплатная виртуальная единица на Heroku.

Первый, скорее всего, первым может не справиться с нагрузкой, а второй на некоторых компьютерах сбрасывает socket.io-транспорт в xhr-polling, из-за этого игра очень сильно лагает.
Если вы хотите узнать больше, о том, как я программировал игровую логику, то можете прочитать . Там же о развертке node.js и немного о графической части.

Если у вас нет аккаунта на хабре, то задать вопросы или прислать свои интересные предложения можете мне на почту [email protected].

Теги: Добавить метки



Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: