Алгоритм Левенберга – Марквардта

редактировать
Алгоритм, используемый для решения нелинейных задач наименьших квадратов

В математике и вычислениях, алгоритм Левенберга – Марквардта (LMA или просто LM ), также известный как затухающие наименьшие квадраты (DLS ), используется для решения нелинейных задач наименьших квадратов. Эти проблемы минимизации возникают, в частности, при наименьших квадратах аппроксимации кривой.

LMA используется во многих программных приложениях для решения общих задач аппроксимации кривой. Однако, как и во многих алгоритмах подгонки, LMA находит только локальный минимум, который не обязательно является глобальным минимумом. LMA интерполирует между алгоритмом Гаусса – Ньютона (GNA) и методом градиентного спуска. LMA более надежен, чем GNA, что означает, что во многих случаях он находит решение, даже если оно начинается очень далеко от конечного минимума. Для корректных функций и разумных начальных параметров LMA, как правило, немного медленнее, чем GNA. LMA также можно рассматривать как Гаусс – Ньютон, используя подход доверительной области.

Алгоритм был впервые опубликован в 1944 году Кеннетом Левенбергом, когда он работал в Франкфордском армейском арсенале. Он был повторно открыт в 1963 году Дональдом Марквардтом, который работал статистиком в DuPont, и независимо Жираром, Винном и Моррисоном.

Содержание
  • 1 Проблема
  • 2 Решение
    • 2.1 Выбор параметра демпфирования
    • 2.2 Геодезическое ускорение
  • 3 Пример
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература
  • 7 Внешние ссылки
Проблема

Основное применение алгоритма Левенберга – Марквардта - задача аппроксимации кривой наименьших квадратов: задан набор m {\ displaystyle m}mэмпирические пары (xi, yi) {\ displaystyle \ left (x_ {i}, y_ {i} \ right)}{\ displaystyle \ left (x_ {i}, y_ {i} \ right)} независимых и зависимых переменных, найдите параметры β { \ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} модельной кривой f (x, β) {\ displaystyle f \ left (x, {\ boldsymbol {\ beta}} \ right) }{\ displaystyle f \ left (x, {\ boldsymbol {\ beta}} \ right)} так, чтобы сумма квадратов отклонений S (β) {\ displaystyle S \ left ({\ boldsymbol {\ beta}} \ right)}{\ displaystyle S \ left ({\ boldsymbol {\ beta}} \ right)} была свернуто:

β ^ ∈ argmin β ⁡ S (β) ≡ argmin β ⁡ ∑ я = 1 м [yi - f (xi, β)] 2, {\ displaystyle {\ hat {\ boldsymbol {\ beta}}} \ in \ operatorname {argmin } \ limits _ {\ boldsymbol {\ beta}} S \ left ({\ boldsymbol {\ beta}} \ right) \ Equiv \ operatorname {argmin} \ limits _ {\ boldsymbol {\ beta}} \ sum _ {i = 1} ^ {m} \ left [y_ {i} -f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right) \ right] ^ {2},}{\ displaystyle {\ hat {\ boldsymbol {\ beta}}} \ in \ operatorname {argmin} \ limits _ {\ boldsymbol {\ beta}} S \ left ({\ boldsymbol {\ beta}} \ right) \ Equiv \ operatorname {argmin} \ limits _ {\ boldsymbol {\ beta}} \ sum _ {i = 1} ^ {m} \ left [y_ {i} -f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right) \ right] ^ {2},} который предполагается непустым.
Решение

Как и другие алгоритмы числовой минимизации, алгоритм Левенберга – Марквардта является итеративной процедурой. Чтобы начать минимизацию, пользователь должен предоставить начальное предположение для вектора параметров β {\ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} . В случаях с одним минимумом используется неинформированное стандартное предположение, например β T = (1, 1,…, 1) {\ displaystyle {\ boldsymbol {\ beta}} ^ {\ text {T}} = {\ begin {pmatrix} 1, \ 1, \ \ dots, \ 1 \ end {pmatrix}}}{\ displaystyle {\ boldsymbol {\ beta}} ^ {\ текст {T}} = {\ begin {pmatrix} 1, \ 1, \ \ dots, \ 1 \ end {pmatrix}}} будут работать нормально; в случаях с множественными минимумами алгоритм сходится к глобальному минимуму только в том случае, если первоначальное предположение уже несколько близко к окончательному решению.

На каждой итерации вектор параметров β {\ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} заменяется новой оценкой β + δ {\ displaystyle {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}}}{\ displaystyle {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}}} . Чтобы определить δ {\ displaystyle {\ boldsymbol {\ delta}}}{\ displaystyle {\ boldsymbol {\ delta}}} , функция f (xi, β + δ) {\ displaystyle f \ left (x_ {i}, {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right)}{\ displaystyle f \ left (x_ {i}, {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right)} аппроксимируется его линеаризацией :

f (xi, β + δ) ≈ f (xi, β) + J я δ, {\ displaystyle f \ left (x_ {i}, {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right) \ приблизительно f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right) + \ mathbf {J} _ {i} {\ boldsymbol {\ delta}},}{\ displaystyle f \ left (x_ {i}, {\ boldsymbol {\ beta}} + { \ boldsymbol {\ delta}} \ right) \ приблизительно f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right) + \ mathbf {J} _ {i} {\ boldsymbol {\ delta}},}

где

J i = ∂ f (xi, β) ∂ β {\ displaystyle \ mathbf {J} _ {i} = {\ frac {\ partial f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right)} {\ partial {\ boldsymbol {\ beta }}}}}{\ displaystyle \ mathbf {J} _ {i} = {\ frac {\ partial f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right)} {\ partial {\ boldsymbol {\ beta}}}}}

- это градиент (вектор-строка в данном случае) f {\ displaystyle f}f относительно β {\ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} .

Сумма S (β) {\ displaystyle S \ left ({\ boldsymbol {\ beta}} \ right)}{\ displaystyle S \ left ({\ boldsymbol {\ beta}} \ right)} квадратных отклонений имеет минимум при нулевом градиенте относительно β {\ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} . Приведенное выше приближение первого порядка для f (xi, β + δ) {\ displaystyle f \ left (x_ {i}, {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right) }{\ displaystyle f \ left (x_ {i}, {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right)} дает

S (β + δ) ≈ ∑ i = 1 m [yi - f (xi, β) - J i δ] 2, {\ displaystyle S \ left ({\ boldsymbol { \ beta}} + {\ boldsymbol {\ delta}} \ right) \ приблизительно \ sum _ {i = 1} ^ {m} \ left [y_ {i} -f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right) - \ mathbf {J} _ {i} {\ boldsymbol {\ delta}} \ right] ^ {2},}{\ displaystyle S \ left ({\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right) \ приблизительно \ sum _ {i = 1} ^ {m} \ left [y_ {i} -f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right) - \ mathbf {J} _ {i} {\ boldsymbol {\ delta}} \ right] ^ {2}, }

или в векторной записи

S (β + δ) ≈ ‖ y - f (β) - J δ ‖ 2 = [y - f (β) - J δ] T [y - f (β) - J δ] = [y - f (β)] T [ y - f (β)] - [y - f (β)] TJ δ - (J δ) T [y - f (β)] + δ TJTJ δ = [y - f (β)] T [y - f (β)] - 2 [y - f (β)] TJ δ + δ TJTJ δ. {\ displaystyle {\ begin {align} S \ left ({\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right) \ приблизительно \ left \ | \ mathbf {y} - \ mathbf {f } \ left ({\ boldsymbol {\ beta}} \ right) - \ mathbf {J} {\ boldsymbol {\ delta}} \ right \ | ^ {2} \\ = \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) - \ mathbf {J} {\ boldsymbol {\ delta}} \ right] ^ {\ mathrm {T}} \ left [\ mathbf { y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) - \ mathbf {J} {\ boldsymbol {\ delta}} \ right] \\ = \ left [\ mathbf {y } - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({ \ boldsymbol {\ beta}} \ right) \ right] - \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] ^ {\ mathrm { T}} \ mathbf {J} {\ boldsymbol {\ delta}} - \ left (\ mathbf {J} {\ boldsymbol {\ delta}} \ right) ^ {\ mathrm {T}} \ left [\ mathbf { y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] + {\ boldsymbol {\ delta}} ^ {\ mathrm {T}} \ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} {\ boldsymbol {\ delta}} \\ = \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] -2 \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] ^ {\ mathrm { T}} \ mathbf {J} {\ boldsymbol {\ delta}} + {\ boldsymbol {\ delta}} ^ {\ mathrm {T}} \ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J } {\ boldsymbol {\ delta}}. \ end {align}}}{\ displaystyle {\ begin {align} S \ left ({\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right) \ приблизительно \ left \ | \ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) - \ mathbf {J} {\ boldsymbol {\ delta}} \ right \ | ^ {2} \\ = \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) - \ mathbf {J} {\ boldsymbol {\ delta}} \ right] ^ {\ mathrm {T }} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) - \ mathbf {J} {\ boldsymbol {\ delta}} \ right] \\ = \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] ^ {\ mathrm {T}} \ left [\ math bf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] - \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] ^ {\ mathrm {T}} \ mathbf {J} {\ boldsymbol {\ delta}} - \ left (\ mathbf {J} {\ boldsymbol {\ delta}} \ right) ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] + {\ boldsymbol {\ delta}} ^ { \ mathrm {T}} \ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} {\ boldsymbol {\ delta}} \\ = \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] -2 \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] ^ {\ mathrm {T}} \ mathbf { J} {\ boldsymbol {\ delta}} + {\ boldsymbol {\ delta}} ^ {\ mathrm {T}} \ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} {\ boldsymbol {\ дельта}}. \ конец {выровнено}}}

Взяв производную от S (β + δ) {\ displaystyle S \ left ({\ boldsymbol {\ beta}} + { \ boldsymbol {\ delta}} \ right)}{\ displaystyle S \ left ({\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}} \ right)} относительно δ {\ displaystyle {\ boldsymbol {\ delta}}}{\ displaystyle {\ boldsymbol {\ delta}}} и установка результата на ноль дает

(JTJ) δ = JT [y - е (β)], {\ displaystyle \ left (\ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} \ right) {\ boldsymbol {\ delta }} = \ mathbf {J} ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right],}{\ displaystyle \ left (\ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} \ right) {\ boldsymbol {\ delta}} = \ mathbf { J} ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right],}

где J {\ displaystyle \ mathbf {J}}\ mathbf {J} - это матрица Якоби, i {\ displaystyle i}я - th ro w равно J i {\ displaystyle \ mathbf {J} _ {i}}{\ displaystyle \ mathbf {J } _ {i}} , а где f (β) {\ displaystyle \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right)}{\ displaystyle \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right)} и y {\ displaystyle \ mathbf {y}}\ mathbf {y} - векторы с i {\ displaystyle i}я -й компонент f (xi, β) {\ displaystyle f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right)}{\ displaystyle f \ left (x_ {i}, {\ boldsymbol {\ beta}} \ right)} и yi {\ displaystyle y_ {i}}y_ {i} соответственно. Вышеупомянутое выражение, полученное для β {\ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} , относится к методу Гаусса-Ньютона. Матрица Якоби, как определено выше, является (в общем случае) не квадратной матрицей, а прямоугольной матрицей размером m × n {\ displaystyle m \ times n}m \ times n , где n {\ displaystyle n}n- количество параметров (размер вектора β {\ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} ). Умножение матриц (JTJ) {\ displaystyle \ left (\ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} \ right)}{\ displaystyle \ left (\ mathbf {J} ^ {\ mathrm {T}} \ mathbf { J} \ right)} дает требуемый n × n {\ displaystyle n \ times n}n \ times n квадратная матрица и произведение матрица-вектор с правой стороны дает вектор размера n {\ displaystyle n}n. Результатом является набор из n {\ displaystyle n}nлинейных уравнений, которые можно решить для δ {\ displaystyle {\ boldsymbol {\ delta}}}{\ displaystyle {\ boldsymbol {\ delta}}} .

Вклад Левенберга заключается в замене этого уравнения на «версию с затуханием»:

(JTJ + λ I) δ = JT [y - f (β)], {\ displaystyle \ left (\ mathbf {J} ^ {\ mathrm {T }} \ mathbf {J} + \ lambda \ mathbf {I} \ right) {\ boldsymbol {\ delta}} = \ mathbf {J} ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right],}{\ displaystyle \ left (\ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} + \ lambda \ mathbf {I} \ right) {\ boldsymbol {\ delta}} = \ mathbf {J} ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right],}

где I {\ displaystyle \ mathbf {I}}{\ displaystyle \ mathbf {I}} - единичная матрица, давая как приращение δ {\ displaystyle {\ boldsymbol {\ delta}}}{\ displaystyle {\ boldsymbol {\ delta}}} к оценочному вектору параметров β {\ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} .

(Неотрицательный) коэффициент демпфирования λ {\ displaystyle \ lambda}\ lambda корректируется на каждой итерации. Если уменьшение S {\ displaystyle S}S происходит быстро, можно использовать меньшее значение, приближая алгоритм к алгоритму Гаусса – Ньютона, тогда как если итерация дает недостаточное уменьшение остатка, λ {\ displaystyle \ lambda}\ lambda может быть увеличено, делая шаг ближе к направлению градиентного спуска. Обратите внимание, что градиент из S {\ displaystyle S}S относительно β {\ displaystyle {\ boldsymbol {\ beta}}}{\ boldsymbol {\ beta}} равно - 2 (JT [y - f (β)]) T {\ displaystyle -2 \ left (\ mathbf {J} ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] \ right) ^ {\ mathrm {T}}}{\ displaystyle - 2 \ left (\ mathbf {J} ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right] \ right) ^ {\ mathrm {T}}} . Следовательно, для больших значений λ {\ displaystyle \ lambda}\ lambda шаг будет делаться примерно в направлении, противоположном градиенту. Если либо длина вычисленного шага δ {\ displaystyle {\ boldsymbol {\ delta}}}{\ displaystyle {\ boldsymbol {\ delta}}} , либо уменьшение суммы квадратов из последнего вектора параметров β + δ {\ displaystyle {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}}}{\ displaystyle {\ boldsymbol {\ beta}} + {\ boldsymbol {\ delta}}} ниже предопределенных пределов, итерация останавливается, а вектор последнего параметра β {\ displaystyle {\ boldsymbol {\ \ beta}}}{\ boldsymbol {\ beta}} считается решением.

Алгоритм Левенберга имеет недостаток в том, что если значение коэффициента демпфирования λ {\ displaystyle \ lambda}\ lambda велико, JTJ + λ I {\ displaystyle \ mathbf инвертируется {J} ^ {\ text {T}} \ mathbf {J} + \ lambda \ mathbf {I}}{\ displaystyle \ mathbf {J} ^ {\ text {T}} \ mathbf {J} + \ lambda \ mathbf {I}} вообще не используется. Флетчер представил, что мы можем масштабировать каждый компонент градиента в соответствии с кривизной, чтобы было большее движение вдоль направлений, где градиент меньше. Это позволяет избежать медленного схождения в направлении небольшого градиента. Поэтому Флетчер в своей статье 1971 года «Модифицированная подпрограмма Марквардта для нелинейных наименьших квадратов» заменил единичную матрицу I {\ displaystyle \ mathbf {I}}{\ displaystyle \ mathbf {I}} диагональной матрицей, состоящей из диагональных элементов JTJ {\ displaystyle \ mathbf {J} ^ {\ text {T}} \ mathbf {J}}{\ displaystyle \ mathbf {J} ^ {\ text {T}} \ mathbf {J}} , таким образом делая масштаб решения инвариантным:

[JTJ + λ diag ⁡ ( JTJ)] δ = JT [y - f (β)]. {\ displaystyle \ left [\ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} + \ lambda \ operatorname {diag} \ left (\ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} \ right) \ right] {\ boldsymbol {\ delta}} = \ mathbf {J} ^ {\ mathrm {T}} \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right].}{\ displaystyle \ left [\ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} + \ lambda \ operatorname { diag} \ left (\ mathbf {J} ^ {\ mathrm {T}} \ mathbf {J} \ right) \ right] {\ boldsymbol {\ delta}} = \ mathbf {J} ^ {\ mathrm {T} } \ left [\ mathbf {y} - \ mathbf {f} \ left ({\ boldsymbol {\ beta}} \ right) \ right].}

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

Выбор параметра демпфирования

Были выдвинуты различные более или менее эвристические аргументы для лучший выбор для параметра демпфирования λ {\ displaystyle \ lambda}\ lambda . Существуют теоретические аргументы, показывающие, почему некоторые из этих вариантов гарантируют локальную сходимость алгоритма; однако этот выбор может привести к тому, что глобальная сходимость алгоритма будет страдать от нежелательных свойств наискорейшего спуска, в частности, очень медленной сходимости, близкой к оптимальной.

Абсолютные значения любого выбора зависят от того, насколько хорошо масштабируется исходная проблема. Марквардт рекомендовал начинать со значения λ 0 {\ displaystyle \ lambda _ {0}}\ лямбда _ {0} и множителя ν>1 {\ displaystyle \ nu>1}\nu>. 1 . Первоначальная установка λ = λ 0 {\ displaystyle \ lambda = \ lambda _ {0}}{\ displaystyle \ lambda = \ lambda _ {0}} и вычисление остаточной суммы квадратов S (β) {\ displaystyle S \ left ({\ boldsymbol {\ beta}} \ right)}{\ displaystyle S \ left ({\ boldsymbol {\ beta}} \ right)} после одного шага от начальной точки с коэффициентом демпфирования λ = λ 0 {\ displaystyle \ lambda = \ lambda _ {0}}{\ displaystyle \ lambda = \ lambda _ {0}} и, во-вторых, с λ 0 / ν {\ displaystyle \ lambda _ {0} / \ nu}{\ displaystyle \ lambda _ {0} / \ nu} . Если оба из них хуже начальной точки, то демпфирование увеличивается путем последовательного умножения на ν {\ displaystyle \ nu}\ nu , пока не будет найдена лучшая точка с новым коэффициентом демпфирования λ 0 ν k {\ displaystyle \ lambda _ {0} \ nu ^ {k}}{\ displaystyle \ lambda _ {0} \ nu ^ {k}} для некоторых k {\ displaystyle k}k.

Если u se коэффициента демпфирования λ / ν {\ displaystyle \ lambda / \ nu}{\ displaystyle \ lambda / \ nu} приводит к уменьшению квадрата невязки, затем это принимается как новое значение λ {\ displaystyle \ lambda}\ lambda (и новое оптимальное местоположение принимается как полученное с этим коэффициентом демпфирования), и процесс продолжается; если использование λ / ν {\ displaystyle \ lambda / \ nu}{\ displaystyle \ lambda / \ nu} привело к худшему остатку, но использование λ {\ displaystyle \ lambda}\ lambda привело к лучше невязка, тогда λ {\ displaystyle \ lambda}\ lambda остается без изменений, а новый оптимум принимается как значение, полученное с помощью λ {\ displaystyle \ lambda}\ lambda как коэффициент демпфирования.

Эффективная стратегия управления параметром демпфирования, называемая отложенным удовлетворением, состоит в небольшом увеличении параметра для каждого шага вверх и уменьшении на большую величину для каждого шага вниз. Идея, лежащая в основе этой стратегии, заключается в том, чтобы избежать слишком быстрого спуска в начале оптимизации, тем самым ограничивая шаги, доступные в будущих итерациях, и, следовательно, замедляя сходимость. Было показано, что увеличение в 2 раза и уменьшение в 3 раза является эффективным в большинстве случаев, в то время как для больших задач могут работать более экстремальные значения с увеличением в 1,5 раза и уменьшением в раз. из 5.

Геодезическое ускорение

При интерпретации шага Левенберга – Марквардта как скорости vk {\ displaystyle {\ boldsymbol {v}} _ {k}}{\ displaystyle {\ boldsymbol {v}} _ {k}} вдоль геодезического пути в пространстве параметров, можно улучшить метод, добавив член второго порядка, который учитывает ускорение ak {\ displaystyle {\ boldsymbol {a}} _ {k}}{\ displaystyle {\ boldsymbol {a}} _ {k}} вдоль геодезической

vk + 1 2 ak {\ displaystyle {\ boldsymbol {v}} _ {k} + {\ frac {1} {2}} {\ boldsymbol { a}} _ {k}}{\ displaystyle {\ boldsymbol {v}} _ {k} + {\ frac {1} {2}} {\ boldsymbol {a}} _ {k}}

где ak {\ displaystyle {\ boldsymbol {a}} _ {k}}{\ displaystyle {\ boldsymbol {a}} _ {k}} - решение

J kak = - fvv. {\ displaystyle {\ boldsymbol {J}} _ {k} {\ boldsymbol {a}} _ {k} = - f_ {vv}.}{\ displaystyle {\ boldsymbol {J}} _ {k} {\ boldsymbol {a}} _ {k} = - f_ {vv}.}

Поскольку этот член геодезического ускорения зависит только от производной по направлению fvv = ∑ μ ν v μ v ν ∂ μ ∂ ν е (x) {\ displaystyle f_ {vv} = \ sum _ {\ mu \ nu} v _ {\ mu} v _ {\ nu} \ partial _ {\ mu} \ partial _ {\ nu} f ({\ boldsymbol {x}})}{\ displaystyle f_ {vv} = \ sum _ {\ mu \ nu} v _ {\ mu} v _ {\ nu} \ partial _ {\ mu} \ partial _ {\ nu} f ({\ boldsymbol {x}})} по направлению скорости v {\ displaystyle {\ boldsymbol {v} }}{\ boldsymbol {v}} , он не требует вычисления полной производной матрицы второго порядка, требуя лишь небольших накладных расходов с точки зрения затрат на вычисления. Поскольку производная второго порядка может быть довольно сложным выражением, может быть удобно заменить ее конечно-разностным приближением

fvvi ≈ fi (x + h δ) - 2 fi (x) + fi (Икс - час δ) час 2 знак равно 2 час (fi (x + час δ) - fi (x) час - J я δ) {\ displaystyle {\ begin {align} f_ {vv} ^ {i} \ приблизительно {\ frac {f_ {i} ({\ boldsymbol {x}} + h {\ boldsymbol {\ delta}}) - 2f_ {i} ({\ boldsymbol {x}}) + f_ {i} ({\ boldsymbol {x}} - h {\ boldsymbol {\ delta}})} {h ^ {2}}} \\ = {\ frac {2} {h}} \ left ({\ frac {f_ {i} ( {\ boldsymbol {x}} + h {\ boldsymbol {\ delta}}) - f_ {i} ({\ boldsymbol {x}})} {h}} - {\ boldsymbol {J}} _ {i} { \ boldsymbol {\ delta}} \ right) \ end {align}}}{\ displaystyle {\ begin {align ed} f_ {vv} ^ {i} \ приблизительно {\ frac {f_ {i} ({\ boldsymbol {x}} + h {\ boldsymbol {\ delta}}) - 2f_ {i} ({\ boldsymbol { x}}) + f_ {i} ({\ boldsymbol {x}} - h {\ boldsymbol {\ delta}})} {h ^ {2}}} \\ = {\ frac {2} {h} } \ left ({\ frac {f_ {i} ({\ boldsymbol {x}} + h {\ boldsymbol {\ delta}}) - f_ {i} ({\ boldsymbol {x}})} {h}}) - {\ boldsymbol {J}} _ {i} {\ boldsymbol {\ delta}} \ right) \ end {align}}}

где f (x) {\ displaystyle f ({\ boldsymbol {x}})}{\ displaystyle f ({\ boldsymbol {x}})} и J {\ displaystyle {\ boldsymbol {J}}}{\ boldsymbol {J}} уже были вычислены алгоритмом, поэтому для вычисления требуется только одна дополнительная оценка функции f (x + h δ) {\ displaystyle f ({\ boldsymbol {x}} + h {\ boldsymbol {\ delta}})}{\ displaystyle f ( {\ boldsymbol {x}} + h {\ boldsymbol {\ delta}})} . Выбор шага конечных разностей h {\ displaystyle h}hможет повлиять на стабильность алгоритма, и значение около 0,1 обычно является разумным в целом.

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

2 ‖ ak ‖ ‖ vk ‖ ≤ α {\ Displaystyle {\ frac {2 \ left \ | {\ boldsymbol {a}} _ {k} \ right \ |} {\ left \ | {\ boldsymbol {v}} _ {k} \ right \ |}} \ leq \ alpha}{\ displaystyle {\ frac {2 \ left \ | {\ boldsymbol {a}} _ {k} \ right \ |} {\ left \ | {\ boldsymbol {v}} _ {k} \ right \ |}} \ leq \ alpha}

где α {\ displaystyle \ alpha}\ alpha обычно фиксируется на значение меньше 1, с меньшими значениями для более сложных задач.

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

Пример
Плохое соответствие Лучшее соответствие Лучшее соответствие

В этом примере мы пытаемся учесть функцию y = a cos ⁡ ( b X) + b sin ⁡ (a X) {\ displaystyle y = a \ cos \ left (bX \ right) + b \ sin \ left (aX \ right)}{\ displaystyle y = a \ cos \ left (bX \ right) + b \ sin \ left (aX \ right)} с использованием алгоритма Левенберга – Марквардта реализована в GNU Octave как функция leasqr. Графики показывают, что параметры a = 100 {\ displaystyle a = 100}{\ displaystyle a = 100} , b = 102 {\ displaystyle b = 102}{\ displaystyle b = 102} , использованные в исходной кривой, постепенно улучшаются. Только тогда, когда параметры на последнем графике выбраны наиболее близко к исходному, кривые точно соответствуют. Это уравнение является примером очень чувствительных начальных условий для алгоритма Левенберга – Марквардта. Одной из причин такой чувствительности является наличие нескольких минимумов - функция cos ⁡ (β x) {\ displaystyle \ cos \ left (\ beta x \ right)}{\ displaystyle \ cos \ left (\ бета х \ справа)} имеет минимумы при значении параметра β ^ {\ displaystyle {\ hat {\ beta}}}{\ hat {\ beta}} и β ^ + 2 n π {\ displaystyle {\ hat {\ beta}} + 2n \ pi}{\ displaystyle {\ hat {\ beta}} + 2n \ pi} .

См. Также
Ссылки
Дополнительная литература
Внешние ссылки
Последняя правка сделана 2021-05-27 07:15:04
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте