Программирование искусственного интеллекта


Искусственный интеллект для программистов / Mail.ru Group corporate blog / Habr

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

На эти и другие вопросы вы найдете ответ в статье под катом, написанной на основе выступления Константина Анисимовича, директора департамента разработки технологий 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. Marvin Minsky. Symbolic vs. Connectionist, 1990
  4. Marvin Minsky. A framework for representing knowledge. MIT AI Laboratory Memo 306, June, 1974.
  5. Russell, Norvig. Artificial Intelligence: A Modern Approach.
  6. Simon Haykin. Neural networks: a comprehensive foundation.
  7. Nils J. Nilsson. Artificial Intelligence: A New Synthesis.

habr.com

«На каком языке пишут искусственный интеллект?» – Яндекс.Кью

Большие успехи, из-за которых вокруг AI и machine learning сейчас наблюдается самый настоящий хайп, дело совсем недавнее. Например, вот эта картинка из известного среди гиков комикса xkcd нарисована в сентябре 2014 года, а всё ещё упоминает задачу "распознать, что на фото есть птица" как нечто невероятно сложное, потребующее команды исследователей и пяти лет разработки. С тех пор эта задача стала доступна практически любому упорному студенту. Соответственно, в последние годы под словами "искусственный интеллект" подразумевают в основном машинное обучение.

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

В создании систем, основанных на машинном обучении, есть два больших ответвления: нейронные сети (часто также используется более размытый, но круто звучащий термин deep learning) и статистические методы, например, градиентный бустинг. Для некоторой части статистических методов иногда используется коммерциализированный термин data mining.

Использование нейронных сетей состоит примерно из трёх частей. Во-первых, нужно спроектировать и описать её структуру (часто также говорят "архитектуру", но это нужно не путать с использованием слова "архитектура" в других областях программирования). Во-вторых, нужно её обучить. В-третьих, нужно написать код, который будет применять обученную нейронную сеть и дальше что-то делать с результатами её работы. Обучение и применение нейронной сети очень вычислительно тяжелый процесс, ещё несколько лет назад подразумевалось, что это делается на С или С++, и код, который это делает, нужно специально для этого каждый раз отдельно писать. В последние годы для этих этапов появились стандартные, хорошо спроектированные и работающие инструменты, например, TensorFlow, Theano или Torch. Внутри они по-прежнему написаны на каком-то языке, близком к железу, вроде С, но для всех, кроме их создателей, это уже не очень важно. Ну а первый этап -- описание структуры сети -- в них для удобства уже выполняется на каком-то более удобном и приятном, хоть и сильно менее эффективном, языке. Чаще всего это Python, иногда Lua. Вот что скрывается за словами "разработчики искусственного интеллекта работают на питоне".

В статистическом машинном обучении экспериментируют обычно на Питоне, а в production работают монструозные системы, разрабатываемые сотнями человек. Пишут этот код на C++ с "вкраплениями" Питона или, реже, Java. Примеры таких систем - поисковые машины Яндекса или Гугла; рекламные сети, которые пытаются подсунуть вам именно ту рекламу, на которую вы кликнете; и даже та штука, которая в ленте Facebook старается показать вам те обновления, которые вы с большей вероятностью "лайкнете".

yandex.ru

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

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

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

LISP

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

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

Java

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

  • прозрачность использования и написания кода;
  • способность легко переносить программы;
  • лёгкое сопровождение проектов.

Для новичков важным достоинством Java станет наличие многочисленных бесплатных уроков в сети. Обучение Java является максимально комфортным и удобным для большинства студентов и новичков.

Среди особенностей языка стоит выделить:

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

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

Prolog

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

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

Python

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

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

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

Началом традиционного представления ИИ стал проект UNIMATE, который увидел мир в 1961 году. В ходе представления был впервые получен робот, который начал выпускаться в промышленных масштабах. Робот был задействован на линии производства в концерне «General Motors». Для создания были задействованы Валь и переменные из среды ассемблера. Язык пришёлся по душе благодаря наличию простейших фраз, отражению команд на мониторе и наличию инструкций, не нуждающихся в дополнительных разъяснениях.

Спустя 4 года (1965 год) был запущен искусственный интеллект «Dendral». Задача системы заключалась в выявлении молекулярной и атомной структуре соединений органического происхождения. Для написания был использован LISP.

 «Weizenbaum» в 1966 году запустил проект Элиза, который впервые предполагал проведение беседы с роботом. Самой известной моделью являлся «Доктор», который позволял отвечать на поставленные запросы в форме психотерапевта. Для реализации проекта потребовалось сопоставление нескольких образцов технического достижения своего времени. Впервые Элиза увидел мир на SPLIP, но для отработки списка запущен «Weizenbaum». Немногим позже проект переработан на другую платформу – LISP.

Первым роботом мобильного типа стал «Шеки», в его основе также лежал ЛИСП. Логика конструктора была построена на решении поставленных задач и передвижения, для взаимодействия использовались подъёмы вверх и вниз, а также включение и выключение света. С помощью «Шеки» удавалось открывать, закрывать, передвигать и т.д. Робот даже был способен передвигаться со скоростью равной спокойной ходьбе человека – 5 км/ч.

За последние 15 лет было представлено многочисленное количество изобретений: «Деннинг» (сторожевой робот), «Predator» (беспилотник), «АЙБО» (собака), «АСИМО» от Honda и многие другие. Тенденция идёт к развитию данного направления, чего и стоит ожидать в ближайшем и дальнем бедующем.

itproger.com

У искусственного интеллекта проблемы с языком / Habr


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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

habr.com

«На каком языке пишут искусственный интеллект?» – Яндекс.Знатоки

Большие успехи, из-за которых вокруг AI и machine learning сейчас наблюдается самый настоящий хайп, дело совсем недавнее. Например, вот эта картинка из известного среди гиков комикса xkcd нарисована в сентябре 2014 года, а всё ещё упоминает задачу "распознать, что на фото есть птица" как нечто невероятно сложное, потребующее команды исследователей и пяти лет разработки. С тех пор эта задача стала доступна практически любому упорному студенту. Соответственно, в последние годы под словами "искусственный интеллект" подразумевают в основном машинное обучение.

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

В создании систем, основанных на машинном обучении, есть два больших ответвления: нейронные сети (часто также используется более размытый, но круто звучащий термин deep learning) и статистические методы, например, градиентный бустинг. Для некоторой части статистических методов иногда используется коммерциализированный термин data mining.

Использование нейронных сетей состоит примерно из трёх частей. Во-первых, нужно спроектировать и описать её структуру (часто также говорят "архитектуру", но это нужно не путать с использованием слова "архитектура" в других областях программирования). Во-вторых, нужно её обучить. В-третьих, нужно написать код, который будет применять обученную нейронную сеть и дальше что-то делать с результатами её работы. Обучение и применение нейронной сети очень вычислительно тяжелый процесс, ещё несколько лет назад подразумевалось, что это делается на С или С++, и код, который это делает, нужно специально для этого каждый раз отдельно писать. В последние годы для этих этапов появились стандартные, хорошо спроектированные и работающие инструменты, например, TensorFlow, Theano или Torch. Внутри они по-прежнему написаны на каком-то языке, близком к железу, вроде С, но для всех, кроме их создателей, это уже не очень важно. Ну а первый этап -- описание структуры сети -- в них для удобства уже выполняется на каком-то более удобном и приятном, хоть и сильно менее эффективном, языке. Чаще всего это Python, иногда Lua. Вот что скрывается за словами "разработчики искусственного интеллекта работают на питоне".

В статистическом машинном обучении экспериментируют обычно на Питоне, а в production работают монструозные системы, разрабатываемые сотнями человек. Пишут этот код на C++ с "вкраплениями" Питона или, реже, Java. Примеры таких систем - поисковые машины Яндекса или Гугла; рекламные сети, которые пытаются подсунуть вам именно ту рекламу, на которую вы кликнете; и даже та штука, которая в ленте Facebook старается показать вам те обновления, которые вы с большей вероятностью "лайкнете".

yandex.ru

С чего начать изучение искусственного интеллекта?

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

 

Шриканс Варма Чекури, преподаватель и исследователь в сфере машинного обучения

Я работаю преподавателем онлайн-курса по изучение искусственного интеллекта и машинного обучения. Этот курс создан для новичков, у которых нет никаких знаний в данной сфере, которые, однако, готовы на протяжении 5-6 месяцев тратить 5-10 часов в неделю на изучение машинного обучения. По окончании данного курса многие наши студенты действительно решают существующие задачи при помощи ИИ\МО.

Работа курса построена следующим образом:

Мы начинаем с базовых знаний об Python, включая изучение крупных библиотек данных, таких как NumPy, SciPy, MatPlotlib, Seaborn и др. Среди множества языков программирования мы выбираем Python (а не Java или, к примеру, R), потому что этот язык достаточно легко изучить. Кроме того, для него существует огромное количество отличных библиотек для ИИ\МО.

Как только усвоен базовый уровень программирования, участники курса учатся работать с данными, используя Python в качестве инструмента программирования. Данный этап носит название «Исследовательский анализ данных» и включает в себя использование инструментов для построения диаграмм, что облегчает работу с данными. На этом этапе изучаются базовые понятия, такие как гистограмма, PDF, CDF, точечная и прямоугольная диаграммы и другие. Анализу подвергаются реально существующие массивы данных. Благодаря использованию диаграмм для осуществления анализа данных, уже на начальных этапах обучения студенты могут увидеть результат проделанных ими исследований, что, несомненно, мотивирует их на дальнейшую работу.

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

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

Теперь можно перейти непосредственно к основам машинного обучения. Мы используем Метод главных компонент (PCA) и алгоритм t-SNE для визуализации многомерных переменных. Однако в качестве базиса для извлечения математических деталей используется геометрия.

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

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

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

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

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

 


Ражж Раж, разработчик ПО в компании Facebook

Искусственный интеллект – это область науки, которая предоставляет колоссальные возможности. Разве вам не хочется понять, как работают инструменты и системы, с которыми вы имеете дело каждый день? Однако разобраться в этом сможет далеко не каждый. Прежде чем углубиться в то, как компания Google стремится создать квантовый компьютер, вам необходимо разобраться с основами, а именно, с программированием. Для начала изучите хотя бы один язык программирования. К наиболее классным языкам я бы отнес Java , Python, C++, JavaScript и Ruby on Rails. Вот несколько отличных ресурсов, которые помогут вам начать:

Codecademy.com – полностью бесплатный вебсайт с интерактивными курсами, посвященными самым разным языками программирования. Присоединяйтесь к более чем 25-ти миллионам пользователей со всего мира и осваивайте новые знания. 

Codeavengers.com – научитесь создавать приложения, игры и вебсайты с помощью Code Avengers | Code Avengers. На этом сайте представлены онлайн-курсы и учебные пособия для множества языков программирования, включая Python, HTML & CSS, JavaScript. Кроме того, здесь можно найти руководство для новичков по освоению программирования.

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

«Чистый код» Роберт Мартин («Clean Code», by Robert C. Martin) – для тех, кому больше нравится читать. В данной книге можно найти огромное количество примеров с использование Java, однако они применимы также и к другим языкам программирования. Данное пособие обращает особое внимание на правильную организацию кода, поэтому оно может стать вашим пошаговым руководством в изучении возможностей, которые вам предоставляет программирование.

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

Xpath – отличный ресурс, который помогает вам создавать ботов и исследовать HTML.

Regex – онлайн-инструмент, который обучает обработке информации, полученной при помощи ботов.

Requests – упрощенный HTTP; отличная HTTP-библиотека для веб-разработчиков, которые хорошо знакомы с языком программирования Python.

Чат-боты: подробное руководство для начинающих («The Complete Beginner’s Guide to Chatbots») – содержит всю необходимую информацию о чатботах, о том, что это такое и как их создавать.

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

«Программируем коллективный разум» Тоби Сегаран («Programming Collective Intelligence» by Toby Segaran) – хоть эта книга и была написана задолго до того, как машинное обучение достигло нынешнего уровня популярности, однако в ней эта технология представлена в легко воспринимаемой форме. Ключевые темы: функции поисковой системы, методы совместного фильтрования, метод опорных векторов и байесовская фильтрация. Для описания машинного обучения используется Python.

«Машинное обучение» Том Митчелл ([PDF] «Machine Learning», by Tom Mitchell) – отличное вводное пособие, содержащее подробный обзор алгоритмов машинного обучения. В книге представлены несколько тематических исследований, сопровождаемых простыми примерам, которые облегчают читателю понимание алгоритмов.

«Машинное обучение. Новый искусственный интеллект» Этем Алпайдин («Machine Learning: The New AI», by Ethem Alpaydi) – это книга о том, как с развитием цифровых технологий от базовых мейнфреймов до смарт-девайсов машинное обучение стало одной из передовых технологий в области компьютерных наук. Кроме того, из данного пособия можно узнать базовую информацию о машинном обучении, а также то, каким образом данную технологию можно применять в отношении приложений.

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

  • Высшая математика (например, алгоритм расчета коэффициента корреляции) и Статистика
  • Язык программирования
  • Машинное обучение
  • Терпение. Прежде всего вам необходимо просто море терпения.

Для изучения ИИ существует огромное количество курсов как в реальном, так и в онлайн-формате. Udacity.com, mit.edu, edX.org и saylor.org предлагают действительно крутые онлайн-курсы по этой теме:

«Введение в искусственный интеллект» на udacity.com («Intro to Artificial Intelligence») – этот состоящий из 10 уроков онлайн-курс позволяет новичкам окунуться в мир ИИ. Вы познакомитесь с такими понятиями, как компьютерное зрение, машинное обучение, обработка естественного языка, робототехника и теория игр. Чтобы освоить этот курс, необходимо обладать базовыми знаниями по линейной алгебре и теории вероятности.

«Искусственный интеллект» на edX.org («Artificial Intelligence») – для изучения базовых концептов ИИ можно использовать курс, представленный на сайте edX. Данный курс уделяет особое внимание статистической модели и модели теории принятия решений. Необходимы достаточные знания в математике, а также начальные знания и базовый опыт в программировании. В качестве основного языка используется Python. В рамках данного курса студенты научатся создавать автономных интеллектуальных агентов, которые запрограммированы на принятие рандомных решений, а также изучат приложения машинного обучения.

«Искусственный интеллект» от MIT OpenCourseWare («Artificial Intelligence»)– данный курс предоставит своим студентам исчерпывающие знания по методам обучения ИИ. По завершении данного курса вы будете знать основные способы сборки решений. Кроме того, вы взглянете на человеческий интеллект с точки зрения высоких технологий.

«Искусственный интеллект» от Saylor Academy («Artificial Intelligence Course») – в рамках данного курса студенты получат углубленные знания в области ИИ. Особое внимание уделяется таким темам, как машинное обучение, программирование искусственного интеллекта, робототехника, а также понимание естественного языка.  

«Искусственный интеллект: Принципы и методы» (Stanford University: «Artificial Intelligence: Principles & Techniques») – прекрасный учебный курс для тех, кто хочет узнать больше об искусственном интеллекте. Данный курс базируется на основополагающих принципах ИИ и включает в себя такие темы, как машинное обучение, Марковский процесс принятия решений, удовлетворение ограничений, а также графические модели. Главная цель курса – позволить студентам освоить различные инструменты, с помощью которых они смогут внедрить ИИ в повседневную практическую деятельность, тем самым решив ряд существующих проблем.

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

«Искусственный интеллект: современный подход», Стюарт Рассел и Питер Норвиг ([PDF] «Artificial Intelligence: A Modern Approach», by Stuart J. Russell and Peter Norvig) – в  первой части книги рассматриваются интеллектуальные агенты, далее можно найти информацию о теории принятия решений, а также раскрытие таких понятий, как «восприятие» и «рассуждение». В конце книги авторы оценивают общий потенциал данной технологии и дают прогноз на будущее.

«Революция Искусственного интеллекта – путь к Супер-интеллекту», Тим Урбан («The AI Revolution: Road to Superintelligence») – крайне детализированная и взвешенная статья, в которой автор пытается развеять некоторые из наиболее распространенных заблуждений, которые касаются сферы искусственного интеллекта.

«Искусственный интеллект на практике: программирование на Java», Марк Уотсон ([PDF] Practical Artificial Intelligence: Programming in Java , by Mark Watson) – будучи нацеленной как на любителей, так и на профессиональных программистов, данная книга учит читателя тому, как применять ИИ на практике. Каждая глава содержит технику обучения, немного теоретической информации об этой технике и пример на Java, который демонстрирует, как именно эта техника может быть использована.

«На пути к искусственному интеллекту», Нильс Нильсон ([PDF] The Quest for Artificial Intelligence, by Nils J. Nilsson) – в этой книге содержится все, что вам нужно знать об искусственном интеллекте с самого начала существования технологии (когда ИИ существовал еще только в форме концепта) и до наших дней.

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

Илон Маск об Искусственном Интеллекте (Elon Musk talks about Artificial Intelligence at MIT) – это дискуссия длительностью более часа, записанная в 2014 году на праздновании 100-летия со дня основания Кафедры аэронавтики и астронавтики Массачусетского технологического института. Обсуждение охватывает множество тем: от исследования Марса и роли НАСА в этом до предупреждений о существующей опасности со стороны ИИ, а также об электромобилях компании Tesla.

Обсуждение статуса и места искусственного интеллекта в нынешнем мире (Davos 2016, The State of Artificial Intelligence) – обстоятельное обсуждение, главной целью которого было найти ответ на крайне важные вопросы: «Насколько близко передовые технологии подошли к тому, чтобы навсегда изменить человеческий разум?» и «Какое влияние оказывает ИИ на развитие нынешней промышленности?».

Документальный фильм «Искусственный интеллект и робототехника» ([Documentary] Artificial Intelligence and Robotics) – «Внешность может быть обманчива» - и данный документальный фильм расскажет вам, почему этой пословице стоит верить. На протяжении многих десятилетий научная фантастика показывала нам роботов, готовых преданно служить человеку. Однако ИИ и роботы уже давно перестали быть всего лишь темой для научно-фантастических фильмов. Роботы борются за свое место в этом мире, диком и не прощающем ошибок. Современные технологии, такие как машинное обучение, программирование и глубокое обучение, дают нам надежду на то, что в скором времени роботы из лабораторий станут нашими полноправными соседями в реальном мире.

Илон Маск рассказывает об искусственном интеллекте в Стэнфордском университете (Elon Musk talks about artificial intelligence at Stanford University (2015)) – речь посвящена разным вопросам, обсуждение непосредственно ИИ начинается на 27 минуте. Илон Маск рассуждает о передовых технологиях, их месте в будущем, а также делает прогноз, что будет представлять собой искусственный интеллект через 25 лет.

Билл Гейтс и Илон Маск рассуждают о безопасности ИИ (Bill Gates and Elon Musk talk about AI safety) – оба оратора говорят об суперинтеллекте, ИИ, а также о том, что технологии делают для людей. Главная цель обсуждения – это обратить особое внимание на то, что необходимо сделать искусственный интеллект максимально безопасным. Маск уточняет, что создать и выпустить ИИ – это не так уж и сложно. Обеспечить его безопасность в дальнейшем – вот в действительности непростая задача. 

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

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


Сридхар Махадеван, член Ассоциации по продвижению искусственного интеллекта

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

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

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

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

www.kv.by

Искусственный интеллект — интерпретатор языка / Habr

Disclaimer
* нижеприведенный текст написан автором в ключе «философии искусственного интеллекта»
* комментарии профессиональных программистов приветствуются

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

Но базовые эйдосы просты (наши знания о мире уровня трёх-семилетнего ребёнка). По своему устройству это чем то напоминает интерпретатор языка программирования.

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

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

Но мы ведь люди!

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

Однозначное понимание — вот ловушка! Его нет! Как нет объективной реальности. Есть феномены, (как говорит философская феноменология) которые наше мышление трактует.

Каждый эйдос — это интерпретация понимания, причем сугубо личная. Два человека выполнят одно и то же поручение по разному! Мы все умеем ходить (образ движения у всех один), но походка у каждого уникальная, её даже можно идентифицировать, как отпечаток пальца. Следовательно, освоение походки как навыка — это уже уникальная личностная интерпретация.
Как же тогда возможно взаимодействие между людьми? — На основе постоянного уточнения интерпретации!

Высший пилотаж человека — это интерпретация на уровне культуры, когда целые пласты (контексты) смысла доступны по умолчанию.

Машина лишена культуры и, следовательно, контекста. Поэтому ей нужны четкие однозначные команды.

Другими словами, система «человек — компьютер — искусственный интеллект» находится в замкнутом цикле или в тупике. Мы вынуждены общаться с машинами на их языке. Мы хотим их совершенствовать. Сами они развиваться не могут, и мы вынуждены придумывать для их развития всё более и более изощрённый код. Который сами в итоге всё труднее понимаем… Но даже этот продвинутый код изначально ограничен… машинным интерпретатором (то есть кодом на основе машинных команд). Круг замкнулся!

Однако, вынужденность эта только кажущаяся.

Ведь мы — люди и наш собственный (на основе эйдосов) язык изначально гораздо более производителен, чем компьютерный. Правда мы в это уже почти не верим, мы верим, что машина умнее…

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

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

Но позвольте, а не в этом ли суть человеческого интеллекта?..

habr.com

Как искусственный интеллект помогает управлять проектами / Habr

Обзор современного применения искусственного интеллекта для управления проектами

Может показаться удивительным, но вопросу применения искусственного интеллекта для управления проектами насчитывается уже более 30 лет. Еще в 1987 году вышла знаковая статья Уильяма Хосли «Использование приложений искусственного интеллекта для управления проектами». В том же году под эгидой NASA завершилось исследование об эффективности применения методов искусственного интеллекта в управлении проектами.

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

  • виртуальные помощники руководителя проекта
  • искусственный интеллект в системах управления проектами

Рассмотрим некоторые из них:

1. Виртуальные помощники руководителя проекта


PMOtto.ai

В 2017 году Allan Rocha и Ricardo Vargas представили PMOtto – сервис персонального виртуального помощника руководителя проекта, объединяющий в себе функции чат-бота и интерфейс взаимодействия с системами управления проектами и портфелями проектов, например с Microsoft Office 365 Project Online. Участники проекта могут свободно общаться с PMOtto посредством смартфона или веб-чата. Сообщать статус выполнения задач, информировать о рисках, запрашивать необходимую информацию. PMOtto распознает речь и текст, и преобразует это в команды для информационных систем. Кроме того, PMOtto может давать рекомендации по реализации проекта, основываясь на результатах машинного обучения и реализованных в нем алгоритмах. Разработчики утверждают, что PMOtto представляет собой комбинацию различных профилей с более чем 20-летним опытом управления проектами!

Lili.ai

Французский стартап Lili.ai, созданный с целью внедрения методов искусственного интеллекта для оптимизации бюджетов проектов и повышения эффективности проектного управления, представляет Лили – виртуального помощника по проектному управлению. Лили неплохо зарекомендовал себя, получил несколько наград, в том числе награду CogX AI Rising Star Award, является участником престижного конкурса X-Prize. Лили ведет профессиональный блог liliai.blog

Чат-бот «Иван из Проектной ПРАКТИКИ»

В 2018 году Центр дистанционного обучения Группы компаний «Проектная ПРАКТИКА» представил прототип виртуального помощника руководителя проекта – чат-бота «Иван из Проектной ПРАКТИКИ». Работающий через Telegram, Иван (@ivanpm_bot) мог поделиться опытом внедрения проектного управления, предоставить по запросу руководителя проекта шаблоны проектных документов.

Autodesk Construction IQ

Construction IQ (ранее известный как Project IQ) – интеллектуальный помощник для проектов строительства в которых применяется платформа Autodesk BIM 360. Использующий методы машинного обучения, Construction IQ собирает и анализирует данные о качестве и безопасности строительных объектов, возможных рисках проекта. Например, выявляет работы с высокой вероятностью сдвига сроков и другие риски. Construction IQ извлекает информацию из зафиксированных данных проекта – результатов наблюдений и аудитов, журналов технадзора, фотографий, технических заданий, отчетов исполнителей и других проектных документов. Все это используется для идентификации, анализа и приоритезации рисков проекта. Результаты анализа рисков, выполненные Construction IQ представляются пользователям в Project Home – едином окне, отображающем ключевую информацию о проекте, включая прогресс по работам, интерактивную модель объекта, данные с камер т.п.

Битрикс24

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

На платформе Битрикс24 также был разработан функционал Битрикс24.Ассисетнт, который позволяет работать с популярными голосовыми помощниками, например, такими как Яндекс Алиса или Google Assistant. С использованием Битрикс24.Ассисетнт можно раздавать задания сотрудникам и коллегам, назначать встречи в календаре, общаться в Битрикс24.Чат.

Искусственный интеллект в помощь Agile-проектам

Международная группа исследователей представила на 41-й Международной конференции по разработке программного обеспечения (ICSE) 2019, прошедшей в мае этого года в Монреале, в Канаде, архитектуру виртуального помощника гибких (agile) проектов. Виртуальный помощник мог бы пригодиться гибким командам в выявление элементов бэклога, уточнение элементов, планирование спринта, мониторинге выполнения спринта и управлении рисками. С предварительно опубликованной работой можно ознакомиться на сайте arXiv.

Платформы создания виртуальных помощников

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

Другим примером является Dialogflow. Инструментарий Dialogflow объединенный с такими системами как, например, Redbooth, может использоваться для управления проектами.

2. Применение искусственного интеллекта в системах управления проектами


Smart Projects

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

Aurora

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

Liquid Planner

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

Infosys Nia Contracts Analysis

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

PsodaVision

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

Cloverleaf

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

PineStem

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

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

TARA.ai

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

3. Заключение


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

Успешных проектов!

4. Полезные ссылки


1. Hosley, W. N. (1987). The application of artificial intelligence software to project management / Project Management Journal, 18(3), 73–75
2. Harris, R.M., Shaffer, S.C., Stokes, J., Goldstein, D. (1987). Application of expert systems in project management decision aiding / Scientific and Technical Report
3. Lahmann M., Keiser P., Stierli A. (2018) AI will transform project management. Are you ready? / PWC Report
4. Auth, G., Jokisch, O., Durk, Ch. (2019) Revisiting automated project management in the digital age – a survey of AI approaches / OJAKM, Volume 7, Issue 1, 27–39

habr.com

Профессиональное программирование для систем искусственного интеллекта на языке PROLOG

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

В основе логического вывода лежит математическое понятие «формальная система (ФС)». ФС — это совокупность абстрактных объектов, связанных между собой определенными правилами. Вспомним определение. Формальная система F задана, если определена четверка:
F = (Al, Sn, Ax, Ru)
Al – алфавит – конечное множество символов;
Sn – синтаксис – процедура построения правильно построенных формул ФС;
Ax – аксиомы – совокупность правильных формул, заданных изначально;
Ru – правила вывода – конечное множество правил, позволяющих получать новые формулы из других формул ФС.
Всякая программа на языке ПРОЛОГ является ФС, которых в одной программе может быть несколько. В ПРОЛОГе важную роль играет понятие унификации, позволяющее более широко применять правила ФС за счет подстановки параметров. Хорошим примером ФС в программе является синтаксический анализатор на языке ПРОЛОГ().
ФС можно применить для порождения новых утверждений (прямой вывод) или для доказательства правильности утверждений (обратный вывод). В ПРОЛОГе можно реализовать оба варианта вывода, хотя обратный вывод реализуется непосредственно, поскольку заложен в структуру языка.
Язык логического программирования дает много интересных возможностей для решения интеллектуальных задач, т.е. требующих логического вывода для получения решения. Как правило, возможности языка по созданию различных типов прикладных систем демонстрируются на достаточно простых примерах, предназначенных больше для демонстрации парадигмы логического программирования, в учебных целях.
Для создания практически полезных прикладных систем требуется ряд свойств, отсутствующих в системе ПРОЛОГ, но которые можно в нее добавить.
На всякий случай, вспомним, что вычисление в логическом программировании состоит в поиске логического вывода. Этим термином именуют дерево, корнем которого является доказываемое утверждение, а остальные вершины содержат утверждения, связанные между собой логическим следованием. При этом терминальные вершины (листья) дерева должны быть исходными данными – утверждениями, сформулированными в условии задачи.
Построение дерева логического вывода состоит в поиске взаимосвязанных цепочек утверждений от листьев к вершине среди множества всех возможных путей от вершины к листьям. Это множество называют пространством поиска задачи.
Поиск может быть прямой – от данных к искомому и обратный – от искомого к данным. В первом подходе из условий задачи вычисляют то, что можно – новые утверждения, увеличивая тем самым количество известного о задаче.
Во втором подходе строятся гипотезы – строится последовательность, точнее дерево, гипотез, которое должна привести к известным данным.
Поскольку ПРОЛОГ основан на обратном выводе, сначала рассмотрим обратный вывод.
Для иллюстрации проблем, возникающих при построении неигрушечных экспертных систем, используем в качестве предметной области планиметрию, точнее говоря, ее небольшую часть, связанную с решением треугольников.
Рассмотрим конкретную задачу.
В равнобедренном треугольнике проведена высота из вершины, расположенной между равными сторонами. В образовавшемся внутреннем треугольнике снова проведена высота, затем в новом треугольнике еще высота, и т.д. всего – 10 высот. Известны длина основания треугольника AC и боковой стороны BC. Нужно решить любой треугольник, образованный проведенными высотами.
Представление основных объектов может быть таким:
  • seg(A,B) – отрезок с концевыми точками A и B;
  • tri(A,B,C) – треугольник с вершинами А, В, С;
  • length(seg(A,B),L) – длина отрезка;
  • equal(tri(A,B,C),tri(X,Y,Z)) – равенство треугольников.


Для простоты изложения рассмотрим вычисление второй высоты треугольника – DE. Запишем условия задачи средствами языка ПРОЛОГ:

s(1,exist(d,tri(a,b,c))).
s(2,height(seg(b,d),tri(a,b,c))).
s(3,height(seg(d,e),tri(b,c,d))).
s(4,height(seg(f,e),tri(b,e,d))).
s(5,height(seg(f,g),tri(f,e,d))).
s(6,height(seg(h,g),tri(f,g,e))).
s(7,height(seg(h,i),tri(g,h,e))).
s(8,height(seg(i,k),tri(h,i,e))).
s(9,height(seg(k,l),tri(i,k,e))).
s(10,height(seg(l,m),tri(l,k,e))).
s(11,height(seg(m,n),tri(m,l,e))).
s(12,equal(seg(a,b),seg(b,c))).
s(13,length(seg(a,b),10)).
s(14,length(seg(a,c),16)).
s(15,length(seg(d,e),x)).

Для обеспечения нумерации условий задачи предикаты записаны в дополнительных скобках в виде s(N,P).
Последняя строка в исходных данных задачи определяет цель – утверждение, которое необходимо доказать. В нашем случае цель length(seg(d,e),x) содержит переменную х, что позволяет – вычислить значение длины отрезка DE.
Одна из основных трудностей в применении ПРОЛОГа для реализации коммерческих систем – возникновение зацикливания программы в процессе вычислений. Причиной этого может быть не ошибка в программе, а рекурсивность свойств объектов предметной области и, соответственно – рекурсивность правил логического вывода.
Например, в правилах логического вывода для решения треугольников неизбежно происходит обращение к аналогичным правилам.
Пример 1, Вычисление длины отрезка в треугольнике.

Вычисление длины стороны треугольника через высоту и площадь:
length(seg(A,C),L):-
height(seg(B,D),tri(A,B,C)),
length(seg(B,D),L1),
area(tri(A,B,C),S1),
L is (2*S1)/L1.

Вычисление длины высоты треугольника через основание и площадь:
length(seg(B,D),L):-
height(seg(B,D),tri(A,B,C)),
length(seg(A,C),L1),
area(tri(A,B,C),S1),
L is (2*S1)/L1.

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

  1. (78) hypot(tri(d,b,c),seg(b,c)) [79]
  2. (45) exist_rect(tri(d,b,c),seg(d,b)) [2]
  3. (46) length(seg(d,c),8) [14,47]
  4. (66) length(seg(b,c),10) [13,12]
  5. (77) pif_length([seg(d,b),6],[[seg(d,c),8],[seg(b,c),10]]) [78]
  6. (47) median(tri(a,b,c),seg(b,d)) [2,48]
  7. (333) rectangle(tri(c,d,b),_2F28) [2]
  8. (334) catets(tri(c,d,b),[seg(b,d),seg(d,c)]) [78]
  9. (44) length(seg(d,b),6) [77,66,46,45]
  10. (46) length(seg(d,c),8) [14,47]
  11. (332) area(tri(c,d,b),24) [46,44,334,333]
  12. (66) length(seg(b,c),10) [13,12]
  13. (331) length(seg(d,e),4.8) [66,332,3]

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


Как можно видеть из рисунка, все терминальные вершины дерева – утверждения из исходных данных.
Приведем текстовую интерпретацию полученного решения.
1)Для вычисления длины отрезка seg(d,e) (331) использовано правило: если искомый отрезок является высотой в треугольнике, то его длина равна площади треугольника деленной на основание и умноженной на два. Аргументы для этого правила получены из целей с номерами 66,332,3,
Площадь треугольника cdb равна 24 – цель 332. Длина основания bc равна 10 – цель 66. Искомая длина равна 2*(24/10) = 4.8. Отрезок de является высотой треугольника cdb – цель 3 (исходные данные).
2)Длина отрезка bc (66) вычислена из правила – если искомый отрезок равен другому отрезку с известной длиной, то искомая длина равна длина равного отрезка.
В нашем случае искомый отрезок bc равен отрезку ab – это задано в исходных данных – цель 12, длина отрезка ab задана в утверждении 13.
3) Площадь треугольника cdb (332) вычисляется по правилу для прямоугольных треугольников по длинам катетов, аргументы заданы целями 46,44, 333, 334.
Прямоугольность треугольника cdb (333) следует из того, что отрезок bd является высотой в треугольнике abc (2). Отсюда следует определение отрезков, которые являются катетами в этом треугольнике – bd и dc (334). Далее следует вычисление длин катетов (44) и (46).
4)Длина катета db (44) вычисляется через прямоугольный треугольник bdc из целей с номерами 77,66,46,45.
Цель 77 – применение теоремы Пифагора для вычисления отрезка db. Цель 66 – вычисление длины отрезка bc. Цель 46 – длина отрезка dc. Цель 45- наличие прямоугольного треугольника dbс с искомым отрезком db.
5)Длина катета dc (46) вычисляется из целей 14, 47 по правилу отрезка при медиане треугольника. Цель 14 задана в исходных данных – длина отрезка ac, на который опущена медиана bd (47). Применяется правило – высота в равнобедренном треугольнике, опущенная на его основание, является медианой.

Поскольку в приведенном примере данные получены в результате применения конкретной логической программы, можно предположить, что объем поиска составил 334 цели, из которых 13 составили необходимое решение задачи.
Для более сложного случая, например для вычисления десятой высоты в нашем треугольнике – отрезка LM, объем поиска составил 1667 целей, а в процессе поиска вывода было получено 138 утверждений, из которых далеко не все вошли в искомое решение. Незначительный объем поиска связан с тем, что было использовано всего четыре правила для вычисления длины отрезка.
Мы рассмотрели упрощенный пример для иллюстрации основных аспектов решения задач, требующих логического вывода. Если же попытаться описать все теоремы планиметрии для вычисления длины отрезка – подобие и равенство треугольников, тригонометрические функции, составные отрезки, объем необходимых вычислений возрастает на порядки и здесь понадобится иметь дополнительные возможности, чтобы справиться со всеми возникающими сложностями.
Для того, чтобы решать достаточно объемные интеллектуальные задачи недостаточно обычного языка ПРОЛОГ, поскольку в нем отсутствует ряд свойств, без которых сложно построить практически полезную программу. Эти усовершенствования системы языка ПРОЛОГ можно разделить на две группы – управление поиском вывода (логические) и технологические.
Необходимы следующие усовершенствования управления поиском:

  • защита от зацикливания;
  • сохранение созданного вывода;
  • возможность работать с большими объемами правил;
  • сохранение трассы поиска вывода в пространстве состояний предметной области для отладки;
  • управление объемом вычислений для защиты от излишних неэффективных поисков при наличии ошибки или отсутствии решения;
  • построение объяснения полученного решения.
    Технологические усовершенствования:
  • интеграция с процедурными языками программирования;
  • интеграция со средствами операционной системы;
  • эффективность кода;
  • возможность создания автономных программ.
    Большинство современных систем языка ПРОЛОГ имеют компилятор и другие средства, которые обеспечивают возможность создания прикладных программ, применимых без интерпретатора языка ПРОЛОГ, совместно с программами на других языках программирования или автономно.
    Для получения усовершенствований поиска необходимо в каждое правило ПРОЛОГа в прикладной программе вставить дополнительные проверки и, соответственно, дополнительные аргументы.
    Чтобы не делать это вручную, можно использовать специальные инструментальные системы. Научно-производственная фирма «Semantics Research» разработала такую систему под названием Exxlog, которую можно скачать бесплатно на сайте компании(exxlog.ru).

Заключение

Мы рассмотрели основные аспекты построения формальной системы в виде программы для решения логических задач. ФС решает задачи путем полного перебора вариантов.
Если приведенным здесь способом описать правила для всех необходимых теорем планиметрии, пространство поиска будет неподъемным для среднего компьютера, а может быть и суперкомпьютера. Однако мы хорошо знаем, что толковый школьник решит почти любую решаемую задачу за приемлемое время, не выполняя слишком большого перебора.
Как он это делает? За счет анализа и планирования решения, намечая самые перспективные подходы и не рассматривая заведомо бесполезные. Знания, которыми он воспользуется для планирования решения, не являются геометрическими теоремами – это и есть те знания, которые называют экспертными – знания о методах поиска решения, которые обычно эксперт получает в процессе обучения и вырабатывает самостоятельно, в процессе приобретения опыта.
Вывод – одна ФС не является экспертной системой. Для ЭС нужно объединить несколько ФС. В дальнейшем рассмотрим более подробно, как это сделать.

habr.com

Разработка искусственного интеллекта без нейронных сетей / Habr

Новый подход в сфере искусственного интеллекта

Да, понимаю, название шаблонное, но зато суть решения задачи отличается от стандартно принятых в мире концепций. Сразу скажу, статья обзорная, алгоритмов и сложной математики тут не будет. Но работающее на основе этого проекта клиентское приложение потестировать получится. Но об этом чуть ниже…
Пару слов о нас, мы группа программистов – Treevelopers — ведём разработки по созданию искусственного интеллекта. Работаем над этим уже второй год и спланировали работу ещё как минимум настолько же. Проект мы назвали Artificial Intelligence AIA или просто AIA.
Цель проекта такова: создать универсальный модуль, к которому можно будет подключить любое устройство, способное предоставлять сигналы. На выходе к модулю подключаются любые устройства, способные реагировать на сигналы, получаемые от модуля. Через некоторое время система адаптируется и начинает вести себя «логично».



Модуль Artificial Intelligence AIA и устройства ввода\вывода

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


Входные сигналы для модуля искусственного интеллекта

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

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

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

Основная функциональность адаптеров

Распознавание шаблонов
В состоянии неопределенности первый шаг к адаптации это распознавание шаблонов во входных данных. Шаблон это базисная спецификация аналогичных групп последовательностей сигналов. Благодаря специальным алгоритмам шаблоны изменяются в течение обучения до приобретения своей природной формы.
Эта функциональность частично включена в AIA 1.0. Именно благодаря ей ArmMen V1.1 (клиентское приложение для демонстрации возможностей AIA) может распознавать уже услышанные ранее слова. Причём слова могут быть на любом языке, и не важно, кто прежде произносил их. Совпадения будут найдены независимо от пола, тембра голоса или возраста пользователей.

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

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

Симулятор
Одной из основных проблем искусственного интеллекта является его обучение. Даже мы – люди – как самые совершенные «НЕискусственные интеллекты» тратим на обучение годы. Чего же ожидать от искусственного?

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

Искусственная эволюция
Устройства с искусственным интеллектом, помещенные в разные среды обитания спустя некоторое время будут обладать определённым запасом данных. Создание нового подобного устройства будет сопутствоваться отбором данных собранных их предыдущими поколениями. Более того, новую порцию данных для искусственного интеллекта можно синтезировать не только на основе данных от предыдущих поколений, но и на основе данных от других подобных устройств. Причём этим синтезом так же может заниматься AIA.
Тем самым мы подходим к новому уровню моделирования – моделирования человеческого общения и естественного развития.
До этого уровня нам пока что очень далеко, но он даёт чёткое понимание того, к чему нужно стремиться.

Пара слов про ArmMen V1.1
В завершении статьи хотел бы немного рассказать про клиентское приложение ArmMen, при помощи которого в режиме онлайн можно протестировать функциональность модуля искусственного интеллекта AIA версии 1.0. В текущей версии ArmMen поддерживается только обработка звуковой дорожки. Обработка видео потока планируется в грядущей версии.
Что умеет ArmMen?
• Выполнение ранее записанных пользовательских команд
• Завершение предложения услышанного ранее
• Запись звуковой дорожки и её отправку на сервер
• Воспроизведение ответа сервера на клиентской стороне
На первый взгляд может показаться, что система просто выискивает совпадения текста по давно известным алгоритмам, которые были реализованы ещё в доисторических телефонах. Но на самом деле это не так, и в этом можно убедиться, проверив ArmMen-a командами, сказанными разными людьми. Для него нет никакой разницы, на каком языке команды, так же не важны пол, возраст, тембр и т.п. Абсолютно точно так же, как для нас совершенно неважно общаемся мы с ребёнком или с пожилым человеком, мы одинаково хорошо понимаем друг друга. Хотя… бывают и исключения конечно.
Для полноценного тестирования ArmMen настоятельно рекомендую использовать хорошую гарнитуру и использовать браузер Chrome.

habr.com

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

Подъем, овощи!

Все, кто еще не, срочно идем и регистрируемся на курс CS188.1x — «Artificial Intelligence». Курс стартовал 6.2.2015 и уже доступны материалы второй недели (первая проходится за три часа — она вводная). Оправдание принимается только одно — «не понимаю по-английски». В этом случае идешь и начинаешь учить английский!

Не знаешь Python? Все равно идешь и регистрируешься на курс, начинаешь слушать лекции и параллельно делаешь практикум первой недели и судорожно, торопясь и получая огромное удовольствие слушаешь параллельно кратенький курс по питону (ок, пайтону).

Не веришь/отрицаешь/боишься искуственного интеллекта? Не бойся! На самом деле курс должен называться Computational Rationality, а фактически изучает максимизацию ожидаемой полезности агента (О, блин! Maximizing agent's expected utility...)

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

Что понадобиться? Знание английского, желание изучить основы питона. Интерес и мотивация — гарантированы, курс офигенный (вот отзывы).

Обзоры на хабрах:
Как я решил потихоньку учить питон, а попал в дебри CS188.1x Artificial Intelligence (Что топик с кодом делает на мегамозге??!?!?!?)
Вести из недр CS188.1x Artificial Intelligence или итоговые впечатления
Обзор наиболее интересных материалов по анализу данных и машинному обучению №3 (обзор онлайн курсов)

Что в итоге?

  • Сертификат
  • Подтвержденный сертификат (за деньги от $50)
  • Интерес
  • Уверенность и знания, необходимые для участия в Russian AI Cup от mail.ru (и даже попадания в сотню… ну ладно, где-то рядом с сотней)
  • Рабочий автономный автомобиль как у гугл, который после окончания курса можно оставить себе Игра Pacman, где вы можете программировать поведение Pacman-a хоть всю оставшуюся жизнь. И другие веселые среды, игровые и не очень — недостатка в практике не будет!
  • Удостоверение мегамозга и разрешение постить топики на megamozg.ru

Поехали!

P.S. Там и конкурсы есть, например на минимальное количество проходов алгоритма поиска при сохранении оптимального результата. Призов нет :-р

habr.com


Смотрите также



© 2010- GutenBlog.ru Карта сайта, XML.