Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
НЕЙРОСЕТИ_уч_Боровков.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
2.73 Mб
Скачать

Генетический алгоритм отбора входных данных

Обсуждение

Один из самых трудных вопросов, который приходится решать разработ­чику нейросетевых приложений, - это вопрос о том, какие данные взять в качестве входных для нейронной сети. Этот вопрос сложен в силу сразу нескольких причин.

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

• В задачах нелинейной природы среди параметров могут быть взаимо­зависимые и избыточные. Например, может случиться так, что каж­дый из двух параметров сам по себе ничего не значит, но оба они вместе несут чрезвычайно полезную информацию; это же может от­носиться к совокупности из нескольких параметров. Сказанное озна­чает, что попытки ранжировать параметры по степени важности мо­гут быть неправильными в принципе.

• Из-за «проклятия размерности» иногда лучше просто убрать некото­рые переменные, в том числе и несущие значимую информацию, что­бы хоть как-то уменьшить число входных переменных, а значит и сложность задачи, и размеры сети. Вопреки здравому смыслу, такой прием иногда действительно улучшает способность сети к обобще­нию (Bishop. 1995).

Единственный способ получить полную гарантию того, что входные дан­ные выбраны наилучшим образом, состоит в том, чтобы перепробовать все возможные варианты входных наборов данных и архитектур сетей и выбрать из них наилучший. На практике это сделать невозможно из-за огромного количества вариантов.

Можно попытаться поэкспериментировать в среде пакета ST Neural Networks - последовательно строить сети с различными наборами вход­ных переменных, чтобы постепенно составить себе картину того, какие же входные переменные действительно нужны. Можно воспользоваться методом регуляризации весов по Вигенду (Weigend Weight Regularization) и в окне Редактор сети - Network Editor посмотреть, у каких входных переменных выходящие веса сделаны нулевыми (это говорит о том, что данная переменная игнорируется).

Самое действенное средство решения данного вопроса в пакете ST Neural Networks -- это Генетический алгоритм отбора входных данных - Genetic Algorithm Input Selection. Этот алгоритм выполняет большое число экспе­риментов с различными комбинациями входных данных, строит для каждой из них вероятностную либо обобщенно-регрессионную сеть, оценива­ет ее результаты и использует их в дальнейшем поиске наилучшего вари­анта.

Генетические алгоритмы являются очень эффективным инструментом поиска в комбинаторных задачах как раз такого типа (где требуется при­нимать ряд взаимосвязанных решений «да/нет»). Этот метод требует большого времени счета (обычно приходится строить и проверять многие тысячи сетей), однако реализованная в пакете ST Neural Networks его ком­бинация с быстро обучающимися сетями типа PNN/GRNN позволяет ус­корить его работу настолько, насколько это вообще возможно.

Выполнение алгоритма

Прогонять этот алгоритм мы будем на модифицированном варианте усе­ченного набора данных про ирисы, в который мы добавим новые входные переменные, не несущие никакой информации.

Начнем с того, что загрузим файл данных про ирисы и изменим его так, чтобы в нем было 20 обучающих и 20 контрольных образцов, а за про­порциональным представительством видов следить не будем. Сделаем так, чтобы обучающие и контрольные наблюдения выбирались случай­ным образом.

Переместите указатель мыши на линию, разделяющую заголовки столб­цов переменных SLENGTH и SWIDTH. Указатель превратится в двусто­роннюю стрелку. Щелкните мышью - при этом появится голубая полоса вставки, затем нажмите три раза клавишу ENTER - в файл будут добавле­ны три новые переменные. Так как они очевидным образом не несут в себе никакой информации, следует ожидать, что Генетический алгоритм отбора входных данных - GA Input Selection удалит их.

О ткроем диалоговое окно Генетический отбор входов - Genetic Input Selection с помощью команды Генетический отбор входов - GA Input Selection... меню Обучение-Дополнительно - Train-Auxiliary.

Это окно содержит много управ­ляющих параметров. Среди них - Популяция - Population и Поколе­ния - Generations, Скорость мутаций - Mutation Rate и Скорость скрещивания - Crossover Rate. Если вы не знакомы с генетическими алгоритмами, то не стоит менять два послед­них параметра (рекомендуется взять значения по умолчанию). Параметры Популяция - Population и Поколения - Generations определяют, как много усилий алгоритм затрачивает на поиск.

Схема работы генетического алгоритма такова. Берется случайный набор, популяция, битовых строк (в нашем случае отдельный бит, соответст­вующий каждому входу, показывает, учитывать или нет соответствую­щую входную переменную) и оценивается степень их пригодности (т.е. качество получаемых решений). Затем плохие строки исключаются из рассмотрения, а из оставшихся порождаются новые строки с помощью искусственных генетических операций мутации и скрещивания. Таким образом, возникает новая популяция, и весь процесс повторяется, порож­дая все новые поколения, а в конце его отбирается наилучший экземпляр. Параметр Популяция - Population задает объем популяции индивидуумов, а параметр Поколения - Generations определяет, сколько раз будет повто­рен цикл отбора-порождения-оценки. Произведение этих двух чисел рав­но общему числу операций оценивания, которые алгоритм должен будет выполнить, и каждое оценивание включает построение PNN или GRNN сети и ее тестирование на контрольном множестве.

При построении PNN или GRNN сети необходимо выбрать коэффициент сглаживания (Smoothing). В общем случае следует самостоятельно про­вести ряд экспериментов со всей совокупностью входных переменных, строя PNN или GRNN сети с различными коэффициентами сглаживания, и выбрать подходящее значение. К счастью, сети PNN и GRNN не слиш­ком чувствительны к точному выбору коэффициента сглаживания, и в нашем случае вполне подойдет значение по умолчанию.

Как уже говорилось, иногда бывает полезно уменьшить число входов да­же ценой некоторой потери точности, поскольку это улучшает способно­сти сети к обобщению и уменьшает размер сети и время счета. Можно создать дополнительный стимул к исключению лишних переменных, на­значив штраф за элемент (Unit Penalty). Это число будет умножаться на количество элементов, и результат будет прибавляться к уровню ошибки при оценке качества сети. Таким образом, будут штрафоваться большие по размеру сети. Обычно значения этого параметра (если он используется) берутся в интервале 0,01-0,001. В нашей задаче дополнительные переменные не несут никакой информации и действительно будут ухудшать каче­ство сети, поэтому нет необходимости специально задавать еще и штраф за элемент.

Нажмите кнопку Запуск - Run. При выполнении генетического алгоритма с параметрами по умолчанию он проделает 10000 оцениваний (популяция объемом 100 и 100 поколений). Однако в нашей задаче имеется всего семь кандидатов во входные переменные (четыре настоящих и три добавлен­ные), поэтому число всевозможных комбинаций равно всего 128 (два в седьмой степени). Программа ST Neural Networks сама обнаружит это обстоятельство и вместо описанных действий выполнит оценивание полным перебором вариантов (соответствующая информация будет выдана в строке сообщений).

По окончании работы алгоритма откроется окно с таблицей, в которой будет указано, какие переменные были признаны полезными, а какие нет (соответственно Да - Yes или Нет - No). Переменные, которые не рас­сматривались как кандидаты во входной набор (в данной задаче - выход­ная переменная) будут помечены как неучитываемые. Если вы все сдела­ли правильно, алгоритм отберет настоящие переменные задачи и отбросит вновь добавленные.

Нажмите кнопку Применить - Apply. Программа ST Neural Networks при­менит найденный шаблон к исходным данным, и у тех переменных, кото­рые были отвергнуты алгоритмом, изменит тип на Неучитываемая -Ignore.

Теперь сделаем параметр Штраф за элемент - Unit Penalty равным 0,01 и снова нажмем кнопку Запуск - Run. На этот раз мы побуждаем алгоритм уменьшать число входов, даже ценой некоторого увеличения ошибки. Конкретный результат будет зависеть от того, какие наблюдения были взяты в обучающее и контрольное множества. Скорее всего, однако, ока­жется, что переменные PLENGTH и PW1DTH будут отобраны, а перемен­ные SLENGTH и SWIDTH - отвергнуты. Экспериментируя с различными значениями штрафа за элемент, вы сможете приблизительно упорядочить входные переменные по степени важности.