Философская концепция и вопросы реализации

Станислав Мурсалов
www.shaman.ryazan.ru/pub/solomon.html

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

Введение в проблему.     Призрак структуры.

В чём смысл жизни?


    Введение в проблему

    Искусственный интеллект. Это сочетание слов приобрело почти неприличный оттенок. Всему виной обманутые ожидания давно выдвинутой и так и не осуществлённой идеи, а также расплывчатый термин: "с элементами искусственного интеллекта". Был период, когда объявить, что ваша сложная программная система не содержит этих самых "элементов" было всё равно, что признаться в изначальной ограниченности проекта.

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

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

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

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

    Другой пример. Система идентификации личности по внешности "Фигурант" имеет в своём составе модуль самообучения, оптимизации поиска. Оптимизация состоит в том, что на базе из примерно шестисот статических параметров, которые расчитываются по каждой фотографии, система динамически строит функции вычисления инвариантов, которые, собственно, и используются при поиске. Несколько модифицируя инварианты, система запоминает те изменения, которые улучшают результаты поиска. Работая по нескольку часов в день, оптимизация за месяц улучшила поиск более чем в шесть раз!
    В данном случае уровень самосознания - пространство этих  шестисот параметров, система их не придумала,  не осознаёт, но манипулирует ими совершенно самостоятельно, осознанно.
    К слову: функции вычисления инвариантов после такой оптимизации стали, в большинстве своём, малопонятны человеку, я их, например, не осознаю. Комментарии к этому - на следующей странице.

    Понятие "большой системы" - классический, широко применяемый термин. Под большой системой понимается система, имеющая настолько богатый набор внутренних связей, что общие свойства системы перестают быть просто следствием свойств и связей её элементов, а представляют собой некоторое новое качество. Несколько точнее: мы, её исследователи, не способны проследить или просчитать такие следствия, причём не столько по причине их недоступности или неточности описания, а по причине сложности, лавинообразного роста последствий малых воздействий на систему.
    Например, термодинамические свойства газа, состоящего из невообразимого числа молекул, скажем, выравнивание температур, никак не являются следствием простых и ясных законов динамики столкновений молекул. Эти молекулы с равным успехом можно было бы запустить в противоположном направлении.
    Другие примеры больших систем: атмосфера планеты (погода, климат), психика человека, его организм, и даже организм примитивной амёбы.
    Пока, видимо, единственным инструментом, способным одновременно и аналитически, и сознательно (nota bene!) исследовать большую систему, является интеллект человека. Ещё точнее: мы можем применять различные эвристические алгоритмы и, используя быстродействующий компьютер, обыграть Каспарова, но это каждый раз - частный случай, ограниченность которого ясна нам самим.

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


    Призрак структуры

    Любезный Прохожий, надеюсь, я убедил тебя, что систему искусственного интеллекта необходимо разрабатывать как систему, полностью осознающую ту проблему, которой она собирается заниматься. Осознающую в том смысле, который сформулирован в предыдущем разделе.
    Однако, что значит "полностью осознающую"? Если мы (программисты) в силах описать все возможные методы решения задачи (тем самым полностью осознав проблему), то всё элементарно, но искусственный интеллект здесь, очевидно, не нужен. Вспомним, наша задача - большие системы, все возможные методы описать немыслимо (да мы их и не знаем). Ясно, что необходимо позволить системе самой разрабатывать методы решения задач, но в этом случае разработка этих методов должна быть осознаваема.
    Прохожий, тебе это не напоминает попытку вытащить себя из болота за волосы? Система должна полностью осознавать себя, то есть быть описана в в тех терминах и объектах, которые она сама сконструировала, способна создавать, изменять и уничножить. Что делать будем?

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

    Из общих соображений (и из опыта): чем более простым и однообразным будет базовый уровень языка, тем более общие и разнообразные структуры на нём можно описать. Пусть объект - атом, минимальная частица базы знаний нашей системы. Для языка этого мало, объекты необходимо как-то связывать. Пусть каждый объект может быть связан с любыми другими объектами! Недостаточно, неразличимы связи, нумеровать их, что ли? Пусть связь - такой же объект той же базы знаний. Пока достаточно.
    Последнее предварительное замечание: программы мы пишем на каком-то языке. Ясно, что наши целые, плавающие, классы и прочая программистская комбинаторика - совсем не те объекты, которыми манипулирует база знаний (романтизм LISPа оставим в прекрасном прошлом), назовём их соответственно объектами программы и объектами знаний.
    Если система сможет создавать и уничтожать любые объекты знаний, будет ли такая база знаний полностью осознаваема? О, да, если единственным механизмом работы с ними будут её собственные механизмы. На языке программиста: для наших программ все объекты знаний - равноправны, то есть мы их различия системе никак не навязываем (и не мешаем осознавать). Отсюда:

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

    Кажется, я выразился недостаточно ясно. Вот пример, Прохожий.
    Пусть система на каждом шаге либо создаёт, либо уничтожает случайный объект. Так как связи - объекты, их это тоже касается. В описанных терминах, такая система - почти полностью осознаваемая база знаний (кроме механизма выбора случайного), но для нас, по-видимому, совершенно бесполезная.
    (Ты сказал: бессмысленная, Прохожий? Уверяю тебя, - спорный и очень интересный вопрос, но это для более позднего разговора.)

    Мы ещё вернёмся к этому эффекту потери контакта с казалось бы элементарной системой. Сейчас утешительный пример для любителей кристальной чистоты и ясности. Пусть вышеназванные объекты - позиции в шахматах, связи строим как правильные шахматные ходы из одной позиции в другую, новые объекты создаём путём корректных ходов из уже имеющихся позиций. Если теперь для выбора очередного "шага" придумать какую-нибудь классическую стратегию "минимакса", то мы получаем хорошо нам знакомую схему игровой программы (или General Problems Solver, кому больше по душе эти воспоминания). Этот ясный частный случай мы получили из самой общей начальной схемы.

    Продолжаем разговор.
    Может ли система воспринимать и различать объекты программы, то есть находящиеся вне её базы знаний? Если бы это было так, природа таких различий была бы воспринимаемой системой, но не осознаваемой ею, это же программа. То есть верен и второй, симметричный первому постулат (теперь это уже кажется естественным):

    Постулат №2. Для того, чтобы система полностью осознавала себя, необходимо, чтобы она не имела возможности различать объекты в наших программах.

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

    Можно рассмотреть два пути.

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

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

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

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

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

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

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

    В принципе, система может создать любой объект и любые связи, и процесс этот (опять таки, в принципе) - спонтанный. Разумеется, такое свободное ассоциирование подлежит регулированию. Так как этот уровень работы системы реализуется программами (в нашей терминологии - физиология), он совершенно не осознаётся, как мы не осознаём работу нейронов нашего мозга.
    Фокус - это небольшое, обычно 500 - 1000, подмножество объектов, на которое направлено "внимание" системы в данный момент. Причин введения такого понятия две - у нас только один процессор (ну четыре, не миллион же) и желание добиться целеустремлённости. Именно с объектами фокуса производятся преобразования, в нём создаются и уничтожаются объекты и связи. В соответствии с общими правилами объекты помещаются в фокус и удаляются из него. Причиной помещения в фокус является то, что в результате очередной операции система по связи "вышла" на этот объект. Все объекты в фокусе снабжены атрибутом актуальности, которая при отсутствии интересных результатов постепенно уменьшается. Наименее актуальные объекты удаляются из фокуса (но не из базы знаний!).
    Задача - это, собственно, фокус. Задач (и связанных с ними фокусов) может быть несколько. Они создаются при расщеплении фокуса, когда возникают группы объектов, не связанные между собой. При падении актуальности всего фокуса ниже некоторого порога задача уничтожается. Таким образом система как бы исследует несколько проблем одновременно и сама определяет, каких и сколько.
    Операция - это элементарное, неделимое действие над объектами фокуса. Набор типов операций невелик, но интересен, здесь я упомяну одну из них, хорошо известную в логике резолюцию. Между двумя объектами создаются одновременно две связи одного типа, почти достоверно истинная и столь же ложная. Порождаемые при этом ассоциации сами по себе не создают нового знания, но могут выявить скрытые связи, ведь одно из созданных предположений может отражать истину.
    Энтропия - мера неопределённости состояния системы. Объективно, я несколько неверно применяю этот термин, принятый в информатике и физике, но он хорошо отражает суть. Допустим, несколько объектов связаны между собой, и аналогичных групп объектов много. Если мы в каждой группе повторяющуюся часть заменим на один объект и все такие объекты свяжем, тем самым будет создано новое общее понятие. При этом сложность сети базы знаний уменьшится. Энтропия в терминах Соломона - некоторая мера сложности, её уменьшение - цель системы, то есть такие операции приветствуются, а участвующие в них объекты фокуса премируются актуальностью. Аналогия с мышлением здесь на поверхности - пока цепочка наших дедуктивных или ассоциативных рассуждений к чему-то ведёт, мы её продолжаем. Каждое новое содержательное понятие, подтверждённое тем, что находилось вне нашего внимания (вне фокуса!), укрепляет нас в этом занятии. И наоборот - если очередной вывод уже встречался ранее в этом же фокусе, мы занимаемся чем-то не тем.

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

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

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




Сайт "Искусственный интеллект" - программирование ИИ от разработчика: общение, статьи, ссылки.

Copyright "OBRAZEC.RU", 2002-2017. Последние изменения внесены October 31 2010 17:21:46.
С предложениями и замечаниями обращайтесь на форум.



         Дата предыдущего изменения 13 февраля 2007 года.