聊一聊大模型 | 京东云技术团队
时候还得从 ChatGPT 说起。
2022 年 12 月 OpenAI 发部新闻了生态语言英文转化成绘图 ChatGPT,一也可以因为观众发送文手动转化成答案的工人智力体。它体现了超越全人类的生态对话的英文状态和逆世的学识。一下子间起爆了整体工人智力界,各个大亨也陆续开发客户发部新闻了邻居的大绘图,如:搜索引擎 - 文心片言、科大讯飞 - 凯发k8国际首页大绘图、Meta-LLama 等
那么好倒底多少岁的对型号算大对型号呢?截止日现仍还没有清晰明确的原则,但从现各路所上线的对型号看你,对型号技术参数每组要在 B(十亿)级别才能算作入门级大模型,理论上还可以更大,没有上限。以上只是个人理解,目前还没有人对大模型进行详细的定义。
来一副图我们的认知下大模形的成长 之路,从图下就能够看过所说大模形家簇均有同样个根(elmo 这一支除外)即 Transformer,我们知道 transformer 由 encoder-decoder 两部分组成,encoder 部分负责编码,更侧重于信息理解;而 decoder 部分负责解码,更侧重于文本生成;这样在模型选型方面就会有 3 种不同的选型,即:【only-encoder】这部分以大名鼎鼎的 Bert 为代表、【only-decoder】这部分的代表就是我们的当红炸子鸡 GPT 系列、【encoder-decoder】这部分相比于其他两个部分就显得略微暗淡一些,但同样也有一些相当不错的成果,其中尤以 T5 为代表。个人理解 T5 更像一个过渡产品,通过添加一些 prefix 或者 prompt 将几乎所有 NLP 任务都可以转换为 Text-to-Text 的任务,这样就使得原本仅适合 encoder 的任务(classification)也可以使用 decoder 的模式来处理。
图下耗时端点是可以看见都是由 2018 年开始,2018 年应该算是 NLP 领域的中兴之年,这一年诞生了大名鼎鼎的 Bert(仅使用 Transformer 的 Encoder 部分),一举革了以 RNN/LSTM/GRU 等为代表的老牌编码器的命。Bert 确立了一种新的范式,在 Bert 之前我们的模型是与任务强相关的,一个模型绑定一个任务,迁移性差。而 Bert 将 NLP 任务划分为预训练 + 微调的两阶段模式:预训练阶段使用大量的无标记数据训练一个 Mask Language Model,而具体的下游任务只需要少量的数据在预训练的基础上微调即可。这样带来两个好处:(a)不需要针对专门的任务设计模型,只需要在预训练模型上稍作调整即可,迁移性好,真的方便。(b)效果是真的好,毕竟预训练学了那么多的知识。所以在接下来的几年内几乎所有的工作都是在围绕 Bert 来展看,又好用又有效果,谁能不爱呢?如下图就是 Bert 家族的明星们。
Transformer 来解决了哪几个间题?
在没导致 Transformer 之前,NLP 领域几乎都是以 RNN 模型为主导,RNN 有两个比较明显的缺陷:(a)RNN 模型是一个串行模型,只能一个时序一个时序的依次来处理信息,后一个时序需要依赖前一个时序的输出,这样就导致不能并行,时序越长性能越低同时也会造成一定的信息丢失。(b)RNN 模型是一个单向模型,只能从左到右或者从右到左进行处理,无法实现真正的双向编码。
动态表情包GIF
Transformer 摒除了 RNN 的次序标识号措施,全安全使用留意力考核机制来对数据采取标识号,如上图所述所述提示,Transformer 的运算公式历程是全并行传输的,都能能此外运算公式所有的时序的留意力及格率。另一个 Transformer 是正宗意义的双重标识号,如上图所述所述提示,在运算公式 input#2 的留意力及格率时,input#2 是都能能此外看清 input#1、input#3 的且在 input#2 来说 input#1、input#3、和 input#n 都要等级距里的,如果没有其实距里的范畴,正宗意义的天涯若比邻的觉着。
Tranformer 的庐山真面貌。
下面来各位从后相对深入基层的查摆问题点一下 Transformer 结构,以及为什么大模型都要基于 Transformer 架构。以及在大模型时代我们都对 Transformer 做了哪些调整及修改。
同时来两张图,下列这张图说是.我 Transformer 的架构图,从图中可以看出,Transformer 由左右两部分组成,左边这部分是 Encoder,右边这部分就是 Decoder 了。Encoder 负责对信息进行编码而 Decoder 则负责对信息解码 。下面我们从下往上对下图的每个部分进行解读。
Stage-1 组成部分就做二件事:对发送的文做打码、对文地理位置做打码。
Token Embedding
这篇分主要的是对文案对其进行编号,其核心思想部位为如此切分 Token。典型的做法有 Sentence Piece、Word Picece、BPE、甚至 UniGram 切词等。切词方式没有定数,个人理解切词的一个原则是:在能够覆盖到你的数据集的同时词汇表尽可能的小。故对切词方式不在赘述。下面啰嗦一下如何得到 Token Embedding:
Positional Encoding
所在具体位置编码查询,前排人们有提及到过在确定重视力的那时候是不能并不是所在具体位置的慨念的(见图 - 3),而对于任何一门语言,单词在句子中的位置以及排列顺序是非常重要的,它们不仅是一个句子的语法结构的组成部分,更是表达语义的重要概念。一个单词在句子的位置或排列顺序不同,可能整个句子的意思就发生了偏差,比如:” 我最爱你 “和” 你希望我 “对 self attention 来说一也许会被加工为一致个意是,但实际意是却不完差不多。再造问接着下一句话 “天边飞来飞去一鸟,它的头顶插着一部旗子;地底下坐着一狗,它的色是咖啡色的。”,如果你们这时间计算的” 鸟 “的目光力英语四级分值的时间,第一名个 “它” 与第二名个 “它” 本体论上对 “鸟” 的重大突出贡献情况就是一模一样的,亦是若并没有地址信息则这俩个” 它 “相对于” 鸟 “言之就会亦是的重大突出贡献度,这不言而喻就是合理合法的。为了更好地清除上述内容等等原因,Transformer 里建立了 Position Encoding 的构架。那么好要怎样对地址开始编号规则?
用整值复制粘贴区域。另一种很朴实无华的作法是以 token 序列依次进行编码,即:0,1,2,3,……_n_。这种方式会有一些缺陷如:(a)无法处理更长的序列,外推性差。(b)模型的位置表示是无界的,随着序列长度的增加,位置值会越来越大。这种和 Bert 的可学习的编码方式原理一致,不再赘述。
用 [0,1] 范围标记位置。为了能应对整参考值带动的原因,自己就可以采取将标准编码查询的限制在 [0,1] 之间,0 表示第一个 token,1 表示最后一个 token,然后按照 token 的多少平均划分 [0,1] 区间,这样一来我们的编码就是有界的。举个例子:当有 3 个 token 时位置信息就表示为
4 个 token 时则认为为
等以此来类推。但这些同个会见到些许大问题,这种当字段长短不那样时,token 之间的相对距离就会不同。比如当 token 数为 3 时,token 之间的相对值为
若 token 数为 4 时则相对值变为
1. 它能为每时关键步骤打出同一个独有的简码,即简码是唯一的且确保的;
2. 在回文字段粗度区别的情況下,区别回文字段中 token 的相对来说地理位置 / 距就要保护不一;
3. 模式化须得能一点不费事地类化到更长的优美句子,它的值须得是有界的;
大建模 21世纪最常见的角度打码措施。
大模形新时代怎么样才能项目编码查询就能拥有最佳的外推性让甚为己任要,那么好为是什么要着重指出外推性?某个很生活的因为是在近年来模形不断地的长大,分分钟两千多张卡有的十几万张卡的换算资源英文就把乃至部件的从业人员者挡在了后门,因为大家存在的疑问也越多越简化,进入越多越长。大家没办法会根据不一样的疑问去修整模形,这样子就须要某个全能型的支撑柱模形,它就能外理比魔鬼训练宽度更长的进入。一下面有两种项目编码查询办法为代理。
特定作业具体流程以下的图如图:
AliBi。AliBi 的做法相较于正弦波或 RoPE 编码来的简单粗暴,与传统方法不同,ALiBi 不会向 token embedding 中添加 position embedding,取而代之的是直接将 token 的相对距离直接加到了 AttentionScore 矩阵上,比如_q_和_k_相对位置差 1 就加上一个 -1 的偏置,两个 token 距离越远这个负数就越大,代表他们的相互贡献越低。如下图,左侧的矩阵展示了每一对 query-key 的注意凯发k8国际首页分,右侧的矩阵展示了每一对 query-key 之间的距离,m 是固定的参数,每个注意头对应一个标量。原有注意力矩阵_A_,叠加了位置偏移矩阵_B_之后为 A+B_×_m
Attention 需消费者关注力机理
关系式 - 5 就是 Self Attention 的核心,只要理解了这个公式也就理解了 Transformer。
你们细心地看一个图 - 4 中的 Stage-2 部分会发现 Encoder 和 Decoder 这部分是不太一样的,Encoder 这部分叫做 Multi Head Attention 而 Decoder 部分叫做 Masked Multi Head Attention。多了个 Masked,先记下来后面我们来对这部分做解释。
在【那些为之类要明确提出 Transformer 架构?】位置让我们讲直到,Transformer 摒弃了 RNN 的顺序编码方式,采用了一种叫做注意力机制的方法来进行编码,那么什么是注意力机制?如下:
整个计算公式的输送也是关注力良好率,这么来领悟整个等式,企业的用一举例来举例。美感下面企业的在百度网络搜索展开网络搜索的一场所,_Q_就相当于我们在输入框输入的关键词,当我们输入关键词之后搜索引擎会根据我们的关键词与文档的相似度输出一个快照列表,_K_就是这个快照列表,每个文档与我们输入的关键词的相似度不同,所以排在第一个的是搜索引擎认为最重要的文档,打分就高,其他依次降序排列;然后你点进去阅读了这篇文章,那么这篇文章的内容我们就可以类比为_V_。这是一个搜索引擎的检索过程,而 Attention 的计算过程与搜索的过程几乎完全相同,我们结合下面这张图来详细的说明一下注意力的计算过程。
Multi Head Attention(MHA)
还来我要看看下 Multi Head Attention 的计算方法,很清晰是吧。前面说到的 Attention 就是在一个头里的计算,那么多头就是把这个计算多跑几次,分别得到每个头的输出,然后将所有的头输出进行连结,最后再乘一个矩阵_WO_将输出拉回到某个凯发k8国际首页空间(Transformer 里为 512 维),如下图有 8 个注意力头。
为一些要安全使用双头多碇要留意力?双头多碇要留意力原则打造了众多觉得子区域,任何头享受不一得_Q_,K,_V_权重矩阵,这些权重矩阵每一个都是随机初始化,在训练之后,每个头都将输入投影到不同的表示空间,多个 head 学习得注意力侧重点可能略微不同,这样给了模型更大的容量。(可以想象一下 CNN 中不同的滤波器分别关注着不同的特征一样)。
我也说点一下 Multi Query Attention(MQA),这也是在一些大模型中使用的对 MHA 进行改造的手段,比如:Falcon、PaLM 等。MQA 就是在所有的注意力头上共享_K_,V,优化侦探推理机械性能、限制显卡显存使用。就这些单纯。
残差超链接、Norm、FFN、激活开通数学函数。
在高度神经系统系统上中,当系统上的高度不断提高时,类别过线性拟合及系数失踪、爆管的情况發生的概率统计也会跟着不断提高,导至浅部网路产品参数时未自动更新,残差外部链接就是要为彻底解决这类情况;Norm 可以将每一层的输出通过归一化到符合某个分布,可以使模型更加稳定。常见的 Norm 的方法有 BatchNorm、LayerNorm。NLP 任务中由于输入长度不一致的问题一般都是用 LayerNorm 来做归一化。在大模型时代,很多模型都使用 RMSNorm 来替代 LayerNorm,比如 LLaMA、ChatGLM 等,只不过大家在使用 Norm 的时候位置不同罢了。有些模型可能会将 Norm 放在残差之前(LLaMA)、有些可能会在残差之后(ChatGLM)、甚至 Embedding 之后甚至放在整个 Transformer 之后等,至于哪个效果好,仁者见仁。
今天是 LayerNorm 和 RMSNorm 的计算公式,RMSNorm 想相较于 LayerNorm 去除了计算均值平移的部分,计算速度更快,且效果与 LayerNorm 相当。公式如下所示。
更改密码涵数这样必须提一段话那我提一次 SwiGLU,在很多大模型中都有用到,比如 LLaMA2、ChatGLM2 等,扔个公式,体会一下。
在这里我国基本上都已经聊完 Transformer 的核心部分。图 - 4 中 Stage-2(左)部分与 Stage-3(右)完全相同,Stage-3(左)与 Stage-4(右)完全相同,Stage-2(右)部分几乎与 Stage-2(左)部分完全相同,只不过右侧部分的 Attention 需要掩码,这是因为右侧是一个 Decoder 的过程,而 Decoder 是一个从左到右的自回归的过程,想象一下我们在写下一句话【今天的天很蓝】,你是从左到右依次写出的这几个字,当你在写 “今” 的时候这时候还没 “天” 所以 “天” 这个位置对于 “今” 这个位置的注意力应该为 0,以此类推。这时候就要对 t+1 时刻做掩码。即计算 t 时刻的注意力分值的时候将 t+1 时刻对 t 时刻的注意力设为 0 即可。如下图所示,将查询矩阵的上三角设置为一个极小值即可,不再赘述。
收起比喻了解在大模形网络他们对 Attention 部分有哪些改造。常见的改造方法即 Flash Attention
Flash Attention。
3. 逐个升级,一直到运算公式终止。因完全运算公式完全在 GPU SRAM 中开展仅有个体前面值的保留应该与 HBM 开展人机相互,增多了与 HBM 的人机相互,优化运算公式特点。
预训练法及稍微调整方式方法
说明完成了 Transformer 的原理以及大模型时代针对于 Transformer 的每个组件都做了哪些修改。接下来我们聊一下如何训练以及如何微调大模型。
正中间当我们说到 Bert 时代将所有的 NLP 任务统一划分为了预训练 + 微调两阶段,预训练负责从大量无标记的数据中学习语言特征,微调使用有标记的数据调整模型适应具体的下游任务。这个模式同样适用于大模型。
预训练学习。目前市上上乃至位置的大建模 都有 only-decoder 的自回归模型,即用前 n 个 token 预测第 n+1 个 token 的值得概率。这是一个语言模型,不再赘述。但也有比较特殊的,比如 ChatGLM,如下图,它既有 Encoder 部分也有 Decoder 部分。稍微复杂一点,首先它会在输入中随机 Mask 一些 span,然后将 Mask 后的 span 随机的拼接在原始输入的后边。训练的时候分两步:(1)对 [S] 后进行续写,这部分是个 Decoder 的部分,单向的。(2)对 Mask 掉的部分进行预测,使用第(1)步的生成结果进行调整。从而使模型达到收敛。
一如既往预练的成就即使从许多无标注得参数资料学校习到这些基本知识,毕竟是很清新得文学语言模式,以至于不须得劳动力镭雕,要是能回收利用到许多得文件参数资料就需要练,要素是显卡功耗够,本体论上预练得参数资料太多越高。大模式世纪近乎全都是几百亿 token 的数据。
上下调整(Fine Tuning)。细调是因为适用实际上得下面日常任务,施用指定的有图标的信息集对模形来进行进步的调整而使往模形中加入有一些基本知识的科技手段。若是 你有没有有足够的資源全技术指标细调是个还还可以的抉择,它还可以更加的加以的学习了解到你的指定信息的特质,基本原理上感觉必须是最好的的。但大模形分分钟数5个 G,训练起来存储至少还要再翻一倍,非常耗费资源。那么有没有别的方法也能往模型中注入特定域的知识呢?还是有一些方法的,既然全参数跑不动那么我们就调整部分参数,这就是参数高效微调(Parameter-Efficient Fine-Tuning)这一类方法的思想。下面我们说一些几种参数高效微调的方法。
P-Tuning。她是种具体方法(prompt tuning、prefix tuning、p-tuning、p-tuning v2),虽然实现不同但思路大同小异,至于那个名字对应到那个方法我也记不清,所以这块我们把这些放在一块来说。p-tuning 这一类方法的做法是在模型原有结构上增加一部分参数,比如:在原输入上硬编码增加一些提示词、在原始 Embedding 前面拼接上一些可训练的张量等。当然这些张量的生成上也有不同,有些是跟模型一起训练的、有些是专门针对这部分搞个编码器;其次拼接位置也有所不同,有的是拼接在 Embedding 上,有的可能每个层都拼接。总之就是搞了一部分可学习的参数然后放在模型里面一起训练,只更新这部分参数的权重,从而达到往模型中注入知识的目的。来张图体验一下。这一类的方法的缺陷是会占用原有模型的一部分空间,这样可能会降低原有模型能够处理的文本长度的上限。
Adapter。Adapter 的做法是在预训练模型的某些层中间添加 Adapter 块(如下图中间部分所示),微调的时候主体模型冻结,只更新 Adapter 块的权重,由 Adapter 块学习特定的下游任务。每个 Adapter 由两个前馈层组成,第一个前馈层将输入从原始凯发k8国际首页投影到一个相对较小的凯发k8国际首页,然后再经过一层非线性转换,第二个前馈层再还原到原始输入凯发k8国际首页,作为 Adapter 的输出,与预训练其他模型进行连接。与前面提到的 P-Tuning 系列不同,P-Tuning 是在预训练模型的某些层上增加一些可训练的参数,而 Adapter 是在预训练模型的层之间添加可训练参数。一个更形象的说法 P-Tuning 使模型变胖了(实际上是压缩了一部分原有空间),Adapter 使模型变高了。Adapter 的插入可以分为串行和并行两种,如下图左右两图所示,很好理解。
培训方式方法。
结果我们都再聊以下在原有算率下是怎样魔鬼体能训练法一家大型号。大型号魔鬼体能训练法是一种家非常复杂的作业,发生变化型号和数据报告面积的涨幅寓意着魔鬼体能训练法日子的涨幅。 传统的的单卡的操练学习科目方法基本上不了来完毕任务这些东西,所以即将依托于于数据集中式的操练学习科目方法来大数量的的操练学习科目方法对模型。数据集中式的的想法本来也很简洁,个人小结几句话正是:学会变通、化整为零。将整体的操练学习科目方法分解到有差异的卡上,各卡两者之间区域合作来完毕任务的操练学习科目方法。特别怎么来分解整体的操练学习科目方法时?大增强能能分成下面两种:
统计数据串行:所谓的大参数源源串行执行还是将样版大参数源源切提成与众不同的更小的输出,各个卡只需要加工处理更小的1组成部分大参数源源,最中在归并计算方法系数,第三将系数各是更新软件到各个连接点上。大参数源源串行执行的条件是单卡是可以吃得下全部整个沙盘模型。
3d模型串行:模板并行执行执行执行性可细致划分为银行瀑布工厂工作台并行执行执行执行性和张量并行执行执行执行性。银行瀑布工厂工作台并行执行执行执行性是将模板的有所不同于层下发到有所不同于的丝机人上,每位丝机人责任任何层的估算。举个例子来说:0~3 层由 gpu0 来处理、4~8 层由 gpu1 来处理等最终再汇总计算梯度进行更新。张量并行相对于流水线并行切分的更细,流水线并行是对层进行切分,但每个层仍然是完整的分在一张卡上,而张量并行是对层内进行切分,将一个层切分为由多个张量组成的部分,每个张量由不同的机器进行运算。如下图所示,可能绿色部分在一张卡上,蓝色部分在另一张卡上进行计算。
在模式训炼这里也是大多现做的骨架以供应用,如:DeepSpeed、Megatron-LM 等,本次介绍主要已模型框架及原理为主,相关训练框架不在本次介绍范围之内,后续我们再针对训练框架做一些专门的介绍。
分析:
公司对大模式从关键技术及设备构造上做些简简单单的说明,渴望能给各位老板在掌握大模式的道路上保证点能够 帮助。他人实践经验相关经验是有限的,说的不正确的问题还请尽早要求可贵的意见与建议,也能够 联系起来自己的线下实体计划方案。前一期会构建公司在凯发k8国际首页财富科技领域体能训练大模式的实践经验相关经验写一遍偏实践经验的文章内容好。