寻优算法——梯度下降法、牛顿法原理认识

梯度下降法、牛顿法早就知道,怎么使用也很简单,但一直没搞太明白,为什么“梯度方向就是下降最快的方向”?什么站在山顶往下走只是结果,根本没解释原因,这次终于搞清楚了,写下来以防忘记。

梯度下降法

对于一个函数f(x)x可能是一维或者多维的变量,给x一个增量\Delta x使它的值变小,要使f(x+\Delta x)在这一步变得最小,即下降最快,根据泰勒展开

f(x+\Delta x)=f(x)+{f}'(x)^{T}\Delta x+...

这里舍去二阶导数后面的小量,那么要取得最小的f(x+\Delta x)值,就要使{f}'(x)^{T}\Delta x最小,向量的内积

\left |{f}'(x)^{T}\Delta x \right |\geq -\left | {f}'(x) \right |\left | \Delta x \right |

当且仅当\Delta x =- {f}'(x),上述不等式的等号成立。

以上,说明梯度方向确实是函数在当前位置x最快下降的方向,同理可得\Delta x = {f}'(x)是最快上升的方向。

牛顿法

牛顿法是一种比梯度下降法速度更快的算法,这是因为它在泰勒展开时考虑了更精确,保留二阶导数的泰勒展开如下

f(x+\Delta x)=f(x)+{f}'(x)^{T}\Delta x+\frac{1}{2}\Delta {x}^{T}{f}''(x)\Delta {x}

这里的二阶导数项实际上是一个Hessian matrix,如下图,{f}''(x)=H(f)

H(f)={\begin{bmatrix}{\frac  {\partial ^{2}f}{\partial x_{1}^{2}}}&{\frac  {\partial ^{2}f}{\partial x_{1}\,\partial x_{2}}}&\cdots &{\frac  {\partial ^{2}f}{\partial x_{1}\,\partial x_{n}}}\\\\{\frac  {\partial ^{2}f}{\partial x_{2}\,\partial x_{1}}}&{\frac  {\partial ^{2}f}{\partial x_{2}^{2}}}&\cdots &{\frac  {\partial ^{2}f}{\partial x_{2}\,\partial x_{n}}}\\\\\vdots &\vdots &\ddots &\vdots \\\\{\frac  {\partial ^{2}f}{\partial x_{n}\,\partial x_{1}}}&{\frac  {\partial ^{2}f}{\partial x_{n}\,\partial x_{2}}}&\cdots &{\frac  {\partial ^{2}f}{\partial x_{n}^{2}}}\end{bmatrix}}

这时候我们从该式不再能轻易找到最小值,因此我们将二阶展开式对\Delta x求导并令其为0,

{f}'(x)^{T}+H(f)\Delta {x}=0

因此得\Delta {x}=-H(f)^{-1}{f}'(x)^{T}

在这一过程中可以发现牛顿法有效是假设了上述求导置零得到的点就是最小值处,实际上他也可能是最大值点、驻点、鞍点等,因此牛顿法虽快但有更多的限制条件。函数要有连续二阶导数;海森矩阵是正定的,函数是凸函数,才能保证收敛(……深入的我也还没搞懂)。

猜你喜欢

转载自blog.csdn.net/jonathanzh/article/details/81543367