随机梯度下降

  • 几乎所有的深度学习算法都用到了一个非常重要的算法:随机梯度下降(stochastic gradient descent,SGD)
  • 随机梯度下降是梯度下降算法的一个扩展

机器学习中一个反复出现的问题:

​ 好的泛化需要大的训练集,但是大的训练集的计算代价也更大

机器学习算法中的代价函数通常可以分解成每个样本的代价函数的总和。

训练数据的负条件对数似然函数可以写成:
\[
J(\theta)=E_{x,y}L(x,y,\theta)=\frac1m\sum_{i=1}^{m}L(x^{(i)},y^{(i)},\theta)
\]
其中\(L\)是每个样本的损失\(L(x,y,\theta)=-log\ p(y|x;\theta)\)

​ 对于这些相加的代价函数,梯度下降需要计算
\[
\bigtriangledown_{\theta}J(\theta)=\frac1m\sum_{i=1}^{m}\bigtriangledown_{\theta}L(x^{(i)},y^{(i)},\theta)
\]
这个运算的计算代价是\(O(m)\)

随机梯度下降的核心:梯度是期望

期望可以使用小规模的样本近似估计

具体操作步骤

在算法的每一步,我们从训练样本集中均匀抽出一小批量(minibatch)样本\(B=\{x^{(1)},x^{(2)},x^{(3)},...,x^{(m^{'})}\}\)。小样本批量的数目\(m^{’}\)通常是一个相对较小的数,从一到几百。重要的是,当训练集大小\(m\)增长时,\(m^{’}\)通常是固定的。我们可能在拟合几十亿的样本时,每次更新计算只用到几百个样本。

​ 梯度的估计可以表示成:
\[
g = \frac{1}{m^{'}}\sum_{i=1}^{m^{'}}\bigtriangledown_{\theta}L(x^{(i)},y^{(i)},\theta)
\]
使用来自小批量\(B\)的样本。然后,随机梯度下降算法使用如下的梯度下降估计:
\[
\theta \leftarrow \theta-\varepsilon g
\]
其中,\(\varepsilon\)是学习率。

​ 梯度下降往往被认为很慢或不可靠。以前,将梯度下降应用到非凸优化问题被认为很鲁莽或没有原则。优化算法不一定能保证在合理的时间内达到一个局部最小值,但它通常能及时地找到代价函数一个很小的值,并且是有用的。

​ 随机梯度下降在深度学习之外有很多重要的应用。它是在大规模数据上训练大型线性模型的主要方法。对于规定大小的模型,每一步随机梯度下降更新的计算量不取决于训练集的大小\(m\)。在实践中,当训练集大小增长时,我们通常会随训练集规模增大而增加。然而,当m趋向于无穷大时,该模型最终会在随机梯度下降抽样完训练集上的所有样本之前收敛到可能的最优测试误差。继续增加\(m\)不会延长达到模型可能的最优测试误差的时间。从这点来看,我们可以认为用SGD训练模型的渐进代价是关于\(m\)的函数的\(O(1)\)级别。

​ 在深度学习兴起之前,学习非线性模型的主要方法是结合核技巧的线性模型。很多核学习算法需要构建一个\(m\times m\)的矩阵\(G_{i,j}=k(x^{(i)},x^{(j)})\)。构建这个矩阵的计算量是\(O(m^2)\)。当数据集是几十亿个样本时,这个计算量是不能接受的。在学术界,深度学习从2006年开始受到关注的原因是,在数以万计样本的中等规模数据集上,深度学习在新样本上比当时很多热门算法泛化得更好。不久后,深度学习在工业界收到了更多的关注,因为其提供了一种训练大数据集上的非线性模型的可扩展方式。

深度学习笔记之【随机梯度下降(SGD)】的更多相关文章

  1. 深度学习必备:随机梯度下降(SGD)优化算法及可视化

    补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...

  2. Pytorch_第七篇_深度学习 (DeepLearning) 基础 [3]---梯度下降

    深度学习 (DeepLearning) 基础 [3]---梯度下降法 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数" ...

  3. 批量梯度下降(BGD)、随机梯度下降(SGD)以及小批量梯度下降(MBGD)的理解

      梯度下降法作为机器学习中较常使用的优化算法,其有着三种不同的形式:批量梯度下降(Batch Gradient Descent).随机梯度下降(Stochastic Gradient Descent ...

  4. 优化-最小化损失函数的三种主要方法:梯度下降(BGD)、随机梯度下降(SGD)、mini-batch SGD

    优化函数 损失函数 BGD 我们平时说的梯度现将也叫做最速梯度下降,也叫做批量梯度下降(Batch Gradient Descent). 对目标(损失)函数求导 沿导数相反方向移动参数 在梯度下降中, ...

  5. 吴恩达深度学习:2.3梯度下降Gradient Descent

    1.用梯度下降算法来训练或者学习训练集上的参数w和b,如下所示,第一行是logistic回归算法,第二行是成本函数J,它被定义为1/m的损失函数之和,损失函数可以衡量你的算法的效果,每一个训练样例都输 ...

  6. 梯度下降GD,随机梯度下降SGD,小批量梯度下降MBGD

    阅读过程中的其他解释: Batch和miniBatch:(广义)离线和在线的不同

  7. 【深度学习】线性回归(Linear Regression)——原理、均方损失、小批量随机梯度下降

    1. 线性回归 回归(regression)问题指一类为一个或多个自变量与因变量之间关系建模的方法,通常用来表示输入和输出之间的关系. 机器学习领域中多数问题都与预测相关,当我们想预测一个数值时,就会 ...

  8. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)

    深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam) 深度学习笔记(一):logistic分类 深度学习笔记(二):简单神经网络,后向传播算法及实现 ...

  9. AI 随机梯度下降(SGD)

    随机梯度下降(stochastic gradient descent) 梯度是期望 计算梯度耗时太长

随机推荐

  1. 「七天自制PHP框架」应用:Model外键链接

    这里以行政区数据为例: 一级行政区数据范例: 二级行政区范例: 三级行政区范例: 在Model层建立三个Model class ProvinceModel extends Model{ public ...

  2. 【Nginx】修改响应头,根据不同请求IP重定向到不同IP

    背景: 使用CAS登录的过程中会涉及到三次重定向,如果在同一个局域网内,是没有任何问题的,但如果涉及到跨网访问,这个问题就比较蛋疼了. 解决思路: 通过Nginx对要访问的系统进行代理,根据请求IP来 ...

  3. 【有上下界网络流】【ZOJ】2314 Reactor Cooling

    [算法]有上下界网络流-无源汇(循环流) [题解]http://www.cnblogs.com/onioncyc/p/6496532.html //未提交 #include<cstdio> ...

  4. 【BZOJ】1023: [SHOI2008]cactus仙人掌图 静态仙人掌(DFS树)

    [题意]给定仙人掌图(每条边至多在一个简单环上),求直径(最长的点对最短路径).n<=50000,m<=10^7. [算法]DFS树处理仙人掌 [题解]参考:仙人掌相关问题的处理方法(未完 ...

  5. [网站安全] [实战分享]WEB漏洞挖掘的一些经验分享

    WEB漏洞有很多种,比如SQL注入,比如XSS,比如文件包含,比如越权访问查看,比如目录遍历等等等等,漏洞带来的危害有很多,信息泄露,文件上传到GETSHELL,一直到内网渗透,这里我想分享的最主要的 ...

  6. 蓝色的cms网站后台管理模板——后台

    链接:http://pan.baidu.com/s/1c138cwC 密码:9vy9

  7. 残差网络(Residual Network)

    一.背景 1)梯度消失问题 我们发现很深的网络层,由于参数初始化一般更靠近0,这样在训练的过程中更新浅层网络的参数时,很容易随着网络的深入而导致梯度消失,浅层的参数无法更新. 可以看到,假设现在需要更 ...

  8. JavaScript实现水平进度条拖拽效果

    <html> <head> <meta charset="UTF-8"> <title>Document</title> ...

  9. Producer Flow Control 和 vmQueueCursor

    ActiveMQ可以开启或关闭生产者流量控制Producer Flow Control ,基本原理是producer 发送一条消息会收到broker返回的ack响应,当磁盘或内存快满的时候broker ...

  10. Struts2使用

    Struts2是一个基于MVC设计模式的Web应用框架.在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互.Struts 2是Struts的下一代产品,是在 ...