Затем после второй точки сечения одного из родителей помещаются города, соответствующие другому родителю, с сохранением порядка их следования. При этом уже имеющиеся города пропускаются. При достижении конца строки операция продолжается сначала. Так, последовательность подстановки городов из р2 имеет вид
234591876.
Поскольку города 4, 6, 5 и 7 не учитываются (они уже входят в состав первого потомка), получается укороченный ряд 2, 3, 9, 1, 8, который и подставляется в cl с сохранением порядка следования этих городов в р2:
с1=(239|4657|18). Аналогично получим второй потомок с2=(392|1876|45).
Итак, в упорядоченном скрещивании фрагменты пути передаются от одного родителя р 1 потомку cl, при этом порядок посещения городов наследуется и от другого родителя р2. Этот подход основан на интуитивном предположении о том, что порядок обхода городов играет важную роль в поиске кратчайшего пути. Поэтому информация о порядке следования сохраняется для потомков.
Алгоритм упорядоченного скрещивания гарантирует однократное посещение всех городов. К результату этой операции мутацию следует применять крайне осторожно. Как указывалось выше, она должна сводиться к перемене мест двух городов в рамках одного маршрута. Инвертирование (простое изменение порядка посещения городов) в данном случае неприменимо, поскольку при этом не формируется нового пути. Однако если в рамках одного маршрута выбрать некий фрагмент и инвертировать его, то это может дать хороший результат. Например, путь
с1=(239|4657|18)
после инвертирования его средней части примет вид с1=(239|7564|18).
Можно ввести еще один оператор мутации, который состоит в случайном выборе города и перемещении его в случайно выбранное положение в рамках маршрута. Такой оператор мутации можно применять и для фрагмента пути, например, выбрав фрагмент трех городов и поместив его в новое случайно выбранное положение. В упражнениях к этой главе приводятся и другие примеры генетических операторов.
11.1.4. Обсуждение генетического алгоритма
Рассмотренные примеры подчеркивают характерные для генетических алгоритмов проблемы представления знаний, выбора операторов и определения критерия качества. Выбранное представление должно поддерживать генетические операторы. Иногда, как в КНФ-задаче, естественным является битовое представление. В этом случае для получения потенциальных решений можно напрямую использовать такие традиционные генетические операторы, как скрещивание и мутацию. В задаче коммивояжера ситуация совсем другая. Во-первых, для нее не подходит битовое представление. Во-вторых, при определении операторов мутации и скрещивания для каждого потомка необходимо отслеживать выполнение требуемых свойств (присутствие в маршруте всех городов при однократном посещении каждого из них).
Глава 11. Машинное обучение на основе социальных и эмерджентных принципов 491
И, наконец, при реализации генетических операторов существенная информация должна передаваться следующему поколению. Если эта информация, как в КНФ-задаие, связана со значением истинности, то в результате выполнения генетических операторов это свойство должно сохраняться в следующем поколении. В задаче коммивояжера критичной является последовательность городов в маршруте, поэтому потомкам должны передаваться фрагменты этой информации. Чтобы обеспечить такое наследование свойств, необходимо соответствующим образом выбрать способ представления данных и генетические операторы для каждой задачи в отдельности.
Завершая обсуждение способа представления данных, рассмотрим проблему "естественности" такого представления. В качестве простого, но несколько искусственного, примера рассмотрим задачу выделения чисел 6, 7, 8 и 9. Естественным представлением, обеспечивающим сортировку данных, является обычное целочисленное описание, поскольку среди десяти цифр каждая следующая на 1 больше предыдущей. При переходе к двоичному описанию эта естественность исчезает. Рассмотрим битовое представление чисел 6,7,8 и 9:
01100111 1000 1001.
Заметим, что числа 6 и 7, а также 8 и 9 отличаются друг от друга на один бит. Однако числа 7 и 8 не имеют между собой ничего общего! Это свойство представления может вызвать большие проблемы при решении задач, требующих систематизации этих образов. Для решения проблемы неоднородного представления используется множество приемов, получивших общее название кодирования Грея (gray coding). Например, код Грея для первых шестнадцати двоичных чисел приводится в табл. 11.1. Заметим, что здесь каждое число отличается от своих соседей ровно на один бит. Обычно при использовании кодирования Грея вместо обычного двоичного представления переходы между состояниями при реализации генетических операторов являются более естественными и гладкими.
Важным преимуществом генетических алгоритмов является параллельная природа поиска. Они реализуют одну из мощных форм поиска экстремума, поддерживающую несколько решений. На рис. 11.2, взятом из работы [Holland, 1986], показано, как
492 Часть IV. Машинное обучение
множество решений сходится к точкам экстремума в пространстве поиска. На этом рисунке горизонтальная ось представляет возможные точки в пространстве решений, а по вертикали показано качество этих решений. Точки на кривой - это члены текущей популяции решений-кандидатов, полученные при работе генетического алгоритма. Изначально решения равномерно распределялись в пространстве поиска. После нескольких итераций они группируются в областях, соответствующих наиболее высокому качеству решения.
При описании генетического алгоритма как алгоритма поиска экстремума неявно предполагается перемещение по поверхности, определяемой критерием качества. На этой поверхности существуют свои вершины, низменности, а также локальные максимумы и минимумы. Нарушение непрерывности этого пространства является следствием выбора представления и генетических операторов для конкретной задачи. Например, такое нарушение непрерывности может быть вызвано неправильным кодированием, в том числе без использования кодов Грея. Отметим также, что генетические алгоритмы, в отличие от последовательных форм поиска экстремума, описанных в разделе 4.1, не сразу отбрасывают бесперспективные решения. При реализации генетических операторов даже плохие решения могут оставаться в популяции и вносить свой вклад в формирование последующих поколений решений.
Еще одним отличием эвристического поиска в пространстве состояний, описанного в главе 4, от генетических алгоритмов является анализ различия между текущим и целевым состояниями. Такая информация учитывается в алгоритме А* (раздел 4.2), требующем оценки "усилий" для перехода из текущего состояния в целевое. Для работы генетических алгоритмов такая мера не нужна. Просто каждое поколение потенциальных решений оценивается с помощью некоторого критерия качества. Не требуется также строгая систематизация последующих состояний, как при поиске в пространстве состояний. Просто формируется поколение решений-кандидатов, каждое из которых может внести свой вклад в получение новых возможных решений в процессе параллельного поиска.
Важным источником эффективности генетических алгоритмов является неявный параллелизм эволюционных операторов. В отличие от поиска в пространстве состояний, в данном случае операции выполняются параллельно для целого семейства потенциальных решений. Ограничивая репродуктивные свойства слабых решений, генетические алгоритмы приводят к исключению не только этого решения, но и всех его потомков. Например, если строка 101#0##1 отброшена в процессе работы алгоритма, то она уже не сможет породить
строки вида 101 #_ _ _ _. Если родительское решение не соответствует критерию качества,
то в процессе работы алгоритма не будут рассматриваться и все его потенциальные потомки.
Глава 11. Машинное обучение на основе социальных и эмерджентных принципов 493
Поскольку генетические алгоритмы все шире применяются для решения прикладных задач и математического моделирования, в последнее время повышается интерес к осмыслению их теоретических основ. Естественно, возникают следующие вопросы.
Можно ли охарактеризовать типы задач, для которых генетические алгоритмы работают наиболее эффективно?
Для каких типов задач они работают плохо?
Что означает высокая и низкая эффективность генетического алгоритма для решения некоторого типа задач?
Существуют ли законы, описывающие поведение генетических алгоритмов на
макроуровне? В частности, можно ли спрогнозировать изменения значений критерия качества для элементов популяции?
Существует ли способ описать результаты таких различных генетических операторов, как скрещивание, мутация, инвертирование и т.д.?
При каких условиях (для каких задач и генетических операторов) генетические алгоритмы работают лучше, чем традиционные интеллектуальные методы поиска?
Многие из этих вопросов выходят за рамки тематики данной книги. В работе [Mitchell, 1996] указано, что в теоретическом осмыслении генетических алгоритмов пока еще больше открытых вопросов, чем приемлемых ответов. Тем не менее с момента появления генетических алгоритмов исследователи пытаются понять принципы их работы [Holland, 1975]. И хотя многие вопросы, как и приведенные выше, относятся к макроуровню, их анализ начинается с микроуровня битового представления.
В [Holland, 1975] вводится понятие схемы (schema) как общего шаблона и строительного блока решения. Схема- это шаблон битовых строк, описываемый символами 1, О и #. Например, схема 10##01 представляет семейство шестибитовых строк, начинающихся с фрагмента 10 и завершающихся символами 01. Поскольку центральный фрагмент ## описывает четыре возможные комбинации битов, 00, 01, 10, 11, то вся схема представляет четыре битовые строки, состоящие из 1 и 0. Традиционно считается, что каждая схема описывает гиперплоскость [Goldberg, 1989]. В этом примере данная гиперплоскость пересекает множество всех возможных шестибитовых представлений. Центральным моментом традиционной теории генетических алгоритмов является утверждение, что подобные схемы - это строительные блоки семейств решений. Генетические операторы скрещивания и мутации оперируют такими схемами в процессе поиска потенциальных решений. Эти операции описываются теоремой о схемах [Holland, 1975], [Goldberg, 1989]. По Холланду, для повышения производительности в некоторой среде адаптивная система должна идентифицировать, проверить и реализовать некоторые структурные свойства, формализуемые с помощью схем.
Анализ схем Холланда предполагает, что алгоритм выбора по критерию качества сводится к поиску подмножеств в пространстве поиска, наилучшим образом удовлетворяющих данному критерию. Следовательно, эти подмножества описываются схемами, для которых значение критерия качества выше среднего. При выполнении генетических операторов скрещивания строительные блоки с высоким показателем качества складываются вместе и формируют "улучшенные" строки. Мутации позволяют гарантировать, что генетические особенности не будут утеряны в процессе поиска, т.е. эти операторы обеспечивают переход к новым областям поверхности поиска. Таким образом, генетические алгоритмы можно рассматривать как некое обобщение процесса поиска с
494 Часть IV. Машинное обучение
сохранением важных генетических свойств. Холланд изначально анализировал генетические алгоритмы на битовом уровне. Более современные работы распространяют результаты этого анализа на другие схемы представления [Goldberg, 1989]. В следующем разделе генетические алгоритмы будут применены к более сложным представлениям.
11.2. Системы классификации и генетическое программирование
Первые генетические алгоритмы почти целиком базировались на низкоуровневом представлении, в частности, битовых строках {0, 1, #}. Помимо того что битовые строки являются естественным представлением для реализации генетических операторов, они обеспечивают для генетических алгоритмов столь же высокую производительность, как и другие несимвольные подходы, в том числе нейросетевые. Однако существуют задачи, например, проблема коммивояжера, для которых естественным является кодирование на более высоком уровне представления. При глубоком исследовании может возникнуть вопрос о реализации генетических алгоритмов для таких высокоуровневых представлений, как правила вывода или фрагменты программного кода. Важным аспектом этих представлений является возможность комбинирования таких фрагментов высокоуровневых знаний, как цепочки правил вывода или вызовы функций.
К сожалению, достаточно сложно определить генетические операторы, поддерживающие синтаксическую и семантическую структуру логических взаимоотношений и в то же время обеспечивающие эффективное применение скрещивания и мутации. Одним из возможных путей совмещения преимуществ правил вывода и генетического обучения является преобразование логических утверждений в битовые строки и применение для них стандартного оператора скрещивания. Однако получаемые после скрещивания и мутации битовые строки зачастую не обладают свойствами логических выражений. В качестве альтернативы этому представлению можно определить новые варианты скрещивания, применимые напрямую к высокоуровневым представлениям, таким как правила вывода или фрагменты кода на высокоуровневом языке программирования. В этом разделе описываются примеры каждого из подходов, расширяющие возможности генетических алгоритмов.
11.2.1. Системы классификации
В [Holland, 1986] разработаны проблемно-ориентированные архитектуры, получившие название систем классификации (classifier system), в которых генетическое обучение применяется к правилам логического вывода. Система классификации включает стандартные элементы системы вывода (рис. 11.3): правила вывода (называемые здесь классификаторами), рабочую память, входные датчики (или декодеры) и выходные элементы (эффекторы). Отличительной особенностью системы классификации является конкурентный подход к разрешению конфликтов, применение генетических алгоритмов для обучения и алгоритма "пожарной цепочки" (bucket brigade algorithm) для распределения поощрений и наказаний в процессе обучения. Обратная связь со внешней средой дает возможность оценить качество классификаторовкандидатов, что необходимо для реализации генетического обучения. Система классификации, показанная на рис. 11.3, включает следующие основные компоненты.
Глава 11. Машинное обучение на основе социальных и эмерджентных принципов 495
Рис. 11.3. Взаимодействие системы классификации с внешней средой
Детекторы входящих сообщений от внешней среды.
Детекторы обратных связей со внешней средой.
Эффекторы, передающие результаты применения правил во внешнюю среду.
Набор правил вывода, представляющий собой популяцию классификаторов. Каждому классификатору соответствует свое значение критерия качества.
Рабочая память для правил классификации, в которой результаты правил выбора
интегрированы с входной информацией.
Набор генетических операторов для модификации правил вывода.
Система для предоставления кредита правилам, участвующим в выполнении успешных действий.
При решении задачи классификатор работает как традиционная система логического вывода. На детекторы системы классификации из внешней среды поступает сообщение, например, информация о сделанном игроком ходе. Это событие кодируется и помещается в качестве образа во внутренний список сообщений - рабочую память системы вывода. Эти сообщения при обычной работе системы вывода на основе данных соответствуют условиям правил классификации. Выбор "наиболее активного классификатора" осуществляется по схеме аукциона, в которой предлагаемая цена - это функция аккумулированного значения критерия качества для такого классификатора и уровня соответствия между входным стимулом и его условием. Эти сообщения добавляются в рабочую память классификаторов с наиболее высоким уровнем соответствия. Из обновленного списка сообщения могут передаваться через эффекторы во внешнюю среду либо активизировать новые правила классификации в процессе работы системы вывода.
Системы классификации реализуют одну из форм обучения с подкреплением (раздел 9.7). На основе информации, поступающей от учителя или определяемой значением критерия качества, обучаемая система вычисляет значение критерия качества для популяции правил-кандидатов и строит новую популяцию с помощью одного из вариантов генетического обучения. Системы классификации обучаются
496 Часть IV. Машинное обучение
двумя способами. Первый способ состоит в использовании системы поощрений, настраивающей меру качества правил классификации за счет усиления полезных правил и ослабления действия ошибочных. Алгоритм распределения кредитов передает часть вознаграждения или штрафа каждому правилу классификации, принимавшему участие в формировании окончательного правила. Такое распределение различных вознаграждений между взаимодействующими классификаторами зачастую реализуется с помощью алгоритма "пожарной цепочки". Этот алгоритм решает проблему распределения кредитов и штрафов для систем, выход которых является результатом последовательного применения набора правил. Как распределить штрафы между правилами этой цепочки в случае ошибки на выходе? Какое из правил цепочки является источником ошибки: последнее или одно из предыдущих? Алгоритм "пожарной цепочки" позволяет распределить кредиты и штрафы между правилами этой последовательности в зависимости от вклада каждого правила в окончательное решение. Аналогичное распределение поощрений и штрафов на основе ошибки на выходе обеспечивает алгоритм обратного распространения, описанный в разделе 10.3. Более подробная информация об этом содержится в [Holland, 1986].
Вторая форма обучения связана с модификацией самих правил на основе генетических операторов типа мутации и скрещивания. При таком подходе выживают лучшие правила, а в результате их комбинации формируются новые классификаторы.
Каждое правило классификации состоит из трех компонентов и работает, как обычная система вывода: на основе некоторого условия проверяется соответствие данных содержимому рабочей памяти. В процессе обучения генетические операторы могут модифицировать как условия, так и действия правила вывода. Второй компонент правила - действие - может изменять внутренний список сообщений (продукционную память). И, наконец, каждому правилу соответствует мера качества. Как уже отмечалось, этот параметр изменяется как при успешном, так и при неуспешном применении правила. Эта мера изначально присваивается каждому правилу при его создании генетическим оператором. Например, мерой качества может служить среднее значение качества двух родителей.
Взаимодействие этих компонентов системы классификации можно продемонстрировать на простом примере. Предположим, набор подлежащих классификации объектов определяется шестью атрибутами (условиями с1, с2, ..., с6). Допустим также, что каждый из этих атрибутов может принимать 5 различных значений. И хотя каждый атрибут имеет свой физический смысл (например, параметр с3 описывает цвет, а с5 - погоду), без потери общности допустимые значения всех атрибутов можно описать целыми числами {1, 2,..., 5}. Предположим, согласно правилам вывода объекты разбиваются на 4 класса: А1, А2, A3, АА.
Таким образом, каждый классификатор можно описать в виде соотношения
(с1, с2, сЗ, с4, с5, с6)?Ai, где i=1, 2, 3, 4,
где каждое из условий с/ принимает значение из диапазона {1, 2, ..., 5} соответствующего атрибута. Обычно условию может соответствовать и произвольное значение # каждого атрибута. В правой части соотношения выражение Ai обозначает один из классов A1, А2, A3 или А4. В табл. 11.2 приводится набор классификаторов. Обратите внимание на то, что несколько различных условных шаблонов могут соответствовать одному классу, как в правилах 1 и 2, либо два одинаковых шаблона могут соответствовать различным классам.
Глава 11. Машинное обучение на основе социальных и эмерджентных принципов 497
Таблица 11.2. Наборы условий для различных классов
Условие (атрибуты) Действие (класс) Номер правила
(1###1#) ?A1 1.
(2##3##) ?A1 2
(##43##) ?A2 3
(1#####) ?A2 4
(##43##) ?A3 5
Как показано выше, система классификации - это еще одна форма вездесущих систем, основанных на правилах логического вывода. Единственным отличительным свойством правил классификации, использованных в приведенном примере, является применение строк цифр и символов # для представления шаблонов условий. Такое представление условий обеспечивает применение генетических алгоритмов в правилах логического вывода. Далее будет исследован вопрос генетического обучения в системах классификации.
Чтобы упростить изложение, будем рассматривать обучение системы только для класса А\. Не принимая во внимание другие классы, присвоим шаблонам условий значение 1 или 0 в зависимости от соответствия классу A1. Заметим, что это упрощение не ограничивает общности рассуждения, поскольку эти выкладки можно распространить на случай обучения для нескольких классов. Для этого достаточно ввести вектор, соответствующий конкретному условному шаблону. Например, классификатор из табл. 11.2 можно описать в виде
Последняя строка в этом примере соответствует правилам классификации для классов А2 и A3, но не А\ или А4. Заменяя 0 или 1 подобными векторными представлениями классов, можно оценить эффективность правила для классификации на несколько классов.
Для определения корректности классификации будем использовать правила из табл. 11.2. А именно, будем рассматривать их в качестве учителя для оценки качества правил в системе классификации. Как в большинстве генетических систем обучения, выберем случайным образом исходную популяцию правил. Каждому шаблону условий сопоставим параметр качества (fitness) или силы (strength) (вещественное число из диапазона от 0,0 до 1,0). Этот параметр силы s будем вычислять на основе качества каждого родительского правила с учетом предыстории.
В каждом цикле обучения с помощью правил будем пытаться классифицировать входы и проверять качество классификации с помощью учителя ими меры качества. Например, предположим, что на некотором шаге получена следующая популяция кандидатов на роль правил классификации, для каждого элемента которой 1 означает корректный результат классификации, а 0 - неверный:
(###21#)?1 s=0,6,
(##3##5)?0 s=0,5,
(21####)?1 s=0,4,
(#4###2)?0 s=0,23.
Допустим, из среды поступило новое входное сообщение (1 4 3 2 1 5), и учитель (на основе первого правила из табл. 11.2) классифицировал этот вектор как положительный
498 Часть IV. Машинное обучение
пример для класса A1. Посмотрим, что происходит при передаче этого образа в рабочую память при попытке его классификации с помощью 4 правил-кандидатов. Этот образ соответствует правилам 1 и 2. Разрешение конфликта между подходящими правилами выполняется на основе конкуренции. В нашем примере степень соответствия каждого правила вычисляется как сумма произведений степеней соответствия каждого из атрибутов и меры качества данного правила. Неопределенному атрибуту # соответствует значение 0,5, а при точном соответствии атрибута ему присваивается степень 1,0. Для нормировки полученное значение делится на длину входного вектора. Поскольку первый классификатор для данного входного вектора дает два точных соответствия и 4 неопределенных атрибута, общая степень его соответствия входному вектору составляет ((4*0,5+2*1)*0,6)/6=0,4. Для второго классификатора тоже имеется 2 точных соответствия и 4 неопределенных атрибута, поэтому его степень соответствия составляет 0,33. В нашем примере по принципу конкуренции побеждает классификатор с максимальной степенью соответствия, но в более сложных задачах желательно учитывать некоторый порог.
Таким образом, победило первое правило, в соответствии с которым предъявленный образ относится к классу А1. Поскольку это действие корректно, мера качества первого правила увеличивается и принимает новое значение, приближенное к 1. Если бы результат выполнения этого правила оказался некорректным, его мера качества была бы уменьшена. Если для получения результата в системе многократно выполняется некоторый набор правил, то определенную долю подкрепления должны получить все правила, участвующие в получении результата. Точная процедура пересчета меры качества определяется в зависимости от системы и может оказаться очень сложной. Она может строиться на основе алгоритма "пожарной цепочки" или другого метода распределения кредитов. Более подробная информация по этому вопросу содержится в [Holland, 1986].
После вычисления меры качества правил-кандидатов в алгоритме обучения применяются генетические операторы для создания следующего поколения правил. Сначала на основе принципа отбора выбирается множество правил с наиболее высоким значением критерия качества. Этот выбор базируется на значении меры качества, но может учитывать и дополнительные случайные величины. Элемент случайности обеспечивает возможность отбора правил с плохими показателями качества, которые, невзирая на общее несоответствие, могут привнести полезные элементы в решение задачи. Допустим, в рассмотренном примере для дальнейшей работы выбраны первые два правила классификации. После случайного выбора точки скрещивания между четвертым и пятым элементами
(###2|1#)?1 s=0,6,
(##3#|#5)?0 s=0,5,
получим потомки
(##3#|1#)?0 s=0,53,
(###2|#5)?1 s=0,57.
Мера качества каждого потомка - это взвешенная функция показателей качества их родителей. Весовые коэффициенты определяются местоположением точки скрещивания. Первый потомок получил 1/3 информации от классификатора с мерой качества 0,6 и 2/3 - от классификатора с мерой качества 0,5. Поэтому его мера качества составляет (1/3*0,6)+(2/3*0,5)=0,53. С помощью аналогичных рассуждений выясним, что мера качества второго потомка равна 0,57. Результат выполнения правила (значение 0 или 1) определяется соответствием большинства атрибутов. В типичных системах классификации эти два новых правила, наряду с их родителями, входят в набор классификаторов, с которыми работает система на следующем этапе.
Глава 11. Машинное обучение на основе социальных и эмерджентных принципов 499
Можно определить и оператор мутации. Простая мутация заключается в случайной замене любого значения атрибута произвольным значением из допустимого диапазона. Например, 5 можно изменить на 1, 2, 3, 4 или #. Как указывалось при описании генетических алгоритмов, операторы мутации призваны внести элемент случайности в поиск классификатора, в то время как скрещивание позволяет сохранить удачные фрагменты данных из родительских шаблонов в их потомках.
Рассмотренный пример достаточно прост и призван лишь проиллюстрировать работу основных компонентов системы классификации. В реальных системах может срабатывать несколько правил, и все они могут передавать свои результаты в рабочую память. Зачастую для предотвращения явного доминирования одного из классификаторов в процессе решения применяется схема налогообложения, при которой его мера качества на каждом успешном шаге несколько снижается. Здесь также не описан алгоритм "пожарной цепочки", позволяющий в различной степени "поощрять" правила, участвующие в успешном решении задачи и передаче сообщения во внешнюю среду. Кроме того, как правило, генетические операторы применяются для трансформации классификаторов не на каждом шаге работы алгоритма. Обычно существует некий общий параметр, определяемый с учетом специфики каждого приложения, в частности, на основе анализа обратной связи со внешней средой, на основе которого принимается решение о необходимости применения генетических операторов.
Описанный пример взят из работы [Holland, 1986], выполненной в университете штата Мичиган. Такой подход можно рассматривать как численную модель познания, в которой знания (классификаторы) обучаемой сущности формируются в процессе взаимодействия с внешней средой и модифицируются со временем. При этом оценивается общая работа всей системы, а не качество отдельного классификатора. В работе [Michalski и др., 1983], выполненной в университете Питтсбурга (Pittsburg), предложен альтернативный подход к построению систем классификации, в котором при создании нового поколения классификаторов основное внимание уделяется отдельным правилам. Такой подход реализует предложенную Михальски (Michalski) модель индуктивного обучения.
В следующем разделе рассматривается еще одно интересное приложение генетических алгоритмов, обеспечивающее эволюцию компьютерных программ.
11.2.2. Программирование с использованием генетических операторов
В нескольких предыдущих разделах рассматривалось применение генетических алгоритмов для все более сложных структур данных. А что произойдет, если применить генетические преобразования битовых строк к правилам "если..., то..."? Возникает естественный вопрос, можно ли применять генетические и эволюционные операторы для создания более крупномасштабных вычислительных средств. Известны два основных примера для этой области, связанные с генерацией компьютерных программ и эволюцией систем, реализующих конечные автоматы.
В [Koza, 1992] высказано предположение, что удачная компьютерная программа может эволюционировать за счет применения генетических операторов. При этом структурами, к которым применяются принципы генетического программирования, являются иерархически организованные фрагменты компьютерных программ. Алгоритм обучения поддерживает популяцию программ-кандидатов. Качество программы определяется ее способностью решать некоторый класс задач, а модификация программы выполняется за счет применения скрещивания и мутации к поддеревьям программы. При генетическом
500 Часть IV. Машинное обучение
Программировании поиск выполняется в пространстве компьютерных программ различного размера и сложности. Фактически пространство поиска - это множество всех возможных компьютерных программ, составленных из вызовов функций и последовательностей символов, соответствующих предметной области задачи. Как и генетическое обучение, такой поиск содержит элемент случайности, во многом выполняется "вслепую", но, на удивление, оказывается достаточно эффективным.
При генетическом программировании сначала инициализируется популяция случайно сгенерированных программ, составленных из соответствующих программных фрагментов. Эти фрагменты в зависимости от предметной области задачи могут содержать стандартные арифметические операции, математические и логические функции, а также специфические функции для данной предметной области. В число программных компонентов включаются данные стандартных типов: логические, целочисленные, с плавающей точкой, векторные символьные или многозначные.
После инициализации генерируется популяция из тысяч компьютерных программ. Каждая новая программа создается с применением генетических операторов. Скрещивание, мутация и другие обеспечивающие воспроизводство операторы необходимо адаптировать для создания компьютерных программ. (Ниже мы кратко остановимся на нескольких примерах.) Качество каждой новой программы определяется ее способностью решать задачи из конкретной предметной области. Сам критерий качества тоже формируется с учетом предметной области. Программы с высоким значением критерия качества выживают и участвуют в формировании следующего поколения программ.
Итак, генетическое программирование включает следующие шесть компонентов, многие из которых напоминают составные части генетических алгоритмов.
Набор структур, подвергающихся трансформации с помощью генетических операторов.
Набор исходных структур, соответствующих предметной области.
Мера качества для оценки этих структур, выбираемая с учетом предметной области.
Набор генетических операторов для трансформации структур.
Описания параметров и состояний элементов каждого поколения.
Набор условий останова.
В следующих разделах эти компоненты будут рассмотрены более подробно.
В генетическом программировании операции выполняются над иерархически организованными программными модулями. Основным средством представления компонентов программных языков был и остается язык LISP. В [Koza, 1992] программные фрагменты представлены в виде символьных выражений на языке LISP, или s-выражений. Описание s-выражений, их естественное представление в виде структур деревьев, а также эффективность такого представления более подробно рассматриваются в разделе 15.1.
Генетические операторы оперируют s-выражениями. В частности, они отображают древовидные структуры s-выражений (фрагменты программ на языке LISP) в новые деревья (другие программы на LISP). Хотя эти s-выражения появились еще в работе [Koza, 1992], другие исследователи применяли этот подход к различным парадигмам программирования и в более позднее время.
Генетическое программирование позволяет строить полезные программы на основе исходных данных и предикатов, описывающих предметную область задачи. При задании области определения для поколения программ, предназначенных для решения
Глава 11. Машинное обучение на основе социальных и эмерджентных принципов 501
некоторого множества задач, необходимо сначала проанализировать возможные конечные значения составных элементов и самого решения, а также функции, необходимые для получения этих конечных значений. В [Koza, 1992] отмечено, что "...при использовании генетического программирования необходимо знать..., что некоторая композиция функций и конечных значений приводит к решению проблемы".
Чтобы инициализировать структуры, модифицируемые с помощью генетических операторов, необходимо создать два множества: множество функций F и множество конечных значений Г, требуемых для данной предметной области. Множество F может состоять из простых операций {+, -, *, /} или включать более сложные функции, такие как sin(x), cos(x) и матричные операции. Множество Т может содержать целые или вещественные числа, матрицы или более сложные выражения. Множество символов Г должно быть замкнуто относительно функций из F.
Затем генерируется популяция исходных "программ" путем случайного выбора элементов из множеств F и Т. Например, выбирая элемент из множества Т, мы получаем вырожденное дерево, состоящее из одного корневого элемента. Более интересной является ситуация, когда сначала выбирается элемент из F, скажем, +. В этом случае получается корневой узел дерева с двумя потенциальными потомками. Допустим, после этого в качестве первого потомка инициализатор выбирает из F операцию * (с двумя потенциальными потомками), а в качестве второго - конечное значение 6 из множества Т. Следующими случайно выбранными элементами могут стать конечное значение 8 и функция + из F. Допустим, процедура завершается выбором значений 5 и 7 из множества Т.
Случайно сгенерированная таким образом программа представлена на рис. 11.4. На рис. 11.4, а показано дерево после первого выбора операции +, на рис. 11.4, б- после выбора конечного значения 6, а на рис. 11.4, в - окончательная программа. Для инициализации процесса генетического программирования формируется целое поколение подобных программ. Для контроля размерности этой популяции можно применять ограничения, например, на максимальную глубину программ. Описание подобных ограничений, а также различных методов генерирования исходных популяций содержится в [Koza, 1992].
До сих пор рассматривались вопросы представления (s-выражения) и древовидные структуры, необходимые для инициализации процесса эволюции программ. Для управления популяциями программ необходимо определить критерий качества. Выбор критерия качества зависит от конкретной задачи и обычно сводится к определению набора задач, которые должна решать эволюционирующая программа. Сам критерий качества- это функция, вычисляющая эффективность решения задач данной программой. Линейный критерий качества (raw
502 Часть IV. Машинное обучение
fitness) учитывает различие между результатом выполнения программы и требуемым решением реальной задачи. Следовательно, линейный критерий качества можно рассматривать как сумму ошибок при наборе задач. Возможны также другие меры качества. Нормализованный критерий качества подразумевает деление общего критерия качества на количество всех возможных ошибок. Следовательно, нормализованный критерий качества может изменяться в диапазоне от 0 до 1. Преимущество нормализации проявляется при работе с большими популяциями программ. Мера качества учитывает размер программы, например, можно поощрять создание компактных программ небольшого размера.
Генетические операторы в пространстве программ содержат как преобразование самого дерева, так и обмен фрагментами между различными деревьями. В [Koza, 1992] описаны основные преобразования, получившие название воспроизводства (reproduction) и скрещивания (crossover). Воспроизводство - это выбор программ текущего поколения и копирование их (без изменений) в популяцию следующего поколения. Скрещивание подразумевает обмен поддеревьев двух существующих программ. Допустим, существуют две родительские программы, представленные на рис. 11.5, в которых символом | показаны точки скрещивания. Дочерние деревья, полученные в результате скрещивания, изображены на рис. 11.6. Скрещивание также можно использовать для преобразования одного родительского дерева путем перемены мест в двух его поддеревьях. При случайном выборе точки скрещивания два идентичных родительских дерева могут дать различное потомство. Точкой скрещивания также может служить корневой узел программы.
Известно множество менее распространенных и менее полезных генетических преобразований деревьев программ. К ним относятся мутация (mutation), при которой в структуру программы просто вносятся случайные изменения (например, замена конечного значения другим значением или поддеревом). Перестановка (permutation) аналогична оператору инвертирования строк. Она тоже выполняется для отдельных программ и состоит в перемене мест конечных символов или поддеревьев.
Текущее пополнение программ отражает состояние решения. Не существует специальных методов, позволяющих учитывать рельеф поверхности, определяемой критерием качества. С этой точки зрения генетическое программирование напоминает алгоритм поиска экстремума, описанный в разделе 4.1. Генетическое программирование сходно с естественным процессом эволюции, поскольку трансформации программ можно выполнять непрерывно. Тем не менее ограниченность времени и вычислительных ресурсов требуют задания условий останова. Такие условия обычно зависят от значения критерия качества и потребляемых вычислительных ресурсов.
Глава 11. Машинное обучение на основе социальных и эмерджентных принципов 503