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

StackOverflow https://stackoverflow.com/questions/828486

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

http://www.cs.ucf.edu /~кстэнли/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top