11

Является ли генетический алгоритм наиболее эффективным способом оптимизации количества скрытых узлов и количества обучения, выполняемого в искусственной нейронной сети?Neural Net Optimize w/Genetic Algorithm

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

ответ

11

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

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

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

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

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

+0

спасибо. это точная информация, которую я искал. – ServAce85

+0

Я хотел бы закодировать его на C/C++, а затем включить 1000 серверов Amazon EC2 в течение нескольких часов. –

+0

В чем преимущество обучения ANN, использующего GA, с использованием только GP? У ANN есть то преимущество, что они имитируют мозг, и что они могут использовать методы для обновления весов умным способом, такие как backpropagation, чтобы сеть развивалась в правильном направлении (точно так же, как в мозге). Но когда вы используете GA для обновления весов, вы теряете все это, и мне кажется, что у вас нет каких-либо реальных преимуществ перед GP, так как теперь просто случайно, если сеть улучшится или нет. Каково ваше отношение к этому? – HelloGoodbye

0

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

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

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

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

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

0

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

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

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

+0

грубая сила не работает для моего приложения, потому что мои данные очень шумные (думаю, данные ЭЭГ). – ServAce85

0

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

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

2

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

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

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

4

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

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

Главный доктор Стенли:

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

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

+0

есть также библиотека C# для этого -> SHARPNEAT http://sharpneat.sourceforge.net/ – JohnIdol

1

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

+0

Почему бы просто не использовать GP в этом случае?Если вы используете GA для обновления весов в нейронной сети, вместо некоторого умного метода, который гарантирует, что веса все обновлены в правильном направлении, кажется, вы теряете преимущество использования нейронной сети только при использовании GP. – HelloGoodbye

Смежные вопросы