关于什么是自适应滤波器,在参考文献1的“关于<自适应滤波器原理>一书”一节中,有如下描述:
自适应信号处理可以在无需先验知识的条件下,通过自学习适应或跟踪外部环境的非平稳随机变化,并最终逼近维纳滤波器和卡尔曼滤波器的最优滤波性能。
由于没有先验知识,自适应滤波器的性能一般只能逼近维纳滤波器和卡尔曼滤波器。这是可以理解的。
这里先介绍自适应滤波器的重要基础——最速下降法。
1.最速下降法基本理论
最速下降法是一种古老的最优化方法,本质上是用于求解函数的极小值。它是理解基于梯度的自适应方法的基础。
对于一个待优化系统,考虑代价函数
J
(
w
)
J(w)
J(w),我们要寻找最优解
w
o
w_o
wo,满足:
J
(
w
o
)
≤
J
(
w
)
∀
w
(
1
.
1
)
J(w_o)≤J(w) \forall w (1.1)
J(wo)≤J(w) ∀w (1.1)
要达到上述优化目标,一个朴素的想法是基于局部迭代下降思想,在每一步优化迭代中都使代价函数降低,即
J
(
w
n
+
1
)
<
J
(
w
n
)
(
1
.
2
)
J(w_{n+1})<J(w_n) (1.2)
J(wn+1)<J(wn) (1.2)
而局部迭代的一种简单形式是沿函数负梯度方向迭代调整权向量
w
w
w,这就是最速下降法。它的几何解释网上很多,不再赘述。
将梯度向量表示为
g
=
∇
J
(
w
)
=
∂
J
(
w
)
∂
w
(
1
.
3
)
g=\nabla J(w)=\frac{\partial J(w)}{\partial w} (1.3)
g=∇J(w)=∂w∂J(w) (1.3)
则最速下降算法可表述为
w
(
n
+
1
)
=
w
(
n
)
−
1
2
μ
g
(
n
)
(
1
.
4
)
w(n+1)=w(n)-\frac{1}{2}μg(n) (1.4)
w(n+1)=w(n)−21μg(n) (1.4)
式中的
μ
μ
μ为正常数,称为步长参数。
1
2
\frac{1}{2}
21是为了数学处理方便。通过泰勒展开可证明上述迭代式(1.4)可满足局部迭代(式(1.2))的要求。
最后还有两个小问题
- 最速下降法是不是最快的?
最速下降法虽然名字如此,但从整个迭代来看,它未必是最快的。其“最速”的含义在于,在每次迭代时,它是代价函数最快的下降方向,但由于可能在极值点附近来回震荡,它可能不是最快的。
看另一篇博客的描述:
梯度下降法是最早最简单,也是最为常用的最优化方法。梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的速度也未必是最快的。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是”最速下降法“。最速下降法越接近目标值,步长越小,前进越慢。
- 最速下降法的收敛性
最速下降法的权值调整过程其实是一个反馈过程,既然是反馈就牵涉到反馈系统的稳定性问题。最速下降法的稳定性取决于步长参数 μ μ μ和输入参数的相关矩阵 R \bold R R。这里直接给出结论:
最速下降法稳定的充要条件是:
0 < μ < 2 λ m a x 0<μ<\frac{2}{\lambda _{max}} 0<μ<λmax2
其中 λ m a x {\lambda_{max}} λmax是相关矩阵 R \bold R R的最大特征值。
2.牛顿法
最速下降法优点是简单,但正是由于这种简单,导致需要的迭代次数较多。这是由于最速下降法是围绕当前点的误差性能曲面的一阶近似为基础的。
为了使迭代更快,可以围绕当前点的误差性能曲面的二阶逼近,这就是牛顿法。
将
J
(
w
)
J(w)
J(w)在
w
(
n
)
w(n)
w(n)处进行二阶泰勒展开,然后对
w
w
w求导并令导数为0(具体推导见相关书籍),可求出迭代公式为:
w
(
n
+
1
)
=
w
(
n
)
−
H
−
1
g
(
n
)
w(n+1)=w(n)-H^{-1}g(n)
w(n+1)=w(n)−H−1g(n)
其中,
g
(
n
)
=
∂
J
(
w
)
∂
w
∣
w
=
w
(
n
)
g(n)=\frac{\partial J(w)}{\partial w}|_{w=w(n)}
g(n)=∂w∂J(w)∣w=w(n)
是
w
(
n
)
w(n)
w(n)处的梯度,
H
(
n
)
=
∂
2
J
(
w
)
∂
2
w
∣
w
=
w
(
n
)
H(n)=\frac{\partial^2 J(w)}{\partial^2 w}|_{w=w(n)}
H(n)=∂2w∂2J(w)∣w=w(n)
是
w
(
n
)
w(n)
w(n)处代价函数
J
(
w
)
J(w)
J(w)的海森(Hessian)矩阵。
并且可以证明,若代价函数
J
(
w
)
J(w)
J(w)本身就是二次的,则牛顿法仅用一步便可迭代到极小值点。
再看两个小问题
- 最速下降法和牛顿法对比
先引用另一篇博客的叙述:
从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)
根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
但是牛顿法每一步计算都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。
因此在实际应用中应综合考虑:如果希望计算简单,建议用最速下降法;如果希望收敛快,建议用牛顿法或其改进型。
- 牛顿法和牛顿迭代法对比
这个对比源于我个人的困惑。这里说的牛顿迭代法是数值分析中讲到的求函数根的方法,这两个相似的名字把我弄晕了,便对比了一下。
数值分析中的牛顿迭代法是基于函数的一阶泰勒近似后进行迭代。
现在考虑最优化里的牛顿法,要求的其实是函数 f ( x ) f(x) f(x)的极小值,在函数连续可微时其导数为0。因此,求极小值便转化为求导数 f ′ ( x ) f^{'}(x) f′(x)的根。在 f ( x ) f(x) f(x)下用二阶近似,也就相当于在 f ′ ( x ) f^{'}(x) f′(x)下用一阶近似了。在 f ′ ( x ) f^{'}(x) f′(x)用数值分析中的牛顿迭代法求根和在 f ( x ) f(x) f(x)用最优化方法中的牛顿法求极值,便是一码事了!
所以,二者是一致的!!
参考文献:
- 郑宝玉 等译,自适应滤波器原理,第四版