Программирование искусственного интеллекта. Создание искусственного интеллекта

09.04.2019

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

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


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

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

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

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

Теория распознавания образов

Компания Simmakers предлагает следующие услуги по распознаванию образов:

  • Оптическое распознавание символов
  • Распознавание рукописного ввода
  • Распознавание лиц и автоматическое определение лица в кадре
  • Детектирование и распознавание движения

Обработка изображений

Наши услуги:

  • Поиск изображений
  • Распознавание объектов
  • Измерение параметров объекта
  • Повышение контурной резкости изображений

Интеллектуальный анализ данных (Data mining)

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

Мы предлагаем услуги по интеллектуальному анализу данных в следующих отраслях:

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

Телекоммуникационная индустрия

  • Разработка и создание хранилища данных используя преимущества интеллектуального анализа в сфере телекоммуникаций
  • Многомерный анализ телекоммуникационных данных
  • Обработка телекоммуникационных данных в маркетинговых целях
  • Обнаружение телекоммуникационного мошенничества
  • Локализация ошибок и прогнозирование неисправностей в коммуникационной сети
  • Средства визуализации для анализа телекоммуникационных данных

Сфера розничной торговли

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

Почему клиенты выбирают Simmakers

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

Задачи, выполненные ранее специалистами Simmakers:

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

  • Партнерство с NVIDIA. Являясь , мирового лидера в производстве видеокарт и графических процессоров, мы применяем последние достижения корпорации при разработке ИТ-решений в области компьютерной графики, визуализации данных и параллелизации вычислений.
  • Обширный опыт. Работая более 10 лет, специалисты нашей компании выполнили свыше 30 сложных проектов по визуализации данных и компьютерному моделированию физических и технологических процессов для различных отраслей, включая строительный инжиниринг, добычу нефти и газа, металлургию, киноиндустрию, медицину, искусство и др.
  • Экспертиза международного уровня. Сотрудники компании Simmakers – это профессионалы в области прикладной математики, информационных технологий и разработки программного обеспечения, многие из которых обладают высокими достижениями и международными наградами в предметных областях. Мы активно сотрудничаем с ведущими мировыми исследовательскими центрами, Массачусетский технологический университет , Калифорнийский университет в Лос-Анджелесе и Сколковский институт науки и технологий.
  • Индивидуальный подход. При разработке ИТ-решений мы максимально учитываем потребности и пожелания каждого заказчика. Такой подход позволяет нам наладить доверительные и взаимовыгодные отношения с клиентами, что в итоге благотворно сказывается на эффективности выполнения проектов.
    • Всё ещё остались вопросы?

Технологии

Мы применяем различные методы:

  • Перцептроны
  • Многослойные перцептроны
  • Радиально-базисные сети
  • Когнитрон, неокогнитрон
  • Нейронная сеть Хопфилда
  • Алгоритм обратного распространения ошибки
  • Алгоритм Левенберга - Марквардта
  • Алгоритм упругого распространения
  • Метод Бройдена-Флетчера-Гольдфарба-Шанно
  • Метод сопряженного градиента (CG)
  • Генетические алгоритмы
  • Эволюционное программирование
  • Эволюционная стратегия
  • Пропозициональная
  • Предикатная
  • Высшего порядка

Экспертные системы, гибридные интеллектуальные системы

  • Алгоритмы гибридизации
  • Гибридные экспертные системы
  • Гибридные нейроны и нейронные сети
  • Гибридные обучающие алгоритмы ANN

Часто задаваемые вопросы

Q: Что подразумевает под собой термин «искусственный интеллект»?

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

Q: Какие основные подходы и направления к построению систем ИИ?

A: Существуют различные подходы к построению систем ИИ.

Единого ответа на вопрос, чем занимается искусственный интеллект, не существует. Анализируя историю ИИ, можно сделать вывод, что за последние пять десятилетий исследования в области ИИ в основном сосредоточены на решении конкретных проблем. Поэтому, несмотря на наличие множества подходов как к пониманию задач ИИ, так и созданию интеллектуальных информационных систем, на сегодняшний день можно выделить два основных подхода к разработке ИИ: 1) нисходящий (англ. Top-Down AI), семиотический - создание экспертных систем, баз знаний и систем логического вывода, имитирующих высокоуровневые психические процессы: мышление, рассуждение, речь, эмоции, творчество и т. д.; 2) восходящий (англ. Bottom-Up AI), биологический - изучение нейронных сетей и эволюционных вычислений, моделирующих интеллектуальное поведение на основе биологических элементов, а также создание соответствующих вычислительных систем, таких как нейрокомпьютер или биокомпьютер.

Q: Какие области применения искусственного интеллекта существуют на сегодняшний день?

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

Экспертные системы

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

Эвристическая классификация

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

Распознавание речи

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

Обработка естественного языка

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

Компьютерное зрение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

LISP

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

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

Java

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

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

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

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

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

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

Prolog

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

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

Python

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сформулируем аксиомы:
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. Как создать программу, которая по одному упоминанию, или движению пальца, пытается понять и сделать то, что от нее хотят.

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

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