pre-training(预训练)
为一个任务来训练模型,将效果不错的模型参数保存下来,以后想要执行相似任务的时候直接拿过来用,并且能够获得较好的结果。这个过程就是pre-training。
fine-tuning(微调)
假如说你已经有了一个猫脸识别的预训练模型,你想把这个模型来处理别的任务,比如说人脸识别。这个时候,你可以直接使用之前保存下来的模型的参数来作为这一任务的初始化参数,然后在训练的过程中,依据结果不断进行一些修改。这个过程就是fine-tuning。
下游任务
真正想要解决的任务。首先使用公共数据集进行训练,而这些数据集可能不会很好完成你真正想完成的内容,这就意味着在解决的实际问题的数据集上,要微调这个预训练模型,而这个任务称为下游任务。
Few-shot Learning(少样本学习)
模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习
- novel class:没有见过的类别
- 支撑集(support sample):CK个数据的训练集(C为类,K为每类取几个样本),如果K为1,则为one-shot
- 预测对象(query set):又称作batch,在支撑集上训练以后,需要在该set上进行预测
k-way n-shot support Set:Support Set 就是帮助模型去分辨新类别的小样本数据集。k 代表小样本中类别的数量,n 代表每个类别有多少数据。例如,有3个类别,每个类别只有一个样本,那么就是 3-way one-shot.
k-way: k 的数量越多,分类准确率越低
n-shot: n 的数量越多,分类准确率越高
具体做法:
- 用预训练模型 f 对所有的小样本进行特征提取,得到它们的特征向量(feature Vectors)
- 将同类别的Feature Vectors进行合并(上图使用的求平均),然后再进行正则化(normalize),最终的得到每个类别的向量 ui
- 将要预测(query)的图片按照步骤1,2的方式得到向量 q
- 比较向量 q 和类别向量 ui,距离谁最近,那么该图片就是什么类别
Prompt?(自然语言提示信息)
随着预训练语言模型体量的不断增大,对其进行fine-tune的硬件要求、数据需求和实际代价也在不断上涨。除此之外,丰富多样的下游任务也使得预训练和微调阶段的设计变得繁琐复杂,因此研究者们希望探索出更小巧轻量、更普适高效的方法,Prompt就是一个沿着此方向的尝试。
简单来说,用户用一段任务描述和少量示例作为输入,然后用语言模型生成输出。这种方法就叫做in-context learning或prompting。
假设我们要对一句话Best pizza ever!进行情感分类,可以在这句话后面加上一句模板:
Best pizza ever! It was ___.
那么基于前面这句话填空的结果,模型预测为great的概率要远高于bad。因此我们可以通过构造合适的Prompt把情感分类问题变成完形填空问题,从而可以很好地利用预训练模型本身的潜力。
https://zhuanlan.zhihu.com/p/386470305