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

代码均使用PYTHON3.x

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

下图(来自http://www.myexception.cn/cloud/1987100.html,侵删)
(斯坦福机器学习课程笔记)牛顿法算法学习_第1张图片

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

f(x)f(x0)xx0=f(x0)

3、求切线上 f(x)=0 的点,令f(x)=0,得
x=x0f(x0)f(x0)

4、迭代方法为
xn+1=xnf(xn)f(xn)

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

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

xn+1=xnc(xn)2c(xn)

(为了不出现歧义,将f(x)改成了c(x))
或者写成
xn+1=xn[2c(xn)]1c(xn)

其中 2 是hessian矩阵

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

f(x)=f(x0)+f(x0)(xx0)+2f(x0)(xx0)2

其中, f(x) 就是代价函数,方程右边是关于 xx0 的二次方程,在
xx0=f(x0)2f(x0)

取极值。由于泰勒公式二阶展开只是一个估算,得出的值只是比初始值更接近的值,所以要经过迭代算法得出更接近的值(缺迭代可以收敛的证明)

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

xn+1=xnaf(xn)

其中 a 是学习率, f(x) 是代价函数

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

xn+1=xnf(xn)2f(xn)

可以看到,与梯度下降法相比,牛顿法只是将学习率 a 替换成了 2f(xn)1

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

你可能感兴趣的:(机器学习)