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

  • Перевод

Понимающие язык машины были бы очень полезны. Но мы не знаем, как их построить.

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

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

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

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

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

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

Через несколько часов после 37-го хода AlphaGo выиграла игру и стала лидировать со счётом 2:0 в матче из пяти игр. После этого Седоль стоял перед толпой журналистов и фотографов и вежливо извинялся за то, что подвёл человечество. «Я потерял дар речи»,- говорил он, моргая под очередями фотовспышек.

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

Но несмотря на эти впечатляющие подвижки одна из основных возможностей никак не даётся ИИ: язык. Системы вроде Siri и IBM Watson могут распознавать простые устные и письменные команды и отвечать на простые вопросы, но они не в состоянии поддерживать разговор или на самом деле понимать используемые слова. Чтобы ИИ изменил наш мир, это должно поменяться.

Хотя AlphaGo не разговаривает, в нём есть технология, способная дать лучшее понимание языка. В компаниях Google, Facebook, Amazon и в научных лабораториях исследователи пытаются решить эту упрямую проблему, используя те же инструменты ИИ – включая глубокое обучение – что отвечают за успех AlphaGo и возрождение ИИ. Их успех определит масштабы и свойства того, что уже начинает превращаться в революцию ИИ. Это определит наше будущее – появятся ли у нас машины, с которыми будет легко общаться, или системы с ИИ останутся загадочными чёрными ящиками, пусть и более автономными. «Никак не получится сотворить человекоподобную систему с ИИ, если в её основе не будет заложен язык,- говорит Джош Тененбаум , профессор когнитивных наук и вычислений из MIT. – Это одна из самых очевидных вещей, определяющих человеческий интеллект».

Возможно, те же самые технологии, что позволили AlphaGo покорить го, позволят и компьютерам освоить язык, или же потребуется что-то ещё. Но без понимания языка влияние ИИ будет другим. Конечно, у нас всё равно будут нереально мощные и интеллектуальные программы вроде AlphaGo. Но наши отношения с ИИ будут не такими тесными, и, вероятно, не такими дружественными. «Самым главным вопросом с начала исследований было „Что, если бы вы получили устройства, интеллектуальные с точки зрения эффективности, но не похожие на нас с точки зрения отсутствия сочувствия тому, кто мы есть?“ – говорит Терри Виноград , заслуженный профессор Стэнфордского университета. „Можно представить машины, основанные не на человеческом интеллекте, работающие с большими данными и управляющие миром“.

Говорящие с машинами

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

Я начал с Винограда, живущего в пригороде на южном краю Стэнфордского кампуса в Пало-Альто, недалеко от штаб-квартир Google, Facebook и Apple. Его кудрявые седые волосы и густые усы придают ему вид почтенного учёного, и он заражает своим энтузиазмом.

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

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

Но есть причины и для оптимизма. Джозеф Вейзенбаум , профессор MIT немецкого происхождения, пару лет назад сделал первую программу-чатбота. Её звали ELIZA и она была запрограммирована отвечать так, как психолог из мультиков, повторяя ключевые части утверждений или задавая вопросы, вдохновляющие на продолжение разговора. Если вы сообщали ей, что злитесь на мать, программа могла бы ответить „А что ещё приходит вам в голову, когда вы думаете о своей матери?“. Дешёвый трюк, который работал на удивление хорошо. Вейзенбаум был шокирован, когда некоторые испытуемые стали поверять свои тёмные секреты его машине.

Виноград хотел сделать нечто, что могло бы убедительно делать вид, что понимает язык. Он начал с уменьшения области действия проблемы. Он создал простое виртуальное окружение, „блочный мир“, состоящий из набора вымышленных объектов на вымышленном столе. Затем он создал программу, назвав её SHRDLU, способную разобрать все существительные, глаголы и простые правила грамматики, необходимые для общения в этом упрощённом виртуальном мире. SHRDLU (бессмысленное слово, составленное из стоящих в ряд букв клавиатуры линотипа) могла описывать предметы, отвечать на вопросы об их взаимоотношениях и изменять блочный мир в ответ на вводимые команды. У неё даже была некая память и если вы просили её передвинуть „красный конус“, а затем писали про некий конус, она предполагала, что вы имеете в виду этот красный конус, а не какой-либо другой.

SHRDLU стал знаменем того, что в области ИИ наметился огромный прогресс. Но это была всего лишь иллюзия. Когда Виноград попытался расширить блочный мир программы, правила, необходимые для учёта дополнительных слов и сложности грамматики стали неуправляемыми. Всего лишь через несколько лет он сдался и оставил область ИИ, сконцентрировавшись на других исследованиях. „Ограничения оказались гораздо сильнее, чем тогда казалось“,- говорит он.

Виноград решил, что при помощи доступных в то время инструментов невозможно научить машину по-настоящему понимать язык. Проблема, по мнению Хьюберта Дрейфуса , профессора философии в Калифорнийском университете в Беркли, высказанному им в книге 1972 года „Чего компьютеры не могут“ , в том, что множество человеческих действий требуют инстинктивного понимания, которое невозможно задать набором простых правил. Именно поэтому до начала матча между Седолом и AlphaGo многие эксперты сомневались, что машины смогут овладеть игрой го.

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

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

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

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

В 1980-х исследователи выдали хитрую идею превращения языка в такой тип проблемы, с которым нейросеть может справиться. Они показали, что слова можно представлять в виде математических векторов, что позволяет подсчитывать сходство связанных слов. К примеру, „лодка“ и „вода“ близки в векторном пространстве, хотя и выглядят по-разному. Исследователи из Монреальского университета под руководством Йошуа Бенджио и ещё одна группа из Google использовали эту идею для построения сетей, в которых каждое слово в предложении используется для построения более сложного представления. Джоффри Хинтон , профессор из Университета Торонто и видный исследователь глубокого обучения, работающий также и в Google, называет это „мысленным вектором“.

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

Смысл жизни

Сидя в конференц-зале в сердце наполненной суетой штаб-квартиры Google в Маунтин Вью (Калифорния), один из исследователей компании, разработавший этот подход, Куок Ли , рассуждает об идее машины, способной поддерживать реальный разговор. Амбиции Ли объясняют, чем могут быть полезны говорящие машины. „Мне нужен способ симуляции мыслей в машине,- говорит он. – А если вы хотите симулировать мысли, то вы сможете спросить машину, о чём она думает“.

Google уже обучает свои компьютеры основам языка. В мае компания обнародовала систему Parsey McParseface, способную распознавать синтаксис, существительные, глаголы и другие элементы текста. Несложно видеть, как понимание языка может помочь компании. Алгоритм поиска Google когда-то просто отслеживал ключевые слова и ссылки между веб-страницами. Теперь система RankBrain читает текст страниц, чтобы понять его смысл и улучшить результаты поиска. Ли хочет продвинуть эту идею ещё дальше. Адаптируя систему, оказавшуюся полезной для переводов и подписей картинок, они с коллегами создали Smart Reply, читающий содержимое писем на Gmail и предлагающую возможные ответы. Они также создали программу, обучившуюся на основе чата поддержки Google отвечать на простые технические вопросы.

Недавно Ли создал программу, способную генерировать сносные ответы на непростые вопросы. Она тренировалась на диалогах из 18 900 фильмов. Некоторые ответы пугающе точно попадают в точку. К примеру, Ли спросил „В чём смысл жизни?“ и программа ответила „В служении высшему добру“. „Неплохой ответ,- вспоминает он с ухмылкой. – Возможно, лучше, чем я бы ответил сам“.

Есть только одна проблема, которая становится очевидной при взгляде на большее количество ответов системы. Когда Ли спросил „Сколько ног у кошки?“, система ответила „Думаю, четыре“. Затем он спросил „Сколько ног у сороконожки?“ и получил странный ответ „Восемь“. По сути, программа Ли не понимает, о чём говорит. Она понимает, что некоторые комбинации символов сочетаются вместе, но не понимает реальный мир. Она не знает, как выглядит сороконожка, или как она двигается. Это всё ещё иллюзия интеллекта, без здравого смысла, который люди принимают, как само собой разумеющееся. Системы глубокого обучения в этом смысле довольно шаткие. Система от Google, создающая подписи к изображениям, иногда делает странные ошибки, к примеру, описывает дорожный знак как холодильник с едой.

По странному совпадению, соседом Терри Винограда в Пало Альто оказался человек, который может помочь компьютерам лучше разобраться в реальном смысле слов. Фей-Фей Ли , директор Стэнфордской лаборатории искусственного интеллекта, была в декретном отпуске во время моего визита, но она пригласила меня домой и гордо представила мне своего трёхмесячного ребёнка, Финикс. „Обратите внимание, что на вас она смотрит больше, чем на меня,- сказала Ли, когда Финикс уставилась на меня. – Это потому что вы новый; это раннее распознавание лиц“.

Большую часть своей карьеры Ли исследовала вопросы машинного обучения и компьютерного зрения. Несколько лет назад под её руководством была проведена попытка создания базы данных из миллионов изображений объектов, каждое из которых было подписано соответствующими ключевыми словами. Но Ли считает, что машинам необходимо более сложное понимание происходящего в мире и в этом году её команда выпустила другую базу данных с изображениями, аннотации к которым были гораздо богаче. К каждой картинке люди сделали десятки подписей: „Собака на скейте“, „У собаки густой развевающийся мех“, „Дорога с трещинками“ и так далее. Они надеются, что системы машинного обучения научатся понимать физический мир. „Языковая часть мозга получает очень много информации, в том числе и от визуальной системы,- говорит Ли. – Важной частью ИИ будет интеграция этих систем“.

Этот процесс ближе к обучению детей, связывающих слова с объектами, взаимоотношениями и действиями. Но аналогия с обучением людей не заходит слишком далеко. Детишкам не нужно видеть собаку на скейте, чтобы представить её себе или описать словами. Ли верит, что сегодняшних инструментов для ИИ и машинного обучения не будет достаточно для того, чтобы создать настоящий ИИ. „Это не просто будет глубокое обучение с большим набором данных,- говорит она. – Мы, люди, очень плохо справляемся с подсчётами больших данных, но очень хорошо – с абстракциями и творчеством“.

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

Специалисты по когнитивным наукам, например, Тененбаум из MIT, считают, что сегодняшним нейросетям не хватает критичных компонентов разума – вне зависимости от размера этих сетей. Люди способны относительно быстро обучаться на сравнительно малых объёмах данных, и у них есть встроенная возможность эффективного моделирования трёхмерного мира. „Язык построен на других возможностях, вероятно, лежащих более глубоко и присутствующих в младенцах ещё до того, как они начинают владеть языком: визуальное восприятие мира, работа с нашим двигательным аппаратом, понимание физики мира и намерений других существ“,- говорит Тененбаум.

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

Объяснитесь

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

Гудман со своими студентами разработали язык программирования Webppl, который можно использовать для наделения компьютеров вероятностным здравым смыслом, что при разговорах оказывается довольно важным. Одна экспериментальная версия умеет распознавать игру слов, а другая – гиперболы. Если ей сказать, что некоторым людям приходится проводить „вечность“ в ожидании столика в ресторане, она автоматически решит, что использование буквального значения этого слова в данном случае маловероятно и что люди, скорее всего, ждут довольно долго и раздражаются. Систему пока нельзя назвать истинным интеллектом, но она показывает, как новые подходы могут помочь ИИ-программам разговаривать чуть более жизненно.

Также пример Гудмана показывает, как сложно будет научить машины языку. Понимание смысла понятия „вечность“ в определённом контексте – пример того, чему должны будут научиться ИИ-системы, при этом это на самом деле довольно простая и рудиментарная вещь.

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

»В целом, системы глубокого обучения вызывают благоговейный трепет,- говорит Джон Леонард , профессор, изучающий робомобили в MIT. – С другой стороны, их работу довольно сложно понять".

Компания Toyota, изучающая различные технологии автономного вождения, запустила в MIT исследовательский проект под руководством Джеральда Сассмана , эксперта по ИИ и языкам программирования, с целью разработки системы автономного вождения, способной объяснить, почему она в какой-то момент совершила то или иное действие. Очевидным способом дать такое объяснение был бы вербальный. «Создавать системы, сознающие свои знания – это очень сложная задача,- говорит Леонард, руководящий другим проектом Toyota в MIT. – Но, да, в идеале они должны дать не просто ответ, а объяснение».

Через несколько недель после возвращения из Калифорнии я встретился с Дэвидом Сильвером , исследователем из отдела Google DeepMind и разработчиком AlphaGo. Он выступал с рассказом о матче против Седоля на научной конференции в Нью-Йорке. Сильвер объяснил, что когда программа во второй игре сделала свой решающий ход, его команда была удивлена не меньше остальных. Они лишь могли видеть, что AlphaGo предсказала шансы на выигрыш, и это предсказание мало менялось после 37-го хода. Только несколько дней спустя, тщательно проанализировав игру, команда сделала открытие: переварив предыдущие игры, программа подсчитала, что игрок-человек может сделать такой ход с вероятностью в 1 к 10 000. А её тренировочные игры показывали, что такой манёвр обеспечивает необычайно сильное позиционное преимущество.

Так что, в каком-то смысле, машина знала, что этот ход ударит по слабому месту Седоля.

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

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

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

LISP


Первый компьютерный язык, применяемый для создания искусственного интеллекта - ЛИСП. Этот язык является довольно таки гибким и расширяемым. Такие особенности, как быстрое прототипирование и макросы очень полезны в создании ИИ. LISP - это язык, который превращает сложные задачи в простые. Мощная система объектно-ориентированности делает LISP одним из самых популярных языков программирования для искусственного интеллекта.

Java

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

Основными особенностями java являются: легкая отладка, хорошее взаимодействие с пользователем, простота работы с большими проектами. Проекты, созданные с помощью языка Java имеют привлекательный и простой интерфейс.

Prolog

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

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

Python

Python - широко используется программистами из-за его чистой грамматики и синтаксиса, приятного дизайна. Различные структуры данных, куча Фреймворков тестирования, соотношение высокого уровня и низкого уровня программирования, которые делают Питон одним из самых популярных языков программирования для искусственного интеллекта.

История развития ИИ

Для того, чтобы увидеть связь между ИИ и языком программирования, давайте рассмотрим наиболее важные события в истории ИИ. Все началось в 1939 году, когда робот Электро был представлен на Всемирной выставки. Следующий робот был построен в 1951 году, Эдмундом Беркли.

Робот Робби был построен в 1956 году. К сожалению, нет информации о том, как он был разработан. В 1958 году, был изобретен язык программирования ЛИСП. Хотя этот язык был разработан 60 лет назад, он до сих пор остается основным языком для многих программ искусственного интеллекта.

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

Система искусственного интеллекта Dendral, была построена в 1965 году. Она помогала легко определять молекулярную структуру органических соединений. Эта система была написана на Лиспе.

В 1966 году, Weizenbaum создал Элизу, первого виртуального собеседника. Одна из самых знаменитых моделей назывался Доктор, он отвечал на вопросы в стиле психотерапевта. Этот бот был реализован при сопоставлении образцов техники. Первая версия Элизы была написана на SLIP, список обработки языка был разработан Weizenbaum. Позже одна из его версий была переписана на Лиспе.

Первый мобильный робот, запрограммированный на Лиспе был Шеки. С помощью решения задач программы прокладок и датчиков, шейки двигался, включал и выключал свет, поднимался вверх и вниз, открывал двери, закрывал двери, толкал предметы, и двигал вещи. Перемещался Шеки со скоростью 5 км в час.

В ближайшие 15 лет мир увидел множество удивительных изобретений: Сторожевого робота Деннинг, ЛМИ Лямбда, Omnibot 2000, MQ-1 Predator беспилотный, Ферби, АЙБО робот собака, и Хонда АСИМО.

В 2003 году iRobot изобрел робот-пылесос Roomba. Разработанный на Лиспе, это автономный пылесос моет полы, используя определенные алгоритмы. Он обнаруживает препятствия и обходит их.


А какой язык программирования используете вы, для разработки программ с ИИ? Напишите о ваших работах в комментариях или в нашей группе вконтакте.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AIML

Проект A.L.I.C.E. - это не отсылка к известной франшизе «Обитель зла», а название виртуального собеседника, способного разговаривать на человеческом языке. Предпосылки к его появлению датированы 1966 годом и проектом Элиза (ELIZA) - базой данных, построенной по принципу шаблонных ответов. В конце 90-х она получила развитие A.L.I.C.E. в виде новых возможностей или более сложной структуры. Для создания этого и использовался язык AIML (Artificial Intelligence Markup Language).

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

IPL

Information Processing Language был разработан в 1956 году, является по сути языком ассемблера для списков и лежит где-то на обратной стороне понятности по отношению к AIML. Здесь вам приходится оперировать не человеческим языком, а бесконечным числом символов, регистров, команд и ячеек. Он абсолютно неэффективен в плане построения условного киборга, то есть сложной системы, но определить тип данных или объем выделяемой памяти он сможет невероятно быстро. Если вы конечно сможете на нем что-то создать.

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

STRIPS

А вот это очень интересный образец. Название расшифровывается, как Stanford Research Institute Problem Solver и он является так называемым языком действия. Структура программы на STRIPS состоит из трех блоков: начальное состояние; список целей, то есть то состояние, которое в результате должно быть получено; собственно сами действия - основное тело программы.

Вот вам простой пример на языке STRIPS из Википедии . Есть обезьяна, которая находится в точке А, есть бананы, подвешенные в точке B, и есть коробка в точке C, забравшись на которую обезьяна сможет схватить бананы:

Initial state: At(A), Level(low), BoxAt(C), BananasAt(B)
Goal state: Have(Bananas)
Actions:
// move from X to Y
_Move(X, Y)_
Preconditions: At(X), Level(low)
Postconditions: not At(X), At(Y)

// climb up on the box
_ClimbUp(Location)_
Preconditions: At(Location), BoxAt(Location), Level(low)
Postconditions: Level(high), not Level(low)

// climb down from the box
_ClimbDown(Location)_
Preconditions: At(Location), BoxAt(Location), Level(high)
Postconditions: Level(low), not Level(high)

// move monkey and box from X to Y
_MoveBox(X, Y)_
Preconditions: At(X), BoxAt(X), Level(low)
Postconditions: BoxAt(Y), not BoxAt(X), At(Y), not At(X)

// take the bananas
_TakeBananas(Location)_
Preconditions: At(Location), BananasAt(Location), Level(high)
Postconditions: Have(bananas)

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

POP-11

Возвращаясь в 60-е годы к первым серьёзным попыткам создать искусственный интеллект, нельзя не упомянуть о языке POP-1, испытавшем на себе влияние многих языков того времени, но не снискавшего славу. К слову, POP-2 был куда успешнее и даже дожил до наших днейю На сегодняшний день актуальной является версия POP-11, предназначенная для работы со средой разработки Poplog (правда, в ней вы также можете использовать LISP, Prolog и Standard ML).

Язык POP-11 является функциональным и мультипарадигмальным, синтаксис заимствован от ALGOL, общий подход к коду больше похож на LISP. Вот маленький отрывок из кода работы с памятью:

define auxmemo(O1, Prop, P,n, ref_i)->O2;

Lvars O1,O2, Prop, P, n,i, ref_i;
ref_i.cont-1 ->> i -> ref_i.cont;
if i = 0 then n -> ref_i.cont;
clearproperty(Prop);
endif;

P(O1) -> O2;
O2 -> Prop(O1);

;;; P: Procedure
;;; n: number of values to keep, then the cache is cleared and
;;; memoizing restarts.
;;;
define newmemo(P,n);
newanyproperty(, n, false, false, syshash, nonop=, false, undef,
auxmemo(%P,n,consref(n)%));
enddefine;

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

Wolfram

Язык, разработанный компанией Wolfram Research, входящий в комплект системы компьютерной алгебры Mathematica. Язык мультипарадигмальный, специализирующийся на символических вычислениях, на логическом и функциональном программировании. Несмотря на то, что язык существует с конца 80-х годов 20 века, выпущен официально он был лишь 4 года назад.

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

Кстати, вот интересный факт, косвенно связанный с Wolfram. Язык пришельцев, который вы могли видеть в недавнем фильме «Прибытие», был разработан создателями Wolfram (отцом и сыном) и частично унаследовал его алгоритмы.

Planner

Последний на сегодня по порядку, но совсем не последний по востребованности, функционально-логический язык Planner. Разработан он был на стыке 60-х и 70-х годов 20 века в MIT и был призван расширить возможности тогда уже популярного языка LISP. В синтаксисе это выражается в повышении удобочитаемости, вызванной, к примеру, возможностью использовать и круглые, и квадратные скобки. Но конечно совсем не это главная его суть.

Главное удобство Planner - это механизмы работы с переменными средами и задачами. При разработке ИИ вы задаёте начальные условия, так называемые «теоремы», описывающие используемую среду. Теорем при этом может быть много, просто в случае несоответствия среды исходные будут отвергаться, а другие подтверждаться. Также в процессе выполнения программы и механизмах перебора могут отвергаться и исключаться из дальнейшего рассмотрения определённые решения, которые не имеют конечного успеха. Обычно подобные вещи программисту приходится реализовывать самостоятельно большим объёмом текста, но в Planner это занимает всего несколько строк. А ведь именно это и есть главный принцип, отличающий язык ИИ от любого другого популярного языка.

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

Железные люди Анри Дро

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

Созданию первых автоматических механизмов с программным управлением положили начало в конце XVΙΙΙ века европейские часовые мастера. Наиболее преуспели на этом поприще швейцарские специалисты отец и сын Пьер-Жак и Анри Дро. Ими создана целая серия ("пишущий мальчик", "рисовальщик", "музыкантша") в основе управления которыми лежали часовые механизмы. Именно в честь Анри Дро в дальнейшем все программируемые человекоподобные автоматы стали называть "андроидами".

У истоков программирования

Основы программирования промышленных роботов были заложены на заре XIX века во Франции. Здесь же и были разработаны первые программы для автоматических текстильных станков (прядильных и ткацких). Стремительно растущая армия Наполеона остро нуждалась в обмундировании и, следовательно, тканях. Изобретатель из Лиона Жозеф Жаккар предложил способ быстрой перенастройки ткацкого станка для производства различных видов продукции. Нередко эта процедура требовала огромного количества времени, колоссальных усилий и внимания целого коллектива. Суть нововведения сводилась к использованию картонных карточек с перфорированными отверстиями. Иглы, попадая в просеченные места, необходимым образом смещали нити. Смена карт быстро проводилась оператором станка: новая перфокарта - новая программа - новый тип ткани или узора. Французская разработка стала прообразом современных автоматизированных комплексов, роботов с возможностью программирования.

Идею, предложенную Жаккаром, с восторгом использовали в своих автоматических устройствах многие изобретатели:

  • Начальник статистического управления С. Н. Корсаков (Россия, 1832 г.) - в механизме для сравнивания и анализа идей.
  • Математик Чарльз Бэббидж (Англия, 1834 г.) - в аналитической машине для решения широкого круга математических задач.
  • Инженер (США, 1890 г.) - в устройстве для хранения и обработки статистических данных (табуляторе). Для заметки: в 1911 году компания. Холлерита получила название IBM (International Business Machines).

Перфокарты были основными носителями информации вплоть до 60-х годов прошлого века.

Своим названием интеллектуальные машины обязаны чешскому драматургу В пьесе "R.U.R.", увидевшей свет в 1920 году, писатель назвал роботом искусственного человека, созданного для тяжелых и опасных участков производства (robota (чешск.) - каторга). А что отличает робота от механизмов и автоматических устройств? В отличие от последних, робот не только выполняет определенные действия, слепо следуя заложенному алгоритму, но и способен более тесно взаимодействовать с окружающей средой и человеком (оператором), адаптировать свои функции при изменении внешних сигналов и условий.

Принято считать, что первый действующий робот был сконструирован и реализован в 1928 году американским инженером Р. Уэнсли. Человекоподобный "железный интеллектуал" получил имя Герберт Телевокс. На лавры пионеров претендуют также ученый-биолог Макото Нисимура (Япония, 1929 г.) и английский военнослужащий Уильям Ричардс (1928 г.). Созданные изобретателями антропоморфные механизмы имели схожий функционал: способны были двигать конечностями и головой, выполнять голосовые и звуковые команды, отвечать на простые вопросы. Основным предназначением устройств была демонстрация научно-технических достижений. Очередной виток в развитии технологий позволил в скором времени создать и первых индустриальных роботов.

Поколение за поколением

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

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

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

И наконец, третье поколение - интеллектуальные роботы, которые способны:

  • Обобщать и анализировать информацию,
  • Совершенствоваться и самообучаться, накапливать навыки и знания,
  • Распознавать образы и изменения ситуации, и в соответствии с этим выстраивать работу своей исполнительной системы.

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

Общая классификация

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

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

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

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

В соответствии с решаемыми задачами управления выделяют четыре уровня такого специально созданного языка:

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

Робототехники стремятся свести программирование роботов к общению с ними на языках высшего уровня. В идеале оператор ставит задачу: "Произвести сборку двигателя внутреннего сгорания автомобиля" и ожидает от робота полного выполнения задания.

Языковые нюансы

В современной робототехнике программирование роботов развивается по двум векторам: роботоориентированное и проблемно ориентированное программирование.

Наиболее распространенные роботоориентированные языки - AML и AL. Первый разработан фирмой IBM только для управления интеллектуальными механизмами собственного производства. Второй - продукт специалистов Стэндфордского университета (США) - активно развивается и оказывает существенное влияние на формирование новых языков этого класса. Профессионал легко разглядит в языке характерные черты Паскаля и Алгола. Все языки, ориентированные на роботов, описывают алгоритм, как последовательность действий "умного" механизма. В связи с этим программа зачастую выходит очень громоздкой и неудобной в практической реализации.

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

Обучение роботов

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

Весьма перспективной выглядит программа для программирования роботов, представленная разработчиками Лаборатории информационных технологий при Массачусетском технологическом институте (CSAIL MIT) на международной конференции промышленной автоматизации и робототехники ICRA-2017 (Сингапур). Созданная ими платформа C-LEARN обладает достоинствами обоих методов. Она предоставляет роботу библиотеку элементарных движений с заданными ограничениями (например, усилие хвата для манипулятора в соответствии с формой и жесткостью детали). В то же время, оператор демонстрирует роботу ключевые движения в трехмерном интерфейсе. Система, исходя из поставленной задачи, формирует последовательность операций для выполнения рабочего цикла. C-LEARN позволяет переписать существующую программу для робота другой конструкции. Оператору при этом не требуются углубленные знания в области программирования.

Робототехника и искусственный интеллект

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

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

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

Основные тенденции робототехники

В 2017 году специалисты цифровой индустрии отметили несколько выдающихся решений в области технологий виртуальной реальности. Не осталась в стороне и робототехника. Очень перспективным выглядит направление совершенствующее управление сложным робомеханизмом через виртуальный шлем (VR). Эксперты пророчат востребованность такой технологии в бизнесе и промышленности. Вероятные сценарии использования:

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

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

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

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