serge_gorshkov


Сергей Горшков - о бизнесе в сфере ИТ

о семантической интеграции, программировании, управлении...


Previous Entry Share Next Entry
Искусственный интеллект на OWL
serge_gorshkov
Дискуссия по поводу прошлого поста показала серьезный разрыв в понимании разными людьми термина "искусственный интеллект" - чем, впрочем, только подтвердила один из основных тезисов статьи. Чтобы прояснить и обосновать свой взгляд на искусственный интеллект и возможности его реализации с помощью OWL и правил логического вывода, я сделал небольшой практический кейс, на примере которого хочу все разложить по полочкам.

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

У предметов есть своя логика:

  • Если зверек ломает пластиковый контейнер, тот выдает пищу.

  • Если зверек крутит бутылочку с крышкой, она меняет свое состояние - у нее становится "открученная крышка".

  • Если зверек тянет бутылочку с открученной крышкой, она выдает пищу.

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

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

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

  1. Зверек встречает объект случайно выбранного типа.

  2. Проверяет, есть ли у него правило взаимодействия с объектами такого типа. Если есть - переходит к шагу 5.

  3. Если правил нет, он выполняет с объектом некоторое количество случайных действий: потаскает, покрутит и т.д. Если действия не дали результата - переходит к следующему предмету (шаг 1).

  4. Если действия увенчались успехом, он запоминает последовательность этих действий в виде правила. Затем переходит к следующему предмету (шаг 1).

  5. Если правило уже есть - зверек с определенной вероятностью его выполняет. У правил есть такая характеристика, как степень уверенности в правильности правила: чем она выше, тем больше вероятность, что зверек его выполнит. Однако, с некоторой ненулевой вероятностью зверек может проигнорировать правила и перейти к шагу 3, чтобы попробовать какие-то новые действия с предметом. Правил для каждого предмета может быть несколько, и не все они оптимальны: например, пластиковый контейнер достаточно просто сломать, но если зверек при первой удачной встрече с ним сначала покрутил его, а потом сломал, правило в таком виде и сформируется. Благодаря ненулевой вероятность обхода правил зверек рано или поздно найдет более оптимальное решение - сразу ломать контейнер. Это правило будет быстрее приводить его к результату, степень уверенности в нем рано или поздно вырастет, и это правило "победит" остальные.

  6. Успешый результат применения правила добавляет уверенности в его правильности.

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



За красоту вывода не загонялся, прошу прощения: весь кейс сделан за несколько часов.

В этом тестовом прогоне у зверка образовалось три правила:

  1. Пластиковый контейнер: ломать. Степень уверенности = 4.

  2. Пластиковый контейнер: тянуть, затем ломать. Степень уверенности = 1.

  3. Бутылка с крышкой: крутить, затем тянуть. Степень уверенности =4.


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



Хотя насовсем он их не бросает: вдруг рано или поздно что-нибудь получится?

В общем, думаю, суть кейса понятна. Довольно простой пример самообучающегося алгоритма. Где же фишка?
Фишка в том, что типы и характеристики объектов, а также методы взаимодействия с объектами (предикаты), выражены в OWL. Правила поведения объектов и зверька выражены в виде логических правил, построенных на концептуальной модели OWL (правила не SWRL, а наши собственные, с ними куда удобнее). Предикаты, конечно, бинарные, вида Ломать (Зверек, ЖестянаяБанка). В листинге я их просто подсократил, поскольку зверек у нас пока один.

Ну так вот. Правила поведения объектов имеют простейший вид, условно говоря, такой:

ПластиковыйКонтейнер (?x) ^ Ломать (?некто, ?x) -> Съел (?некто, ?x)
БутылкаСКрышкой (?x) ^ Крутить (?некто, ?x) -> КрышкаЗакручена (?x, "false")
БутылкаСКрышкой (?x) ^ КрышкаЗакручена (?x, "false") ^ Тащить (?некто, ?x) -> Съел (?некто, ?x)

Правила поведения, формирующиеся "в голове" у зверька, выглядят примерно так:

БутылкаСКрышкой (?объект) -> Крутить (?я, ?объект), Тащить (?я, ?объект)

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

Но это все не принципиально, главное же состоит вот в чем:

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

Это не предусмотрено существующими средствами OWL (точнее, правила SWRL в OWL сериализуются, могут жить внутри triple store, но связываться с этим себе дороже), но нам-то кто мешает посмотреть на дело шире? Никто.
Итак, наша машина логического вывода берет правила из самой модели. Это значит, что правила могут изменять правила.
Извините за капс, но это действительно принципиально важно. Благодаря этому факту мы можем изложить в виде правил сам алгоритм обучения, а сверху построить другой алгоритм, который будет корректировать алгоритм обучения - например, вносить в него время от времени случайные изменения и смотреть, улучшилась ли эффективность.
Понятно, что "потолка" здесь нет: еще выше может быть еще один алгоритм, и так далее.
Таким образом мы получаем потенциально бесконечно самосовершенствующийся алгоритм, и переходим в этическую плоскость - лично я считаю, что такие алгоритмы создавать нельзя, должен быть "предохранитель", который не позволит человеку перестать понимать, что там внутри у него происходит.
После написанного лично для меня вопрос о том, может ли ИИ быть построен с использованием логических правил, а также можно ли с их помощью имитировать процесс познания и получения новых знаний, окончательно снят.

Если бы я не писал прошлого поста, сейчас назвал бы этот принцип построения самообучающихся систем своим именем )))

Конкретно в этом кейсе без императивного программирования не обошлось - хотя бы потому, что random'а в OWL и прочих семантических технологиях нет. Но его куда меньше, чем могло бы быть при "традиционном" подходе к имитационному моделированию. Какой-то императивный алгоритм, который крутит эти правила, все равно остается, но он настолько высокоуровневый, что никаких особых ограничений на то, что происходит внутри модели, не налагает. Что мы, собственно, уже доказывали своим продуктом под названием "платформа имитационного моделирования".


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

Итак "Проблема снята". Теперь можно брать этот алгоритм и решать все человеческие интеллектуальные задачи, получать новые знания, изобретать новые источники энергии и пр. Нобелевскую премию в следующем году получит мышиная программа на основе OWL.

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

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


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

Edited at 2016-05-19 06:04 pm (UTC)

Кстати, я не называл вид зверька, это вы экстраполировали ))
Люди всегда так делают, не замечают своих выводов в духе "круглое - значит оранжевое", а потом чему-то удивляются.

Может, это был ребенок, который впервые в жизни открыл холодильник? Разницы ровным счетом никакой.

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

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

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

>> Зверек может выполнять с ними три действия: тянуть, ломать и крутить. Он ничего не знает о том, каким видам воздействий поддаются эти предметы.

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

Если говорить о полноценной реализации такого алгоритма, то "зверек" (субъект) должен ориентироваться на свои возможности. О них он должен что-то исходно знать. Далее он должен быть способен определить, может ли то или иное действие быть применено к рассматриваемому объекту.

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

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

В _динамических_ экспертных системах (точнее, в программных продуктах их построения) такие возможности есть и используются, например в Gensym G2 (не OWL и не Prolog).

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

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

Мм, а где критерий - слабый/сильный ИИ?

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

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

Сергей, здравствуйте!
Очень хорошо и интересно пишите. С удовольствием прочитал обе статьи и переписку. Согласен почти со всем (с вами) кроме ключевого вопроса: строго по Шенону - логика не может увеличить количество информации. Нестыковочка однако... А что может?

Если вас еще не достали этой мистикой, то я тут подробно все описал.

Дмитрий, спасибо за комплимент ))
Шенона, к сожалению, не читал, помню только Голдмана с теорией информации. Там количество информации понимается как степень устранения неопределенности. С этим не все просто, но если следовать этому определению хотя бы на интуитивном уровне - окажется, что новая информация все-таки создается.

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

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

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

То же самое происходит с логическими выводами. В ABox (сведения о конкретных объектах) новая информация появляется совершенно точно. Вернемся к черному ящику: я засунул в него руку, нащупал некий предмет. Исследовав его, я понял, что он гладкий, цилиндрический и с ручкой. Я делаю логический вывод на основании правил: это кружка. Секунду назад у меня была неопределенность насчет этого предмета - он мог оказаться чем угодно; а теперь я знаю, что это кружка. Новая информация создана. И такой вывод можно элементарно получить и с помощью простого OWL.

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

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

Кстати, очень помогают в подобных размышлениях результаты исследования мышления (не побоюсь этого слова) животных.
Например: http://ria.ru/science/20150330/1055391295.html
Или вот этот фильм, с 12:55 по 19:07: https://www.youtube.com/watch?v=0qnWekUxfNw


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

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

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

Сергей, очень симпатично!

[Мои соображения]Мне даже кажется, что значительную часть истории ИТ можно представить как некую эволюцию в системе трёх тел с условными названиями Storage, Transfer и Execution. Временами эти тела сближаются, временами расходятся, и в том и в другом случае это может аргументироваться соображениями производительности или чьего-либо удобства.

Ну а вы завершаете очередной виток, отдавая добрую порцию вещества Execution уже объединённым Storage и Transfer. Пускай вендоры конвенционального ПО почувствуют себя героями «Меланхолии»!


Но разъясните все же, чем ваш подход отличается вот от какого. Пусть некто говорит: всё есть XML, ибо в нём можно записать и факты, и термины, и правила, так что давайте создавать ИИ поверх, например, Altova XML Spy.

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

Имхо до "закрытия вопроса" далековато. Болдачев там выше дело написал.

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

Попробуйте, хотя бы мысленно, приложить его к какой-нибудь известной задаче ИИ. Например к игре в шахматы. Что получится? Ход e2-e4 в начальной позиции чаще выигрывает, чем c2-c3?

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

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

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

Мне еще интересно - а в комментариях уже вспоминали Стаффорда Бира и его алгедоническую сеть?

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

  • 1
?

Log in

No account? Create an account