sp2.2 优化算法 加快训练

筅森魡賤 提交于 2019-12-16 20:26:17
batch批梯度下降法:以前是所有的x1到xn之和减去yi到yn之和整体一遍算梯度下降
假设数据特别多 上亿只为了求个微分 还要重复
mini-batch:把训练集分成几个部分,假设500 万个样本,分成5000个小部分 每个1000样本
x^(i)第几个样本 x^[l]第几层的X x^{t}第几个部分的y^{t}

假设样本1000个每部分 则x^{t}为(n,1000)n是特征值数 每次梯度下降取一块即可
这里X{}大括号表示 第几组(代)

 
 
原本5,000,000分为 5000组 每组1000个训练样本
这里一个for循环 称为1代,这里一代也就是整个训练集,他就能做5000个梯度下降了,
外面可以在加个大循环 循环几代

在整体的批梯度下降每次都是减少的J 只要步子选的对
但是在mini-batch中是曲折的,可能部分批次难算 里面的样本有些不同
 
每次更新Θ只用一个样本 随机梯度下降不会停止 只会最后在最小附近一直
失去向量化带来的加速 效率慢
所以mini-batch还是选个不大不小的:训练集小的话直接批梯度 2000一下
大的话64-1024,最好是2的次方 卧槽玄学 和cpu运行有关

 

 
 

 
SGD每个样本都算个损失和反向传播

SGD三个循环 一个整个样本的循环几遍 一个循环每个样本反向传播 一个循环每一层

 

 
 
SGD和minibatch

这三种的区别就是 the number of examples you use to perform one update step.
With a well-turned mini-batch size, usually it outperforms either gradient descent or stochastic gradient descent (particularly when the training set is large).
 
————————————————————————————————————————————
————————————————————————————————————————————
优化算法:进一步加快速度
比梯度下降快,背后思想就是 ---》指数加权平均 滑动平均
Exponentially weighted averages 也 叫指数加权移动平均值
算局部一段时间的平均温度 而且占内存少 一行代码 不断覆盖

Vt视为每日温度占得权重 假设 β=0.9 就是说 十天的平均温度 红线 每天占0.1个权重
就是说前面的都占一定比重

 
 

当β=0.9 第十天衰减到原值的三分之一还小 约等于1/e 权重就很小了对于整体

 

 
有啥用:
本质就是以指数式递减加权的移动平均。各数值的加权而随时间而指数式递减,越近期的数据加权越重,但较旧的数据也给予一定的加权。
就是个偏差修正 :紫线修正到绿线

 
 
 
(SGD的一个缺点是,更新方向完全依赖于当前的batch,因而其更新十分不稳定。解决这一问题的一个简单的做法便是引入momentum。)
动量梯度下降:Gradient descent with momentum
因为每次只选一小批吧 这和整体比 会有偏差的,导致求到时候上下震动会学的很慢,
我们希望在纵轴上波动小一点(学习速率小),横轴上加快学习速率
对于每次小批量的迭代 需要计算导数吧 我们用上面的 加权平均思想 来减少震动
还可以看成微分给球一个加速度 β相当于摩擦力 函数是碗状的

两种都行 倾向左边 不删除那一部分

纵向看Vdw就是前面的指数加权平均 这样的话其实平均就是趋于0,
横向是看后面的dw
β常用0.9

 

以前是直接减去导数
现在考虑了之前的, 变为之前的+当前的导数
然后再减去

 

 
  • 学习率较小时,收敛到极值的速度较慢。
  • 学习率较大时,容易在搜索过程中发生震荡。
冲量”的原理以及如何用“冲量”来解决上述两个问题。
momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。这样一来,可以在一定程度上增加稳定性,从而学习地更快,并且还有一定摆脱局部最优的能力:
 

其中,ρ 即momentum,表示要在多大程度上保留原来的更新方向,这个值在0-1之间,在训练开始时,由于梯度可能会很大,所以初始值一般选为0.5;当梯度不那么大时,改为0.9。η 是学习率,即当前batch的梯度多大程度上影响最终更新方向,跟普通的SGD含义相同。ρ 与 η 之和不一定为1。

  • 在学习率较小的时候,适当的momentum能够起到一个加速收敛速度的作用。
  • 在学习率较大的时候,适当的momentum能够起到一个减小收敛时
 
 
 
RMSprop算法root mean square prop:
与动量梯度下降一样,都是消除梯度下降过程中的摆动来加速梯度下降的方法
其实w和b都是很高维的 还是希望加快水平方向
假设竖直是b 水平是w 其实无所谓可能竖直方向是W123 水平是W456等等
区别就是这里 Sdw= 当前导数的平方 + 之前导数
然后 W- 当前导数除以根号下Sdw 假设W是水平 希望Sdw小 这样水平走的快
希望Sdb大 竖直走的小
缺保分母不是0

 

 

 
 
Adam:是将上述两种算法相结合 很好用
初始化Vdw Sdw就是前面两个方法里那个
然后minibatch来梯度下降 Vdw来加权平均 动量来算 这里β1
Sdw也要算,这里β2
Vdw修正一下 Sdw也修正一下
最后W- Vdw / 根号下Sdw

 

 

 

 

其他方法:学习衰减度:初期可以大步走 后期减慢逐渐收敛
每一次遍历训练集叫一代 也可以手动调

 

 
 
局部最优问题:以前人们怕陷到局部最优 以为是左边的图 很容易陷入局部最优解
如果一个点是局部最优 必须每个维度都是凸函数的最低点 其实这是非常小的概率的
实际是右图那样 因为非常多参数 维度高 是鞍点 有些维度是位于高点有些位于低点

现在问题是平稳段太影响速度了,过于平稳导数小。
就用上面的adam、动量算法等。加快离开停滞区

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!