炼丹黑话
Epoch、Batch_size、Iters
mnist 数据集有 60000 张图片作为训练数据,10000 张图片作为测试数据。假设现在选择 Batch Size = 100 对模型进行训练。
- 每个 Epoch 要训练的图片数量:60000(训练集上的所有图像)
- 训练集具有的 Batch 个数: 60000/100=600
- 每个 Epoch 需要完成的 Batch 个数: 600
- 每个 Epoch 具有的 Iteration 个数: 600(训练一个Batch就是一次Iteration)
完成一个Batch训练,相当于参数迭代一次,每个 Epoch 中,参数更新 600 次。
学习率 / learning rate
学习率是一个超参数,用于控制模型在训练过程中参数更新的幅度。也就是说,它定义了我们沿着梯度下降方向更新权重的步长。学习率太大可能会使模型在训练过程中无法收敛,模型也就不能找到最优的参数;学习率太小可能会导致训练过程过慢,甚至可能会停留在次优的位置。
dropout / 随机失活
dropout 是 Hinton 老爷子提出来的一个用于训练的 trick 。通常解释为:在训练过程的前向传播中,让每个神经元以一定概率 p 处于不激活的状态。以达到减少过拟合的效果。
dropout 可用于训练开始时的欠拟合,提高泛化精度,进而提出了面向欠拟合模型的 early dropout 和面向过拟合模型的 late dropout
FLOPs
FLOPs:注意 s 小写,是 floating point operations 的缩写(s 表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。
梯度裁剪 / Gradient Clipping
在反向传播中,梯度可能会越来越大(与梯度消失相反),因此需要梯度裁剪,避免模型越过最优点。
梯度裁剪的方式
- 确定一个范围,如果参数的 gradient 超过了,直接裁剪
- 根据若干参数的 gradient 组成的 vector 的 L2 Norm 进行裁剪
第一种方法,比较直接,对应于 pytorch 中的 nn.utils.clip_grad_value(parameters, clip_value). 将所有的参数剪裁到 [ -clip_value, clip_value]
第二种方法也更常见,对应于 pytorch 中 clipgrad_norm(parameters, max_norm, norm_type=2)。 如果所有参数的 gradient 组成的向量的 L2 norm 大于 max norm,那么需要根据 L2 norm/max_norm 进行缩放。从而使得 L2 norm 小于预设的 clip_norm
梯度裁剪的使用位置
在 backward 得到梯度之后,step()更新之前,使用梯度剪裁。从而完成计算完梯度后,进行裁剪,然后进行网络更新的过程。
Norm
L0 Norm: 对应向量空间中非零元素的个数
L1 Norm: 也称为 Manhattan-norm 或者 taxicab-norm,为向量中每一元素的绝对值之和
L2 Norm: 也称为欧几里得范数
L0 实际研究中很少用,因为 L0 范数很难优化求解,是一个 NP-hard 问题。L1 用以产生稀疏性,因为它是 L0 范式的一个最优凸近似,容易优化求解。L2 更多是防止过拟合,并且让优化求解变得稳定很快速(这是因为加入了 L2 范式之后,满足了强凸)。
NestedTensor
NestedTensor 可以把多个 Tensor 打包为单个高效的数据结构
维度诅咒/纬书灾难
输入数据的 feature 的数量越多,所需样本的数量就越多
为了降低维度,通过线性或非线性映射
表示学习
manifold 流形 o
传统表示学习,feature 和学习器分开学习
深度学习则是在一块,end to end
反向传播 -> 求倒数
随着层数变多,解析式变得复杂,基于图的每一个节点进行求导
高等数学 链式法则
TF 静态图
pytorch 动态图
线性模型
- 数据集
- 选择模型
- 训练
- 推理
使用线性模型作为最基本的架构
Mean Square Error
visdom
直接集预测
端到端
L1 距离,L2 距离
L1 距离就是曼哈顿距离
L2 距离就是欧式距离
Focal Loss
Focal Loss是由Facebook AI研究院的Tsung-Yi Lin等人在2017年提出的一种损失函数,主要用于解决目标检测任务中的类别不平衡问题。
这种损失函数的核心思想是通过调整损失函数的形状,给予那些容易被错分类的样本更大的权重,而对于那些容易被正确分类的样本则给予较小的权重。
这种方法在论文《Focal Loss for Dense Object Detection》中被提出,并在多个目标检测任务中取得了很好的效果。
DetNet 大的下采样因子带来大的有效感受野,这有利于图像分类,但会损害目标定位能力。
然而,卷积核的局部性质使其无法捕获图像中的全局上下文,而这通常是更好地识别图像中的对象所必需的
矩阵 向量
点乘反映着两个向量的“相似度”,两个向量越“相似”,它们的点乘越大。
矩阵相乘的特点:
(1)当矩阵A的列数等于矩阵B的行数时,A与B才可以相乘。
(2)乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
(3)矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
评价指标
mAP
mAP(mean Average Precision,均值平均精度)广泛使用于目标检测领域。它将每个类别的AP(Average Precision,平均精度)计算出来,然后取所有类别的平均值。
mAP@.5:.95(mAP@[.5:.95]) 表示在不同IoU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP。
Recall
Recall(查全率)是指在所有真实正例中,算法正确识别为正例的比例。
$$ \text { Recall }=\frac{T P}{T P+F N}$$
Precision
Precision(查准率)是指在所有被算法识别为正例的样本中,实际为正例的比例。
$$ \text { Precision }=\frac{T P}{T P+F P} $$
IoU
IoU(Intersection over Union,交並比)衡量两个检测框(预测框和真实框)的交叠程度。 在目标检测任务中,通常将IoU阈值设定为一定的阈值(如0.5),用于判断预测结果与真实标注的匹配情况。 如果IoU值大于等于阈值,则认为预测结果与真实标注匹配成功,否则认为匹配失败。
$$ \text { IoU }=\frac{\operatorname{area}\left(B_p \cap B_{g t}\right)}{\operatorname{area}\left(B_p \cup B_{g t}\right)} $$
MSE
MSE(Mean Squared Error,均方误差)损失是一种回归损失函数,用于衡量预测值和真实值之间的差异,它计算预测值和真实值平均平方差。因此它始终是一个正值,随着误差接近零而减小。
均方误差损失收敛速度快,能够对梯度给予合适的惩罚权重,使梯度更新的方向可以更加精确。
$$\mathrm{MSE}=\frac{1}{n}\sum_{i=1}^{n}\left(Y_i-\widehat{Y_i}\right)^2$$
预训练
有监督的 ImageNet预训练会损害最大规模数据集和高强度数据增强下的训练效果。
但是自监督的预训练呢?自监督学习(不带标签的预训练)的主要目标是构建一种通用的表征,这种表征可以迁移到更多类型的任务和数据集中。
自监督学习是另一种常用的预训练方法。自监督学习的目的不仅仅是学习高级特征。相反,我们希望模型学习的更好,有更好的鲁棒性以适用于各种不同的任务和数据集。
训练-微调(Pre-training and Fine-tuning)是过去十年计算机视觉中最重要的学习范式之一,其基本想法是在海量数据的任务中,让神经网络在大规模数据集上进行训练,然后在下游任务中,使用少量数据将预训练过的模型进行微调。这种方式能够将上游大数据任务中学到的信息迁移至下游数据量较少的任务上,缓解数据量不足的问题,并显著提升模型的性能。
自AlexNet于2012年提出以来,计算机视觉中的预训练算法在很大程度上被等价于以 ImageNet 数据集为代表的图像分类任务。尽管图像分类的数据标注成本已然较低,但后续的数据清洗、质量控制等步骤仍对扩展图像分类数据产生了挑战,而数据不足的困难也限制了计算机视觉模型的进一步扩大。因此,如何使用无监督学习方法进行视觉模型的预训练逐渐成为了计算机视觉任务中的核心问题。
掩码技术早期是在自然语言处理任务中提出,掩盖句子中的某些词语来构建学习策略,其取得了很好的收益。因此研究者们开始探索针对视觉任务的掩码技术。BEiT[]首先将图像掩码建模引入到计算机视觉任务中进行预训练Transformer,在BEiT中图像掩码建模包含两个视角的图像,分别是图像补丁和视觉token,通过这两个视角下的一致性约束来优化网络。大量的工作和实验都证明 了掩码建模策略在表征学习方面的有效性。