大模型基本原理
如何得到 ChatGPT 模型?
首先通过预训练(也称为自督导式学习),通过大量的资料进行模型训练,这个时候产生的模型也称为基石模型。这个时候是无监督学习。
随后经过督导式学习,让人类去标注输入、输出对,通过有标签的输入与答案的数据,对这个模型进行微调(finetune),这里人类对模型的答案做出引导和调整,是监督学习。
再经历增强化学习(Reinforcement Learning,RLHF),此时人类只需要对模型的答案进行评价,或使用一个老师模型对他进行评价
1 Transformer
上面提到了大模型GPT的诞生过程,下面结合大模型的常用架构,来加深理解:
架构图 Transformer
-
文字转换为 Token
常见有 BPE 算法,将句子进行分词,词表中有对应单次的 Token ID,随后将这些词 Embedding,得到词向量,这些词意思相近则向量维度上也更相似。
-
理解上下文 Attention
注意力机制:通过计算一句话中,分割出来的每个 token 之间的相关性,来理解每个 token 的语义。
多头注意力机制(Multi-head Attention):计算不同这个 token 从不同角度的上下文理解,如"狗"可以从忠诚、宠物、形容词等角度去理解。
Multi-head Attention,这一层在生成句子时,由于当前位置的后一个字是未知的,因此避免计算后一个字的相似度
-
整合思考 Feed Forward
它和 Attention 结合在一起,可以称做 Transformer Block 模块,模型中可以有多个 Block 叠加,反复思考。(Add & Nor 可以避免梯度消失、梯度爆炸)
-
输出层 Output Layer
线性变化(Liner) + Softmax,通过得到的向量,与一系列相近的 Token 比较,通过特定的挑选规则,推测概率最大的字,即是最后的输出。
1.1 Transformer 变体
上述是比较通用的 Encoder-Decoder 架构,代表模型为 ChatGLM、T5,能够理解输入并生成相应输出,擅长复杂任务,机器翻译等;
存在一些变体架构,如 Encoder-Only 架构,专注于理解和编码信息,擅长语义理解类任务并将文本转语义向量,代表模型有:BERT;
还有 Decoder-Only 架构,专注从已有的信息扩展出新内容,擅长生成类任务,如GPT系列
1.2 常见大模型
GPT (Generative Pre-trained Transformer),这类模型简单来说可以认为他在做文字接龙
InstructGPT,于 2022 年提出的概念,即会训练出一个老师模型/奖励模型,他能根据GPT模型的输出结果的好坏,来进行打分,从而协助人类对GPT模型做微调。实际上也是强化学习的一种,非常花费资源。
2 大模型应用
在 2025年,大模型在企业中问答中面临了不少挑战:
- 幻觉:大模型生成的内容看似合理但不符合事实或现实的现象,可以将该现象分为两类,事实性幻觉和忠实性幻觉。
- 安全合规问题:容易泄露机密信息。
- 领域建模成本高:高质量数据需要专业人才。
- 知识更新节奏慢:模型的训练时间过长,然而知识的更新诉求非常快,因此模型的消息有滞后性。
- 私域知识不足:大模型通常使用公开领域的知识训练,而企业内部知识是闭合私域的知识,因此难以满足企业垂域的专业性需求。
2.1 技术选型方案
提示工程(Prompt Engineering):
检索增强生成(RAG)
模型微调
重新训练
2.1.1 检索增强生成
RAG(Retrieval-Augmented Generation)在不更改模型参数的基础上,通过“知识外挂”的手段来提升大模型应用的准确性,以此来弥补大模型自身存在幻觉、时差性差、缺乏专业领域知识等的缺陷。
我们可以将RAG理解为开卷考试,如通过检索网页知识库,去获取这些“外挂”的参考内容,随后模型利用这些获取的片段信息生成答案。本质上,RAG帮助模型查找外部信息来改进生成结果。
RAG 在进行检索时,会**采用混合检索:**结合关键词检索和向量检索。
2.1.2 模型微调
在基础模型上,使用新的、规模较小的数据集对模型进行进一步训练的过程,以提高模型在特定任务或数据集上的性能表现。
上述两种方式的应该如何选择呢?我们可以通过以下 4 种关键特性的应用上做出选择:
| 特性 | 微调 | RAG |
|---|---|---|
| 动态/静态数据 | 模型存储静态信息,适合知识更新周期长的场景 | 实时更新检索,适合动态数据,业务知识更新周期短的场景 |
| 模型定制化 | 能定制行为,风格以及领域知识 | 专注于信息检索和整合,定制化程度低 |
| 可解释性 | 解释性差,无法溯源 | 答案可追溯,解释性高 |
| 幻觉 | 幻觉减少,但效果有限 | 基于事实数据,幻觉减少 |
可以将这上述两种方式组合起来使用,例如应用于公司内部,个性化代码规范的代码生成;客户支持机器人等
3 Prompt 工程
提示词(Prompt),是与自然语言模型交互时,提供给模型输入时,组织的语言。
Prompt 工程通过设计提示词,以确保 LLM 最佳输出的过程称为“提示工程”。同一个模型下对于同一个场景,使用不同的prompt也会获得不同的结果;它能在不更新模型参数的前提下,通过设计和优化prompt的方式,引导大模型生成我们目标结果的方法。
有效设计Prompt,包括选择正确的单词、短语、符号和格式
3.1 专业Prompt的公式
好的提示词,可以从下面 4 个方面提高它的饱满度,即:立角色、述问题、定目标、补要求。如:
你现在是专业的软件需求分析师与应用架构师,后面的问题,请你以专业人士的视角回答,我要做【员工打卡的考勤应用】,请帮忙生成一份需求文档,与样例代码,做个Demo,代码用Python输出 。
而如:“我想实现一个员工打卡的考勤系统,帮我做一个”的提示词,效果会差许多。
- 立角色:通过扮演不同的角色,让模型以角色去理解上下文信息和意图,能帮助模型通过该角色的角度去思考问题给出答案。
- 述问题:提出要解决的具体问题、要完成的任务或背景信息,让模型更好的了解用户所处的上下文环境。
- 定目标:明确达到的目标与预期效果,让大模型理解意图和目标,让模型知道它能为你做什么。
- 补要求:对需求做补充说明,如,语言需求、字数、样式需求等。
其中,补要求也有不少技巧,例如,使用成对的分隔符将重要内容包裹起来,帮助模型做语义分割;或提供模型少量的,相似的示例给它作为参考;指定预设条件,要求模型检查条件,不满足就停止执行后续的完整流程等。
3.2 Prompt 优化
通常一次的 Prompt 难以得到最佳效果,需要迭代与优化,可以按照三个步骤迭代:给出具体、明确的提示词 —— 分析提示词不符合预期的原因 —— 完善想法并优化提示词。
3.2.1 结构完善思路
① 先检查:检查Prompt中是否满足四要素:立角色、述问题、定目标、补要求
② 打基础:指定能**明确表达主题(前三要素)**的提示词,再由简至繁,逐步增加细节和说明
③ 搭结构:适当换行,将内容直观、有结构的呈现
④ 加说明:对提示词细节补充说明,将想要的逻辑梳理表达出来,如,输出XX格式等
⑤ 给提示:给予模型少量的示例,模型能从示例中学习到提示词的意图
⑥ 做预设:做好各种场景的预设,能有效防止模型说胡话