Алексей Чачко - Искусственный разум
Незачем сбрасывать старую математику с атомохода современности: застопорится атомоход. Но изменить взгляд на математику стоит.
Дело математики не только количественные явления, но и качественные, не только числа, но и смыслы. Дело математики не только точность, но и расплывчатость.
В мире расплывчатого математика только-только научилась ходить. Нечеткие интегралы и дифференциалы! А они возможны? Нечеткая логика - яркая снаружи игрушка! А внутри? Вероятность нечеткого события! А это еще что за птица?
Нечетко все, расплывчато. В размытом мире гуляют расплывчатые люди, пьют воду из нечетких автоматов и обмениваются фузи-информацией. Непривычно, неловко, конфузно как-то.
В голову приходит, что н само слово "конфуз" из фузи-семейства. Чтобы не вышло конфуза, не будем считать теорию Л. Заде полной и окончательной победой над расплывчатостью. Скорее теория размытых множеств - смелая разведка в стратегически важном направлении, дерзкая попытка взять расплывчатость штурмом.
Чем она окончится, предсказать трудно. Сегодня Л. Заде наступает. Он призвал под свои знамена Ричарда Беллмана, известного специалиста по математической теории принятия решений, и вдвоем они изучают феномен "принятие решений в расплывчатых условиях". Речь идет о сложных, многошаговых решениях, для которых Р. Беллман раньше изобрел изящный метод - динамическое программирование. Теперь четкое динамическое программирование становится нечетким. Р. Беллман пробует старый ключ к новой двери.
Аналогия с ключом принадлежит ему самому. Он заметил как-то, что в руках у каждого математика только один ключ - излюбленные его методы и приемы. Математик идет по улице, называемой реальностью, и пробует открывать своим ключом разные двери. "Если вам повезет, - напутствует математика Р. Беллман, - найдется дверь, которая откроется, ну а если нет - вы встретите только закрытые двери. Но никто не знает, что за закрытой дверью".
Этого и вправду не знает никто, и потому мы вставим наш ключ, наши расплывчатые методы, в замочную скважину двери, па которой написано "Алгоритмы".
Каждый хороший алгоритм похож на мост, переброшенный через проблему, на мост, у которого крепкая изящная конструкция. Станем размывать опоры мостов - алгоритмов!
Начнем с алгоритма узнавания. Вы билетер в кинотеатре и хотите добросовестно не пропускать па фильм о зарубежной любви детей до 16 лет. Проходят мимо вас люди. Вот этот, ему 16 или меньше? Ростом вроде вышел, да выражение лица младенческое, и робок очень. А этот, маленький, лезет, напирает, небось уже паспорт в кармане или просто нахал? Девица! И тени, и помада, и парик, ну точно, мамин парик, а сама в пятом классе...
Вы принимаете быстрые и однозначные решения - пропустить или задержать, "да" ИЛИ "нет". И вы редко ошибаетесь, хотя работаете с размытыми признаками по размытым правилам.
Теория Заде позволяет записать ваш образ действий в виде нечеткого алгоритма. Чтобы алгоритм был толковым, стоит тщательно опросить бывалых билетеров, выяснить, на какие признаки они обращают особое внимание. Полезно и самому поработать билетером - на собственном опыте лучше прощупывается нерв дела. Важно, конечно, и деликатное обращение с нечеткими переменными: "достаточный рост", "взрослое выражение лица", "самостоятельное поведение" - тут есть с чем повозиться.
Если нужна полная запись нечеткого алгоритма, то, пожалуй, не сыщешь лучше этой.
Тот, кто не знает и не знает, что он не знает,
- глупец, избегай его.
Тот, кто не знает и знает, что он не знает,
- может научиться, научи его.
Тот, кто знает и не знает, что он знает,
- спит, разбуди его.
Тот, кто знает и знает, что он знает,
- пророк, учись у него.
Придадим старинному персидскому поучению формальный вид; оно станет менее поэтичным, зато более строгим.
1. Он что-нибудь знает? Неть да! (запомнить).
2. Он знает, что ничего не знает? Нет2, да2 (запомнить).
3. Если нет1 и нет2, то "глупец, избегай его".
4. Если нет1 и да2, то "может научиться, научи его".
5. Если да1 и нет2, то "спит, разбуди его".
6. Если да1 и да2, то "пророк, учись у него".
Персидский алгоритм содержит целую гроздь размытых понятий (выделены курсивом). Он относится к числу алгоритмов распознавания, но распознаванием дело не ограничивается; перед нами еще и алгоритм действий: избегай его, научи его, разбуди его, учись у него.
Каждое действие не детализировано, названо в общем. Оно детализируется другим размытым алгоритмом. Скажем, алгоритм "Избегай его":
Прочитать эту запись легче легкого. Возможные ответы на вопросы образуют две колонки. Если ваш очередной ответ из левой колонки, переходите к следующей строке, к очередному шагу алгоритма, а если из правой колонки, указано, к какому шагу переходить.
Например, когда глупца нет поблизости, мы, минуя все шаги алгоритма, переходим к его 10-му, последнему, шагу: радуемся и вздыхаем свободно.
Совсем другой оборот принимает дело, когда глупец настигает вас (ответ "да" на шаге 9 алгоритма). Приходится возвращаться к шагу 2 - вновь прятаться, пережидать опасность. В нечетком алгоритме прорастает цикл. А за ним и второй: от шага 4 к шагу 1.
Все алгоритмы, о которых шла до сих пор речь, я бы назвал получеткими: переменные в них действительно размытые, а логика (ответы на вопросы) строгая: только "да" или "нет", "истина" или "ложь", 1 или 0.
Размывать так размывать! Размоем саму логику. Когда-то остроумный философ сравнил логику с перилами моста; она хотя и не руководит процессом мышления, но ограждает человека от ошибок. Как вам правится, читатель, размытый мост с нечеткими перилами? Сохраним обозначение 1 для полной истины и 0 для совершенной лжи. Тогда приблизительная истина будет
числом, близким к 1, а несовершенная ложь - к 0. Запишем:
да=1/1+0,8/0,9+0,7/0,8.
Напомним суть такой записи: в размытое множество по имени "да" обязательно входят: полная истина (1); с мерой близости 0,8 в него включается почти полная истина (0,9) и с функцией членства 0,7 более или менее истина (0,8). Само собой, размытому "да" соответствует его размытый антагонист:
нет=1/0+0,8/0,1+0,7/0,2.
Теперь внимание, читатель! Новые "да" и "нет" похожи на тройные зеркала; в этих трельяжах появляются сразу три изображения, причем в разной степени четких. И за каждым изображением другая страна, иное Зазеркалье.
Та же мысль, но изложенная суконным языком: алгоритм распараллеливается, открываются три положительных и три отрицательных пути.
Три их в нашем примере, а вообще говоря, путей может быть сколько угодно. Так в комнате смеха, набитой зеркалами, дробится, множится, размывается фигура посетителя.
Математика нечетких объектов охватывает приближенные доводы на основе размытой логики. Категорические результаты исчезают. Не всегда умно решать, как топором рубить. Более мягкие выводы оказываются часто и более проницательными, они спасают от поспешных действий, за которые потом пришлось бы краснеть. Скажем, толковый руководитель, узнав о проступке подчиненного, не станет подбивать на счетах его плюсы и минусы. Решение его будет не количественным, но тонким, опирающимся на весь опыт их совместной работы.
Вообще область хозяйственного управления, где в решениях сочетаются ум и воля, лучше описывается нечеткой математикой.
Итак, размыты и шаги алгоритма, и его проверки - ветвления. Что же осталось? Что сохранилось от первоначальной жесткой конструкции, от стального моста через проблему?
Сохранился обязательный порядок, в котором шаги алгоритма следуют друг за другом: сначала сделай одно, потом изволь выполнить другое, затем именно вот это, далее следующее...
Так долой обязаловку! Пусть майский дождь, бесшабашный и непочтительный, размоет и этот последний бастион четкости! Пусть после каждого выполненного шага будет разрешено поступать и так, и этак, и еще как-нибудь. Лишим алгоритмы порядка!
Вы каменщик и строите дом. Запасены материалы для стройки - кирпичи простые и фасонные, балки, панели, рамы. Известны правила строительства, их несколько, скажем, десять правил. Каждое из них гласит: "вместо детали У разрешается подставить деталь Z". Конечно, У и Z м()гут быть самыми различными, но правило - это всегда разрешение на замену, на подстановку, и ничего больше.
Прежде чем положить очередной кирпич, вы просматриваете список правил и выбираете из него все подходящие к случаю. Пусть подходящих оказывается три. Тогда вы действуете по любому из трех правил, как заблагорассудится. Произвели очередную замену и снова заглядываете в список правил. Опять находится несколько правил, годящихся в дело, снова вы берете любое из них и заменяете соответствующий кирпич...
Забавное получается строительство! Вместо того чтобы просто класть кирпич за кирпичом, вы все время заменяете одни детали другими. Если все кирпичи одинаковые, вы вообще топчетесь на месте: один кирпичик вынул, другой вставил - итог пулевой. Но кирпичи-то разные. Вместо простого кирпичика - панель, вместо панели - блок, вместо блока - секцию.