Zero-Shot,One-Shot,Few-Shot,In-Context Learning
https://blog.csdn.net/weixin_44212848/article/details/139902394
In-Context Learning
定义:In-context learning是一种在不显式微调模型权重的情况下,通过给模型提供相关的上下文信息(例如提示或样本)来实现模型性能提升的方法。GPT-3等大规模语言模型展示了这种能力。
在 LLM 的语境下:
“上下文学习”(In-context learning)使用预先训练的语言模型的文本输入作为任务规范的一种形式:该模型以自然语言指令和/或任务的一些演示为条件,然后期望通过预测接下来会发生什么来完成任务的进一步实例 4。
下图是 in-context learning (左边一列)和一般 fine-tuning (右边一列)的区别,in-context learning 不产生梯度、不会更新模型参数,而 fine-tuning 会产生梯度、更新模型参数。
需要注意区分 in-context learning 中可以有 Zero-Shot、One-Shot 和 Few-Shot 的 Setting,但和 Zero-Shot learning、One-Shot learning、Few-Shot learning 不一样!
在这里插入图片描述
Few-shot Fine-tuning vs. In-context Learning:A Fair Comparison and Evaluation
https://arxiv.org/pdf/2305.16938
什么是上下文学习(In-Context Learning)
https://zhuanlan.zhihu.com/p/606788655
GPT-
n
系列的模型都属于自回归类的语言模型,所谓自回归模型就是根据当前输入预测下一个词,然后将预测结果和输入拼接再当做模型的输入再预测下一个词,这样循环往复。
而自回归模型的训练目标也很简单,就是从超大规模语料库
中采样训练样本,模型根据输入输出一个概率向量(概率向量包含所有词的预测概率,对于GPT-3 模型来说,维度约1千多万),而因为文本数据自带标注所以我们是知道真实的下一个词,所以损失函数就采用得交叉熵
。
然后研究人员发现,预训练好的 GPT-3 模型拥有一项神奇的能力,后来被称为:上下文学习(In-Context Learning)。
这项能力简单来说就是,预训练好的 GPT-3 模型在迁移到新任务上的时候并不需要重新训练,而只需要提供任务描述(这个任务描述是可选项)接着提供几个示例(任务查询和对应答案,以一对对
的形式组织),最后加上要模型回答的查询。将以上内容打包一起作为模型的输入,则模型就能正确输出最后一个查询对应的答案。
举个例子:
比如现在想用 GPT-3 来做个翻译任务,翻译英文为法文。输入的格式如下:
https://ai.stanford.edu/blog/in-context-learning/
首先第一行是对任务描述,告诉模型要做翻译,接下来三行就是示例,英文单词和对应的法文单词对,最后一行就是待翻译的英文单词。将以上内容整体作为 GPT-3 的输入,让模型去补全输出就能得到
cheese
对应的法文单词。上下文学习非常的灵活,除了上面展示的翻译任务,还可以做语法修饰甚至写代码。而神奇的地方就在于,在 GPT-3 的训练过程中是并没有显式的提供,类似测试阶段任务描述加示例这样的训练数据。
当然 GPT-3 的训练数据量非常巨大(比如包含了 wiki, 书本期刊,reddit 上的讨论等等),或许里面就已经就包含了各种任务类似结构的数据,GPT-3 模型容量足够大能够将所有训练数据都记了下来。
对于上下文学习能力的成因,目前还是一个开放性的问题。为什么只有大规模的语言模型才会具备该能力?或许只有模型参数量大还不够,还必须要训练数据量也足够大,模型才能显现出该能力?