Как развить вес нейронной сети, используя GA? - PullRequest
1 голос
/ 02 марта 2012

Я работаю над заданием, и мне нужно развить вес моей нейронной сети. Моя нейронная сеть работает, но я не уверен в том, как развивать мою сеть так, чтобы это дало мне хорошие результаты.

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

Спасибо.

Edit: Мне нужно использовать GA для тренировки весов. Извините, я не дал понять.

Ответы [ 3 ]

1 голос
/ 02 марта 2012

Есть множество способов сделать это, и, как правило, один не (для домашней работы) просто говорит идти, чтобы это произошло без предоставления алгоритма для реализации.

Одним из распространенных методов обучения в классе ИИ или нейронных сетей является обратное распространение:

http://en.wikipedia.org/wiki/Backpropagation

ОБНОВЛЕНИЕ: О, я понимаю.Теперь я могу, по крайней мере, указать вам правильное направление.Обсуждение немного длиннее, чтобы предоставить в пространстве ответов стекопотока, но основная идея состоит в том, чтобы сгенерировать кучу случайных нейронных сетей, чтобы (очень плохо!) Решить вашу проблему, затем применить генетические алгоритмы к сетям (то есть преобразоватьнейронные сети с хромосомами, которые могут быть мутированы, скрещены / рекомбинированы и т. д., в зависимости от их пригодности) и позволяют всей системе самозагрузиться из первичного ила.Так сказать.

Есть очень хорошая статья об одном конкретном приложении (шахматы), написанная Фогелем и др., Здесь: http://www.aics -research.com / ieee-chess-fogel.pdf

0 голосов
/ 25 марта 2012

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

пригодность = 1 - (вход1 * вес1 + вход2 * вес2)

Чем ближе ваша физическая форма к 0, тем лучше, с оптимальным решением (input1 * 0.5 + input2 * 0.5)

если мы заменим input1 и input2 значениями, такими как и веса 0,5 для каждого нейрона

вход1 = 1, вход2 = 1 => пригодность = 0

вход1 = 0, вход2 = 1 => пригодность = 0,5

вход1 = 1, вход2 = 0 => пригодность = 0,5

input1 = 0, input2 = 0 => fitness = 1

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

0 голосов
/ 03 марта 2012

Существует множество способов развития нейронных сетей.Вы можете развивать топологии, веса или и то, и другое (это делается, особенно в областях обучения подкреплению, см. EANT или NEAT ).

Вы сказали, что должны развивать весаваша сеть.Как правило, вы можете применить любой алгоритм оптимизации для этого.Но есть разные категории задач и алгоритмы оптимизации.В контролируемом обучении обычно имеет смысл вычислять ошибку на вашем тренировочном наборе и градиент функции ошибки по отношению к весам.Алгоритмы оптимизации, которые используют информацию о градиенте, обычно быстрее, чем генетические алгоритмы (например, Backprop, Quickprop, RProp, Conjugate Gradient, Levenberg-Marquardt ...).

Как вы сказали, у вас нет обучающего набора итаким образом, у вас нет функции ошибки, поэтому вы не можете рассчитать градиент.Что ж, вам нужно развить вес ваших нейронных сетей, это какая-то фитнес-функция.Если у вас нет никаких функций фитнеса, вы не сможете ничего улучшить, отрегулировав свой вес.Итак, в основном у вас есть функция F (w), где w - ваш непрерывный весовой вектор, который вы должны оптимизировать относительно F. Ваш алгоритм должен сделать что-то вроде этого:

  1. инициализировать нейронную сеть
  2. генерирует N весовых векторов
  3. вычисляет значения пригодности весовых векторов
  4. повтор 2.-4.пока не будет удовлетворен какой-либо критерий остановки

Из вашего описания я предполагаю, что вам, вероятно, придется решить какую-то проблему обучения с подкреплением.В этом случае вы можете, например, принять накопленное вознаграждение за эпизод в качестве значения пригодности.Если вам интересна эта тема: недавно было проведено исследование о применении генетических алгоритмов в нейронных сетях для решения задач обучения с подкреплением (это называется нейроэволюцией).Обычно люди используют генетические алгоритмы, такие как CMA-ES ( CMA-NeuroES ) или CoSyNE .

Я надеюсь, что смогу помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...