Имеет ли какой-то смысл, что вес и порог растут пропорционально при обучении моего персептрона? - PullRequest
0 голосов
/ 24 августа 2011

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

weights += learningRate * (correct - result) * {input,1}

Здесь weights - это вектор n-длины, который также содержит вес нейрона смещения (- порог), result - это результат, вычисленный персептроном (и обработанный с использованием сигмоиды), когда ему дано input, correct - правильный результат, а {input,1} - вход, дополненный 1 (фиксированный вход от нейрона смещения). Теперь, когда я пытаюсь обучить персептрона выполнять логическую операцию И, веса не сходятся в течение длительного времени, вместо этого они продолжают расти аналогичным образом и поддерживают пороговое соотношение около -1,5, например, три веса находятся в последовательность:

5.067160008240718   5.105631826680446   -7.945513136885797
...
8.40390853077094    8.43890306970281    -12.889540730182592

Я ожидаю, что персептрон остановится на 1, 1, -1,5.

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

0.43601272528257057 0.49092558197172703 -0.23106430854347537

и я получаю аналогичные результаты с tanh. Я не могу дать объяснение этому.

Спасибо.
Tunnuz

1 Ответ

2 голосов
/ 24 августа 2011

Это происходит потому, что функция активации сигмоида не достигает ни одного (или нуля) даже при очень высоко положительных (или отрицательных) входах.Так что (correct - result) всегда будет отличным от нуля, а ваши веса всегда будут обновляться.Попробуйте использовать функцию шага в качестве функции активации (например, f(x) = 1 for x > 0, f(x) = 0 otherwise).

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

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

При попытке проанализировать поведение восприятия, это также помогает взглянуть на correct и result.

...