快开学了,今天一天都静不下心。不如趁着美好的黄昏来更一篇叭。(写了整整一晚上也是没谁了)

惯例推音乐:今天是一首温柔的迷幻摇滚,我正在摇头晃脑的写

希望听到这首歌的盆友们也能摇头晃脑的看完这篇博客(´^`)

歌手:椅子乐团 The Chairs

歌名:Rollin’ On

❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤分割线

1.真实模型的梯度更新规则

在上一篇里我们说到如何用vvv来代替所有自变量,那么用vvv表示的模型看懂了,我们就可以把男女主角权重www和偏置bbb换上场了。还记得上次的式子吗?

我们将这个式子描述为位置变量vvv的变化,现在将位置变量vjv_{j}vj​分解为两个分量,即wkw_{k}wk​和blb_{l}bl​。

因此梯度向量▽C\bigtriangledown C▽C也就有了相应的分量,即∂C/∂wk\partial C/\partial w_{k}∂C/∂wk​和∂C/∂bl\partial C/\partial b_{l}∂C/∂bl​。

我们用这些分量,模仿vvv来写wkw_{k}wk​和blb_{l}bl​的更新规则。

梯度下降算法在神经网络中使用的原理,就是利用算法去寻找能使代价函数CCC取得最小值的权重www和偏置bbb。利用上面的两条更新规则,我们就可以找到让小球沿曲面滚到最低点的路线。也就会找到CCC的最小值。

2.训练中的问题

在上次,我们说到代价函数的一种类型——二次代价函数。

拆解一下,对于每个样本,我们需要计算代价:

然后再对所有样本的代价求平均:

对求总梯度也有一样的变化:我们需要对每个样本x单独计算梯度值▽Cx\bigtriangledown C_{x}▽Cx​,再计算总的梯度,也就是求所有样本梯度的平均值。

这个过程大概是这样的:

有好多好多样本xxx——对每个样本都要计算一个代价函数最小值CxC_{x}Cx​——继而需要对每个样本计算▽Cx\bigtriangledown C_{x}▽Cx​以更新CxC_{x}Cx​——而计算每个 ▽Cx\bigtriangledown C_{x}▽Cx​会对应计算对所有wkw_{k}wk​和blb_{l}bl​的偏导——再用所有样本的CxC_{x}Cx​对wkw_{k}wk​的偏导求平均带入式来更新wkw_{k}wk​,对blb_{l}bl​做同理运算。不断更新最终得到最优的wkw_{k}wk​和blb_{l}bl​。这个过程在样本数少的时候还好说,当样本数很多时,计算量将会非常大也会消耗很多时间,学习过程就会十分缓慢。

因此在学习中,最常用的是加入了batch和epoch概念的随机梯度下降算法。可以理解为梯度下降算法的升级版。

3.随机梯度下降算法

随机梯度下降算法可以加速学习。其算法思想是从整个训练集中,随机选一小组共mmm个输入样本来计算▽Cx\bigtriangledown C_{x}▽Cx​。随机抽取的mmm个输入我们按顺序标号,将他们成为一个mini-batch。

由于这些输入都是随机抽取的,我们认为其可以近似估计整个数据集的▽C\bigtriangledown C▽C。也就有这样一个近似:

左边是我们对一个mini-batch计算得到的近似▽C\bigtriangledown C▽C,中间和右边是真实的▽C\bigtriangledown C▽C。其实本质上还是一样的,不管用多少个样本求了多少个▽Cx\bigtriangledown C_{x}▽Cx​,算▽C\bigtriangledown C▽C时总是用所有▽Cx\bigtriangledown C_{x}▽Cx​的和除以样本个数来求平均。就像我们高中生物要求一个池塘有多少红蛤蟆和绿蛤蟆,不能把几万只全捉来,就随机捉个100只看看红绿的比例。这里也是一样的,我们将▽C\bigtriangledown C▽C这个平均值求出来看看是不是已经很小了。

去掉中间可以写成:

由此我们就可以用小样本来完成对整体梯度的估计。

权重的偏置的更新就可以表达为:

注意这里每更新一次某个www或bbb,就需要求出这个mini-batch中所有CXjC_{X_{j}}CXj​​对它的偏导再求和。也就是上面的求和符号,是在当前mini-batch中所有的训练样本上进行的。

我用很傻的方式裂 列了一下,大概就酱紫:

所以说有了mini-batch,计算量是明显减少了啊。

我们计算的目的是决定在某个方向上移动来减少CCC,因此我们不需要每次计算得那么精确,梯度的只要能告诉我们方向就足够了。

3.epoch迭代期

我们当然不是选了一个mini-batch计算完就完事了。当计算完一个mini-batch,我们会选取另一个随机选定的mini-batch继续训练。直到用完了所有输入,这就叫做完成了一个训练迭代期epoch。一般训练中会设置很多个epoch。

4.离线学习与在线学习

这里顺便说一下离线训练和在线训练。

离线训练,就是每次用一堆输入样本xxx来训练,比如用所有样本来训练,更新每个www,又或者用一小部分,也就是mini-batch来训练。

在线训练,就是每次只用一个样本来训练,可以理解为这个mini-batch的大小为1。

离线训练一般用在我们对大批数据进行学习的过程中。而在线训练就比如说,小绿同学登上某个购物网站,这个网站根据小绿这个人的购物行为对进行用户分析和定向推送,小绿就是本次训练的一个样本。用训练好的模型对他进行分析就是一个在线训练。

梯度下降算法动图_Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习...相关推荐

  1. python sklearn 梯度下降法_科学网—Python_机器学习_总结4:随机梯度下降算法 - 李军的博文...

    =============================================================== 总结如下: 1.随机梯度下降算法可以看成是梯度下降算法的近似,但通常它能 ...

  2. 深度学习笔记--pytorch从梯度下降到反向传播BP到线性回归实现,以及API调用和手写数据集的实现

    梯度下降和反向传播 目标 知道什么是梯度下降 知道什么是反向传播 1. 梯度是什么? 梯度:是一个向量,导数+变化最快的方向(学习的前进方向) 回顾机器学习 收集数据 x x x ,构建机器学习模型 ...

  3. 凸优化学习笔记 15:梯度方法

    前面的章节基本上讲完了凸优化相关的理论部分,在对偶原理以及 KKT 条件那里我们已经体会到了理论之美!接下来我们就要进入求解算法的部分,这也是需要浓墨重彩的一部分,毕竟我们学习凸优化就是为了解决实际当 ...

  4. 梯度下降算法动图_梯度下降算法原理及推导

    今天我们就来介绍用来优化代价函数的梯度下降算法(gradient descent algorithm). 1 原理 那梯度下降究竟为何方神圣?我来用最通俗的语言来介绍下: 假设你站在华山之巅,你现在想 ...

  5. 梯度下降算法动图_一文看懂常用的梯度下降算法

    概述 梯度下降算法(Gradient Descent Optimization)是神经网络模型训练最常用的优化算法.对于深度学习模型,基本都是采用梯度下降算法来进行优化训练的.梯度下降算法背后的原理: ...

  6. 梯度下降算法动图_一文读懂梯度下降算法

    这篇博文主要讲解下梯度与方向导数的关系.等值线图中梯度的表示,以及梯度的应用.因涉及太多高数的知识点,在此就不一一详述了,只是简单梳理下知识点,有所纰漏还望纠正指出,文末附有参考文献,借图. 一.方向 ...

  7. Python学习笔记--pytorch--随机梯度下降、神经网络与全连接层

    随机梯度下降 是一个向量,代表函数在某一个点增长的方向,模代表了在该点增长的速率 影响搜索过程的因素: 初始状态,学习率,动量 激活函数 1.torch.sigmoid (0,1) a=torch.l ...

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

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

  9. 深度学习系列之随机梯度下降(SGD)优化算法及可视化

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

  10. 深度学习中的随机梯度下降(SGD)简介

    随机梯度下降(Stochastic Gradient Descent, SGD)是梯度下降算法的一个扩展. 机器学习中反复出现的一个问题是好的泛化需要大的训练集,但大的训练集的计算代价也更大.机器学习 ...

最新文章

  1. mysql突然要注册_mysql跳过登陆注册,找回root密码 (window平台)
  2. 阅读微信支付demo收获
  3. WINCE的内存配置
  4. arduino上ESP8266用Adafruit_SSD1306库驱动OLED屏
  5. javascript实战项目——网页版贪吃蛇
  6. xxl-job使用实例
  7. Pod详解-生命周期-概述
  8. scala hashmap_如何在Scala中将Hashmap转换为Map?
  9. C语言指针与数组之间的恩恩怨怨
  10. 查找子字符串----KMP算法深入剖析
  11. idea启动SpringBoot项目自动停止
  12. 【FFmpeg4.1.4 编码】h265编码
  13. 智商高的人情商都低?這個人來告訴你
  14. OpenCV-绘制圆角矩形
  15. 【jquery】jquery $.fn $.fx是什么意思
  16. 人工智能换脸python_AI换脸(手把手教你实现吴彦祖变苏大强)
  17. 在Java里面使用Pairs或者二元组
  18. 获取移动端ip的方法
  19. 众人给诺基亚支招 Android提议何时了?
  20. Vue-Proxy error: Could not proxy request xxx/xxx from localhost:9528 to http://ip:port

热门文章

  1. LeetCode之同构字符串
  2. 用CSS绘制实体三角形并说明原理
  3. K8s高可用集群部署
  4. ES6-异步async await学习
  5. 青蛙学Linux—Zabbix Web使用之模板④基于触发器的动作和告警媒介
  6. Java同步数据结构之Collection-Queue
  7. 2010-11-25
  8. 【虚拟机】VMware启动时报错:该虚拟机似乎正在使用中....请按“获取所有权(T)”按钮获取它的所有权
  9. matlab之svd、svds函数
  10. 数字图像处理实践(一)