美文网首页
机器学习入门之 — 梯度下降,牛顿法,拟牛顿法

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

作者: DayDayUpppppp | 来源:发表于2018-04-08 17:12 被阅读0次
梯度下降法

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

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

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

牛顿法

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


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


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

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

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


海森矩阵的定义:


  • 代码实现:
    用牛顿法求解 f = 100 * (x2-x1** 2) ** 2 + (1-x1)**2
import numpy as np
import matplotlib.pyplot as plt

#梯度的公式
def tidu(x):
    return np.array([-400*x[0]*(x[1]-x[0]**2)-2*(1-x[0]),200*(x[1]-x[0]**2)])

#海森矩阵的公式
def hessian(x):
    return np.array([[-400*(x[1]-3*x[0]**2)+2,-400*x[0]],[-400*x[0],200]])

#牛顿法
def newton(x):
    print("初始点为 : ",x)
    res=[]
    res.append(x)
    i = 1
    imax = 1000
    delta = 1
    #迭代的条件是小于imax,或者是更新的距离小于一个很小的数值
    while i<imax and delta>10**(-5):
        p = -np.dot(np.linalg.inv(hessian(x)),tidu(x))
        x_new = x + p
        res.append(x_new)
        delta = sum((x-x_new)**2)   # 更新的距离
        print("初始点为 : ",x_new)
        i=i+1
        x=x_new  # 更新x
    return np.array(res)


if __name__ =="__main__":
    # 用牛顿法求解  f=100*(x2-x1**2)**2+(1-x1)**2
    X1=np.arange(-1.5,1.5+0.05,0.05)
    X2=np.arange(-3.5,2+0.05,0.05)
    [x1,x2]=np.meshgrid(X1,X2)
    f=100*(x2-x1**2)**2+(1-x1)**2;   # 给定的函数
    plt.contour(x1,x2,f,20)          # 画出函数的20条轮廓线

    x0 = np.array([-1.2,1])
    res=newton(x0)

    res_x=res[:,0]
    res_y=res[:,1]
    plt.plot(res_x,res_y)
    plt.show()

然后就是拟牛顿法了

  • 拟牛顿法

todo

牛顿法需要求海森矩阵,这个矩阵需要计算二阶偏导数,比较复杂。为了改良这个问题,提出了拟牛顿法。
基本idea是:不求二阶偏导数,构造出一个近似的海森矩阵。


参考:
https://www.zhihu.com/question/19723347
https://blog.csdn.net/xmu_jupiter/article/details/47402497
https://blog.csdn.net/u014688145/article/details/53688585

相关文章

  • 梯度优化算法

    梯度下降,共轭梯度法;牛顿法,拟牛顿法;信赖域方法,罚函数法。

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

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

  • 最优化方法

    常见最优化方法 1.梯度下降法 2.牛顿法 3.拟牛顿法 4.共轭梯度法

  • 【转】常见的几种最优化方法

    转自Poll 的笔记 阅读目录 梯度下降法(Gradient Descent) 牛顿法和拟牛顿法(Newton's...

  • 局部搜索之牛顿法

    除了前面说的梯度下降法,牛顿法也是机器学习中用的比较多的一种优化算法。 牛顿法求方程解 牛顿法又称为牛顿-拉弗森方...

  • 2018-08-23

    1.gbdt,xgboost,lgbm的区别(阿里,头条) 2.梯度下降法,牛顿法,拟牛顿法区别(阿里) 3.SG...

  • PyTorch基础知识

    一. 常用优化方法 最小二乘法,牛顿法,拟牛顿法,梯度下降法 二. tensor和numpy array的相互转换...

  • Logistic回归与最大熵模型-优化算法

    Logistic回归与最大熵模型-理论推导中提到了4个优化算法:分别是: 梯度下降算法 拟牛顿法(牛顿法) 通用迭...

  • [机器学习必知必会]牛顿法与拟牛顿法

    前言 同梯度下降法一样,牛顿法和拟牛顿法也是求解无约束最优化问题的常用方法。牛顿法本身属于迭代算法,每一步需要求解...

  • 牛顿法和梯度下降法的学习

    牛顿法和梯度下降法的差别 牛顿法:二次逼近梯度下降法:一阶逼近 牛顿法:对局部凸的函数找到极小值,对局部凹的函数找...

网友评论

      本文标题:机器学习入门之 — 梯度下降,牛顿法,拟牛顿法

      本文链接:https://www.haomeiwen.com/subject/utaphftx.html