深度学习实验的一些概念
训练集、验证集、测试集:以计算机视觉CV实验为例,图像数据集划分为3份,分别用于train、val、test-dev。
training set:训练集用于模型的学习,拟合分类器的参数,例如神经元连接权重。
validation set:验证集用来调整网络结构或者分类器复杂度相关的参数(超参数),例如神经网络的隐层单元数。调整模型、选择模型,避免用测试集来指导模型导致信息泄露,影响模型的泛化性能。
test set:测试集用来评估模型的性能,不影响模型本身。
用训练集训练模型,然后把训练好的模型在测试集上计算误差,作为泛化误差的近似,目标是最小化泛化误差。
在构建模型的时候,工作流程中不可以使用任何测试集的信息,例如预处理、清洗、特征缩放(归一化)都只在训练集上进行,缺失值的平滑也是。测试模型的时候也是用训练集得出的信息来处理,才能得到最准确的模型评估。
模型通常是有很多轮次的,每一轮结束后都会计算一下误差,在这个时候可以评估模型,从而调整超参数,但是不可以用测试集去评估,因为泄露了测试信息,训练出来的模型仍然无法知道其泛化性能,因此就有了验证集,用于在模型训练中评估模型,调整参数。
数据集不大的时候,train:val:test=6:2:2,也可以用留出方、交叉验证等方法;数据集很大的时候,可以直接98:1:1。
消融实验(Ablation Experiment):简单讲其实就是控制变量法。描述去除网络的某些部分的结果,以便更好地理解网络的行为。为了提升网络的性能,在网络架构上加了模块A,B。是这篇文章的创新点。 消融实验如此做:实验1:我只加a结果如何;实验2:只加b结果如何;实验3:a和b都加了又如何。看3个实验的效果,然后结果可能是,实验1和实验2的结果都不如实验3,那么说明AB都是有用的; 然而也有可能你会发现实验1的结果和实验3一样,甚至更好。这就说明模块B其实并没有起到作用,提升只来自于模块A。 简单和复杂的方法都能达到同样的效果,选择简单的方法。
消融实验的必要性,由于深度学习模型通常是由多个模块组成的,逻辑上可以拆为几个部分,这就需要明确收益来源于哪一部分?是否和已有工作重合。
对比实验。单纯对比两个模型的性能,需要给出各自的超参数(层数、单元数、学习率、迭代次数、epoch、bathc_size等等)
而消融实验是指原有模型加上新的结构,结果的变化。
Zero-Shot:通过已知的类别和属性信息对新的未见过的类别进行分类。利用类别的高维语义特征代替样本的低维特征,使得训练出来的模型具有迁移性。ZSL 可以在没有提供新事物数据的情况下,只凭特征描述就能识别出新事物。这里斑马的高维语义就是马的外形、老虎的斑纹、熊猫的颜色,尽管训练集中没有斑马,没见过斑马,但是从已有数据中抽取出了这些特征,尽管缺乏更多细节,但这些高维语义已经足够刻画斑马,从而让计算机成功识别出来未见过的斑马实例。
One-Shot:只通过一个样本进行学习,并识别出这一个样本是否在训练集中,
Few-Shot:
baseline:当有了一个科研的idea,设想这样一个场景:发现把某个模型换一个损失函数,对性能有提升,那么要证实这个发现,就要做实验,原模型称为baseline,就是对照组,更换了损失函数的新模型就是实验组,其性能超过了baseline才算被证实有提升了。
benchmark:和baseline差不多,但有细微差别,baseline指需要对照的模型,benchmark指各项评价指标。