Я запрограммировал нейронную сеть на Java и сейчас работаю над алгоритмом обратного -распространения.
Я читал, что пакетное обновление весов приведет к более стабильному поиску градиента вместо онлайн-обновления веса.
В качестве теста я создал функцию временного ряда из 100 точек, такую, что x = [0..99]
и y = f(x)
. Я создал нейронную сеть с одним входом и одним выходом и двумя скрытыми слоями с 10 нейронами для тестирования. С чем я борюсь, так это со скоростью обучения алгоритма обратного -распространения при решении этой проблемы.
У меня есть 100 входных точек, поэтому, когда я вычисляю изменение веса dw_{ij}
для каждого узла, это на самом деле сумма:
dw_{ij} = dw_{ij,1} + dw_{ij,2} +... + dw_{ij,p}
где p = 100
в этом случае.
Теперь обновления веса становятся действительно огромными, и поэтому моя ошибка E
прыгает так, что трудно найти минимум. Единственный способ получить правильное поведение — установить скорость обучения y
на что-то вроде 0.7 / p^2
.
Есть ли какое-то общее правило для установки скорости обучения в зависимости от количества образцов?