batch, patch, token,iteration, epoch分别是什么?
写这篇博客主要是记录一下自己在读论文的时候,有些疑惑的地方。以前注意到了这些小问题,但是没有了解仔细,
导致出现了类似的东西,搞不清他们之间的区别,所以就写篇博客记录一下,
希望以后都能坚持把不懂的东西都弄懂,希望自己能成为一个严谨的人 其实这篇文章主要是弄清batch和patch之间的区别
一、Batch :
定义: 在训练神经网络时,不是一次性将所有数据输入模型,而是将数据分成小批量(batches),然后逐批输入模型进行训练。
补充: 与一次性处理所有数据相比,使用批量可以加快训练速度,并且使得内存使用更加高效。同时,批量处理还有助于模型更好地泛化,因为它引入了一定程度的随机性。
Batch 的选择:
-
极端一:batch_size为全数据集(Full Batch Learning):
好处:
1.由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
2.由于不同权重的梯度值差别巨大,因此选择一个全局的学习率很困难。Full Batch Learning可以使用Rprop只基于梯度符号并且针对性单独更新各权值。
坏处:
1.随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
2.以Rprop的方式迭代,会由于各个Batch之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来 RMSProp 的妥协方案。
- 极端二:Batch_size=1:
Batch_size=1,也就是每次只训练一个样本。这就是在线学习(Online Learning)。线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元,非线性网络,在局部依然近似是抛物面。使用在线学习,每次修正方向以各自样本的梯度方向修正,难以达到收敛。如下图所示:
在合理范围内,增大 Batch_Size 有何好处?
内存利用率提高了,大矩阵乘法的并行化效率提高。
跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。
盲目增大 Batch_Size 有何坏处?
内存利用率提高了,但是内存容量可能撑不住了。
跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
Batch_Size增大到一定程度,其确定的下降方向已经基本不再变化。
二、Patch:
定义: 在图像处理中,一个patch通常指的是图像中的一个小的矩形区域。在卷积神经网络(CNN)中,patch是指卷积核覆盖的图像区域。
补充: Patch是局部区域的概念,通常用于描述图像处理中的局部特征提取。与整个图像或整个特征图(feature map)相比,patch关注更小的区域。
三、Token:
定义: 在自然语言处理中,token是指文本中的一个单词、短语或符号。在深度学习模型中,特别是在处理序列数据时,文本被分割成一系列的tokens。
补充: Token是处理文本数据时的基本单位。不同的tokens代表了不同的语义信息,模型通过学习这些tokens的表示来进行语言理解和生成。
四、Iteration :
定义: 在训练过程中,每次迭代指的是一次前向传播和一次后向传播的过程,即一次参数更新的过程。
补充: 迭代关注的是模型参数更新的频率。一个epoch包含多个迭代,因为一个epoch意味着整个数据集被遍历了一次。
五、Epoch :
定义: 在训练过程中,一个epoch意味着整个数据集被完整遍历了一次。
补充: Epoch关注的是数据集被遍历的次数。一个epoch完成后,模型参数会根据整个数据集进行一次更新。通常,为了达到较好的训练效果,需要多个epoch。
六、参考文章
参考文章原文链接:batch参考文章