ã, 1999, Александр Ермолин,
кандидат физико-математических наук, г.Петрозаводск
Ключевые слова:
данные, информация, обобщение, правило, объект, класс, иерархия, предметная область, искусственный интеллект
Не говори, чему учили, а скажи, что узнал.
(Пословица)
Если Вы подумали, что здесь Вам в очередной раз расскажут о поисковых машинах компьютерной сети Интернет или что-нибудь о пользе школ и книжных библиотек, то должен заметить: вовсе нет. Названные источники дают нам всего лишь информацию, а информация и знания - совершенно разные понятия. Здесь мы обсудим, каким образом информация может превратиться в знания и что нам следует предпринять, чтобы ускорить этот процесс. Далее мы попробуем представить себе, как можно передать знания в компьютерную программу и в какой мере она сможет добывать их самостоятельно.
Из окружающего мира мы воспринимаем непрерывный поток информации сразу по нескольким каналам: зрительно, на слух, через ощущения. Наш мозг подобно мощному быстродействующему процессору, обрабатывает весь этот поток, в результате чего мы имеем возможность осознавать происходящее, помнить то, что уже произошло, и даже в какой-то степени прогнозировать будущее. Сейчас мы ставим перед собой задачу представить работу мозга функционально, то есть понять, из каких стадий она состоит, в какой последовательности выполняется и к какому результату приводит. Попробуем нарисовать функциональную схему или модель работающего мозга.
Чтобы разобраться в далеко не простом процессе осознания действительности, рассмотрим простой пример. Предположим, Вы работаете в библиотеке, фонд которой постоянно пополняется новыми изданиями. Объем хранилища, разумеется, ограничен. В то же время, круг интересов читателей необычайно широк, а сами читатели привыкли к тому, что их обслуживают быстро. В Ваши обязанности входит поддержка фонда в такой комплектации и в таком порядке, чтобы максимально быстро и качественно удовлетворить интересы читателей и по возможности сэкономить место в хранилище.
Как часто бывает в задачах на поиск оптимума (оптимального решения), предъявленные требования противоречивы. Нас же интересует не сам оптимум, а способы его достижения. Таких способов несколько, я перечислю наиболее значимые из них:
1. В новых поступлениях не брать те издания, которые уже есть в библиотечном фонде.
2. Отказаться от хранения изданий, не пользующихся спросом.
3. Переместить часто запрашиваемые издания ближе к читальному залу, а редко запрашиваемые убрать вглубь хранилища.
4. Упорядочить хранение. Завести каталоги и классификаторы.
Скорее всего, Вы воспользуетесь всеми перечисленными способами оптимизации обслуживания, а читатели будут довольны.
Теперь вновь обратимся к работе мозга. Функционально все очень похоже на работу в библиотеке. Получая информацию извне, разумно сравнить ее с тем, что уже известно. Если информация не несет Вам ничего нового, не стоит ее запоминать как некий новый факт. В этом случае мозг просто отмечает, что полученные ранее сведения подтвердились, и укрепляет их присутствие в памяти. С другой стороны, те сведения, которые долгое время не были востребованы или долгое время не подтверждались, постепенно стираются из памяти. Не правда ли, отмеченное поведение мозга сильно напоминает первые три из перечисленных способов оптимизации обслуживания в библиотеке?
Чуть сложнее заметить сходство с четвертым из названных способов. В самом деле, как упорядочить факты, хранящиеся в памяти? Как сделать доступ к ним быстрее и эффективнее? Оказывается такой прием есть, он называется обобщением. Обобщение делают на основе нескольких фактов (результатов наблюдений), сравнивая их между собой и обнаруживая сходство между ними. Например, располагая множеством фактов на тему о том, что утром Солнце восходит с одной и той же стороны, можно сделать обобщение: утром Солнце всегда восходит с одной и той же стороны (назовем эту сторону востоком). Новая формулировка является правилом, закономерностью, законом. Если мы запомнили правило, то необходимость в хранении в памяти обобщенных фактов отпадает - отсюда экономия "места в хранилище фактов". Если мы трудимся над осмыслением нового факта, мы сопоставляем его с известными фактами и правилами. Причем его сопоставление с правилом происходит во много раз быстрее, чем сопоставление со многими сходными фактами до обобщения. Отсюда - экономия "времени обслуживания".
Теперь если мы вновь увидим восходящее (естественно, на востоке) Солнце, то наш мозг не будет запоминать это как новый факт. Вместо этого будет отмечено подтверждение правила, а само присутствие правила в памяти будет подкреплено. Многократное подтверждение правила делает его позиции в памяти еще прочнее, но случается и так, что наши наблюдения противоречат правилу. В этом случае требуется особенно активная работа мозга: от него требуется изменение (уточнение) правила для устранения противоречия. Наконец, для правил, как и для отдельных фактов, важно быть востребованными. Если правило долгое время не используется, со временем оно может быть забыто. Помните известную поговорку: “Повторение – мать учения”? Согласны ли Вы делать работу над ошибками, чтобы лучше усвоить изучаемые правила?
Взгляните на блок-схему слева. Она иллюстрирует обсуждаемые процессы. Красная рамка отделяет процессы в сознании от внешних процессов. Правила показаны более "прочными и монолитными", чем разрозненные факты. Есть ли здесь знания? Вероятно, уже есть, поскольку есть продукт интеллектуального труда. Хотя чаще всего под знаниями понимают нечто большее.
Способность разума делать обобщения - поистине великий дар. Человек помнит огромное количество правил. Но разум не останавливается на достигнутом и делает новый шаг по пути обобщения - сопоставляет между собой и обобщает правила. При этом оказывается, что правила всегда относятся к определенным объектам. Например, следующие три правила можно отнести к одному и тому же объекту - Солнцу.
1. Утром Солнце всегда встает с одной и той же (восточной) стороны.
2. Солнце постоянно излучает свет и тепло.
3. Все расстояния на Земле намного меньше, чем расстояние от Земли до Солнца.
Важно понимать, что если мы размышляем об объекте (Солнце), то все относящиеся к нему правила будут для нас иметь значение - просто потому, что они неотделимы от него и всегда проявляются как единое целое. На основании трех названных правил, между прочим, можно обнаружить и доказать важнейшее свойства объекта Солнце: Солнце можно использовать как ориентир, чтобы не заблудиться. Следовательно, правила для одного объекта удобно и необходимо держать в памяти рядом, что иметь возможность извлекать их по требованию все вместе. Как тут не вспомнить библиотечные каталоги и классификаторы?
Являясь результатом дальнейшего обобщения, объекты в нашем сознании еще более устойчивы, чем правила. Правда, если объект долгое время не находит подтверждения, то и он может оказаться забытым (вместе со всеми относящимися к нему правилами!). Но это, пожалуй, редкий случай, обычно объекты хранятся в памяти очень долго.
Можно ли продолжить обобщение и заняться сопоставлением объектов? Да! В жизни мы постоянно сравниваем объекты между собой. Правила, установленные в отношении одного объекта, часто бывают справедливы и в отношении многих других объектов. Следовательно, объекты удобно объединять в классы (классифицировать), относя общие для них правила к тому или иному классу - продукту обобщения. Обнаруживая новый объект, мы первым делом занимаемся отнесением его к известным нам классам. Если задача классификации нового объекта решена успешна, то мы вправе ожидать от него такие свойства и поведение, которые характерны для всех объектов класса! Таким образом получается, что о новом объекте мы уже много знаем. Применяя эти знания на практике, мы имеем возможность предсказывать то или иное поведение объекта в конкретных условиях и даже управлять им. Об этом принято говорить крылатой фразой: "Знание - сила". Действительно, обобщение и классификация объектов гораздо ближе к знаниям, чем отдельные факты или правила. Нарисуем на схеме недостающие блоки (объекты и классы).
В "нижнем разделе памяти под именем классы" хранятся наиболее общие сведения - основы знаний, то, что стало продуктом обобщения целого жизненного опыта. Эти основы довольно сложно разрушить, с какими бы явлениями в жизни мы ни сталкивались.
Сравнивая классы между собой, мы обнаруживаем, что уровень их общности не одинаков. Иначе говоря, один класс может включать в себя другие классы (подклассы). В этом случае все его свойства и поведение остаются справедливыми для всех объектов его подклассов. Например, класс деревьев предполагает такие свойства, как наличие корня, ствола, веток и листьев (или хвои).
Этими свойствами обладают все деревья - ели, тополя, березы и многие другие. В то же время, ели, тополя и березы - это тоже классы объектов. Точнее, это подклассы для класса деревьев. Нетрудно заметить, что классы образуют иерархию - более общие классы включают в себя менее общие.
Подводя итог сказанному, отметим, что знания
представляют собой сложную иерархическую структуру,
динамичны, то есть постоянно пополняются и уточняются,
индивидуальны, то есть основаны на индивидуальном восприятии и опыте.
Теперь самое время задуматься над тем, как ускорить процесс добычи знаний. По-видимому, самый простой путь - обмен информацией между людьми. (Если бы его не было, каждый человек был бы вынужден проверять каждое обобщение самостоятельно!) Правда, и этот путь не лишен трудностей. Судите сами. Отдельный факт еще можно передать сразу, без подготовки. К примеру, Вы можете показать фотоснимок, запечатлевший какое-то событие. Но как только Вы захотите передать кому-то результат обобщения, Вам придется прежде всего согласовать терминологию. Иначе говоря, необходимо выяснить, одинаковый ли смысл вкладываете Вы и Ваш собеседник в те или иные понятия (термины), используемые в обобщенных формулировках. Если же Вы ставите целью передать собеседнику обобщение на уровне классификации, то Вам может потребоваться длительный разговор или даже несколько бесед, прежде чем Вы согласуете всю иерархию используемых понятий. От собеседника также потребуются усилия, направленные на приведение в соответствие собственных знаний с теми новыми фактами и правилами, которые он услышал от Вас.
Те же самые трудности возникают и при попытках наделить знаниями компьютерные программы. Программист, если он работает в одиночку, вынужден глубоко разбираться не только в программировании, но также и в тех областях знаний, с которыми связана создаваемая им программа. Эти области знаний называют предметными. Наилучшие результаты достигаются рабочими группами, где в тесном контакте с программистами работают эксперты в предметных областях. При этом большая часть рабочего времени уходит как раз на передачу знаний от экспертов к руководителю проекта и программистам.
Альтернативой рассмотренному пути передачи знаний является ввод в компьютерную программу отдельных фактов (иначе говоря, данных). От программы требуются определенные интеллектуальные качества, с помощью которых она сама будет строить обобщения и действовать далее в соответствии с ними. Рассмотрим подробнее, какие барьеры стоят на этом пути.
Ввод данных проблем не вызывает. В нашем распоряжении клавиатура, мышь, сканер и много иной техники, для которой тщательно разработаны и отлажены специальные программы - драйверы устройств.
Сложнее обстоит дело с искусственным интеллектом. Чтобы лучше понять суть проблемы, рассмотрим несложную на первый взгляд программистскую задачу.
Задача
Допустим, мы осуществляем ввод последовательности целых чисел с клавиатуры. Мы подразумеваем некое арифметическое правило формирования этой последовательности, так что каждое введенное число полностью определяется этим правилом. Случайный выбор полностью исключен. Программа должна разгадать правило и предложить продолжение ряда чисел.
Задача продолжения числового ряда часто встречается в тестах на интеллектуальные способности для людей. В отношении людей задача выглядит намного сложнее, поскольку предполагается, что люди знают числа не только с арифметической стороны, но также и по другим ассоциациям. Например, человеку можно в качестве теста предложить ряд: 31, 28, 31, 30, … Тестируемый может догадаться, что дело здесь не в арифметике, а в календаре! В ряду стоят количества дней в месяцах года. Но нельзя требовать от программы подобной эрудиции по разным областям знаний. В нашем примере мы специально подчеркнем, что правило формирования последовательности должно быть из области арифметики. Например, ряд 12, 22, 32, 42, … можно продолжить числом 52, так как действует правило арифметической прогрессии.
Чтобы научить программу распознавать правило, надо обратить внимание на то, какие методы распознавания применяем мы сами. Только на первый взгляд может показаться, что решение появляется как единое целое (или не появляется вовсе). На самом деле, в памяти быстро происходит перебор многих вариантов возможных взаимосвязей между числами ряда. Если предполагаемые связи обнаруживают сходство (предпосылка для обобщения), то делается попытка максимально точно описать эти связи (выразить арифметической формулой). Если все связи подтверждаются одной и той же формулой, а сама формула однозначно определяет следующие числа ряда, то правило можно считать установленным.
Вот пример ряда чуть сложнее: 5, 10, 17, 26, 37, … Возможно, Вы уже угадали, в чем секрет последовательности. Интересно, как Вы рассуждали? Мой вариант рассуждений такой. Предположим, очередное число связано только с числом-соседом слева. Иначе говоря, мы имеем следующие факты: (5, 10), (10, 17), (17, 26) и (26, 37). Из них видно, что следующее число больше предыдущего, что явно не достаточно для однозначного продолжения ряда. Обратим внимание на разность в каждой паре: 5, 7, 9, 11. Это же арифметическая прогрессия! Она уточняет предыдущее наблюдение и делает возможным однозначное продолжение ряда. Следующая разность в паре соседних чисел будет равна 13. Значит, следующий член ряда равен 37+13=50. Если Вы любите математику, то на основе сделанных рассуждений легко убедидесь сами, что формула связи для трех соседних чисел в ряду такова: an+1 = 2an - an-1 + 2. Обратите внимание, что первоначальная разбивка ряда на факты оказалась недостаточной. Из формулы видно, что обобщаемые факты должны состоять из троек чисел: (5, 10, 17), (10, 17, 26), (17, 26, 37).
Можно возразить: действительно ли найденное решение (правило) – единственно возможное? Ведь в дроблении ряда на факты, в которых числа взаимосвязаны, присутствует некий произвол. Почему бы, например, не проверить факты, построенные из несмежных чисел, то есть пары вида (an, an+2)? Возражение справедливое. Чтобы исключить сомнения в однозначности решения, потребуем от программы, чтобы она вела свой поиск, начиная с самых простых правил в сторону их усложнения. Тогда первое найденное ею решение будет самым простым для понимания правилом, и стало быть, лучшим и единственным. Самыми простыми фактами следовало бы считать унарные – состоящие из одного числа. Но для таких фактов существует лишь один способ однозначного продолжения ряда, при котором каждое новое число – это одно и то же число, константа. Ряд из одинаковых чисел вряд ли интересен в качестве тестового задания. Поэтому мы начали поиск закономерности с бинарных фактов (an, an+1), а затем перешли к обобщению троек (an, an+1, an+2).
Формула связи между числами каждого факта также должна быть как можно проще, иначе тест потеряет свой смысл.
И последнее замечание, упрощающее задачу поиска закономерности. Будем считать ряд бесконечным в обе стороны. Это даст нам право не рассматривать порядковые номера (индексы) чисел в ряду. Дело в том, что при учете индексов, строго говоря, нам следовало бы рассматривать факты вида (n, an),(n, an, an+1),(n, an, an+1, an+2) и так далее и включать индекс n в формулы связи.
В заключение подумаем, нет ли в наших действиях логического противоречия принципиального характера. Ведь мы хотим создать алгоритм (заданную последовательность операций), вычисляющий другой, неизвестный алгоритм (правило) следования чисел в ряду. Вопрос близок к классическому - можно ли объять необъятное? Я полагаю, что в соревновании двух интеллектов - тестирующего человека и тестируемой программы - неизбежно победит интеллект человека. Иначе говоря, человек сможет придумать такое правило продолжения ряда, разгадать которое программа не сможет.
Специальное предложение для любителей программирования: представьте алгоритм программы или саму программу, способную в той или иной мере решить задачу продолжения числового ряда. Лучшие программы (наибольшие интеллектуальные возможности, наименьший размер файлов) будут опубликованы здесь с комментариями автора. Не забудьте указать свое имя и электронный адрес.
И последнее. Если Вы дочитали статью до конца, по-видимому, Вы нашли в ней что-то интересное для себя. В награду за Ваше внимание предлагаю Вам собственный вариант "интеллектуальной" программы, решающей ту же самую задачу. Буду рад любым замечаниям и предложениям с Вашей стороны по поводу повышения ее интеллектуального уровня.