梯度下降法算法比较和进一步优化

常见的梯度下降算法有:

  • 全梯度下降算法(Full gradient descent),
  • 随机梯度下降算法(Stochastic gradient descent),
  • 小批量梯度下降算法(Mini-batch gradient descent),
  • 随机平均梯度下降算法(Stochastic average gradient descent)

它们都是为了正确地调节权重向量,通过为每个权重计算一个梯度,从而更新权值,使目标函数尽可能最小化。其差别在于样本的使用方式不同。

我们通过一个数据集案例进行对比,查看他们的区别

1 算法比较

为了比对四种基本梯度下降算法的性能,我们通过一个逻辑二分类实验来说明。本文所用的Adult数据集来自UCI公共数据库(http://archive.ics.uci.edu/ml/datasets/Adult)。 数据集共有15081条记录,包括“性别”“年龄”“受教育情况”“每周工作时常”等14个特征,数据标记列显示“年薪是否大于50000美元”。我们将数据集的80%作为训练集,剩下的20%作为测试集,使用逻辑回归建立预测模型,根据数据点的14个特征预测其数据标记(收入情况)。

以下6幅图反映了模型优化过程中四种梯度算法的性能差异。

在图1和图2中,横坐标代表有效迭代次数,纵坐标代表平均损失函数值。图1反映了前25次有效迭代过程中平均损失函数值的变化情况,为了便于观察,图2放大了第10次到25次的迭代情况。

从图1中可以看到,四种梯度算法下,平均损失函数值随迭代次数的增加而减少FG的迭代效率始终领先,能在较少的迭代次数下取得较低的平均损失函数值。FG与SAG的图像较平滑,这是因为这两种算法在进行梯度更新时都结合了之前的梯度;SG与mini-batch的图像曲折明显,这是因为这两种算法在每轮更新梯度时都随机抽取一个或若干样本进行计算,并没有考虑到之前的梯度。

从图2中可以看到**虽然四条折现的纵坐标虽然都趋近于0,但SG和FG较早,mini-batch最晚。**这说明如果想使用mini-batch获得最优参数,必须对其进行较其他三种梯度算法更多频次的迭代。

在图3,4,5,6中,横坐标表示时间,纵坐标表示平均损失函数值。

从图3中可以看出使用四种算法将平均损失函数值从0.7降到0.1最多只需要2.5s,由于本文程序在初始化梯度时将梯度设为了零,故前期的优化效果格外明显。其中SG在前期的表现最好,仅1.75s便将损失函值降到了0.1,虽然SG无法像FG那样达到线性收敛,但在处理大规模机器学习问题时,为了节约时间成本和存储成本,可在训练的一开始先使用SG,后期考虑到收敛性和精度可改用其他算法。

从图4,5,6可以看出,随着平均损失函数值的不断减小,SG的性能逐渐反超FG,FG的优化效率最慢,即达到相同平均损失函数值时FG所需要的时间最久。

综合分析六幅图我们得出以下结论:

(1**)FG方法由于它每轮更新都要使用全体数据集,故花费的时间成本最多,内存存储最大。**

(2)SAG在训练初期表现不佳,优化速度较慢。这是因为我们常将初始梯度设为0,而SAG每轮梯度更新都结合了上一轮梯度值。

(3)综合考虑迭代次数和运行时间,SG表现性能都很好,能在训练初期快速摆脱初始梯度值,快速将平均损失函数降到很低。但要注意,在使用SG方法时要慎重选择步长,否则容易错过最优解。

(4)mini-batch结合了SG的“胆大”和FG的“心细”,从6幅图像来看,它的表现也正好居于SG和FG二者之间。在目前的机器学习领域,mini-batch是使用最多的梯度下降算法,正是因为它避开了FG运算效率低成本大和SG收敛效果不稳定的缺点。

2 梯度下降优化算法

以下这些算法主要用于深度学习优化

  • 动量法

    • 其实动量法(SGD with monentum)就是SAG的姐妹版
    • SAG是对过去K次的梯度求平均值
    • SGD with monentum 是对过去所有的梯度求加权平均
  • Nesterov加速梯度下降法
    • 类似于一个智能球,在重新遇到斜率上升时候,能够知道减速
  • Adagrad
    • 让学习率使用参数
    • 对于出现次数较少的特征,我们对其采用更大的学习率,对于出现次数较多的特征,我们对其采用较小的学习率。
  • Adadelta
    • Adadelta是Adagrad的一种扩展算法,以处理Adagrad学习速率单调递减的问题。
  • RMSProp
    • 其结合了梯度平方的指数移动平均数来调节学习率的变化。
    • 能够在不稳定(Non-Stationary)的目标函数情况下进行很好地收敛。
  • Adam
    • 结合AdaGrad和RMSProp两种优化算法的优点。
    • 是一种自适应的学习率算法

参考链接:[https://blog.csdn.net/google19890102/article/details/69942970]

梯度下降法算法比较和进一步优化相关推荐

  1. 梯度下降:全梯度下降算法(FG)、随机梯度下降算法(SG)、小批量梯度下降算法(mini-batch)、随机平均梯度下降算法(SAG)。梯度下降法算法比较和进一步优化。

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 2.2 梯度下降(Gradient Descent) 2.2. ...

  2. 实现线性回归的梯度下降法算法,解决糖尿病预测问题,输出mse和R2的值。

    实现线性回归的梯度下降法算法,解决糖尿病预测问题,输出mse和R2的值. 以下为糖尿病的实验报告 一.问题描述 实现线性回归的梯度下降法算法,解决糖尿病预测问题,输出mse和R2的值. 二.实验目的 ...

  3. 指数加权平均、动量梯度下降法、RMSprop、Adam优化算法

    目录 1.指数加权平均(exponentially weighted averages) 这里有一年的温度数据. 如果想计算温度的趋势,也就是局部平均值(local average),或者说移动平均值 ...

  4. 机器学习系列手记(七):优化算法之随机梯度下降法

    优化算法 随机梯度下降法 在机器学习中,优化问题的目标函数通常可以表示成       其中 θ\thetaθ 是待优化的模型参数, xxx 是模型输入, f(x,θ)f(x,\theta)f(x,θ) ...

  5. 机器学习中的梯度下降法

    1. 机器学习中为什么需要梯度下降 梯度下降是机器学习中常见优化算法之一,梯度下降法有以下几个作用: (1)梯度下降是迭代法的一种,可以用于求解最小二乘问题. (2)在求解机器学习算法的模型参数,即无 ...

  6. 梯度下降法Gradient Descent深度学习 机器学习

    梯度下降法 在求解机器学习算法的模型参数,即无约束优化问题时,梯度下降(Gradient Descent)是最常采用的方法之一,梯度下降法是一种一阶优化算法,另一种常用的方法是最小二乘法. 求偏导数 ...

  7. 梯度下降 最小二乘法 matlab,最小二乘法和梯度下降法的理解

    最小二乘法 在线性回归中,听的最多的应该算是最小二乘法了.最小二乘法在具体实现过程中保留核心思想的同时,会在算法上进行不同程度的改进,因此,最小二乘法有很多演变体,例如:递推最小二乘法,加权最小二乘法 ...

  8. python机器学习库sklearn——SGD梯度下降法

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  9. 随机梯度下降(SGD)与经典的梯度下降法的区别

    随机梯度下降(SGD)与经典的梯度下降法的区别 经典的优化方法,例如梯度下降法,在每次迭代过程中需要使用所有的训练数据,这就给求解大规模数据优化问题带来挑战. 知识点:随机梯度下降法(SGD).小批量 ...

最新文章

  1. 2018-2019-1 20189204《Linux内核原理与分析》第三周作业
  2. 新版PyTorch发布!新增TorchScript API,扩展ONNX导出……4大功能更新值得关注
  3. JavaSE项目之聊天室swing版
  4. 简单的学习心得:网易云课堂Android开发第六章SQLite与ContentProvider
  5. C# 通过正则表达式来限制控件输入有效性
  6. php magento 开发,php – Magento:如何将配置更改从开发环境迁移到生产环境?
  7. 用户输入的数是否为合数php,php怎么判断一个数是不是素数?
  8. 安装exchange
  9. xshell无法删除输入_xshell5卸载不了怎么办?xshell5软件卸载方法及无法卸载的解决方法...
  10. 英雄联盟血条效果Shader
  11. python特殊符号_Python一行代码过滤标点符号等特殊字符
  12. 开发一流Android SDK
  13. Revealing ecosystem services relationships and their driving factors for five basins of Beijing (2)
  14. 文件的打开方式怎么用计算机,电脑怎样修改文件默认打开方式
  15. IDEA报错: Port already in use: 1099
  16. mybatis查询更新
  17. 如何使用云服务器?3分钟教会!
  18. 巧为tomcat插件配置log4j日志,解决未报错启动不成功
  19. 聊聊我当年在培训学校做开发的经历
  20. Spring系列之Spring Web MVC-20

热门文章

  1. oracle数据库导出灰色_Oracle数据库导入导出命令总结
  2. Dual Contrastive Learning: Text Classification via Label-Aware Data Augmentation 阅读笔记
  3. AutoCAD二次开发:ObjectArx下的两种命令注册方式
  4. Win7安装VMware
  5. 深入机器学习系列之:隐式狄利克雷分布(1)
  6. SpringBoot设置网站页面小图标——Favicon
  7. [No000026]365种创业、办公、和生活成长的精华资源
  8. 联想台式机Windows 7系统设置双显示器输出
  9. 余秋雨文选——关于中年
  10. 五、《图解HTTP》报文首部和HTTP缓存