《chatGPT原理与实战》:大语言模型的算法、技术和私有化
作者:刘聪 杜振东 涂铭 沈盛宇
了解ChatGPT
ChatGPT工作流程
- 有监督的调优(Supervised Fine-Tuning, SFT):在少量已标注的数据上进行调优,以学习从给定的提示列表中生成的有监督的策略。
- 模拟人类偏好(Mimicking Human Preferences):标注者对大量SFT模型输出进行投票,创建一个由比较数据组成的新数据集。在此基础上训练新模型,即训练回报模型(Reward Model, RM)
- 近端策略优化(Proximal Policy Optimization, PPO):训练回报模型用于进一步调优和改进SFT模型,输出的结果是策略模式。具体来说,ChatGPT使用PPO算法(一种强化学习算法)在训练汇报模型上训练,以获得更好的策略模式。在当前最佳策略模型上收集更多的比较数据,用于训练新的训练汇报模型,并训练新的策略。
ChatGPT原理解构
自然语言处理的发展历程
- 基于规则学习:即便在ChatGPT火热的今日,原本可以运用正则、业务逻辑解决的问题,都不应该舍本逐末,使用机器学习甚至深度学习加以解决。我们仍需冷静地分析问题,选择合适的方案。
- 基于传统机器学习:加入监督学习所依赖的样本数据。因为适用场景受限,当前已鲜有人用。若用户无法提供标注样本,规则引擎可以满足基本可用的效果,一旦客户标注少量样本后,可以应用小样本学习、深度学习、BERT模型等技术方案,其效果远优于传统机器学习模型。
- 基于深度学习:与传统机器学习的本质区别在于不依赖于人工构造特征,CNN和RNN本身就是非常优秀的机器自动化特征提取器,减少了人工构造特征的成本,又从最终效果上得到了实际的收益。典型如卷积神经网络(Convolutional Neural Network, CNN)、循环神经网络(Recurrent Neural Network,RNN)。CNN更擅长短文本识别,因为利用局部卷积技术能更好地捕捉细节特征,给洞察文本意图标签提供很好的视角。RNN是序列模型,更擅长长文本识别,同步收集长短期记忆特征并加以分析。(这里所说的长短没有统一的标准,作者以35字长度进行划分)
- 基于Transformer结构:包括编码器(Encoder)、解码器(Decoder)两部分。内部包含位置编码、多头注意机制、残差反馈、前向网络等结构。当标注样本过小时,Transformer模型存在欠拟合现象,精度不如其它深度学习模型。
大语言模型的发展历程
ChatGPT同类产品
ChatGPT工作原理
- ChatGPT时InstructGPT一次很好的应用尝试,InstructGPT是一种框架范式,ChatGPT巧妙地将该范式应用在问答场景中。将原有的指导任(Instruct)务转变成聊天交互。
- InstructGPT的训练流程包括3个阶段:<1></1>预训练与提示学习阶段(模仿期,模型没有自我判别意识,通过不断学习人类标注结果让行为本身具有一定智能);<2>结果评价与奖励建模阶段(管教期,从教育机器答案内容变为教育机器判断答案的优劣);<3>强化学习与自我进化阶段(自主期,通过左右互搏完成自我进化,一方面输出多个结果,另一方面判断不同结果的优劣,并基于不同输出的效果模型进行差异化评估,优化自动生成过程的模型参数,完成模型的自我强化学习)。如果用人类成长的三个阶段,即:“知天理”、“辩是非”、“格万物”。
- 预训练与提示学习阶段:提示学习不需要像监督学习一样构造大量标注样本,更强调使用启发的方式,运用少量样本让模型学会任务套路,并开始模仿学习。提示学习的成功离不开两个因素:大语言模型本身、提示样本本身(提示模板)
- 结果评价与奖励建模阶段:当高水准标注人员利用统一的评价标准对结果开展排序评价后,就可以使用另一个模型学习并利用这部分数据训练出一个全新的评价模型——奖励模型(Reward Model)。重点在于构建裁判模型,裁判模型本身不会对原有模型的生成效果产生影响,仅以部分降低评价生成模型的成本,不足以带来太大改变。
- 强化学习与自我进化阶段:让第一阶段的生成模型与第二阶段的裁判模型有机结合,用裁判模型不断优化第一阶段的生成效果,再反向运用更好的生成模型,不断优化第二阶段的判别效果。这种两个阶段相互优化的框架,和经典的EM(Expectation-Maximum,期望最大化)算法属于同类思想。类似的还有生成式对抗网络(Generative Adversarial Network,GAN),通过构造一个判别器,来与原先的生成器进行对抗,秉承着遇强则强的原则,不断优化更好的判别模型,进而提升生成器模型的效果。
- 算法细节:<1>标注数据;<2>建模思路,坚信语言的本质并非理解而是生成,没有效果就增加模型规模,能力不足就增加标注任务类型,参数学习不充分就增加标注规模,模型不能类比泛化就用强化学习加速自我进化,即AI领域的暴力美学。
预训练语言模型
Transformer结构
- 摒弃了传统的CNN和RNN结构,全部采用注意力机制代替,在减少计算量和提高并行效率的同时,取得了更加优异的效果。
- 编码器主要由6个相同的层堆叠而成,每一层包含2个子层(多头注意力层Multi-Head Attention、前馈网络层Feed-Forward Network),并采用残差机制、层归一化(Layer Normalization, LayerNorm)操作连接两个子层。
- 解码器也是由6个相同的层堆叠而成,除了编码器的2个子层之外又多插入了1个多头注意力层,用于将编码器的输出与解码器的输入相融合。模型在解码器注意力部分增加了上三角掩码矩阵,防止在模型训练过程中出现信息泄露的情况,保证模型在计算当前位置的信息时不受后面信息的影响。
- 多头注意力层由多个缩放点积注意力(Scaled Dot-Product Attention)的自注意力机制组成。
- 注意力机制将查询(Query)和一组键-值(Key-Value Pair)映射到高维空间,即:对Q和K进行矩阵相乘、缩放、归一化后作为权重;对V进行加权求和。解码器部分具有特殊性,Q与K相乘后还需额外乘上一个掩码矩阵。
- Transformer中的FNN层由2个全连接层加上ReLU激活函数组成。
- 参考资料:一文理解透Transformer
基于Encoder结构的模型
基于Decoder结构的模型
基于Encoder-Decoder结构的模型
强化学习基础
机器学习的分类
- 有监督学习
- 无监督学习
- 强化学习
OpenAI Gym
OpenAI Gym是一种用于开发和比较强化学习算法的开放式工具包,提供统一的API,可以让用户轻松地在多个强化学习环境中进行实验,如出租车环境、CartPole环境。
强化学习算法
- Q-learning
- SARSA
- DQN
- Policy Gradient
- Actor-Critic
提示学习与大型语言模型的涌现
提示学习
- “预训练+微调”的范式主要让预训练模型去适配下游任务,通过引入下游任务的损失,让模型在具体任务上继续训练,以便在下游任务上取得较好的成绩。但在这个过程中,语言模型会遗忘训练过程中学到的知识,造成模型泛化性和鲁棒性的丢失,仅能保留某个任务或者某个数据的信息。因为具体的下游任务微调导致原本模型能力丧失,是大家不愿意见到的。因此“与训练+提示+预测(Pre-train+Prompt+Predict)”的范式成为大语言模型的主流使用模法
- 提示学习是在原始输入文本上附加额外的提示信息作为新的输入,将下游的预测任务转化为语言模型任务,并将语言模型的预测结果转化为原本下游任务的预测结果。例如,将判断“我爱中国”的情感极性,改为预测“我爱中国。这句话的情感为{mask}”的{mask}并将其预测出的Token映射到情感极性表型上。
- 提示学习的步骤:<1>根据不同下游任务,选择合适的预训练语言模型;<2>根据不同下游任务,对输入文本选择合适的提示模板;<3>根据不同下游任务,指定不同的关系映射,即答案空间映射(Answer Space Verbalizer);<4>根据不同下游任务,选择不同的训练策略,例如增加额外参数训练、全量参数训练等,训练策略往往与下游任务的数据规模(零样本、小样本、全量样本)和效果息息相关。
- 提示模板设计:完型填空型提示(Cloze Prompt)、前缀续写型提示(Prefix Prompt),采用掩码语言模型的下游任务适合Cloze Prompt,生成相关任务适合Prefix Prompt。模板编写方式:<人工编写>、<2>离散型提示模板自动构建、<3>连续型提示模板自动构建。人工编写>
- 答案空间映射设计:人工编写、离散型答案空间映射、连续性答案空间映射(较少)。
- 多提示学习方法:通过多个提示来进一步提高学习方法的有效性,主要包括提示集成(Prompt Ensembling)、提示增强(Prompt Augmentation)、提示组合(Prompt Composition)、提示分解(Prompt Decomposition)。
上下文学习
思维链
- 思维链提示模板与标准提示模板的差别,就是在上下文学习时,给出的演示样例不仅包括问题和答案、还包括推理依据,并在大预言模型预测过程中,并非直接给出答案结果,而是先给出问题对应的结题步骤,再推导答案。
- 思维链在小模型上提升并不显著,只有当模型参数达到100亿时才能体现出效果,参数量达1000亿时才能较显著。可能是由于小模型本身的预训练不充分,在上下文学习时,尽管生成的思维链内容较为通顺,但存在大量逻辑错误,导致结果错误。
大型语言模型预训练
大型预训练模型简介
预训练模型中的分词器
分布式深度学习框架
基于大语言模型的预训练实战
基于大语言模型的信息抽取实战
GPT系列模型分析
GPT-1~4系列模型分析
InstructGPT模型分析
基于GPT-2模型的文本摘要实战
PPO算法与RLHF理论实战
PPO算法简介
- PPO(Proximal Policy Optimization,近端策略优化)
- 强化学习的核心目的时让智能体Agent寻找出最佳的策略Policy,从而在任意时刻T都能给出对应行动Action,最终实现整体奖励Reward最大化。这里存在两种主要的学习模式:价值学习、策略学习。
- 价值学习:希望智能体通过分析行动的价值函数找到更好的策略,趋利避害。
- 策略学习:希望智能体绕过价值函数,直接基于策略进行建模,通过计算结果的损失函数,梯度更新策略模型对应参数,让策略模型基于真实样本不断优化。 1 .PPO时针对置信域策略优化(Trust Region Policy Optimization, TRPO)算法进行优化的算法,通过损失策略优化、梯度裁剪、样本重采样3个方面实现了TRPO算法的升级,实现了批量训练、稳定迭代、快速收敛的目标。
- 策略学习的关键在于3个方面:<1>构建策略模型,直接对策略建模,要求策略模型本身连续可微,目前绝大多数策略模型均采用深度神经网络进行表示建模;<2>构建评价函数,针对不同条件开展对策略的可靠评价;<3>梯度更新策略模型,利用梯度更新的方式更新策略模型。
RLHF框架简介
- RLHF(Reinforcement Learning from Human Feedback,基于人工反馈的强化学习)框架
- 先有PPO后又RLHF,即先有算法后有训练框架。RLHF框架不等同于PPO算法,只是因为ChatGPT的成功,许多人将二者联系起来
- RLHF本质上想要解决的并非精准问题,而是对齐问题,即模型可以通过监督学习实现精度的提高,通过强化学习实现生成的对齐,其中对齐的对象便是人类。
- GPT4的训练已经完全弱化了对第一阶段(人工标注提示样本)的依赖,仅依靠第二阶段(人工标注模型生成的多样本的优劣)和第三阶段(PPO强化学习)就可以实现模型的稳步优化,极大降低了人类为模型标注数据的成本。
- 自然语言发展过程中,从Bert模型在同等样本情况下精度全面领先传统机器学习模型,再到小样本、元学习对样本的大幅下降,进而到当今预训练大型语言模型出现的零样本、ICL情况下的智能涌现,最终到 GPT4对SFT本身的弱依赖及其同 PPO的全面拥抱,人工干预逐步减少,模型对人类的依赖同时也逐步降低。
基于PPO的正向情感倾向性生成项目实战
类ChatGPT实战
任务设计
数据准备
基于文档生成问题任务的类ChatGPT实战
- SFT阶段(监督微调)
- RM阶段(训练奖励模型)
- RL阶段(强化学习)
ChatGPT发展趋势
实战部分代码
其它
- 让模型学惠生成代码这种特殊的语言后,模型生成的逻辑推理效果有大幅提升。这可能应验了我们的刻板印象:“代码写得好的人,逻辑分析能力都很强”。(费曼学习法)
- 即使没有环境反馈,也要用人工标注环境反馈,通过大量的人工标注,OpenAI解决了环境反馈的问题。
手机版“神探玺洛克”请扫码