Как создать искусственный интеллект? На каком языке пишут искусственный интеллект? Введение в ИИ

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

Само понятие "искусственный интеллект" возникло где-то на заре вычислительной техники. Несмотря на почтенный возраст, термин этот не имеет точного определения и всегда понимался в интуитивном смысле. Обычно говорят, что к области искусственного интеллекта относятся те задачи, которые до сих пор человек решает лучше, чем компьютер. Таким образом, круг решаемых в рамках искусственного интеллекта проблем постоянно динамически изменяется. Например, еще несколько лет назад обучение ЭВМ игре в шахматы являлось прерогативой AI (от английского Artifical Intelligence - искусственный интеллект), но сегодня все больше специалистов считает, что игра в шахматы уже не является проблемой искусственного интеллекта. Сегодня главными проблемами, решаемыми в рамках AI, являются примерно следующие: построение экспертных систем, решение задач поиска, в которых полный перебор вариантов теоретически невозможен (в том числе - программирование игр), моделирование биологических форм, распознавание образов. Фундаментальные принципы решения всех этих задач были заложены еще в начале семидесятых, но, в связи с тем, что задачи AI очень ресурсоемки, настоящее развитие они получили только в наши дни.

Для решения задач AI еще в начале семидесятых годов были созданы два специфических языка программирования - Пролог (Prolog) и Лисп (LISP). Современный разработчик искусственного интеллекта должен свободно владеть каждым из них. Далее остановимся на самых характерных их особенностях.

Исторически Лисп более старый язык. Концепция, которую он представляет, называется функциональным программированием , она является прямым продолжением обычного алгоритмического подхода. Лисп-программа представляет собой функцию, результат вычисления которой - это результат работы программы, а аргументы, чаще всего - другие вызовы функций. В связи с объективными причинами в Лиспе принята бесскобочная запись при вызове функций, вызов любой функции осуществляется при помощи списка, первым элементом которого является название функции, а все остальные элементы представляют аргументы. Например, сложение двух чисел A и B может выглядеть так: (add A B), сложение трех чисел - так: (add A (add B C)). Самой важной особенностью Лиспа является то, что запись вида (add A B) может представлять из себя не только список, как вызов функции, но и список, как элемент данных, содержащий в себе три компоненты - add, A и B. Решение о том, следует ли использовать список как данные, или его необходимо интерпретировать, в рамках Лиспа может приниматься самой программой. Таким образом, программа получает возможность модифицировать собственный код, что чрезвычайно важно для приложений AI.

Пролог для меня более интересен, чем Лисп, поскольку использует подход к программированию, принципиально отличный от алгоритмического и называемый целевым или декларативным программированием. При алгоритмическом программировании мы задаем последовательность действий, которые должна выполнять программа, т.е. описываем, КАК она должна работать. При декларативном программировании мы описываем, ЧТО программа должна делать, а то, как будут осуществлены эти действия - дело Пролог-системы. Рассмотрим типичнейшую Пролог-задачу - определение, в каких родственных отношениях находятся те или иные люди. В качестве исходных выберем отношение родитель(X,Y), обозначающее, что X является родителем Y, и отношения мужчина(X) и женщина (X), обозначающие принадлежность лица к одному из полов. Тогда исходные данные для программы могут выглядеть примерно так.

мужчина(Сергей). женщина(Тамара). мужчина(Семен). женщина (Людмила). мужчина(Павел).

родитель(Сергей, Семен). родитель(Тамара, Семен). родитель(Семен, Павел).

родитель(Людмила, Павел)

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

Теперь введем выражение дед(X,Y), обозначающее, является ли X дедом Y. Мы используем два Прологовских символа - запятая в следующей записи обозначает логическое и, а символ:- обозначает если.

дед(X,Y):- родитель(X,Z), родитель(Z,Y),мужчина(X).

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

На самом деле та Пролог-программа, которую мы написали, умеет делать очень многое (это наверняка удивит тех, кто до сих пор был знаком только с алгоритмическим программированием). После запуска ее на выполнение Пролог-система выдаст запрос на ввод вопроса. Для начала введем дед(X,Павел) (по-русски этот вопрос звучит так: "Кто дед Павла?"), система выдаст X=Сергей. Теперь спросим дед(Тамара, Павел) ("Является ли Тамара дедом Павла?"). Получим ответ no (нет). Можно спросить родитель(X,_) (так, как на Прологе _ обозначает, что значение этого элемента отношения для нас не важно, то данная запись по-русски звучит, как "Кто является чьим-либо родителем?"). Получим X=Сергей, X=Тамара, X=Семен, X=Людмила. Этим круг вопросов, которые можно задать нашей программе, далеко не исчерпывается.

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

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

Денис МАРГОЛИН
[email protected]

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

На эти и другие вопросы вы найдете ответ в статье под катом, написанной на основе выступления Константина Анисимовича, директора департамента разработки технологий ABBYY, одного из ведущих экспертов страны в сфере искусственного интеллекта.
При его личном участии были созданы технологии распознавания документов, которые применяются в продуктах ABBYY FineReader и ABBYY FormReader. Константин рассказал об истории и основах разработки AI на одном из мастер-классов для студентов Технопарка Mail.Ru. Материал мастер-класса и стал базой для цикла статей.

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

Взлеты и падения подходов в AI

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

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

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

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

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

Главные задачи при проектировании искусственного интеллекта

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

Возникает очень важный вопрос: как может AI решить задачу, для которой нет алгоритма решения? Суть в том, чтобы делать это так же, как и человек - выдвигать и проверять правдоподобные гипотезы. Естественно, что для выдвижения и проверки гипотез нужны знания.

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

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

Представление знаний

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


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

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

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

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

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

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

Список литературы.

  1. John Alan Robinson. A Machine-Oriented Logic Based on the Resolution Principle. Communications of the ACM, 5:23-41, 1965.
  2. Seymour Papert, Marvin Minsky. Perceptrons. MIT Press, 1969
  3. Russell, Norvig. Artificial Intelligence: A Modern Approach.
  4. Simon Haykin. Neural networks: a comprehensive foundation.
  5. Nils J. Nilsson. Artificial Intelligence: A New Synthesis.
  • Перевод

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

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

В разгар напряжённой игры в го, шедшей в Сеуле в Южной Корее между Ли Седолем, одним из лучших игроков всех времен, и программой 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. Разработанный на Лиспе, это автономный пылесос моет полы, используя определенные алгоритмы. Он обнаруживает препятствия и обходит их.


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

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

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. Разработанный на Лиспе, это автономный пылесос моет полы, используя определенные алгоритмы. Он обнаруживает препятствия и обходит их.


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



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

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

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