1引言

机器学习是指通过计算机学习数据中的内在规律性信息,获得新的经验和知识,以提高计算机的智能性,使计算机能够像人那样去决策[1]。通常我们在学习一个模型时首先要收集大量关于这个问题的数据,其目标属性作为样本标签是已知的,记为y.其次根据实际问题建立预测模型,预测模型对样本标签的预测为h(x),显然y与h(x)之间的误差越小越好,这个误差被称为损失函数。因此,机器学习中的许多问题都可以归结为:计算损失函数和的近似最小值问题。

             (1)

其中表示训练集的数据,表示训练集所含样本点的个数,表示第个样本点的损失函数,表示所有样本点的平均损失函数[2]。我们要解决的问题是寻找模型中的最优参数使得尽可能的小,梯度下降算法常用于解决此问题。特别的,本文中所讨论的梯度下降算法基于3个前提:针对有限训练集;为光滑函数;是强凸的。

2梯度下降算法

常见的训练学习算法有全梯度下降算法(Full gradient descent),随机梯度下降算法(Stochastic gradient descent),随机平均梯度下降算法(Stochastic average gradient descent)和小批量梯度下降算法(Mini-batch gradient descent),它们都是为了正确地调节权重向量,通过为每个权重计算一个梯度,从而更新权值,使目标函数尽可能最小化。其差别在于样本的使用方式不同。

2.1全梯度下降算法(FG)

计算训练集所有样本误差,对其求和再取平均值作为目标函数。权重向量沿其梯度相反的方向移动,从而使当前目标函数减少得最多。将全体训练样本的目标函数看做是一种在权重高维空间的丘陵景观,最小化所有样本的目标函数即为寻找丘陵最低洼的地方。负梯度方向表示丘陵这一点的最速下降方向,沿这一方向接近最小值,那里的输出平均损失函数值最低[3]。其迭代形式为

                 (2)

用来实现的最小值,则此方法在固定步长下可实现线性收敛速度[4][5]

这里,且取决于的数值情况。除快速的收敛速度,全梯度算法并不具吸引力,因为当n很大时,迭代成本与n线性相关[6]。

2.2随机梯度下降算法(SG)

由于FG每迭代更新一次权重都需要计算所有样本误差,而实际问题中经常有上亿的训练样本,故效率偏低,且容易陷入局部最优解,因此提出了随机梯度下降算法。其每轮计算的目标函数不再是全体样本误差,而仅是单个样本误差,即每次只代入计算一个样本目标函数的梯度来更新权重,再取下一个样本重复此过程,直到损失函数值停止下降或损失函数值小于某个可以容忍的阈值。此过程简单,高效,通常可以较好地避免更新迭代收敛到局部最优解。其迭代形式为

                                                     (3)

其中是步长,步长序列为是指与相关的一个的取值,。随机梯度是真实梯度的无偏估计。随机梯度下降算法的迭代成本独立于n,且可实现次线性收敛速度

这里的期望取决于。因为算法只能通过对目标梯度的无偏估计才能接近函数本身,故这个收敛速度对于强凸优化问题是最优的[2]。

2.3随机平均梯度下降算法(SAG)

虽然避开了运算成本大的问题,但对于大数据训练而言,SG效果常不尽如人意,因为每一轮梯度更新都完全与上一轮的数据和梯度无关。随机平均梯度算法克服了这个问题,在内存中为每一个样本都维护一个旧的梯度,随机选择第个样本来更新的梯度此样本的梯度,其他样本的梯度保持不变,然后求得所有梯度的平均值,进而更新了参数.如此,每一轮更新仅需计算一个样本的梯度,计算成本等同于SG,但收敛速度快得多[2]。其迭代形式为

                                           (4)

每次迭代都随机选择训练样本,样本序号为,且有

2.4小批量梯度下降算法(mini-bantch)

小批量梯度下降算法是FG和SG的折中方案,在一定程度上兼顾了以上两种方法的优点。每次从训练样本集上随机抽取一个小样本集,在抽出来的小样本集上采用FG迭代更新权重。被抽出的小样本集所含样本点的个数称为batch_size,通常设置为2的幂次方,更有利于GPU加速处理[7]。特别的,若batch_size=1,则变成了SG;若batch_size=n,则变成了FG.其迭代形式为

                                                   (5)

其中代表所选批次的batch_size,表示所选批次的第个样本点的损失函数。

在实际操作中,常将全体训练样本集随机分组,每组样本数量相等,一般为每组 10 ~ 100 个样本,随机抽取其中一组,组内使用FG使得权值更新,至此称为完成一轮更新。然后重新随机分组,继续下一轮更新,一般迭代更新30~200轮[8]。每完成一轮迭代,可以将步长乘一个小于1的常数,使学习率逐渐变小,对避免局部最优解有一定效果。

3 实验

3.1模型建立

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

建立预测模型

                                           (6)

其中,y为数据标签,y=1表示“年收入大于50000美元”,y=0表示“年收入小于等于50000美元”。表示14个特征数据,为模型参数,也是我们要训练的目标参数。由于逻辑回归的极大似然函数越大代表回归效果越好,故使用负的极大似然函数做为损失函数,即

                                     (7)

目标函数为

                                                                (8)

3.2实验结果及分析

使用python软件对以上数学模型进行编程,在参数更新环节分别使用FG,SG,SAG和mini-batch.以下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所需要的时间最久。当平均损失函数值达到时FG,SG,SAG,mini-batch所需的时间分别为:25.2s,17.7s,18.2s,18.5s。

综合分析六幅图我们得出以下结论:(1)FG方法虽然在模型训练过程中迭代次数最多,但由于它每轮更新都要使用全体数据集,故花费的时间成本最多,内存存储最大。(2)SAG在训练初期表现不佳,优化速度较慢。这是因为我们常将初始梯度设为0,而SAG每轮梯度更新都结合了上一轮梯度值。(3)综合考虑迭代次数和运行时间,SG表现性能都很好,能在训练初期快速摆脱初始梯度值,快速将平均损失函数降到很低。但要注意,在使用SG方法时要慎重选择步长,否则容易错过最优解。(4)mini-batch结合了SG的“胆大”和FG的“心细”,从6幅图像来看,它的表现也正好居于SG和FG二者之间。在目前的机器学习领域,mini-batch是使用最多的梯度下降算法,正是因为它避开了FG运算效率低成本大和SG收敛效果不稳定的缺点。

4几种优化梯度算法

基于四种基本的梯度下降算法,许多研究者结合一些新思想,提出了几种优化梯度算法。

4.1动量(Momentum)

其迭代形式为:

其中是一些确定的数,是惯性造成的冲量[9]。在峡谷地区(某些方向较另一些方向上陡峭的多,常见于局部极值点),SG方向会在这些地方附近震荡,从而导致收敛速度变慢,加动量项法就可解决这个问题。在更新模型参数时,对于那些当前梯度方向与上一次梯度方向相同的参数,应进行加强,即在这些方向上更快了,否则进行削减。因此可获地更快的收敛速度,减少震荡。动量法可以提高实际性能,它需要一个递减的步长序列,但在理论上目前还未证明它的收敛速度更快。

SG可用动量方法改写为:

                                                   (9)

SAG可用动量方法改写为:

                          (10)

4.2梯度平均(Grandient Averaging)

其迭代形式为:

                                      (11)

这个形式与SAG的(4)式相似,但它使用了之前所有求得的梯度[10]。这种方法对于一些固定步长可以达到收敛效果,也可以在一定程度上提升收敛速度,但未能超过[11]

4.3迭代平均(Iterate Averaging)

其迭代形式为:

                                    (12)

梯度平均法将前面所有迭代的前进方向(梯度)求平均,而迭代平均法则是将前面所有点的位置求平均[12][13][14]。

4.4 FG的随机版本(Stochastic Versions of FG Method)

对于光滑函数,有许多可用的方法可以加快FG的收敛速度,比如加速全梯度法(AFD)和加速随机梯度法(AGD),他们将收敛速度分为确定和不确定的两个部分,在基于二次逼近的经典技术比如非线性共轭梯度法和类牛顿法的帮助下,可以提高确定部分的可靠性[15][16]。

4.5固定步长(Constant Step Size)

如果SG迭代使用一个固定步长(而不是一个递减的步长序列),那么收敛速度可被分为两部分。第一部分依赖于K,并线性收敛到0.第二部分独立于k,且无法收敛到0.事实上,伴随固定步长的SG方法只能在极强的假设下达到收敛,这种假设是之间的某种关系。这与SAG形成了对比,SAG可使用固定步长达到最优解,并可在没有附加假设的情况下达到线性收敛[17][18]。

4.6加速方法(Accelerated Methods)

它在使用固定步长的同时吸取了SG方法快速收敛的特点。特别的,此方法在默认情况下使用固定步长,只有当连续两轮梯度的内积为负时才减少步长。这使得他可能会实现周期性的线性收敛,但从全局来看仍是次线性的[19][20]。

4.7混合方法(Hybrid Methods)

一些作者寻求从SG到FG的转化,以实现线性收敛。Bertsekas提出按照一些特殊的权重循环使用数据,从而在二次强凸函数上实现线性收敛。近期提出的另一种策略是,在函数集上选出一些作为函数批次,随着迭代的进行,函数批次的规模增大,在这些批次上使用SG方法,将一个批次内的均值作为本轮最终取值[21]。

4.8增量聚合梯度(Incremental Aggregated Gradient)

IAG算法与SAG算法相似,区别在于,IAG对于样本函数序号的选择是顺序的,而SAG则是随机的。在实际实验中,IAG的表现与FG相似,SAG优于它们[22]。

  1. 张润,王永滨.机器学习及其算法和发展研究[J].中国传媒大学学报(自然科学版),2016,23(02):10-18+24.
  2. Le Roux N, Schmidt M W, Bach F R. A Stochastic Gradient Method with an Exponential Convergence Rate for Finite Training Sets[C]//NIPS. 2012: 2672-2680.
  3. Ng A. Machine learning[EB /OL]. ( 2014) : http: / /openclassroom. stanford. edu /MainFolder/CoursePage. php? course = MachineLearning.
  4. C. H. Teo, Q. Le, A. J. Smola, and S. V. N. Vishwanathan. A scalable modular convex solver for regularized risk minimization. KDD, 2007.
  5. M. A. Cauchy. M´ethode g´en´erale pour la r´esolution des syst`emes d’´equations simultan´  ees. Comptesrendus des s´eances de l’Acad´emie des sciences de Paris, 25:536–538, 1847.
  6. Y. Nesterov. Introductory lectures on convex optimization: A basic course. Springer, 2004.
  7. Li M, Zhang T, Chen Y, et al. Efficient mini-batch training for stochastic optimization[C]//Proceedings of the 20th ACM SIGKDD international conference on Knowledge discovery and data mining. ACM, 2014: 661-670.
  8. Duda R O,Hart P E. Pattern classification and scene analysis[M]. Boston: Wiley,1973.
  9. P. Tseng. An incremental gradient(-projection) method with momentum term and adaptive stepsize rule.SIAM Journal on Optimization, 8(2):506–531, 1998.
  10. Y. Nesterov. Primal-dual subgradient methods for convex problems. Mathematical programming, 120(1):221–259, 2009.
  11. L. Xiao. Dual averaging methods for regularized stochastic learning and online optimization. Journal of Machine Learning Research, 11:2543–2596, 2010.
  12. B. T. Polyak and A. B. Juditsky. Acceleration of stochastic approximation by averaging. SIAM Journal on Control and Optimization, 30(4):838–855, 1992.
  13. H. J. Kushner and G. Yin. Stochastic approximation and recursive algorithms and applications. Springer-Verlag, Second edition, 2003.
  14. E. Hazan and S. Kale. Beyond the regret minimization barrier: an optimal algorithm for stochastic strongly-convex optimization. COLT, 2011.
  15. Y. Nesterov. A method for unconstrained convex minimization problem with the rate of convergence O(1/k2). Doklady AN SSSR, 269(3):543–547, 1983.
  16. N.N. Schraudolph. Local gain adaptation in stochastic gradient descent. ICANN, 1999.
  17. A. Nedic and D. Bertsekas. Convergence rate of incremental subgradient algorithms. In Stochastic Optimization: Algorithms and Applications, pages 263–304. Kluwer Academic, 2000.
  18. M.V. Solodov. Incremental gradient algorithms with stepsizes bounded away from zero. Computational Optimization and Applications, 11(1):23–35, 1998.
  19. H. Kesten. Accelerated stochastic approximation. Annals of Mathematical Statistics, 29(1):41–59, 1958.
  20. B. Delyon and A. Juditsky. Accelerated stochastic approximation. SIAM Journal on Optimization, 3(4):868–881, 1993.
  21. M. P. Friedlander and M. Schmidt. Hybrid deterministic-stochastic methods for data fitting. SIAM Journal of Scientific Computing, 34(3):A1351–A1379, 2012.
  22. D. P. Bertsekas. A new class of incremental gradient methods for least squares problems. SIAM Journal on Optimization, 7(4):913–926, 1997.

梯度下降算法总结 (FG,SG,SAG,mini-batch,Momentum等等)相关推荐

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

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

  2. pytorch手动实现梯度下降法,随机梯度法--基于logistic Regression并探索Mini batch作用

    简述 基于这次凸优化的大项目作业. 下面会围绕着通过logistic Regression来做MNIST集上的手写数字识别~ 以此来探索logistic Regression,梯度下降法,随机梯度法, ...

  3. Mini batch梯度下降法(吴恩达深度学习视频笔记)

    深度学习并没有在大数据中表现很好,但是我们可以利用一个巨大的数据集来训练神经网络,而在巨大的数据集基础上进行训练速度很慢,因此进行优化算法能够很大程度地增加训练速度,提升效率. 本节,我们将谈谈Min ...

  4. 梯度下降算法的正确步骤_梯度下降算法

    梯度下降算法的正确步骤 Title: What is the Gradient Descent Algorithm and its working. 标题:什么是梯度下降算法及其工作原理. Gradi ...

  5. 深度学习:梯度下降算法改进

    学习目标 目标 了解深度学习遇到的一些问题 知道批梯度下降与MiniBatch梯度下降的区别 知道指数加权平均的意义 知道动量梯度.RMSProp.Adam算法的公式意义 知道学习率衰减方式 知道参数 ...

  6. 梯度下降算法(Gradient Descent)

    一.定义      梯度下降法(Gradient desent) 是一个一阶最优算法,通常也称为最速下降法.要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方 ...

  7. 【Machine Learning】梯度下降算法介绍_02

    文章目录 前言 一.梯度 1.1 导数 1.2 偏导数 二.举例梯度下降 三.训练样本 四.梯度下降 4.1 量梯度下降(Batch Gradient Descent,BGD) 4.2 随机梯度下降( ...

  8. 局部最优、梯度消失、鞍点、海森矩阵(Hessian Matric)、批梯度下降算法(btach批梯度下降法BGD、小批量梯度下降法Mini-Batch GD、随机梯度下降法SGD)

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) BATCH_SIZE大小设置对训练耗时的影响:1.如果当设置B ...

  9. 梯度下降算法_梯度下降算法(Gradient Descent)的原理和实现步骤

    大部分的机器学习模型里有直接或者间接地使用了梯度下降的算法.虽然不同的梯度下降算法在具体的实现细节上会稍有不同,但是主要的思想是大致一样的.梯度下降并不会涉及到太多太复杂的数学知识,只要稍微了解过微积 ...

  10. 【机器学习】梯度下降算法原理和实现

    梯度下降是许多机器学习模型中都会直接或间接使用的算法. 什么是梯度 以二元函数为例,假设其中每个变量都具有连续的一阶偏导数 和 ,则这两个偏导数构成向量:,即为该二元函数的梯度向量,一般记作.根据这个 ...

最新文章

  1. Hadoop Backup Node
  2. springboot mysql 事务_springBoot(14):使用SQL关系型数据库-事务处理
  3. java连服务器mysql报错_tomcat程序连接服务器mysql数据库报错
  4. 博客使用的CSS代码备份
  5. matlab设置随机流的种子
  6. [深度学习] 自然语言处理 --- Bert开发实战 (Transformers)
  7. Python获取电脑硬件信息及状态的实现方法
  8. 我的WCF之旅(4):WCF中的序列化[下篇]
  9. signature=172bb3bb7ef43cff1707b389c78d27cb,Signatures? of suicide
  10. linux 软件下载后无法安装不了怎么办,Firefox无法安装怎么办
  11. OpenCV-理想高通低通滤波器(C++)
  12. Vue生命周期钩子函数
  13. Win7系统能用一键装机的方式安装win10吗?
  14. python爬虫之数据存储(四):MySQL数据库
  15. 第四周问题:Tu Hao's Problem
  16. Robot Framework Selenium UI自动化测试 --- 实战篇
  17. android 禁用触摸屏,Touch Protector-安卓禁用手机触摸屏软件
  18. informix GBase锁表处理 | ISAM error: key value locked
  19. SQL Server 2016下载安装教程
  20. Python的@装饰器是干什么用的?

热门文章

  1. html可以用坐标画svg图吗,html5教程-SVG基础 SVG坐标系统和图形转换
  2. java json 打印出来_如何使用Java漂亮地打印现有的JSON数据?
  3. iterator接口
  4. 如何不做老板手中一次性筷子?
  5. Linux进程、线程、任务调度(1)贵在坚持
  6. spring boot 2使用Mybatis多表关联查询
  7. python基础学习笔记(七)
  8. linux下vmware的安装、物理分区使用及卸载
  9. 'C'is not a valid file-based resource name character: File-based resource names must contain onl解决方法
  10. java的注解定义map_java – MapStruct:丰富映射注释以定义自定义映射器