介绍

在向量微积分中,标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向,梯度的长度是这个最大的变化率。更严格的说,从欧几里得空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似。

在判别式模型中,我们往往需要学习参数,从而使得我们的模型f(x)可以逼近实际的y。如果学习参数,则通常会用到梯度下降、牛顿、拟牛顿学习算法。


参考自网络资源

1.梯度下降

1.1 为何使用梯度作为下降方向?

梯度实际上是函数值变化最快的方向。

比如说,你站在一个山上,梯度所指示的方向是高度变化最快的方向。你沿着这个方向走,能最快的改变(增加或是减小)你所在位置的高度,但是如果你乱走,可能走半天所在位置高度也没有变化多少。也就是说,如果你一直沿着梯度走,你就能最快的到达山的某个顶峰或低谷(偶尔会到鞍点,不过这几乎不可能)。

所以实际上,梯度下降法是用来数值搜索局部极小值或极大值的,它是实际应用中一种非常高效,高速且可靠的方法。

1.2 以逻辑斯蒂回归(LR)为例

  1. 模型参数估计
  2. 梯度下降学习参数
  3. 最终模型

1.3 具体学习过程(python代码示例)

梯度下降是最小化风险函数、损失函数的一种常用方法,随机梯度下降和批量梯度下降是两种迭代求解思路。

根据batch_size的不同,可以有大概一下几种形式。

(1)梯度下降伪代码

  • 每个回归参数初始化为1
  • 重复R次
    • 计算整个数据集的梯度
    • 使用alpha × gradient更新回归系数的向量
    • 返回回归系数

示例代码:

def gradAscent(dataMatIn, classLabels):dataMatrix = mat(dataMatIn)             #convert to NumPy matrixlabelMat = mat(classLabels).transpose() #convert to NumPy matrixm,n = shape(dataMatrix)alpha = 0.001maxCycles = 500weights = ones((n,1))for k in range(maxCycles):              #heavy on matrix operationsh = sigmoid(dataMatrix*weights)     #matrix multerror = (labelMat - h)              #vector subtractionweights = weights + alpha * dataMatrix.transpose()* error #matrix multreturn weights

(2)随机梯度下降伪代码:

  • 每个回归参数初始化为1
  • 重复R次
    • 计算每个样本的梯度
    • 使用alpha × gradient更新回归系数的向量
    • 返回回归系数

示例代码:

细心的读者可以看到,其中alpha是变化的,这样可以在一定程度上避免局部最优解。

def stocGradAscent1(dataMatrix, classLabels, numIter=150):m,n = shape(dataMatrix)weights = ones(n)   #initialize to all onesfor j in range(numIter):dataIndex = range(m)for i in range(m):alpha = 4/(1.0+j+i)+0.0001    #apha decreases with iteration, does not randIndex = int(random.uniform(0,len(dataIndex)))#go to 0 because of the constanth = sigmoid(sum(dataMatrix[randIndex]*weights))error = classLabels[randIndex] - hweights = weights + alpha * error * dataMatrix[randIndex]del(dataIndex[randIndex])return weights

(3)自定义batch_size,算法流程与上面基本差不错,累计误差更新参数。梯度下降,就是batch_size = 全部样本量,随机梯度下降就是batch_size = 1。

2.牛顿法

2.1 基本介绍

在最优化的问题中,线性最优化至少可以使用单纯行法求解,但对于非线性优化问题,牛顿法提供了一种求解的办法。假设任务是优化一个目标函数f,求函数f的极大极小问题,可以转化为求解函数f的导数f’=0的问题,这样求可以把优化问题看成方程求解问题(f’=0)。

为了求解f’=0的根,把f(x)的泰勒展开,展开到2阶形式:

这个式子是成立的,当且仅当 Δx 无线趋近于0。此时上式等价与:

求解:

得出迭代公式:

一般认为牛顿法可以利用到曲线本身的信息,比梯度下降法更容易收敛(迭代更少次数),如下图是一个最小化一个目标方程的例子,红色曲线是利用牛顿法迭代求解,绿色曲线是利用梯度下降法求解。


二维情形,图片来源自网络

2.2 算法流程

2.3 特性

  1. 牛顿法收敛速度为二阶,对于正定二次函数一步迭代即达最优解。
  2. 牛顿法是局部收敛的,当初始点选择不当时,往往导致不收敛
  3. 牛顿法不是下降算法,当二阶海塞矩阵非正定时,不能保证产生方向是下降方向。
  4. 二阶海塞矩阵必须可逆,否则算法进行困难。
  5. 对函数要求苛刻(二阶连续可微,海塞矩阵可逆),而且运算量大。

2.4 牛顿法的改进

3.拟牛顿法

3.1 特征

  1. 只需用到函数的一阶梯度;(Newton法用到二阶Hesse阵)
  2. 下降算法,故全局收敛;
  3. 不需求矩阵逆;(计算量小)
  4. 一般可达到超线性收敛;(速度快)
  5. 有二次终结性。

3.2 DFP法

x, s, y, H 表示第k 步的量,等表示第k+1步的量。

3.3 BFGS法

若把前面的推导,平行地用在y=Bs公式上,可得到

用此公式求方向时,需用到矩阵求逆或解方程

由于每次只有秩2的变换,这里的计算量仍可以降下来。为了得到H-公式,可对上面求逆(推导得):

BFGS法有拟牛顿法的全部优点,并且在一定条件下可以证明在BFGS法中使用不精确一维搜索有全局收敛性。

参考文献
(1)《统计学习方法》
(2)《机器学习实战》
(3)《运筹学与最优化方法》

梯度下降、牛顿法、拟牛顿法相关推荐

  1. ML与Optimality:最优化理论(GD随机梯度下降/QN拟牛顿法/CG共轭梯度法/L-BFGS/TR置信域/GA遗传算法/SA模拟退火算法)在机器学习中的简介、常用方法、案例应用之详细攻略

    ML与Optimality:最优化理论(GD随机梯度下降/QN拟牛顿法/CG共轭梯度法/L-BFGS/TR置信域/GA遗传算法/SA模拟退火算法)在机器学习中的简介.常用方法.案例应用之详细攻略 目录 ...

  2. 八、梯度下降法和拟牛顿法

    1.梯度 2.梯度上升和梯度下降 3.梯度下降算法详解 3.1 直观解释 3.2 梯度下降相关概念 3.3 梯度下降的矩阵描述 3.4 梯度下降的算法调优 4.梯度下降法大家族 5.梯度下降法和其他无 ...

  3. 牛顿法、梯度下降法与拟牛顿法

    牛顿法.梯度下降法与拟牛顿法 0 引言 1 关于泰勒展开式 1.1 原理 1.2 例子 2 牛顿法 2.1 x 为一维 2.2 x 为多维 3 梯度下降法 4 拟牛顿法 4.1 拟牛顿条件 4.2 D ...

  4. 关于梯度下降法和牛顿法的数学推导

    作者:LogM 本文原载于 https://blog.csdn.net/qq_28739605/article/details/80862810,不允许转载~ 文章难免有错误之处,请在原文评论处指出~ ...

  5. GBDT与xgb区别,以及梯度下降法和牛顿法的数学推导

    为什么要介绍梯度下降法和牛顿法那? 这里提及两个算法模型GBDT和XGBoost,两个都是boosting模型. GBDT和xgb的目标函数是不同的,同时针对其目标函数中的误差函数 L(θ) 的拟合方 ...

  6. 坐标下降+随机梯度下降

    坐标下降+随机梯度下降 坐标轴下降法(Coordinate Descent, CD)是一种迭代法,通过启发式的方法一步步的迭代求解函数的最小值,和梯度下降法(GD)不同的时候,坐标轴下降法是沿着坐标轴 ...

  7. 梯度下降之模拟退火、梯度下降之学习计划、牛顿法、拟牛顿法、共轭梯度法

    梯度下降之模拟退火.梯度下降之学习计划.牛顿法.拟牛顿法.共轭梯度法 目录

  8. 一维搜索、最速下降(梯度下降)与牛顿法(拟牛顿法)

    目录 一维搜索 黄金分割法 牛顿法 最速下降法 牛顿法与拟牛顿法 参考 一维搜索 最优化问题一般选择某一组变量,然后在满足一定的限制条件下,求出使目标值达到最优(最大或最小)的变量值.大部分时候,最优 ...

  9. 几种优化算法的读书笔记——梯度下降、牛顿法、拟牛顿法、随机梯度下降、AdaGrad、RMSProp、Adam及选择优化算法的建议

    文章目录 1 梯度下降 1.1 特点 1.2 思想 1.3 数学基础 1.4 具体算法 2 牛顿法和拟牛顿法 2.1 特点 2.2 牛顿法 2.2.1 数学基础 2.2.2 思想 2.2.3 具体算法 ...

最新文章

  1. Datawhale两岁啦!
  2. java-IO-基本输出输入流
  3. 7个重要内排序算法的实现以及实验比较
  4. PHP防SQL注入攻击
  5. 【DP】Table(CF232B)
  6. React Native获取设备信息组件
  7. [5] ADB 与应用交互
  8. 7.2图的存储结构(十字链表、邻接多重表、边集数组)
  9. oracle11g scn 补丁,Oracle11g中SCN与TimeStamp的相互转换
  10. 2016计算机知识点,2016年计算机一级考试知识点
  11. 右上角鼠标滑过展开收缩动画效果js代码的演示页面
  12. PHP 获取微视无水印源地址_小红书无水印视频解析下载|小红书在线去水印|小红书视频解析API接口...
  13. 应变计测轴扭矩 计算
  14. vue 路由守卫 解析
  15. 厦门大学研究生计算机复试分数线,厦门大学2017年硕士研究生复试分数线
  16. 个人注册网站域名怎么注册?能注册哪些?
  17. 股市前复权、后复权与不复权
  18. 素数的线性筛 欧拉函数
  19. Azure核心服务(VM)——>创建windows虚拟机并在此之上部署一个cms网站
  20. pytest接口自动化测试框架 | 用python代码测试接口

热门文章

  1. Linux 阻塞和非阻塞 IO 实验
  2. e420 thinkpad 开机黑屏_thinkpad E420开机黑屏主板门维修
  3. python运用三角学通过方位角仰角与距离计算三维坐标
  4. 文章详情页文章评论功能
  5. glusterfs搭建
  6. 权限控制框架 shiro
  7. python pyecharts 合并地图_Python pyecharts 绘制的交通拥堵情况地图
  8. 基于深度表征学习特征的抗癌肽预测
  9. 【C语言】C语言的简介
  10. Pyside2安装与基础操作