Advertisement

(斯坦福机器学习课程笔记)牛顿法算法学习

阅读量:

代码均使用PYTHON3.x

牛顿法算法复杂些,作以下笔记备忘。

下图(来自http://www.myexception.cn/cloud/1987100.html,侵删)
这里写图片描述

为了找到 f(x)取极值的点,即,牛顿法的思路是:
1、牛顿法只是求f(x)=0的根!!!!!!!(x可以是向量)
2、初始化一个x_0点,在x=x_0的条件下做曲线的切线

3、求切线上 的点,令f(x)=0,得
4、迭代方法为

以上是牛顿法的迭代步骤
以下是牛顿法用于优化问题
5、上面说了牛顿法只是求出的根。如果要用牛顿法求极值点,分别对
\nabla cost(\theta)的每个分量用牛顿法
,就可以得到代价函数的极值条件了

6、代价函数的迭代步骤是

(为了不出现歧义,将f(x)改成了c(x))
或者写成
其中 \nabla ^2是hessian矩阵

==================================================
为了加深理解, 这里是另一种理解方法,但以下我的理解是不完整的
将用泰勒公式二阶展开,得

其中, 就是代价函数,方程右边是关于 x-x_0的二次方程,在
取极值。由于泰勒公式二阶展开只是一个估算,得出的值只是比初始值更接近的值,所以要经过迭代算法得出更接近的值(缺迭代可以收敛的证明)

======================================================
牛顿法与梯度下降法的比较
梯度下降法的迭代公式是

其中 a是学习率,是代价函数

而牛顿法用于优化问题的迭代公式是

可以看到,与梯度下降法相比,牛顿法只是将学习率 替换成了\nabla^2 f(x_n)^{-1}

这可以理解为,梯度下降法和牛顿法的区别是:牛顿法根据代价函数的二阶导数信息,自动计算出了合适的学习率 ,因此有更快的迭代速度。而作为交换,牛顿法需要计算庞大的hessian矩阵,矩阵的大小为参数个数 * 参数个数,计算速度慢,消耗资源大。
因此实际中,牛顿法并不常用。

全部评论 (0)

还没有任何评论哟~