日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Levenberg-Marquardt(LM算法)

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Levenberg-Marquardt(LM算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


轉自: 翠翠的博客

什么是最優化,可分為幾大類?
答:Levenberg-Marquardt算法是最優化算法中的一種。最優化是尋找使得函數值最小的參數向量。它的應用領域非常廣泛,如:經濟學、管理優化、網絡分析、最優設計、機械或電子設計等等。
根據求導數的方法,可分為2大類。第一類,若f具有解析函數形式,知道x后求導數速度快。第二類,使用數值差分來求導數。
根據 使用模型不同,分為非約束最優化、約束最優化、最小二乘最優化。

什么是Levenberg-Marquardt算法?
它是使用最廣泛的非線性最小二乘算法,中文為列文伯格-馬夸爾特法。它是利用梯度求最大(小)值的算法,形象的說,屬于“爬山”法的一種。它同時具有梯度法和牛頓法的優點。當λ很小時,步長等于牛頓法步長,當λ很大時,步長約等于梯度下降法的步長。在作者的科研項目中曾經使用過多次。圖1顯示了算法從起點,根據函數梯度信息,不斷爬升直到最高點(最大值)的迭代過程。共進行了12步。(備注:圖1中綠色線條為迭代過程)。

?




圖1 LM算法迭代過程形象描述

圖1中,算法從山腳開始不斷迭代。可以看到,它的尋優速度是比較快的,在山腰部分直接利用梯度大幅度提升(參見后文例子程序中lamda較小時),快到山頂時經過幾次嘗試(lamda較大時),最后達到頂峰(最大值點),算法終止。

?

如何快速學習LM算法?

學 習該算法的主要困難是入門難。 要么國內中文教材太艱澀難懂,要么太抽象例子太少。目前,我看到的最好的英文入門教程是K. Madsen等人的《Methods for non-linear least squares problems》本來想把原文翻譯一下,貼到這里。請讓我偷個懶吧。能找到這里的讀者,應該都是E文好手,我翻譯得不清不楚,反而事倍功半了。

可在 下面的鏈接中找到
http://www2.imm.dtu.dk/pubdb/public/publications.php? year=&pubtype=7&pubsubtype=&section=1&cmd=full_view&lastndays=&order=author
或者直接下載pdf原文:
http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/3215/pdf/imm3215.pdf

?

???LM算法是介于牛頓法與梯度下降法之間的一種非線性優化方法,對于過參數化問題不敏感,能有效處理冗余參數問題,使代價函數陷入局部極小值的機會大大減小,這些特性使得LM算法在計算機視覺等領域得到廣泛應用。

算法流程

??????????

?在LM算法中,每次迭代是尋找一個合適的阻尼因子λ,當λ很小時,算法就變成了GAuss-Newton法的最優步長計算式,λ很大時,蛻化為梯度下降法的最優步長計算式。

參考文獻:

[1]. 張鴻燕, 狄征. Levenberg-Marquardt算法的一種新解釋. 計算機工程與應用,2009,45(19),5-8.

from:?http://heleiying.blog.163.com/blog/static/3110429201081693815164/

Levenberg-Marquardt快速入門教程(薦)
例子程序(MATLAB源程序)
本程序不到100行,實現了求雅克比矩陣的解析解,Levenberg-Marquardt最優化迭代,演示了如何求解擬合問題。采用蕭樹鐵主編的《數學試驗》(第二版)(高等教育出版社)中p190例2(血藥濃度)來演示。在MATLAB中可直接運行得到最優解。

?

*************************************************************************

% 計算函數f的雅克比矩陣,是解析式
syms a b y x real;
f=a*exp(-b*x);
Jsym=jacobian(f,[a b])


% 擬合用數據。參見《數學試驗》,p190,例2
data_1=[0.25 0.5 1 1.5 2 3 4 6 8];
obs_1=[19.21 18.15 15.36 14.10 12.89 9.32 7.45 5.24 3.01];

% 2. LM算法
% 初始猜測s
a0=10; b0=0.5;
y_init = a0*exp(-b0*data_1);
% 數據個數
Ndata=length(obs_1);
% 參數維數
Nparams=2;
% 迭代最大次數
n_iters=50;
% LM算法的阻尼系數初值
lamda=0.01;

% step1: 變量賦值
updateJ=1;
a_est=a0;
b_est=b0;

% step2: 迭代
for it=1:n_iters
????if updateJ==1
????????% 根據當前估計值,計算雅克比矩陣
????????J=zeros(Ndata,Nparams);
????????for i=1:length(data_1)
????????????J(i,:)=[exp(-b_est*data_1(i)) -a_est*data_1(i)*exp(-b_est*data_1(i))];
????????end
????????% 根據當前參數,得到函數值
????????y_est = a_est*exp(-b_est*data_1);
????????% 計算誤差
????????d=obs_1-y_est;
????????% 計算(擬)海塞矩陣
????????H=J'*J;
????????% 若是第一次迭代,計算誤差
????????if it==1
????????????e=dot(d,d);
????????end
????end

????% 根據阻尼系數lamda混合得到H矩陣
????H_lm=H+(lamda*eye(Nparams,Nparams));
????% 計算步長dp,并根據步長計算新的可能的\參數估計值
????dp=inv(H_lm)*(J'*d(:));
????g = J'*d(:);
????a_lm=a_est+dp(1);
????b_lm=b_est+dp(2);
????% 計算新的可能估計值對應的y和計算殘差e
????y_est_lm = a_lm*exp(-b_lm*data_1);
????d_lm=obs_1-y_est_lm;
????e_lm=dot(d_lm,d_lm);
????% 根據誤差,決定如何更新參數和阻尼系數
????if e_lm????????lamda=lamda/10;
????????a_est=a_lm;
????????b_est=b_lm;
????????e=e_lm;
????????disp(e);
????????updateJ=1;
????else
????????updateJ=0;
????????lamda=lamda*10;
????end
end
%顯示優化的結果
a_est
b_est

************************************************************

轉自:http://www.shenlejun.cn/my/article/show.asp?id=17&page=2

總結

以上是生活随笔為你收集整理的Levenberg-Marquardt(LM算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。