来源于Datawhale。
大语言模型(LLM)与以前的预训练语言模型(PLM)的主要区别在于其涌现能力。
(这种能力在小型模型中不明显,但在大型模型中显著。)
-
上下文学习:首次由GPT-3引入,允许模型在提供自然语言指令或多个任务示例的情况下,通过理解上下文并生成相应输出来执行任务。
-
指令遵循:通过指令微调,LLM可以根据任务指令执行未见过的任务,展示出强大的泛化能力。
-
逐步推理:通过"思维链(Chain of Thought, CoT)"策略,LLM能够解决多步推理任务,例如数学问题。
-
大模型的特点
-
巨大的规模:参数规模达数十亿甚至数千亿,使其能捕捉更多语言知识和复杂语法结构。
-
预训练和微调:在大规模无标签文本数据上预训练,然后通过有标签数据微调,适应特定任务。
-
上下文感知:具备强大的上下文感知能力,能够理解和生成依赖前文的文本内容。
-
多语言支持:支持多种语言,促进跨文化和跨语言的应用。
-
多模态支持:一些LLM支持文本、图像和语音的多模态数据。
-
涌现能力:在大规模模型中表现出明显的性能提升,能处理更复杂的任务。
-
多领域应用:广泛应用于文本生成、自动翻译、信息检索、摘要生成、聊天机器人等多个领域。
-
伦理和风险问题:需要谨慎处理生成有害内容、隐私问题和认知偏差等伦理和风险问题。
什么是微调?
相当于给你一个预训练模型(Pre-trained model),基于这个模型微调(Fine Tune)。
预训练模型就是已经用数据集训练好了的模型。
微调方法
-
增量预训练微调 (Continue PreTraining)
使用场景:让基座模型学习到一些新知识,如某个垂类领域的常识
-
训练数据:文章、书籍、代码等
-
指令跟随微调 (Supervised Finetuning)
使用场景:让模型学会对话模板,根据人类指令进行对话
训练数据:高质量的对话、问答数据
什么情况下使用微调?
(1) 你要使用的数据集和预训练模型的数据集相似
如果不太相似,效果可能就没有那么好了,特征提取是不同的,所以相应的参数训练后也是不同的。
(2) 自己搭建或者使用的模型正确率太低。
(3)数据集相似,但数据集数量太少。
(4)计算资源太少。
不同数据集下使用微调
-
数据集1 - 数据量少,但数据相似度非常高在这种情况下,我们所做的只是修改最后几层或最终的softmax图层的输出类别。
-
数据集2 - 数据量少,数据相似度低在这种情况下,我们可以冻结预训练模型的初始层(比如k层),并再次训练剩余的(n-k)层。由于新数据集的相似度较低,因此根据新数据集对较高层进行重新训练具有重要意义。
-
数据集3 - 数据量大,数据相似度低在这种情况下,由于我们有一个大的数据集,我们的神经网络训练将会很有效。但是,由于我们的数据与用于训练我们的预训练模型的数据相比有很大不同。使用预训练模型进行的预测不会有效。因此,最好根据你的数据从头开始训练神经网络(Training from scatch)。
-
数据集4 - 数据量大,数据相似度高这是理想情况。在这种情况下,预训练模型应该是最有效的。使用模型的最好方法是保留模型的体系结构和模型的初始权重。然后,我们可以使用在预先训练的模型中的权重来重新训练该模型
微调指导事项
1.通常的做法是截断预先训练好的网络的最后一层(softmax层),并用与我们自己的问题相关的新的softmax层替换它。例如,ImageNet上预先训练好的网络带有1000个类别的softmax图层。如果我们的任务是对10个类别的分类,则网络的新softmax层将由10个类别组成,而不是1000个类别。然后,我们在网络上运行预先训练的权重。确保执行交叉验证,以便网络能够很好地推广。 2.使用较小的学习率来训练网络。由于我们预计预先训练的权重相对于随机初始化的权重已经相当不错,我们不想过快地扭曲它们太多。通常的做法是使初始学习率比用于从头开始训练(Training from scratch)的初始学习率小10倍。 3. 如果数据集数量过少,我们进来只训练最后一层,如果数据集数量中等,冻结预训练网络的前几层的权重也是一种常见做法。