深度学习bs与lr的关系
深度学习终极目的
找出loss函数的最小值
例:L=x2 +y2 最小值为L=0(x=0,y=0)
文章关键词解释
GD(gradient descent):一个epoch对应一个梯度,bs=全部样本个数
SGD:每一个样本对应一个梯度 bs=1
minibatch-SGD算法:就是我们用得比较多的那个算法(一个epoch就是一次迭代,会将样本全部训练一次,bs个样本对应一个梯度)
bs: batchsize
lr: learning rate。lr其实就是梯度的权重
baseline:这里的baseline应该指的就是单机
协方差(暂时用不上):衡量两个变量之间的总体误差,如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
方差:用D(X)或Var(X)表示,D(aX)=a2D(X),D(X±Y)=D(X)+D(Y),这两个法则足够证明文章中如下红框处的梯度方差的公式了:

https://blog.csdn.net/flyfish1986/article/details/79506200
i.i.d.假设:IID独立同分布假设,就是假设训练数据和测试数据是满足相同分布的,独立同分布则方差相等。
文章结论
1、所以根据文章推论:bs=m的每个minibatch的方差是bs=1的单个样本方差的1/m。即bs越大,梯度方差越小。方差越小,则梯度更加准确。 所以梯度更加准确的定义就是大家的梯度的值都差不多。
2、由公式:

可看出将lr设为原本lr的根号m倍(m>1)即可将方差还原成bs=1的单个样本的方差。换句话说,lr越大,方差就越大,梯度就越不准确,但训练速度会提高,注意:这里说的训练速度变快应该是指从某个LOSS值跳到下一个LOSS值的跨度变大,但收敛速度不一定会变快哦!
问题:梯度方差越小有啥实际意义
小盘解析:这里的梯度方差指的是minibatch里面的每一个样本对于整个minibatch的方差。方差越小说明这个minibatch的总梯度与里面的每个样本的梯度相差不大,所以就越准确。
3、对于baseline,batch size为B,learning rate为lr,训练epoch数为N。假设每个epoch训练M轮(每次训练跑完B个训练样本),并经过这N个epoch后收敛(也就是N*M轮后收敛)。
而在并行化后(k个worker一起训练),每次训练可以跑KB个样本,并且跑KB个样本消耗的时间与baseline跑完B个训练样本的时间相同。那么并行化只需要baseline 1/K的时间就可以跑完baseline N*M轮的训练内容。如果这时候也像baseline那样成功收敛,那时间只需要原有的1/k,就是收敛加速倍数=k
但原文里,并行化后依然保持lr不变。所以需要的跑的数据量就远不止baseline N*M轮的训练内容了,所以收敛加速倍数远小于k
如果所有梯度的方向一致,并且并行化后lr是baseline的k倍,那么收敛加速倍数就刚好等于k
解决收敛加速度远小于k:提高lr为krl
如何确定large batch与learing rate的关系
其他
参考文献摘要:
SEBS 提出一种逐步扩大训练规模,以设置适当bs大小的方法
第二种 不知道是个啥 但是
第三种 是一种面向DNN的可变的bs策略
bs与lr(learning rate)的关系:
https://www.zhihu.com/question/64134994/answer/216895968
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
