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