优化算法--SGD,batch SGD
优化算法–SGD,batch SGD
优化算法的目标函数是一个基于训练数据集的损失函数,优化的目标在于降低训练误差。在深度学习中主要面临两个挑战:局部最小值和鞍点。
梯度下降和SGD
多维梯度下降:目标函数的输入为向量,输出为标量。假设目标函数f:Rd→Rf: \mathbb{R}^d \rightarrow \mathbb{R}f:Rd→R的输入是一个ddd维向量x=[x1,x2,…,xd]⊤\boldsymbol{x} = [x_1, x_2, \ldots, x_d]^\topx=[x1,x2,…,xd]⊤。目标函数f(x)f(\boldsymbol{x})f(x)有关x\boldsymbol{x}x的梯度是一个由ddd个偏导数组成的向量:
∇xf(x)=[∂f(x)∂x1,∂f(x)∂x2,…,∂f(x)∂xd]⊤.\nabla_{\boldsymbol{x}} f(\boldsymbol{x}) = \bigg[\frac{\partial f(\boldsymbol{x})}{\partial x_1}, \frac{\partial f(\boldsymbol{x})}{\partial x_2}, \ldots, \frac{\partial f(\boldsymbol{x})}{\partial x_d}\bigg]^\top.∇xf(x)=[∂x1∂f(x),∂x2∂f(x),…,∂xd∂f(x)]⊤.
梯度中每个偏导数元素∂f(x)/∂xi\partial f(\boldsymbol{x})/\partial x_i∂f(x)/∂xi代表着fff在x\boldsymbol{x}x有关输入xix_ixi的变化率。通过梯度下降算法来不断降低目标函数fff的值:
x←x−η∇xf(x).\boldsymbol{x} \leftarrow \boldsymbol{x} - \eta\nabla_{\boldsymbol{x}} f(\boldsymbol{x}) .x←x−η∇xf(x).
随机梯度下降(stochastic gradient descent,SGD)减少了每次迭代的计算开销。在随机梯度下降的每次迭代中,我们随机均匀采样的一个样本索引i∈{1,…,n}i\in\{1,\ldots,n\}i∈{1,…,n},并计算梯度∇fi(x)\nabla f_i(\boldsymbol{x})∇fi(x)来迭代x\boldsymbol{x}x:
x←x−η∇fi(x).\boldsymbol{x} \leftarrow \boldsymbol{x} - \eta \nabla f_i(\boldsymbol{x}).x←x−η∇fi(x).
可以看到每次迭代的计算开销从梯度下降的O(n)\mathcal{O}(n)O(n)降到了常数O(1)\mathcal{O}(1)O(1)。值得强调的是,随机梯度∇fi(x)\nabla f_i(\boldsymbol{x})∇fi(x)是对梯度∇f(x)\nabla f(\boldsymbol{x})∇f(x)的无偏估计:
Ei∇fi(x)=1n∑i=1n∇fi(x)=∇f(x).E_i \nabla f_i(\boldsymbol{x}) = \frac{1}{n} \sum_{i = 1}^n \nabla f_i(\boldsymbol{x}) = \nabla f(\boldsymbol{x}).Ei∇fi(x)=n1i=1∑n∇fi(x)=∇f(x).
小批量随机梯度下降
在每一次迭代中,梯度下降使用整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降(batch gradient descent)。
小批量随机梯度下降随机均匀采样一个由训练数据样本索引组成的小批量Bt\mathcal{B}_tBt。我们可以通过重复采样(sampling with replacement)或者不重复采样(sampling without replacement)得到一个小批量中的各个样本。前者允许同一个小批量中出现重复的样本,后者则不允许如此,且更常见。对于这两者间的任一种方式,都可以使用
gt←∇fBt(xt−1)=1∣B∣∑i∈Bt∇fi(xt−1)\boldsymbol{g}_t \leftarrow \nabla f_{\mathcal{B}_t}(\boldsymbol{x}_{t-1}) = \frac{1}{|\mathcal{B}|} \sum_{i \in \mathcal{B}_t}\nabla f_i(\boldsymbol{x}_{t-1}) gt←∇fBt(xt−1)=∣B∣1i∈Bt∑∇fi(xt−1)
来计算时间步ttt的小批量Bt\mathcal{B}_tBt上目标函数位于xt−1\boldsymbol{x}_{t-1}xt−1处的梯度gt\boldsymbol{g}_tgt。这里∣B∣|\mathcal{B}|∣B∣代表批量大小,即小批量中样本的个数,是一个超参数。同随机梯度一样,重复采样所得的小批量随机梯度gt\boldsymbol{g}_tgt也是对梯度∇f(xt−1)\nabla f(\boldsymbol{x}_{t-1})∇f(xt−1)的无偏估计。给定学习率ηt\eta_tηt(取正数),小批量随机梯度下降对自变量的迭代如下:
xt←xt−1−ηtgt.\boldsymbol{x}_t \leftarrow \boldsymbol{x}_{t-1} - \eta_t \boldsymbol{g}_t.xt←xt−1−ηtgt.
基于随机采样得到的梯度的方差在迭代过程中无法减小,因此在实际中,(小批量)随机梯度下降的学习率可以在迭代过程中自我衰减或者每迭代若干次后将学习率衰减一次。如此一来,学习率和(小批量)随机梯度乘积的方差会减小。而梯度下降在迭代过程中一直使用目标函数的真实梯度,无须自我衰减学习率。
总结
当批量较小时,每次迭代中使用的样本少,这会导致并行处理和内存使用效率变低。这使得在计算同样数目样本的情况下比使用更大批量时所花时间更多。当批量较大时,每个小批量梯度里可能含有更多的冗余信息。为了得到较好的解,批量较大时比批量较小时需要计算的样本数目可能更多,例如增大迭代周期数。
优化算法--SGD,batch SGD相关推荐
- 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
Adam那么棒,为什么还对SGD念念不忘 (1) -- 一个框架看懂优化算法 机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着 ...
- 优化算法选择:SGD、SGDM、NAG、Adam、AdaGrad、RMSProp、Nadam
目录 优化算法通用框架 SGD 系列:固定学习率的优化算法 SGD SGD (with Momentum) = SGD-M SGD(with Nesterov Acceleration)= NAG 自 ...
- 大梳理!深度学习优化算法:从 SGD 到 AdamW 原理和代码解读
作者丨知乎 科技猛兽 极市平台 编辑 https://zhuanlan.zhihu.com/p/391947979 本文思想来自下面这篇大佬的文章: Juliuszh:一个框架看懂优化算法之异同 ...
- 【代码】优化算法BGD、SGD、Momentum、Adam算法python实现
目前优化算法主要用的就是梯度下降算法,在原始梯度下降的基础上变化出很多更加优秀的算法.发展历史为:BGD ⇒\Rightarrow⇒ SGD ⇒\Rightarrow⇒ SGDM ⇒\Rightarr ...
- 优化算法SGD/ASGD/AdaGrad/Adadelta/RMSprop/Adam/Adamax/SparseAdam/L-BFGS/Rprop
机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着丹药出炉了. 不过,当过厨子的都知道,同样的食材,同样的菜谱,但火候不一样了, ...
- SGD,Adam,momentum等优化算法比较
文章目录 SGD,Adam,momentum等优化算法总结 一.最基本的优化算法 1.SGD 2.Momentum 二.自适应参数的优化算法 1.Adagrad 2.RMSprop 3.Adam 三. ...
- Adam那么棒,为什么还对SGD念念不忘 (1) —— 一个框架看懂优化算法
机器学习界有一群炼丹师,他们每天的日常是: 拿来药材(数据),架起八卦炉(模型),点着六味真火(优化算法),就摇着蒲扇等着丹药出炉了. 不过,当过厨子的都知道,同样的食材,同样的菜谱,但火候不一样了, ...
- Adam 那么棒,为什么还对 SGD 念念不忘?一个框架看懂深度学习优化算法
作者|Juliuszh 链接 | https://zhuanlan.zhihu.com/juliuszh 本文仅作学术分享,若侵权,请联系后台删文处理 机器学习界有一群炼丹师,他们每天的日常是: 拿来 ...
- 深度学习优化算法的总结与梳理(从 SGD 到 AdamW 原理和代码解读)
作者丨科技猛兽 转自丨极市平台 本文思想来自下面这篇大佬的文章: Juliuszh:一个框架看懂优化算法之异同 SGD/AdaGrad/Adam https://zhuanlan.zhihu.com/ ...
- 优化算法SGD与Adam
说来惭愧,一直在用的两个经典的优化器,几行代码就完成了参数更新,但是却一直没有深入的了解其中的原理. improt torch ... optimizer = torch.optim.SGD(mode ...
最新文章
- LA3989女士的选择
- xa 全局锁_fescar锁设计和隔离级别的理解
- Android注册BroadcastReceiver的两种办法及其区别
- 数学--数论--组合数(卢卡斯+扩展卢卡斯)模板
- 优酷视频如何意见反馈?优酷视频怎么意见反馈
- absolute元素水平居中
- 4.9 利用对应的泛型替换Hashtable[转]
- 【SpringMVC框架】springmvc入门程序-环境搭建
- eclipse maven打包_我的Java Web之路47 - 使用Maven改造租房网工程
- Cannot drop the database ‘XXX’ because it is being used for replication.
- linux添加core文件位置,Linux生成core文件、core文件路径设置
- 【TS】1303- TypeScript 4.7 beta 发布,几个重要的更新
- 2018计算机中文期刊影响因子排名,2018期刊影响因子排名(1)
- C++获取、设置鼠标坐标并移动鼠标
- Alarmmanager制作简单闹钟功能
- 爬取中国所有银行官网网址信息
- MYSQL基础之浅聊 变量
- 计算机考研abc区划分,研究生地区分类-考研ABC区域的划分考研ABC区域的划分, – 手机爱问...
- matlab的各种数据读取(txt,dat,mat等格式)
- 越来越注重手机拍照的时代,OPPO R11凭借哪些因素占领了市场?