Здравствуйте! Я реализовал аппроксимацию методом Левенберга-Марквардта, но алгоритм работает не так, как хотелось бы.
(Оффтоп)
Коротко о проблеме. Есть начальные параметры
![$w$ $w$](https://dxdy-04.korotkov.co.uk/f/3/1/f/31fae8b8b78ebe01cbfbe2fe5383262482.png)
, к которым в каждой итерации прибавляется
![$\Delta w$ $\Delta w$](https://dxdy-03.korotkov.co.uk/f/2/6/2/262c0d32a1318083cfb2090e308840bf82.png)
, чем и подбирается их истинное значение.
![$\Delta w=(J^TJ+\lambda \operatorname{diag}(J^TJ))^{-1}J^T(y-f(w))$ $\Delta w=(J^TJ+\lambda \operatorname{diag}(J^TJ))^{-1}J^T(y-f(w))$](https://dxdy-02.korotkov.co.uk/f/9/1/3/9137c0e467427933978870e39f84182782.png)
Если "неправильно" выбрать начальные параметры
![$w$ $w$](https://dxdy-04.korotkov.co.uk/f/3/1/f/31fae8b8b78ebe01cbfbe2fe5383262482.png)
или начальное значение
![$\lambda$ $\lambda$](https://dxdy-04.korotkov.co.uk/f/f/d/8/fd8be73b54f5436a5cd2e73ba9b6bfa982.png)
, тогда алгоритм изменяет параметры в неверном направлении, что приводит к абсолютно неверному ответу.
Получается, алгоритм либо выдает точное и правильное решение, либо полную чушь. Пытаюсь понять почему так происходит, сразу возникают вопросы:
- Непонятно, насколько близко к истинному значению надо задавать стартовые значения параметров
? - Величина
, насколько я понимаю, должна меняться в каждой итерации. Она должна быть обратно пропорциональна скорости изменения ошибки. Но по какому конкретно закону ее следует менять я не понимаю. Сейчас у меня
(полагаю знаменатель есть модуль скорости изменения суммы квадратов отклонений). - В выражении первом выражении матрица
должна быть квадратной, в которой все ячейки нулевые, кроме главной диагонали (тут значения берутся из
). Я правильно понял?
Или могут быть какие-то другие причины? Подскажите, как можно решить данную проблему?