随机梯度下降的时期被定义为对数据的单次通过。对于每个SGD微型批次,将绘制样本,计算梯度并更新参数。在时代设置中,样本被抽取而无需替换。
但这似乎没有必要。为什么不从每个迭代的整个数据集中随机抽取绘制每个SGD minibatch ?在大量的时期中,或多或少经常看到样本的微小偏差似乎并不重要。
随机梯度下降的时期被定义为对数据的单次通过。对于每个SGD微型批次,将绘制样本,计算梯度并更新参数。在时代设置中,样本被抽取而无需替换。
但这似乎没有必要。为什么不从每个迭代的整个数据集中随机抽取绘制每个SGD minibatch ?在大量的时期中,或多或少经常看到样本的微小偏差似乎并不重要。
Answers:
除了弗兰克(Franck)关于实用性的答案和戴维(David)关于研究小亚群的答案(两者都是重要点)之外,实际上还有一些理论上的理由更喜欢不替换样本。原因可能与David的观点有关(这本质上是优惠券收集者的问题)。
在2009年,LéonBottou比较了在特定文本分类问题()上的收敛性能。
巴托(2009)。某些随机梯度下降算法的奇异快速收敛性。学习和数据科学研讨会论文集。(作者的pdf)
他使用以下三种方法通过SGD训练了支持向量机:
他凭经验检查了收敛,其中是成本函数,是优化步骤的参数,期望值超出了改组分配的批次。
这篇论文后来在理论上证实了这一点:
Gürbüzbalaban,Ozdaglar和Parrilo(2015)。为什么随机改组击败了随机梯度下降。arXiv:1510.08560。(NIPS 2015邀请演讲视频)
他们的证明仅适用于损失函数为强凸的情况,即不适用于神经网络。可以合理预期,类似的推理可能适用于神经网络情况(这很难分析)。
从具有大量训练集的性能角度来看,确实确实没有必要,但是使用纪元会很方便,例如:
[1]给出了另一个原因,鉴于今天的计算机配置,该原因并没有太大关系:
对于任何随机梯度下降方法(包括小批量情况),对于估计器的效率而言,重要的是,每个示例或小批量应近似独立地采样。由于随机访问内存(或者更糟的是访问磁盘)的成本很高,因此一个很好的近似值(称为增量梯度(Bertsekas,2010年))是按照与它们在内存中的顺序相对应的固定顺序访问示例(或迷你批)。或磁盘(如果不是在纯在线情况下每个示例仅被访问一次,则在第二个时代以相同的顺序重复示例)。在这种情况下,如果先随机放置示例或微型批处理,则更为安全(为确保是这种情况,首先对示例进行混洗可能会很有用)。如果在每个时期更改了迷你批的访问顺序,则会观察到更快的收敛速度,如果训练集保存在计算机内存中,则可以合理地有效。
[1] Bengio,Yoshua。“ 基于梯度的深度架构培训的实用建议。 ”神经网络:交易技巧。Springer Berlin Heidelberg,2012年。437-478。
我有些不同意它显然无关紧要。假设有100万个培训示例,并且我们抽取了1000万个样本。
在R中,我们可以快速看到分布的样子
plot(dbinom(0:40, size = 10 * 1E6, prob = 1E-6), type = "h")
一些示例将被访问20次以上,而其中1%将被访问3次或更少。如果精心选择训练集以表示实际数据中示例的预期分布,那么这可能会对数据集的某些区域产生实际影响,尤其是一旦开始将数据切成较小的组时。
考虑一下最近的一个案例,其中一名伊利诺伊州选民有效地对其样本进行了30倍的过采样,并大大改变了其人口统计模型的估计值(在较小的范围内,对整个美国人口而言)。如果我们不小心对多云背景下景深较窄的绿色背景下拍摄的“粗糙松鸡”图像进行了过度采样,而对其他种类的松鸡图像进行了欠采样,则该模型可能会将那些不相关的特征与类别标签相关联。分割数据的方式越多,这些子组就会越多,出现这种错误的机会也就越多。
samples = sample(1:1E6, size = 1E7, replace = TRUE)
plot(table(table(samples)) / 1E7)