Малоизвестные языки для создания искусственного интеллекта. Как создать искусственный интеллект

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

LISP


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

Java

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

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

Prolog

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

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

Python

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

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

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

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

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

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

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

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

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

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


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

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

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

Всего в цикле будет три поста:

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

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

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

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

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


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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

LISP


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

Java

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

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

Prolog

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

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

Python

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

Сформулируем аксиомы:
1. Все в мире можно посчитать по каким-нибудь правилам. (про погрешности позже)
2. Расчет по правилу, это однозначная зависимость результата от исходных данных.
3. Любые однозначные зависимости можно находить статистически.
А теперь утверждения:
4. Существует функция преобразования текстовых описаний в правила - что бы не нужно было искать уже давно найденные знания.
5. Существует функция преобразования задач в решения (это исполнялка наших желаний).
6. Правило прогнозирования произвольных данных включает в себя все остальные правила и функции.

Переведем это на язык программиста:
1. Все в мире можно посчитать по каким-нибудь алгоритмам.
2. Алгоритм всегда при повторении исходных данных дает одинаковый результат.
3. При наличии множества примеров исходных данных и к ним результатов, при бесконечном времени поиска можно найти все множество возможных алгоритмов, реализующих эту зависимость исходных данных и результата.
4. Существует алгоритмы конвертации текстовых описаний в алгоритмы (или любых других информационных данных) - чтобы не искать потребные алгоритмы статистически, если их уже кто-то когда-то нашел и описал.
5. Можно создать программу, которая будет исполнять наши желания, будь они в текстовом или голосовом виде, при условии, что эти желания реализуемы физически и в потребные рамки времени.
6. Если умудриться создать программу, которая умеет прогнозировать и учиться прогнозированию по мере поступления новых данных, то по истечении бесконечного времени такая программа будет включать все возможные в нашем мире алгоритмы. Ну а при не бесконечном времени для практической пользы и с некоторой погрешностью ее можно заставить выполнять алгоритмы программы п.5 или любые другие.

И еще, ИМХО:
7. Другого способа полностью самостоятельного и независимого от человека обучения, кроме как поиска перебором правил и статистической проверки их на прогнозировании, не существует. И нужно только научиться использовать это свойство. Это свойство является частью работы мозга.

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

Конечно возможны и другие варианты представления данных, но для целей, когда на вход поступают самые различные форматы, попросту туда по началу запихиваем различные html с описаниями, этот наиболее оптимальный. Хотя маркеры можно заменить на эскейп последовательности в целях оптимизации, но объяснять с ними менее удобно. (А так же, представим, что все в ASCII, а не UTF).

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

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

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

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

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

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

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

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

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

И описание буду давать примерное, т.к. в реальности реализовать все это я пока… Но оно все логично. А так же следует учитывать, что все расчеты ведутся коэффициентами, а не истина или ложь. (возможно даже если явно указано что истина и ложь).

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

Struct t_node { int type; // 0 - условие, 1 - результат union { struct { // оператор условия t_node* source_get; t_value* compare_value; t_node* next_if_then; t_node* next_if_else; }; struct { // оператор результата t_node* dest_set; t_value* result_value; }; } };
На вскидку, что то вроде этого. И из таких элементов и строится алгоритм. В результате всех рассуждений получится более сложная структура, а эта для начального представления.

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

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

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

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

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

Коэффициент тождественности. (Здесь двунаправленная тождественность. Но чаще она однонаправленная. Позже переобдумаю формулу.)
Количество каждой пары XY в квадрат и суммируем.
Делим на: сумма количеств в квадрате каждого значения X плюс сумма количеств в квадрате Y минус делимое.
Т.е. SUM(XY^2) / (SUM(X^2) + SUM(Y^2) - SUM(XY^2)).
Этот коэффициент от 0 до 1.

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

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

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

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

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

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

Конвертационные функции.

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

Вот мы взяли нашли одну какую-то функцию, и путь между данными. Вторую и третью. Теперь смотрим, можем ли среди них, у каких-либо найти у путей общую часть. Попытаться найти структуры X-P1-(P2)-P3-Y. А потом, найти еще другие подобные структуры, с подобными X-P1 и P3-Y, но различающимися P2. И тогда мы можем заключить, что имеем дело со сложной структурой, между которыми существуют зависимости. А множество найденных правил, за вычетом серединной части, объединим в групп и назовем конвертационной функцией. Таким образом образуются функции перевода, компиляции, и прочие сложные сущности.

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

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

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

Функции о которых я говорил, на самом деле не просто находимый единый кусок алгоритма, а могут состоять из последовательности других функций. Что в свою очередь не вызов процедуры, а последовательность преобразований, типа как в linux работа с pipe. Для примера, я грубо описывал прогнозирование сразу слов и фраз. Но что бы получить прогноз только символа, к этой фразе нужно применить функцию взятия этого одного символа. Или функция научилась понимать задачи на английском, а ТЗ на русском. Тогда РусскоеТЗ->ПеревестиНаАнглийский->ВыполнитьТЗнаАнглийском->Результат.

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

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

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

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

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

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

Есть другой способ определения функции в этом механизме - выдать функцию через определение. Например:
Перевести на английскийстолtable
Ответить на вопросцвет небасиний
Создать программу по ТЗхочу искусственный интеллект...

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

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

Прогнозировать можно что-то, что происходит по истечению какого-то времени. Объекты движутся со скоростями и ускорениями, и всякие другие возможные изменения чего-либо со временем. Прогнозировать можно и пространство. Для примера, вы заходите в незнакомую комнату, в которой стоит стол, у которого один из углов накрыт листом бумаги. Вы это угол не видите, но мыслено можете спрогнозировать, что он вероятней всего такой же прямоугольный, как и другие углы (а не закругленный), и цвет этого угла такой же как и у других углов. Конечно, прогнозирование пространства происходит с погрешностями - вдруг тот угол стола обгрызенный, и на нем пятно краски. Но и прогнозирование временных процессов тоже всегда с погрешностями. Ускорение свободного падения на земле не всегда 9.81, а зависит от высоты над уровнем моря, и от рядом стоящих гор. И измерительные приборы вы никогда не сможете сделать абсолютно точными. Т.е. прогнозирование пространства и процессов во времени всегда происходит с погрешностями, и у различных прогнозируемых сущностей различные погрешности. Но суть одинакова - алгоритмы, находимые статистически.

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

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

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

А наша творческая деятельность в искусстве, это те же исследования, только ищутся сущности, затрагивающие наши эмоции, чувства и разум.

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

Альтернативным направлением реализации прогнозирования является использование рекуррентных нейронных сетей (скажем сеть Элмана). В этом направлении не нужно задумываться о природе прогнозирования, но там множество своих трудностей и нюансов. Но если это направление реализовать, то остальное использование остается прежним.

Выводы по статье:
1. Прогнозирование является способом находить все возможные алгоритмы.
2. С помощью манипуляции входом прогнозирования можно эти алгоритмы от туда вытаскивать.
3. Это свойство можно использовать, что бы разговаривать с компьютером.
4. Это свойство можно использовать, что бы решать любые задачи.
5. ИИ будет тем, как вы его определите, и после определения его можно решить как задачу.

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

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

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

В общем, быстродействие мозга и его многопараллельность - это очень спорный вопрос.

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

PPS: мое мнение, что научного определения термина «Искусственный интеллект» не существует. Существует только научно-фантастическое. А если нужна реальность, то см. п.5 в выводах по статье.

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

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

****
Исходники по этой теме, а так же дальнейшее развитие представления можете найти на сайте

  • Перевод

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Смысл жизни

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

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

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

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

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

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

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

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

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

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

Объяснитесь

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

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

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

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

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

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

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

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

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

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