Сергей Горшков (serge_gorshkov) wrote,
Сергей Горшков
serge_gorshkov

Category:

Искусственный интеллект на OWL

Дискуссия по поводу прошлого поста показала серьезный разрыв в понимании разными людьми термина "искусственный интеллект" - чем, впрочем, только подтвердила один из основных тезисов статьи. Чтобы прояснить и обосновать свой взгляд на искусственный интеллект и возможности его реализации с помощью 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 и прочих семантических технологиях нет. Но его куда меньше, чем могло бы быть при "традиционном" подходе к имитационному моделированию. Какой-то императивный алгоритм, который крутит эти правила, все равно остается, но он настолько высокоуровневый, что никаких особых ограничений на то, что происходит внутри модели, не налагает. Что мы, собственно, уже доказывали своим продуктом под названием "платформа имитационного моделирования".

Tags: имитационное моделирование, мотивация, семантические технологии
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 77 comments