batch, patch, token,iteration, epoch分别是什么?

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参考文章

### Transformer 模型中的 PatchToken #### Patch Embedding 的概念 在视觉任务中,图像通常被划分为固定大小的小块(patches),这些小块随后会被线性映射到相同维度的向量空间。这种处理方式使得模型能够捕捉局部特征并减少计算负担[^1]。 对于输入图像 \(I \in R^{H×W×C}\),其中 H 是高度, W 宽度以及 C 表示颜色通道数,可以将其分割成 N 个不重叠的 patches,每个 patch 大小为 \(p × p\) 像素。因此有: \[N = (H/p) * (W/p)\] 接着通过一个可学习参数矩阵 \(E ∈ R^{d×(p*p*C)}\) 将每一片转换为 d 维嵌入向量: \[e_i=E·\text{flatten}(x_{i})+\mathbf{pos}_i,\quad i=0,...,N-1\] 这里 flatten() 函数用于展平二维图片数据至一维数组形式;\(\mathbf{pos}_i\) 则代表位置编码,用来提供序列内相对或绝对的位置信息给 transformer 层理解不同 tokens 间的关系[^3]。 #### Tokenization 过程说明 Tokenization 主要是指将原始输入转化为一系列离散单元的过程,在自然语言处理领域指的是单词级别的分词操作;而在计算机视觉应用里,则更多指代上述提到过的切片过程——即将整张图切成若干个小方格即 "patch" 并视作独立 token 来对待[^2]。 为了使模型更好地适应下游任务需求,有时还会额外加入特殊标记如 [CLS], [SEP] 等作为辅助信号参与训练。例如 BERT 中会在句首加上 [CLS] 符号以便于分类任务获取整个句子级别表征。 ```python import torch from einops import rearrange def image_to_patch(image_tensor, patch_size): """ Convert an input tensor of shape [B,C,H,W] into a sequence of flattened patches. Args: image_tensor (Tensor): Input images with dimensions Batch x Channels x Height x Width. patch_size (int): Size of each square patch. Returns: Tensor: Flattened patches as batched sequences. """ b, c, h, w = image_tensor.shape assert h % patch_size == 0 and w % patch_size == 0, \ f'Image size ({h},{w}) must be divisible by patch size {patch_size}' num_patches_h = h // patch_size num_patches_w = w // patch_size # Rearrange the tensor to have patches along one dimension patches = rearrange( image_tensor, 'b c (nh ph) (nw pw) -> b (nh nw) (ph pw c)', nh=num_patches_h, nw=num_patches_w, ph=patch_size, pw=patch_size ) return patches # Example usage batch_size = 8 channels = 3 height = width = 224 patch_side_length = 16 dummy_image_batch = torch.randn((batch_size, channels, height, width)) flattened_patches = image_to_patch(dummy_image_batch, patch_side_length) print(f"Patches Shape: {flattened_patches.size()}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值