NeuroPro | нейронные сети |
|
Начало Новости Услуги Нейронные сети Программы Статьи Заметки Ссылки Вопросы и ответы Об авторе / контакты |
Применение генетических и эволюционных алгоритмов оптимизацииГенетические и эволюционные алгоритмы оптимизации являются алгоритмами случайно-направленного поиска и применяются в основном там, где сложно или невозможно сформулировать задачу в виде, пригодном для более быстрых алгоритмов локальной оптимизации (например, для градиентных алгоритмов, где возможно, вдобавок, "мгновенное" вычисление градиента представленной в виде нейронной сети функции с помощью алгоритма обратного распространения ошибки), либо если стоит задача оптимизации недифференцируемой функции или задача многоэкстремальной глобальной оптимизации. Заметка описывает 2 задачи, для решения которых 10 лет назад были применены генетические алгоритмы, чтобы показать, что в настоящее время, на гораздо более мощной персональной вычислительной технике, можно с помощью генетических и эволюционных алгоритмов находить околооптимальные решения чуть ли не 99% задач принятия решения. Первый пример - создание команды роботов для разминирования территории, описанный в статье [1]. Генетическим алгоритмом оптимизировалась многослойная нейронная сеть, управляющая движением робота и выдающая, кроме этого, сигнал другим роботам команды. Т.о, кроме параметрической оптимизации нейромодели выполнялось еще и неявное "создание" некоторого языка коммуникации между роботами. Результаты показали преимущество команды однотипных коммуницирующих между собой роботов перед командой не обменивающихся сигналами роботов и перед командой случайно двигающихся роботов. Второй пример - известное создание нейросетевого игрока в шашки, который достиг мастерского уровня [2-4]. Внутри поколения генетического алгоритма нейросети-особи играли сами с собой, и по итогам игр отбирались лучшие для следующего поколения. Оба примера требовали довольно долгого вычисления значения фитнес-функции для особи. Для роботов-минеров надо было оценить качество разминирования, достигнутое после моделирования некоторого времени работы и передвижений команды однотипных роботов (а не одного робота - целью ведь было повышение качества от возникновения коммуникаций в команде), для нейроигрока в шашки нужно было сыграть партию, причем каждый делаемый ход выбирался после перебора всех возможных для данной позиции двух полных ходов (двух своих ходов и двух ходов противника), и качество этих возможных ходов как раз и прогнозировалось нейронной сетью. Т.е. время, затрачиваемое на вычисление значения фитнес-функции, было сравнимо с длительностью эпохи обычного обучения нейросети для довольно объемной задачи. В настоящее время скорость работы современных процессоров даже персональных компьютеров выросла как минимум в 10-20 раз по сравнению с концом 1990х годов, а многоядерность процессоров позволяет эффективно распараллеливать вычисления внутри поколения генетического алгоритма. Более того, в 1999г появилась статья с рецептом аппроксимации вычислений функции exp(), нужной при вычислении значения гиперболического тангенса (наиболее часто используемой нелинейной функции нейронов для многослойных нейронных сетей) - аппроксимация ускоряет вычисление гиперболического тангенса в 4.4 раза и время срабатывания (именно срабатывания - генетическому алгоритму нужно именно оно, а не результат работы алгоритма обратного распространения) нейронной сети - в 1.5-2 и более раза в зависимости от размера нейросети (экспериментальные результаты приведены в заметке про ускорение вычислений гиперболического тангенса). Т.е. не только компьютеры стали работать быстрее, но и некоторые оптимизируемые нейросетевые модели (например, многослойные персептроны) можно существенно ускорить. Отсюда можно сделать вывод, что генетические алгоритмы сейчас можно использовать практически всюду, препятствий в виде неприемлемых вычислительных затрат не осталось. Главное - суметь правильно или нетривиально поставить задачу и запрограммировать быструю реализацию оптимизируемой модели (я уже писал, что моя программа реализации сверточной нейронной сети работает на порядок быстрее другой - бывают программы быстрые и медленные, и быстрота достигается не только использованными алгоритмами, но и особенностями программирования).
|