Нейронная сеть Оптимизация с генетическим алгоритмом - PullRequest
11 голосов
/ 06 мая 2009

Является ли генетический алгоритм наиболее эффективным способом оптимизации количества скрытых узлов и объема обучения, выполняемого в искусственной нейронной сети?

Я кодирую нейронные сети, используя NNToolbox в Matlab. Я открыт для любых других предложений по методам оптимизации, но я больше всего знаком с GA.

Ответы [ 7 ]

11 голосов
/ 06 мая 2009

На самом деле, есть несколько вещей, которые вы можете оптимизировать с помощью GA в отношении NN. Вы можете оптимизировать структуру (количество узлов, слоев, функция активации и т. Д.). Вы также можете тренироваться, используя GA, что означает установку весов.

Генетические алгоритмы никогда не будут наиболее эффективными, но они обычно используются, когда вы мало знаете, какие числа использовать.

Для обучения вы можете использовать другие алгоритмы, включая обратное распространение, nelder-mead и т. Д.

Вы сказали, что хотите оптимизировать количество скрытых узлов, для этого может оказаться достаточным генетический алгоритм, хотя и далеко не «оптимальный». Пространство, которое вы ищете, вероятно, слишком мало, чтобы использовать генетические алгоритмы, но они все еще могут работать и на самом деле, они уже реализованы в matlab, так что ничего страшного.

Что вы подразумеваете под оптимизацией количества проведенных тренировок? Если вы имеете в виду количество эпох, то это нормально, просто помните, что тренировки каким-то образом зависят от начальных весов, и они, как правило, случайные, поэтому фитнес-функция, используемая для GA, действительно не будет функцией.

4 голосов
/ 03 июля 2009

Хорошим примером нейронных сетей и генетического программирования является архитектура NEAT (Neuro-Evolution of Augmenting Topologies). Это генетический алгоритм, который находит оптимальную топологию. Также известно, что он хорошо справляется с уменьшением количества скрытых узлов.

Они также создали игру под названием Nero. Совершенно уникальные и очень удивительные ощутимые результаты.

Dr. Домашняя страница Стэнли:

http://www.cs.ucf.edu/~kstanley/

Здесь вы найдете практически все, что связано с NEAT, поскольку именно он изобрел его.

2 голосов
/ 01 июня 2009

Генетические алгоритмы могут быть с пользой применены для оптимизации нейронных сетей, но вам нужно немного подумать о том, что вы хотите сделать.

Большинство «классических» алгоритмов обучения NN, таких как обратное распространение, оптимизируют только вес нейронов. Генетические алгоритмы могут оптимизировать веса, но это, как правило, неэффективно. Однако, как вы и просили, они могут оптимизировать топологию сети, а также параметры вашего алгоритма обучения. Вы должны быть особенно осторожны с созданием сетей, которые "переобучены", хотя.

Еще одна техника с модифицированными генетическими алгоритмами может быть полезна для преодоления проблемы с обратным распространением. Обратное распространение обычно находит локальные минимумы, но находит их точно и быстро. Комбинация генетического алгоритма с обратным распространением, например, в ламаркианской GA, дает преимущества обоих. Эта техника кратко описана в учебнике GAUL

1 голос
/ 05 сентября 2011

Иногда полезно использовать генетический алгоритм для обучения нейронной сети, когда ваша целевая функция не непрерывна.

0 голосов
/ 06 мая 2009

Я бы сказал, что генетические алгоритмы - это хорошая идея, поскольку вы можете начать с минимального решения и увеличить количество нейронов. Весьма вероятно, что «функция качества», для которой вы хотите найти оптимальную точку, является гладкой и имеет всего несколько выпуклостей.

Если вам часто приходится находить этот оптимальный NN, я бы порекомендовал использовать алгоритмы оптимизации и, в вашем случае, квазиньютон, как описано в числовых рецептах, что является оптимальным для задач, для которых оценка функции дорогая.

0 голосов
/ 06 мая 2009

Я не совсем уверен, с какой проблемой вы работаете, но GA здесь звучит немного излишне. В зависимости от диапазона параметров, с которыми вы работаете, может работать исчерпывающий (или иначе неразумный) поиск. Попробуйте построить график производительности вашего NN относительно количества скрытых узлов для первых нескольких значений, начиная с малого и прыгая все большими и большими приращениями. По моему опыту, многие NNs плато в производительности на удивление рано; возможно, вы сможете получить четкое представление о том, какой диапазон номеров скрытых узлов имеет наибольшее значение.

То же самое часто верно для обучающих итераций NN. Дальнейшее обучение помогает сети до определенного момента, но вскоре перестает иметь большой эффект.

В большинстве случаев эти параметры NN не влияют на производительность очень сложным образом. Как правило, увеличение их на некоторое время увеличивает производительность, но затем уменьшается отдача. GA не является действительно необходимым, чтобы найти хорошее значение на такой простой кривой; если количество скрытых узлов (или обучающих итераций) действительно вызывает сложное колебание производительности, то метаэвристика, такая как GA, может быть подходящей. Но перед тем, как идти по этому пути, попробуйте метод грубой силы.

0 голосов
/ 06 мая 2009

Я не уверен, стоит ли использовать для этого генетический алгоритм.

Я полагаю, что исходная популяция решений для вашего генетического алгоритма будет состоять из обучающих наборов для вашей нейронной сети (с учетом определенного метода обучения). Обычно начальная популяция решений состоит из случайных решений вашей проблемы. Тем не менее, случайные тренировочные наборы не будут обучать вашу нейронную сеть.

Алгоритм оценки для вашего генетического алгоритма представляет собой средневзвешенную величину необходимого обучения, качество нейронной сети при решении конкретной проблемы и количество скрытых узлов.

Итак, если вы запустите это, вы получите обучающий набор, который обеспечил наилучший результат с точки зрения качества нейронной сети (= время обучения, количество скрытых узлов, возможности решения проблем в сети).

Или вы рассматриваете совершенно другой подход?

...