大模型架构

Transformer 模型

目前的大语言模型大都基于Transformer 模型设计,Transformer有出色的并行性和容量,使得参数千亿的大模型成为可能。Transformer 是由多层的多头自注意力模块堆叠而成的神经网络模型。

输入编码

在 Transformer 模型中,输入的词元序列 (𝒖 = [𝑢1, 𝑢2, . . . , 𝑢𝑇]) 首先经过一个输入嵌入模块(Input Embedding Module)转化成词向量序列,每个词元在输入嵌入模块中被映射成为一个可学习的、具有固定维度的词向量。通过位置编码根据次元在输入中的绝对位置分配一个固定长度的嵌入向量,表示次元的位置信息。每个词元的词向量和位置向量直接相加生成最终的输入嵌入序列,被传入后续层中。位置编码能够一定程度上建模位置信息,但是无法建模训练数据中未出现过的位置,因此,处理长文本的能力有限。

多头自注意力机制

多头自注意力机制通常由多个自注意力模块组成,能够直接建模任意距离的词元之间的交互关系。在一个序列中,每个元素都可以通过计算与其他元素的权重来获取上下文信息。这些权重反映了序列中不同位置之间的相关性。在每个自注意力模块中,对于输入的词元序列,将其映射为相应的查询(Query, 𝑸)、键(Key, 𝑲)和值(Value,𝑽)三个矩阵。
Q = X W Q , K = X W K , V = X W V Q = XW_Q, \quad K = XW_K, \quad V = XW_V Q=XWQ,K=XWK,V=XWV
接下来,每个查询向量与其所在头部的所有键向量进行点积操作,得到一个得分矩阵。这些点积值进一步除以 √𝐷 进行缩放(𝐷 是键对应的向量维度),被传入到 softmax函数中用于权重的计算。这些权重将作用于与键相关联的值,通过加权和的形式计算得到最终的输出。
Attention ( Q i , K i , V i ) = softmax ( Q i K i T d k ) V i \text{Attention}(Q_i, K_i, V_i) = \text{softmax}\left(\frac{Q_iK_i^T}{\sqrt{d_k}}\right)V_i Attention(Qi,Ki,Vi)=softmax(dk QiKiT)Vi
与单头注意力相比,多头注意力机制的主要区别在于它使用了 𝐻 组结构相同但映射参数不同的自注意力模块。输入序列首先通过不同的权重矩阵被映射为一组查询、键和值。每组查询、键和值的映射构成一个“头”,并独立地计算自注意力的输出。最后,不同头的输出被拼接在一起,并通过一个权重矩阵 W O W_O WO进行映射,产生最终的输出。如
MultiHead ( Q , K , V ) = Concat ( head 1 , … , head h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W_O MultiHead(Q,K,V)=Concat(head1,,headh)WO
多头自注意力机制允许模型在并行处理数据的同时,能够更灵活地捕捉到输入序列中的长程依赖关系。

前馈网络层

前馈网络层的主要目的是增加模型的表达能力,并为模型提供非线性变换。它通过两个全连接(线性)层和一个激活函数来实现这一点。
第一个全连接层将输入映射到一个中间维度 d f f d_{ff} dff,通常这个维度比输入维度 d m o d e l d_{model} dmodel 要大得多。激活函数通常使用ReLU(Rectified Linear Unit)或者GELU(Gaussian Error Linear Unit)第二个全连接层将中间维度 d f f d_{ff} dff 映射回原始维度 d m o d e l d_{model} dmodel
F F N ( X ) = max ⁡ ( 0 , X W 1 + b 1 ) W 2 + b 2 FFN(X) = \max(0, XW_1 + b_1)W_2 + b_2 FFN(X)=max(0,XW1+b1)W2+b2
前馈网络层通过激活函数引入了非线性映射变换,提升了模型的表达能力和拟合复杂函数的能力,此外,由于每一位置上的操作都是相同的,因此可以很容易地并行化,进一步提升了训练速度。

编码器

编码器结构由多个相同的层堆叠而成,其中每一层都包含多头自注意力模块和前馈网络模块。
在每个子层之前和之后都会应用层规范化(Layer Normalization),这有助于加速训练过程。
每个子层的输出会通过一个残差连接(Residual Connection)与其输入相加。这种设计可以帮助缓解梯度消失问题,并且让模型更容易学习到恒等映射。
第一层规范化与残差连接

X l ′ = LayerNorm ( MHA ( X l − 1 ) + X l − 1 ) \mathbf{X}'_l = \text{LayerNorm}(\text{MHA}(\mathbf{X}_{l-1}) + \mathbf{X}_{l-1}) Xl=LayerNorm(MHA(Xl1)+Xl1)

这里, X l − 1 \mathbf{X}_{l-1} Xl1 表示第 l − 1 l-1 l1 层的输出, MHA \text{MHA} MHA 表示多头自注意力机制(Multi-Head Attention), X l ′ \mathbf{X}'_l Xl 表示在第一个子层(多头自注意力)处理后的输出,加上残差连接并经过层规范化。

第二层规范化与残差连接

X l = LayerNorm ( FFN ( X l ′ ) + X l ′ ) \mathbf{X}_l = \text{LayerNorm}(\text{FFN}(\mathbf{X}'_l) + \mathbf{X}'_l) Xl=LayerNorm(FFN(Xl)+Xl)

这里, X l ′ \mathbf{X}'_l Xl 是通过第一步得到的结果, FFN \text{FFN} FFN 表示前馈神经网络(Feed-Forward Network), X l \mathbf{X}_l Xl 是经过第二个子层(前馈神经网络)处理后的输出,同样加上残差连接并经过层规范化。

解码器

解码器基于来自编码器编码后的最后一层的输出表示以及已经由模型生成的词元序列,执行后续的序列生成任务。
与编码器不同,解码器需要引入掩码自注意力模块,用来在计算注意力分数的时候掩盖当前位置之后的词,以保证生成目标序列时不依赖于未来的信息。
Y l ′ = LayerNorm ( MaskedMHA ( Y l − 1 ) + Y l − 1 ) \mathbf{Y}'_l = \text{LayerNorm}(\text{MaskedMHA}(\mathbf{Y}_{l-1}) + \mathbf{Y}_{l-1}) Yl=LayerNorm(MaskedMHA(Yl1)+Yl1)

这里, Y l − 1 \mathbf{Y}_{l-1} Yl1 是前一层的输出, MaskedMHA \text{MaskedMHA} MaskedMHA 表示掩码多头注意力机制。

除了自身的自注意力机制之外,解码器还需要对编码器的输出进行注意,即所谓的交叉注意力(CrossMHA)。这使得解码器能够关注到输入序列的相关信息,这对于理解输入并生成正确的输出至关重要。
Y l ′ ′ = LayerNorm ( CrossMHA ( Y l ′ , X L ) + Y l ′ ) \mathbf{Y}''_l = \text{LayerNorm}(\text{CrossMHA}(\mathbf{Y}'_l, \mathbf{X}_L) + \mathbf{Y}'_l) Yl′′=LayerNorm(CrossMHA(Yl,XL)+Yl)

在这里, X L \mathbf{X}_L XL是编码器的最后一层输出, CrossMHA \text{CrossMHA} CrossMHA 表示交叉多头注意力机制。

在注意力层之后,解码器也会应用位置前馈网络,这是一种全连接的神经网络层,应用于每个位置独立地变换其表示。
Y l = LayerNorm ( FFN ( Y l ′ ′ ) + Y l ′ ′ ) \mathbf{Y}_l = \text{LayerNorm}(\text{FFN}(\mathbf{Y}''_l) + \mathbf{Y}''_l) Yl=LayerNorm(FFN(Yl′′)+Yl′′)

这里的 FFN \text{FFN} FFN 表示位置前馈网络,它包含两个线性变换和一个 ReLU 激活函数。

为了帮助梯度流过深层网络,Transformer使用残差连接围绕每一个子层(sub-layer),并且在每个子层之前和之后都进行了层归一化。

解码器的最后一层是一个线性变换,将解码器的输出映射到目标词汇表的大小,接着是一个softmax函数,将线性变换的结果转换成概率分布,这个分布可以用来采样下一个最可能的词元。
O = softmax ( W L Y L ) \mathbf{O} = \text{softmax}(\mathbf{W}_L\mathbf{Y}_L) O=softmax(WLYL)

其中, W L \mathbf{W}_L WL 是一个参数矩阵,用于将解码器的输出映射到目标词汇表的维度。而 O \mathbf{O} O 表示下一个词元在目标词汇表上的概率分布。

模型架构

因果解码器架构

因果解码器架构在生成序列时确保每个位置的输出只依赖于之前的位置,而不是未来的位置。在自注意力机制中,因果解码器会对注意力矩阵应用一个掩码,使得当前位置只能看到之前的元素,而不能看到之后的元素。这样可以确保在生成每个词时,模型只考虑已生成的部分,而不会看到未来的信息,进而递归地使用先前生成的元素来预测下一个元素自回归地预测输出的词元。OPEN AI推出的CHATGPT系列使用了这一架构。
研究人员通过少样本学习、单样本学习和零样本学习等评测方法对GPT-3进行评估。
在Winograd Schema Challenge (WSC) 上,GPT-3展示了较高的准确率,特别是在少样本学习设置下。在MultiNLI和SNLI数据集上,GPT-3展示了接近甚至超越当时最佳模型的表现。在SQuAD和TriviaQA等问答数据集上,GPT-3能够通过提供少量示例(如3到10个),显著提高其在这些任务上的准确率。在CNN/Daily Mail数据集上,GPT-3能够生成高质量的摘要,尽管在某些情况下仍略逊于专门训练的模型。
GPT-3在困惑度上的表现非常出色,在生成文本时能够很好地捕捉到自然语言的概率分布。
在一些需要精确匹配的任务上,GPT-3的F1分数也很高,尤其是在问答任务中。
在机器翻译任务中,GPT-3能够获得相当不错的BLEU分数,尽管GPT-3并不是专门为机器翻译任务训练的。
GPT-3有着出色的上下文学习能力和零样本学习能力。

编码器-解码器架构

这种架构在编码器端采用了堆叠的多头自注意力机制对输入信息进行编码处理,而在解码器端则使用了交叉注意力与掩码自注意力机制,进而通过自回归的方式对输出进行生成。目前只有如 FLAN-T5等少数大语言模型是基于编码器-解码器架构构建而成的。在《Scaling Instruction-Finetuned Language Models》中研究人员对an-PaLM 540B进行评测。评测数据集包括MMLU、BBH、TyDiQA和MGSM等。
MMLU 包括数学、历史、法律和医学等 57 个任务的试题。
BBH 包括来自 BIG-Bench的 23 项具有挑战性的任务
TyDiQA是一个跨 8 种不同类型语言的问答基准。
MGSM是 Cobbe 等人提出的数学单词问题的多语言基准。 手动翻译成 10 种语言。
Flan-PaLM 在五次 MMLU 上达到 75.2%。

前缀解码器架构

前缀解码器也仅使用解码器组件,但不同的是,前缀解码器对于输入(前缀)部分使用双向注意力进行编码,而对于输出部分利用单向的掩码注意力利用该词元本身和前面的词元进行自回归地预测。与编码器-解码器不同的是,前缀解码器在编码和解码过程中是共享参数的,并没有划分为独立的解码器和编码器。对于前缀解码器,也可以由现有的因果解码器继续预训练转换而来,进而加速该模型的训练。
在生成序列时,模型首先接收一个固定的前缀作为输入。这个前缀可以是一个短语、句子或者其他形式的文本,以便为模型提供上下文信息。通过提供额外的上下文信息,前缀解码器可以在不增加模型参数的情况下增强模型的性能,特别是在少样本学习(Few-Shot Learning)和零样本学习(Zero-Shot Learning)任务中。
GLM-130B是清华大学研究团队开发的基于前缀编码器架构的大语言模型。
在SuperGLUE基准测试中,GLM-130B在多个子任务上表现优异,特别是在常识推理任务上。
在SQuAD数据集上,GLM-130B在准确率和F1分数上都达到了很高的水平。
在机器翻译任务上,GLM-130B的BLEU分数非常高,特别是在英中和中英翻译上。
在文本摘要任务上,无论是抽取式还是生成式摘要,GLM-130B都能生成高质量的摘要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值