Оптимизация нейронной сети с генетическим алгоритмом

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

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

Ответ 1

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

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

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

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

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

Ответ 2

Хорошим примером нейронных сетей и генетического программирования является архитектура NEAT (нейроэволюция дополняющих топологий). Это генетический алгоритм, который находит оптимальную топологию. Известно также, что он удерживает количество скрытых узлов вниз.

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

Ответ 6

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

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

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

Ответ 7

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

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