【机器学习】优化算法小结1——牛顿法\拟牛顿\共轭梯度

梯度下降算法

求解无约束最优化问题的一种最常用的方法,梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。

梯度下降法用来求解目标函数的极值。这个极值是给定模型给定数据之后在参数空间中搜索找到的。迭代过程为:

梯度下降方法的问题:
每一步走的距离在极值点附近非常重要,如果走的步子过大,容易在极值点附近震荡而无法收敛。

解决办法:将alpha设定为随着迭代次数而不断减小的变量,但是也不能完全减为零。

梯度与导数的关系

  • 方向导数是各个方向上的导数
  • 偏导数连续才有梯度存在
  • 梯度的方向是方向导数中取到最大值的方向,梯度的值是方向导数的最大值
  • 总结:函数 f(x,y) 在一点的梯度grad f(x0,y0) 是这样一个向量,它的方向是导数在这点的方向导数取得最大值的方向,它的模就等于方向导数的最大值。一般是令导数等于0,求取得最大的x点。方向导数与梯度 - Totty-top的文章 - 知乎 

让我们来复习一下!泰勒公式!


牛顿法


 牛顿法是为了求解函数值为零的时候变量的取值问题的,具体地,当要求解 f(θ)=0时,如果 f可导,那么可以通过迭代公式。

当θ是向量时,牛顿法可以使用下面式子表示:

其中H叫做海森矩阵,H (-1) 表示的是海森矩阵的逆矩阵 ,其实就是目标函数对参数θ的二阶导数。

牛顿法的优点:
牛顿法收敛速度相比梯度下降法很快,而且由于海森矩阵的逆在迭代中不断减小,起到逐渐缩小步长的效果。
缺点:
牛顿法的缺点就是计算海森矩阵的逆比较困难,消耗时间和计算资源。因此有了拟牛顿法。

  • 网上一个牛顿法求解的例子:

海森矩阵的定义:


牛顿法和梯度下降法的效率对比

  从本质上去看,牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。(牛顿法目光更加长远,所以少走弯路;相对而言,梯度下降法只考虑了局部的最优,没有全局思想。)

  根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

牛顿法的优缺点总结:

  优点:二阶收敛,收敛速度快;

  缺点:牛顿法是一种迭代算法,每一步都需要求解目标函数的Hessian矩阵的逆矩阵,计算比较复杂。


理论学完啦,那我们来做几道题吧?!

求平方根(根号n)的两种算法——二分法和牛顿迭代

# 输入一个整数N,输出sqrt(N),精度为0.001
# 二分法
def binarySearch(n,eps):
    if n<0:
        return -1
    else:
        low = 0
        high = n
        mid = (low+high)/2
        while abs(mid*mid-n)>eps:
            if mid*mid>n:
                high = mid
            else:
                low = mid
            mid = (low+high)/2
        return mid

# 牛顿法
def newton(n,eps):
    x = n
    y = 0
    while(abs(x-y)>eps):
        y = x
        x = 0.5*(x+n/x)
    return x

if __name__ == '__main__':
    n = 5
    eps = 0.0001
    print(n**0.5) # 2.23606797749979
    print(binarySearch(n,eps)) # 2.2360610961914062
    print(newton(n,eps)) # 2.236067977499978

牛顿法求解的分析过程:如何用牛顿法求一个数的平方根 


拟牛顿法

思想是改善牛顿法每次需要求解复杂的Hessian矩阵的逆矩阵的缺陷,它使用正定矩阵来近似Hessian矩阵的逆,从而简化了运算的复杂度。

基本idea是:不求二阶偏导数,构造出一个近似的海森矩阵。

共轭梯度法

共轭梯度法是介于全量梯度下降与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了GD收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 在各种优化算法中,共轭梯度法是非常重要的一种。其优点是所需存储量小,具有步收敛性,稳定性高,而且不需要任何外来参数。

弱鸡要去睡觉了。。。8886

参考:

机器学习-梯度下降法

机器学习入门之 — 梯度下降,牛顿法,拟牛顿法

牛顿法与拟牛顿法学习笔记(一)牛顿法

常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值