1. LLM⼤语⾔模型⼀般训练过程
Step 1.预训练阶段 Step 2.微调阶段
- ⼤模型⾸先在⼤量的⽆标签数据上进⾏训练,预训练的最终⽬的是让模型学习到语⾔的统计规律和⼀般知识。在这个过程中模型能够学习到词语的语义、句⼦的语法结构、以及⽂本的⼀般知识和上下⽂信息。需要注意的是,预训练本质上是⼀个
⽆监督学习
过程; 得到预训练模型(Pretrained Model),也被称为基座模型(Base Model),模型具备通⽤的预测能⼒。如GLM-130B模型、OpenAI的A、B、C、D四⼤模型,都是基座模型; - 预训练好的模型然后在特定任务的数据上进⾏进⼀步的训练。这个过程通常涉及对模型的权重进⾏微⼩的调整,以使其更好地适应特定的任务; 得到最终能⼒各异的模型,例如gpt code系列、gpt text系列、ChatGLM-6B等模型;
2. 关于大模型微调
2.1 什么是⼤模型微调?
感性理解
:⼤模型微调指的是"喂"给模型更多信息,对模型的特定功能进⾏"调教",即通过输⼊特定领域的数据集,让其学习这个领域的知识,从⽽让⼤模型能够更好的完成特定领域的NLP任务,例如情感分析、命名实体识别、⽂本分类、对话聊天等;
2.2 为什么需要微调?
核⼼原因
:需要"赋予"⼤模型更加定制化的功能,例如结合本地知识库进⾏检索、围绕特定领域问题进⾏问答等;- 例如,VisualGLM是通⽤多模态⼤模型,但应⽤于医学影像判别领域,则需要代⼊医学影像领域的数据集来进⾏⼤模型微调,从⽽使得模型能够更好的围绕医学影像图⽚进⾏识别;
- 就像机器学习模型的超参数优化,只有调整了超参数,才能让模型更佳适⽤于当前的数据集;
- 同时,⼤模型是可以多次进⾏微调,每次微调都是⼀次能⼒的调整,即我们可以在现有的、已经具备某些特定能⼒的⼤模型基础上进⼀步进⾏微调;
3. 深度学习基础概念
3.1 预训练模型的核⼼模型特性:⾃回归与⽣成式
⾃回归概念
,⼤模型的预训练过程是采⽤了⼀种名为⾃回归(Autoregressive)的⽅法,⾃回归模型是⼀种序列模型,它在预测下⼀个输出时,会将之前的所有输出作为输⼊,然后根据统计规律、结合已经输⼊的样本,预测下个位置各单词出现的概率,然后输出概率最⼤的单词,类似于完形填空;
⽣成式概念
:与之类似的还有⼀个名为⽣成式模型的概念,也就是GPT中的G(Generative),所谓⽣成式模型的预测过程和⾃回归模型类似,都是根据统计规律预测下个单词的概率,所不同的是,⽣成式模型可以根据之前的样本的概率分布⽣成下⼀个词,⽣成式模型预测时会存在⼀定的随机性
- 不过⾃回归和⽣成式模型并不冲突,例如对于GPT来说,就是⼀个⾃回归⽣成式模型;
- ⼀个⾃回归⽣成式模型在进⾏预测的时候,会⾸先根据⾃回归模型,在参考到⽬前为⽌已经⽣成的词的情况下确定下⼀个词的概率分布,然后再根据⽣成式的⽅式来根据这个分布⽣成下⼀个词;
- 从最终的表现上来看,GPT这类⾃回归⽣成式模型在完成预训练之后,就获得了所谓的"Zero-Shot"或"Few-Shot"学习。即使没有针对新任务的训练数据,预训练模型也可以在新任务上有⼀定的表现;
3.2 ⾃回归模型预测过程的极简示例
- ⼤模型能够创建语意连贯的句⼦,但其本身并不理解句⼦的含义;
- 正是因为GPT的⽣成性的特性,所以很多时候会"编造"⼀些事实;
- 预训练的过程实际上就是"⼤⼒出奇迹"的过程,模型参数越多、输⼊的数据越多,就越能够"读书百遍、其义⾃现
3.3 双向⾃回归与⾃回归
主要的区别就在于⾃回归模型只看前⽂,⽽双向⾃回归模型会同时考虑前⽂和后⽂。
⾃回归预训练
:在这种⽅法中,模型在预测下⼀个词时,只会考虑已经看过的词(即前⽂)。例如,如果你正在阅读这个句⼦:"我喜欢吃...",⾃回归模型会根据"我喜欢吃"来预测下⼀个词。这种⽅式类似于我们⼈类阅读⽂本的⽅式,我们通常是从左到右,⼀次读⼀个词,然后根据已读的内容预测下⼀个词。GPT系列模型就是使⽤⾃回归预训练的;双向⾃回归预训练
:在这种⽅法中,模型在预测某个词时,会同时考虑该词的前⽂和后⽂。例如,如果你正在阅读这个句⼦:"我喜欢吃...苹果",即使"苹果"这个词是被预测的⽬标,双向⾃回归模型仍会考虑"我喜欢吃"(前⽂)和"苹果"(后⽂)来预测这个词。这种⽅式类似于你同时读到了整个句⼦,然后再去理解每个词的含义。BERT和GLM模型就是采⽤的双向⾃回归进⾏预训练;
3.4 ⽣成式模型与判别模型
很⻓⼀段时间,⽣成模型效果⼀直不如判别模型,直⾄"⼤模型"涌现能⼒出现
- ⽣成式模型:判别式模型直接学习输⼊到输出的映射,判别模型试图找到输⼊和输出之间的直接关系,⽽不是试图理解输⼊数据或输出数据的整体分布,因此通常在⼩规模数据和模型中能得到更好的性能。此外,判别式模型的训练过程通常⽐⽣成式模型更加稳定和直接;
- 判别类模型:试图学习数据的整体分布,这通常需要更⼤规模的模型和数据。在⼩规模模型中,学习这种复杂的分布可能会⾮常困难。因此,在深度学习早期,⽣成式模型的应⽤确实相对有限。然⽽,随着计算能⼒的提升和⼤规模数据集的出现,⽣成式模型的潜⼒逐渐得到展现;
⼀个经过预训练的⼤语⾔模型,就具备"⼀定程度的"通⽤能⼒,⽽只有经过微调,才能够让模型具备解决某项具体任务的能⼒
4. 大模型微调
4.1 微调算法基本背景介绍
- 微调并不是⼤模型领域独有的概念,⽽是伴随着深度学习技术发展,⾃然诞⽣的⼀个技术分⽀,旨在能够有针对性的调整深度学习模型的参数(或者模型结构),从⽽能够使得其更佳⾼效的执⾏某些特定任务,⽽不⽤重复训练模型;
- 伴随着⼤模型技术的蓬勃发展,微调技术⼀跃成为⼤模型⼯程师必须要掌握的核⼼技术。并且,伴随着⼤模型技术的蓬勃发展,越来越多的微调技术也在不断涌现;
4.2 微调算法核⼼概念介绍
- 微调数据:不同于⼤模型预训练过程可以代⼊⽆标签样本,深度学习模型微调过程需要代⼊有标签的样本来进⾏训练,微调的本质是⼀个
有监督学习
过程; - 微调的本质:相⽐海量数据在超⼤规模模型上进⾏预训练,微调只需要⼀部分有标签数据、并对模型的部分参数进⾏修改即可使得模型获得某种特殊能⼒;因此,从所需数据量和算⼒消耗来看,相⽐于训练微调的⻔槛和成本都要低很多;
- 例如:对于⼀个经过预训练的⼤模型,如果我们代⼊诸多标有"垃圾邮件"和"⾮垃圾邮件"的标签⽂本进⾏训练,则可训练其具备垃圾邮件分类这⼀能⼒;
- 从模型本身⻆度⽽⾔:微调阶段相当于是进⼀步进⾏训练,该过程会修改模型参数,并最终使模型"记住"了这些额外信息;让⼤模型永久记住信息的唯⼀⽅法就是修改参数;
- 有监督微调:supervised fine-tuning,简称SFT;
- 数据标注:⾼质量的有标签数据集在微调过程中必不可少, 数据标注⼯作则是⽤于创建这些有标签的数据集;伴随着⼤模型发展,⼈们也在尝试使⽤⼤模型来完成很多数据标注⼯作;
4.3 提示⼯程(prompt)
提示⼯程也能让模型暂时记住⼀些信息
- 除了微调外,提示⼯程也能通过让⼤模型"暂时记住"某些信息,从⽽影响或优化模型输出结果;
- 从算法原理层⾯来说,当⼀个模型接收到⼀个输⼊时,它会在内部创建⼀个表示这个输⼊的数字向量,这被称为模型的"隐藏状态"。然后,模型使⽤这个隐藏状态来⽣成⼀个回答。模型的隐藏状态是基于其接收到的所有输⼊⽣成的,因此它包含了模型当前所"知道"的所有信息。这也是为什么模型的输出可能会受到输⼊的所有部分(包括上下⽂)的影响。
- 不过,⼤模型的隐藏状态是有接受信息的上限的,当超过这个上限,模型就会"遗忘"最开始的信息。这也就是为什么ChatGPT在进⾏对话的时候会有Token上限。也正是因为存在上限,提示⼯程在让模型"记住"信息⽅⾯,作⽤有限;
4.4 ⼤模型时代AI应⽤开发的新范式
- NLP"⼩模型"时代开发流程:⼀个(类)场景训练⼀个模型。在传统的⾃然语⾔处理(NLP)中,通常会针对每个具体任务(如情感分析、命名实体识别、⽂本分类等)训练⼀个专⻔的模型。这些模型通常需要⼤量的标注数据,并且通常很难泛化到不同的任务或
不同类型的数据; - 通⽤⼤模型时代:⼀个通⽤的⼤模型能够在很多领域完成Zero-Shot。伴随着⼤模型的诞⽣,这些经过海量数据预训练的⼤模型已经能够在预训练阶段学习到了丰富的语⾔知识,包括语法、词汇、⼀般常识和⼀些任务相关的模式。因此,这些模型在许多通⽤的⾃然语⾔处理(NLP)任务上,即使没有接受过特定任务的训练,也能够达到很好的效果
- ⼤模型时代的开发流程:由于通⽤⼤模型在很多通⽤NLP任务上都有⾮常好的表现,因此针对某项特定的任务,我们只需要选择⼀个⼤模型,然后带⼊特定领域的专业数据集对其进⾏微调,即可⾮常⾼效的完成对应任务;
一个任务单独训练一个模型 选择一个大模型围绕具体任务进行微调
如何进行微调后续待更