Вход
Регистрация

Правильный спуск в выбранном направлении

Как я понимаю все методы и алгоритмы обучения нейронных сетей рассчитывают только направление к минимуму ошибки, вдоль которого следует спускаться. И, по всей видимости, не обязательно ошибка будет убывать на первом шаге в полученном направлении, она может уменьшится и где-нибудь в конце прямой. Собственно, в этом и вопрос.
Я реализовал программно несколько методов обучения MLP: Левенберга-Марквардта, Градиентный спуск, RPROP, сопряженных градиентов. И из них нормально работает только RPROP, который постоянно уменьшает ошибку сети, остальные же тупо зависают в районе 4-4,5%. Спрашивается, почему оно так?
Коррекцию я провожу в виде dW = P, где P - направление спуска, полученное каким либо методом. Либо в несколько шагов через цикл: dW = 0.001*P. При этом если ошибка не уменьшается, то я заканчиваю итерацию и перехожу к следующей. Так как правильно спускаться в направлении P? Может я не правильно делаю что-то?
Может надо просматривать всю прямую направления P? Тогда как определить границы поиска в этом направлении?