我们在高中或本科时期就了解到:当函数存在解析形式且容易进行求导(
f
(
x
)
f(x)
f(x)在最优点
x
∗
x^*
x∗附近可微),那么 x* 是局部极小点的必要条件为:
d
f
(
x
∗
)
=
0
df(x^*)=0
df(x∗)=0。
然而,并不是所有的函数都容易求导,或者求导之后进行计算。所以引出了一系列基于最小二乘的优化算法如:“最速下降法(很多情况下也称为梯度下降法)、牛顿法、高斯牛顿法、LM算法”。
下面简单记录一下基本的最速下降法步骤及实例。
最速下降法
![在这里插入图片描述](https://img-blog.csdnimg.cn/c39be2e1eff54c0da89837dc46331292.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd3hjXzE5OTg=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
简要介绍:
第一步,选取一个迭代的初始值,设置迭代终止的阈值,第一次迭代
k
=
0
k = 0
k=0
第二步,计算函数
f
(
x
)
f(x)
f(x)在迭代
k
=
0
k = 0
k=0处的一阶梯度
▽
f
(
x
k
)
▽f(x^k)
▽f(xk),如果
∣
∣
▽
f
(
x
k
)
∣
∣
<
ε
||▽f(x^k)|| < ε
∣∣▽f(xk)∣∣<ε停止迭代,输出
x
k
x^k
xk,反之,进行下一步。
第三步,找到梯度的反方向
p
k
=
−
▽
f
(
x
k
)
p^{k} = -▽f(x^k)
pk=−▽f(xk),作为下降最快的方向。
第四步,假设,在
p
k
p^{k}
pk方向前进了步长:
t
k
t_k
tk,使得下式成立:
f
(
x
k
+
t
k
p
k
)
=
m
i
n
f
(
x
k
+
t
p
k
)
f(x^k+t_kp^{k}) = min f(x^k+tp^{k})
f(xk+tkpk)=minf(xk+tpk)
即:找到一个最优的步长
t
k
t_k
tk,使得
f
(
x
k
+
t
k
p
k
)
f(x^k+t_kp^{k})
f(xk+tkpk)最小
接着:
改变
x
k
+
1
x^{k+1}
xk+1的值,
x
k
+
1
=
x
k
+
t
k
p
k
x^{k+1} = x^{k}+t_kp^{k}
xk+1=xk+tkpk。
同时,
k
=
k
+
1
k = k+1
k=k+1。
转入第二步,进行判断进入下一次迭代或输出。
实例
![在这里插入图片描述](https://img-blog.csdnimg.cn/42a3a1346523400fbc412d656d5e9f57.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd3hjXzE5OTg=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/0c00209e50af4183be9d2b1d4e77f28e.jpg?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAd3hjXzE5OTg=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
上述内容主要参考了大佬的知乎回答:【最优化】一文搞懂最速下降法,这里仅进行记录,巩固自己的理解。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)