Datawhale9月组队学习打卡Day9

Datawhale9月组队学习打卡Day9

写在前面

今天没什么要写的碎碎念,因为话题太过私人了所以我转移到github的博客上写了。昨天看分布式训练看到了很多不错的想法,下午找论文也寻找到了不错的idea,总之这场学习没有白费力气,很好。一定要去积极的搜索查找学习资料。
不多说废话了,开始今天的学习。
这一章是“新的模型架构”。我不知道什么是“新的模型架构”。目前来讲多模态clip也用的是transformer。

回想一下第7章 模型架构,神经语言模型的核心接口是一个将token序列映射到上下文嵌入的编码器

[ the , mouse , ate , the , cheese ] ⇒ ϕ [ ( 1 0.1 ) , ( 0 1 ) , ( 1 1 ) , ( 1 − 0.1 ) , ( 0 − 1 ) ] .   [\text{the}, \text{mouse}, \text{ate}, \text{the}, \text{cheese}] \stackrel{\phi}{\Rightarrow} \left[\binom{1}{0.1}, \binom{0}{1}, \binom{1}{1}, \binom{1}{-0.1}, \binom{0}{-1} \right].\ [the,mouse,ate,the,cheese]ϕ[(0.11),(10),(11),(0.11),(10)]. 

以GPT-3为例,它是一个通过堆叠96层Transformer block,映射token序列 x 1 : L x_{1:L} x1:L的神经语言模型:

GPT-3 ( x 1 : L ) = TransformerBlock 96 ( EmbedTokenWithPosition ( x 1 : L ) ) , \text{GPT-3}(x_{1:L}) = \text{TransformerBlock}^{96}(\text{EmbedTokenWithPosition}(x_{1:L})), GPT-3(x1:L)=TransformerBlock96(EmbedTokenWithPosition(x1:L)),

其中,每层Transformer block使用

  • 自注意力层,允许每个token进行交互
  • 前馈层,独立处理每个token:

TransformerBlock ( x 1 : L ) = AddNorm ( FeedForward , AddNorm ( SelfAttention , x 1 : L ) ) . \text{TransformerBlock}(x_{1:L}) = \text{AddNorm}(\text{FeedForward}, \text{AddNorm}(\text{SelfAttention}, x_{1:L})). TransformerBlock(x1:L)=AddNorm(FeedForward,AddNorm(SelfAttention,x1:L)).

先验知识:

  • 这种稠密的Transformer模型架构是目前开发大语言模型的主要范式。
  • 但是,扩展这种模型并非易事,需要数据、模型和流水并行。

现状:

  • 我们的规模已经到了极限。
  • 随着模型越来越大,它们必须被拆分到更多的机器上,网络带宽成为训练的瓶颈。下面是一个模型并行示例:

GPU1 [ layer1 , layer2 ] GPU2 [ layer3 , layer4 ] GPU3 [ layer5 , layer6 ] . \text{GPU1}[\text{layer1}, \text{layer2}] \quad\quad\quad \text{GPU2}[\text{layer3}, \text{layer4}] \quad\quad\quad \text{GPU3}[\text{layer5}, \text{layer6}]. GPU1[layer1,layer2]GPU2[layer3,layer4]GPU3[layer5,layer6].

  • 因此,如果我们要继续扩大规模,我们需要重新思考如何构建大语言模型。
  • 对于稠密的Transformer模型,每个输入使用语言模型的相同(所有)参数(如GPT-3的175B参数)。
  • 相反,我们是否可以让每个输入使用不同的(更小的)参数子集?

在本章中,我们将探讨两种不同类型的“新”模型架构,这提高了模型的规模上限。特别地,我们将讨论:

  • 混合专家模型:我们创建一组专家。每个输入只激活一小部分专家。
    • 直觉:类似一个由专家组成的咨询委员会,每个人都有不同的背景(如历史、数学、科学等)。

input ⇒ expert 1 expert 2 expert 3 expert 4 ⇒ output . \text{input} \quad\quad\Rightarrow\quad\quad \text{expert}_1 \quad \text{expert}_2 \quad \text{expert}_3 \quad \text{expert}_4 \quad\quad\Rightarrow\quad\quad \text{output}. inputexpert1expert2expert3expert4output.

  • 基于检索的模型:我们有一个原始数据存储库。给定一个新的输入,我们检索存储库中和它相关的部分,并使用它们来预测输出。
    • 直觉:如果有人问你一个问题,你会进行网络搜索,并阅读搜索得到的文档以得出答案。

store ∣ input ⇒ relevant data from store ⇒ output . \text{store} \quad\quad|\quad\quad \text{input} \quad\quad\Rightarrow\quad\quad \text{relevant data from store} \quad \quad\quad\Rightarrow\quad\quad \text{output}. storeinputrelevant data from storeoutput.

混合专家系统(Mixture of Experts, MoE)是在神经网络 (Neural Network, NN) 领域发展起来的一种集成学习(Ensemble Learning) 技术。传统的深度学习模型在训练时,对于每个输入样本,整个网络都会参与计算。随着模型越来越大,训练使用的样本数据越来越多,训练的开销越来越难以承受。
而 MoE 可以动态激活部分神经网络,从而实现在不增加计算量的前提下大幅度增加模型参数量。
MoE 技术目前是训练万亿参数量级模型的关键技术。MoE 将预测建模任务分解为若干子任务,在每个子任务上训练一个专家模型(Expert Model),开发一个门控模型(Gating Model),该模型根据要预测的输入来学习信任哪个专家,并组合预测结果。
尽管该技术最初是使用神经网络专家和门控模型来描述的,但它可以推广到使用任何类型的模型。
大规模预训练模型可以隐式的编码知识并应用于下游任务,为开放域问答、对话、摘要等任务带来了巨大的性能提升。然而不断扩大语言模型参数量以及训练数据规模也可能带来如下问题:
低效。模型规模数量级增大带来的性能增益可能越来越小。
静态。预训练模型编码隐式知识的方式难以对具有时效性的知识进行调整。
不透明。研究者很难判断模型本身掌握了什么知识,在完成任务时用到了哪些知识。在很多下游任务中,语言模型可能会产生事实幻觉(Fact hallucination)。
为了解决上述问题,研究者们提出了改进任务表现的另一种思路:基于检索的自然语言模型。
这类模型可以在外部知识库中搜索所需信息,结合外部知识以及语言模型的本身优势完成任务。

10.1 混合专家模型

MoE 包含四个要素:

  • 将任务划分为子任务
  • 为每个子任务开发专家
  • 使用门控模型来决定使用哪个专家
  • 池化预测和门控模型输出以进行预测

子任务和专家

一些预测建模任务非常复杂,因此需要尽可能的把它们划分为子任务来处理。这是解决问题的一种分治方法,是许多预测建模自动化方法以及更广泛地解决问题的基础。
例如,可以根据问题的一些领域知识将输入特征空间划分为子空间。然后可以在问题的每个子空间上训练模型,实际上是特定子问题的专家。然后,模型会学习调用哪个专家来预测未来的新示例
第一步是将预测建模问题划分为子任务。
这通常涉及使用领域知识。例如,可以将图像划分为单独的元素,例如背景、前景、对象、颜色、线条等。
MoE 采用分治的策略,将一项复杂的任务分解为几个更简单、更小的子任务,并针对不同的子任务开发个体学习者(称为专家)进行训练。
在 MoE 系统中,一个关键问题是如何找到任务的自然划分,然后从子解决方案中得出整体解决方案。

接下来,为每个子任务设计一个专家。
MoE 方法最初是在人工神经网络领域开发和探索的,因此传统上,专家本身是用于预测回归情况下的数值或分类情况下的类别标签的神经网络模型。
专家可以是任何模型,例如:支持向量机器 (Support Vector Machines, SVM)、高斯过程 (Gaussian processes, GP) 、隐藏马尔可夫模型(hidden Markov models, HMM)、卷积神经网络(Convolutional Neural Networks, CNN)、Transformer、ViT(Vision Transformer)。
门控模型用于解释每个专家所做的预测,并帮助决定对给定输入信任哪个专家。这被称为门控模型或门控网络,因为它传统上是一个神经网络模型。
门控网络将提供给专家模型的输入模式作为输入,并输出每个专家在对输入进行预测时应该做出的贡献。由门控网络确定的权重是根据给定的输入动态分配的,因为 MoE 系统有效地学习了每个集成成员学习了特征空间的哪一部分。
门控网络是 MoE 的关键,并且门控模型有效地学习为给定输入选择类型子任务,反过来,专家可以信任以做出强有力的预测。
MoE 也可以看作是一种分类器选择算法,其中单个分类器被训练成为特征空间某些部分的专家。
当使用神经网络模型时,门控网络和专家一起训练,以便门控网络学习何时信任每个专家进行预测。这种训练过程传统上是使用期望最大化 (Expectation Maximization, EM) 来实现的。门控网络可能有一个 softmax 输出,它为每个专家提供类似概率的置信度分数
一般来说,训练过程试图实现两个目标:
对于给定的专家,找到最优的门控函数;对于给定的门控函数,针对门控函数指定的分布训练专家。
MoE 必须做出预测,这是通过池化或聚合机制实现的。这可能就像选择门控网络提供的具有最大输出或置信度的专家一样简单。或者,可以进行加权和预测,明确地结合每个专家的预测和门控网络估计的置信度。也可能存在其他有效利用预测和门控网络输出的方法。然后,池化/组合系统可以选择具有最高权重的单个分类器,或者计算每个类的分类器输出的加权和,并选择接收最高加权和的类。

混合专家系统

混合专家系统 (Mixture of Experts),简称 MoE 或 ME,是一种集成学习技术,它实现了在预测建模问题的子任务上培训专家的想法。在神经网络社区中,研究人员研究了分解输入空间的 MoE 方法,以便每个专家检查空间的不同部分,门控网络负责组合各种专家。
在 MoE 架构中,一组专家和一个门控相互合作,通过将输入空间划分为一组嵌套的区域来解决非线性监督学习问题。门控对整体输入空间进行软分割,专家模型在这些区域的分区中学习特定的参数。
可以使用期望最大化 (Expectation Maximization, EM) 算法来学习专家模型和门控模型中的这些参数。
在这里插入图片描述

10.1.1 基础知识

混合专家的想法可以追溯到Jacobs et al. (1991)

首先MoE是一个层,而不是一整个模型。其次,正如我们刚才所说,这个模型结构包含一个门网络来决定激活哪个expert,同时包含n个expert网络,这n个expert网络一般是同结构的。
在这里插入图片描述

为了介绍基本思想,假设我们正在解决一个预测问题:

x ∈ R d ⇒ y ∈ R d . x \in \mathbb{R}^d \Rightarrow y \in \mathbb{R}^d. xRdyRd.

让我们从学习前馈(ReLU)神经网络开始:

h θ ( x ) = W 2 max ⁡ ( W 1 x , 0 ) , h_\theta(x) = W_2 \max(W_1 x, 0), hθ(x)=W2max(W1x,0),

其中参数为 θ = ( W 1 , W 2 ) \theta = (W_1, W_2) θ=(W1,W2)

  • 然而,这个函数可能表达能力不足。
  • 我们可以使神经网络更宽或更深。

但专家的混合方法是:

  • 定义 E E E个专家。

  • 每个专家 e = 1 , … , E e = 1, \dots, E e=1,,E都具有自己的嵌入 w e ∈ R d w_e \in \mathbb{R}^d weRd

  • 将门控函数定义为 E E E个专家上的概率分布:

g e ( x ) = exp ⁡ ( w e ⋅ x ) ∑ e ′ = 1 E exp ⁡ ( w e ′ ⋅ x ) . g_e(x) = \frac{\exp(w_e \cdot x)}{\sum_{e' = 1}^E \exp(w_{e'} \cdot x)}. ge(x)=e=1Eexp(wex)exp(wex).

  • 每个专家 e = 1 , … , E e = 1, \dots, E e=1,,E都具有自己的参数 θ ( e ) = ( W 1 ( e ) , W 2 ( e ) ) \theta^{(e)} = (W_1^{(e)}, W_2^{(e)}) θ(e)=(W1(e),W2(e))

  • 根据专家特定参数定义每个专家函数:

h θ e ( x ) = W 2 ( e ) max ⁡ ( W 1 ( e ) x , 0 ) . h_{\theta_e}(x) = W_2^{(e)} \max(W_1^{(e)} x, 0). hθe(x)=W2(e)max(W1(e)x,0).

  • 将最终函数定义为专家的混合:

f ( x ) = ∑ e = 1 E g e ( x ) ⏟ gating h θ e ( x ) ⏟ expert . f(x) = \sum_{e=1}^E \underbrace{g_e(x)}_\text{gating} \underbrace{h_{\theta_e}(x)}_\text{expert}. f(x)=e=1Egating ge(x)expert hθe(x).
G ( x ) i = 0 G(x)_i=0 G(x)i=0的时候,对应的expert就不会激活。

10.1.1.1 示例

考虑d=2,并且每个专家都是一个线性分类器(来源):

10.1.1.2 训练

我们可以通过反向传播来学习混合专家模型。根据链式法则,可以得到:

∇ f ( x ) = ∑ e = 1 E g e ( x ) ( ∇ ( log ⁡ g e ( x ) ) h θ e ( x ) + ∇ h θ e ( x ) ) . \nabla f(x) = \sum_{e=1}^E g_e(x) (\nabla (\log g_e(x)) h_{\theta_e}(x) + \nabla h_{\theta_e}(x)). f(x)=e=1Ege(x)((logge(x))hθe(x)+hθe(x)).

注意到,梯度与 g e ( x ) g_e(x) ge(x)成比例,并且同时更新门控函数和专家。

10.1.1.3 节约计算
  • 注意到,门控函数 g ( x ) = [ g 1 ( x ) , … , g E ( x ) ] g(x) = [g_1(x), \dots, g_E(x)] g(x)=[g1(x),,gE(x)]对于每个专家都是非零的。例如:

g ( x ) = [ 0.04 , 0.8 , 0.01 , 0.15 ] . g(x) = [0.04, 0.8, 0.01, 0.15]. g(x)=[0.04,0.8,0.01,0.15].

  • 正如公式所言,专家的混合不会节省任何计算,因为前向传播仍然需要评估每个专家,而反向传播也必须接触每个专家。

  • 然而,如果我们将门控函数 g ( x ) = [ g 1 ( x ) , … , g E ( x ) ] g(x) = [g_1(x), \dots, g_E(x)] g(x)=[g1(x),,gE(x)]近似为 g ~ ( x ) = [ g ~ 1 ( x ) , … , g ~ E ( x ) ] \tilde g(x) = [\tilde g_1(x), \dots, \tilde g_E(x)] g~(x)=[g~1(x),,g~E(x)],其中大多数专家都是零。因此,在前向和反向传播时,我们只需要使用非零 g ~ e ( x ) \tilde g_e(x) g~e(x)的专家 e e e

例如,我们可以选取值排名前两位(top 2)的专家,并重新规范化:

g ~ ( x ) = [ 0 , 0.84 , 0 , 0.16 ] . \tilde g(x) = [0, 0.84, 0, 0.16]. g~(x)=[0,0.84,0,0.16].

10.1.1.4 平衡专家
  • 只有所有专家都参与进来,混合专家才有效。
  • 如果只有一个专家处于活跃状态(例如, g ( x ) = [ 0 , 1 , 0 , 0 ] g(x) = [0, 1, 0, 0] g(x)=[0,1,0,0]),那么这就是浪费。
  • 此外,如果我们一直处于这种状态,那么未使用的专家的梯度将为零,因此他们将不会收到任何梯度并得到改善。
  • 因此,使用混合专家的主要考虑因素之一是确保所有专家都能被输入使用。

这种gate的方式会导致每个expert分到的样本太少。假设有n个experts,batch_size=b,每次会有k个expert被选择,每个expert会接收到平均kb/n << b个样本。
这里提出了一些解决方法:
数据并行和模型并行: 相当于变相的扩大b,假设有d个device,每个device上一次处理b个样本,那么在这次训练中,batch=bd,从而每个expert会接收kbd/n个样本。
单步拆分: 在我们的实验中,MoE中每个expert都是一个单层全连接,而这个层次是在LSTM层之间,因而,可以把训练LSTM时的多步给拆分开,从而相当于增大MoE训练的batch_size。
采用一些方法优化模型训练时的内存,从而进一步增大batch size。

101.1.5 并行
  • 混合专家非常有利于并行。
  • 每个专家都可以放置在不同的机器上。
  • 我们可以在中心节点计算近似门控函数 g ~ ( x ) \tilde g(x) g~(x)
  • 然后,我们只要求包含激活专家的机器(稀疏)来处理 x x x

10.1.2 Sparsely-gated mixture of experts (Lepikhin et al. 2021)

  • 现在我们考虑如何将混合专家思想应用于语言模型。
  • 最简单的解决方案是仍然使用96层Transformer,但是
    • 门控函数以某种方式应用于序列;
    • 只在顶层进行专家的结合。
  • 因此,我们将混合专家的想法应用于:
    • 每个token
    • 每层Transformer block(或者隔层使用)
  • 由于前馈层对于每个token是独立的,因此,我们将每个前馈网络转变为混合专家(MoE)前馈网络:

MoETransformerBlock ( x 1 : L ) = AddNorm ( MoEFeedForward , AddNorm ( SelfAttention , x 1 : L ) ) . \text{MoETransformerBlock}(x_{1:L}) = \text{AddNorm}(\text{MoEFeedForward}, \text{AddNorm}(\text{SelfAttention}, x_{1:L})). MoETransformerBlock(x1:L)=AddNorm(MoEFeedForward,AddNorm(SelfAttention,x1:L)).

  • 隔层使用MoE Transformer block。

我们将top-2专家的近似门控函数定义如下:

  • 计算第一个专家: e 1 = arg ⁡ max ⁡ e g e ( x ) e_1 = \arg\max_e g_e(x) e1=argmaxege(x)

  • 计算第二个专家: e 2 = arg ⁡ max ⁡ e ≠ e 1 g e ( x ) e_2 = \arg\max_{e \neq e_1} g_e(x) e2=argmaxe=e1ge(x)

  • 始终保留第一个专家,并随机保留第二个专家:

    • p = min ⁡ ( 2 g e 2 ( x ) , 1 ) p = \min(2 g_{e_2}(x), 1) p=min(2ge2(x),1)
    • 在概率为 p p p的情况下, g ~ e 1 ( x ) = g e 1 ( x ) g e 1 ( x ) + g e 2 ( x ) , g ~ e 2 ( x ) = g e 2 ( x ) g e 1 ( x ) + g e 2 ( x ) \tilde g_{e_1}(x) = \frac{g_{e_1}(x)}{g_{e_1}(x) + g_{e_2}(x)}, \tilde g_{e_2}(x) = \frac{g_{e_2}(x)}{g_{e_1}(x) + g_{e_2}(x)} g~e1(x)=ge1(x)+ge2(x)ge1(x),g~e2(x)=ge1(x)+ge2(x)ge2(x)。对于其他专家 e ∉ { e 1 , e 2 } e \not\in \{ e_1, e_2 \} e{e1,e2} g ~ e ( x ) = 0 \tilde g_e(x) = 0 g~e(x)=0
    • 在概率为 1 − p 1 - p 1p的情况下, g ~ e 1 ( x ) = 1 \tilde g_{e_1}(x) = 1 g~e1(x)=1。对于 e ≠ e 1 e \neq e_1 e=e1,$\tilde g_e(x) = 0 $。
10.1.2.1 符号定义:
  • B B B是一个batch中的token数量(在所有序列中);通常在百万数量级。
  • E E E是专家数目;通常在千数量级。
  • x 1 , … , x B x_1, \dots, x_B x1,,xB为一个batch中的token。
10.1.2.2 平衡专家

如果不做改进,那么这么多的expert,只有几个expert会被集中使用。为了改进这一问题,给每个expert定义了一个importance的概念。importance就是指这个expert所处理的样本数,简而言之就是G(x)对应位置的和。importance的损失函数则是importance的平方乘以一个系数。

  • c e = ∑ i = 1 B 1 [ g ~ e ( x i ) > 0 ] c_e = \sum_{i=1}^B \mathbf{1}[\tilde g_e(x_i) > 0] ce=i=1B1[g~e(xi)>0]是专家 e e e被选中的次数。
  • 注意,处理完一个batch后, ∑ e c e = B \sum_e c_e = B ece=B
  • 如果所有专家都是平衡的,那么 c e = B E c_e = \frac{B}{E} ce=EB
  • 溢出:如果 c e > 2 B E c_e > 2 \frac{B}{E} ce>2EB,则设 f ( x ) = x f(x) = x f(x)=x(带残差的旁路),其中2是容量系数。
  • 辅助损失:我们期望 c = [ c 1 , … , c E ] c = [c_1, \dots, c_E] c=[c1,,cE]接近均匀分布。
  • 我们可以惩罚 ∥ c ∥ 2 2 = ∑ e = 1 E c e 2 \|c\|_2^2 = \sum_{e=1}^E c_e^2 c22=e=1Ece2,但这是不可微分的。
  • 定义 m e = ∑ i = 1 B g e ( x i ) m_e = \sum_{i = 1}^B g_e(x_i) me=i=1Bge(xi)(这是 c e c_e ce的软版本)。
  • 相反,我们在目标函数中添加 load-balancing-loss = ∑ e = 1 E m e c e \text{load-balancing-loss} = \sum_{e=1}^E m_e c_e load-balancing-loss=e=1Emece。这样,通过 m e m_e me的梯度将为非零。

loss = negative-log-likelihood + λ load-balancing-loss . \text{loss} = \text{negative-log-likelihood} + \lambda \text{load-balancing-loss}. loss=negative-log-likelihood+λload-balancing-loss.

例如,我们可以取 λ = 0.01 B \lambda = \frac{0.01}{B} λ=B0.01

10.1.2.3 示例

下面是一个 B = 2 B=2 B=2个token, E = 4 E=4 E=4个专家的例子:
g ( x 1 ) = [ 0.2 , 0.6 , 0.1 , 0.1 ] ⇒ g ~ ( x 1 ) = [ 0.25 , 0.75 , 0 , 0 ] g ( x 2 ) = [ 0.1 , 0.6 , 0.2 , 0.1 ] ⇒ g ~ ( x 2 ) = [ 0 , 0.75 , 0.25 , 0 ] g(x_1) = [0.2, 0.6, 0.1, 0.1] \Rightarrow \tilde g(x_1) = [0.25, 0.75, 0, 0] \\ g(x_2) = [0.1, 0.6, 0.2, 0.1] \Rightarrow \tilde g(x_2) = [0, 0.75, 0.25, 0] g(x1)=[0.2,0.6,0.1,0.1]g~(x1)=[0.25,0.75,0,0]g(x2)=[0.1,0.6,0.2,0.1]g~(x2)=[0,0.75,0.25,0]

统计为
c = [ 1 , 2 , 1 , 0 ] m = [ 0.3 , 1.2 , 0.3 , 0.2 ] c = [1, 2, 1, 0] \quad\quad\quad\quad m = [0.3, 1.2, 0.3, 0.2] c=[1,2,1,0]m=[0.3,1.2,0.3,0.2]

也就是说,我们会尝试降低专家2的权重,避免其被过度使用。

10.1.3 Switch Transformer (Fedus et al. 2021)

  • 定义近似门控函数 g ~ ( x ) \tilde g(x) g~(x)只有一个专家(获得更多稀疏性)。
  • 技巧:
    • 将FP32训练替换成FP16
    • 使用的较小参数进行初始化
    • 专家dropout
    • 专家并行
  • 训练了一个1.6万亿参数模型
  • 与T5-XXL(110亿参数)相比,训练速度提高了4倍

10.1.4 Balanced Assignment of Sparse Experts (BASE) layers (Lewis et al., 2021)

  • BASE将近似门控函数 g ~ ( x ) \tilde g(x) g~(x)定义为对batch中的所有token进行联合优化的结果。
  • 我们将为每个token分配1名专家,但负载平衡是一种约束,而不是软惩罚。
  • 我们定义 a = [ a 1 , … , a B ] ∈ { 1 , … , E } B a = [a_1, \dots, a_B] \in \{1, \dots, E\}^B a=[a1,,aB]{1,,E}B作为联合分配向量。
    maximize ∑ i = 1 B w a i ⋅ x i subject to ∀ e : ∑ i = 1 B 1 [ a i = e ] = B E . \text{maximize} \sum_{i = 1}^B w_{a_i} \cdot x_i \quad\text{subject to}\quad \forall e: \sum_{i=1}^B \mathbf{1}[a_i = e] = \frac{B}{E}. maximizei=1Bwaixisubject toe:i=1B1[ai=e]=EB.
  • 这是一个可以有效求解的线性方程。
  • 在实践中,我们将线性方程并行化。
  • 在测试时,只需选择top 1的专家即可。
10.1.4.1 实验设置
  • Sparsely gated MoE (top-2 experts): 52.5B 参数
  • Switch Transformer (top-1 expert): 52.5B 参数
  • BASE (1 jointly optimized expert): 44.4B 参数 (1.3B shared 参数, 335M x 128 expert 参数)

BASE需要更多的计算来优化 a a a,但更稳定。

10.1.4.2 总结和下一步工作
  • Switch Transformer(谷歌)使用了top-1专家。
  • BASE(Facebook)为每个token分配1名专家,但进行了联合优化。
  • 这两个模型的性能都无法与GPT-3可比。虽然谷歌和Facebook都发布了两个最新的高性能MoE语言模型,它们的性能确实与GPT-可比,但有趣的是,它们仍然基于最初简单的top-2专家:
    • 谷歌的GLaM
    • 来自Facebook的“FacebookMoE”

10.1.5 Generalist Language Model (GLaM) (Du et al. 2021)

10.1.5.1 规格:
  • 1.2万亿个参数(GPT-3有1750亿个参数)
  • 64个专家,64层,32K个隐藏单元
  • 每个token激活95B(1.2T的8%)的参数
10.1.5.2 其他:
  • 创建了共有1.6万亿个token的新数据集(GLaM dataset),来源包括网页、论坛、书籍、新闻等。
  • 相对位置编码、门控线性单元、GeLU激活函数、RMSNorm(非LayerNorm)
  • 如果遇到NaN/Inf,跳过权重更新/回滚到早期检查点。
  • “通过仔细实施上述技巧,我们观察到,稀疏激活的模型在各个尺度上的训练都变得相当稳定。”
10.1.5.3 结果:
  • 与GPT-3相比,训练成本仅为1/3
  • 在与GPT-3相同的基准上进行评估(开放域问答、阅读理解、SuperGLUE等)
  • 与GPT-3相比,实现了更好的0-shot和1-shot性能(尤其是在知识密集型任务中的性能)
  • 注:他们没有在GPT-3更强的few-shot中进行评估
10.1.5.4 WinoGender上的结果:

示例:The nurse notified the patient that {her/his,their} shift would be ending in an hour.

GLaM的性别偏见少于GPT-3。

10.1.6 FacebookMoE (Artetxe et al., 2021)

10.1.6.1 实验设置:
  • 训练了一个1.1T参数的模型
  • 512名专家(超过GLaM),32层,4096个隐藏单元
  • 使用112 billion token进行训练,来源包括网页、论坛、书籍、新闻等。
  • 小模型收益更大,模型越大,收益递减

StereoSet上的结果:

10.1.6.2 示例:

The assistant went to work. {She brought her boss coffee., She was valued for her input.}

刻板印象随着模型大小的增加而变得更糟(与GLaM结果相反)。

10.1.7 Decentralized mixture-of-experts (Ryabinin & Gusev, 2020)

10.1.7.1 动机:
  • 到目前为止,混合专家纯粹是中心机构(如谷歌或Facebook)从扩大大语言模型的角度出发的。
  • 然而,混合专家自然地指示了一种更激进的权力下放。
  • 为例训练GPT-3,Azure超级计算机集群耗资2.5亿美元。
  • 我们如何利用数以亿计的消费PC?
  • Folding@Home是一个志愿者计算项目,利用世界各地的志愿者捐赠计算机进行分子动力学模拟。
  • 2020年4月,Folding@Home有70万人捐赠了产生2.43 exaFLOP(GPT-3需要350千兆FLOP)(文章)。
  • 主要区别在于分子动力学模拟计算量大,不需要网络带宽。
10.1.7.2 主要考虑因素:
  • 节点众多( 1 0 3 ∼ 1 0 6 10^3 \sim 10^6 103106异构PC)
  • 频繁的节点故障(5-20%的节点每天至少有一次故障)
  • 家庭互联网通信带宽(100Mbps;相比之下,Azure超级计算机为400Gbps)
10.1.7.3 分布式哈希表:
  • N N N个节点
  • 单个节点需要与其他 O ( log ⁡ N ) O(\log N) O(logN)节点通信
  • 使用Kademlia DHT协议(被BitTorrent和以太坊使用)
10.1.7.4 论文实验:
  • 选取top-4的专家(共256名专家)
  • 每个专家都是一个Transformer层
  • 在4个GPU上训练了一个小型Transformer LM

10.1.8 Diskin et al., 2021

  • 40名志愿者
  • 为孟加拉语训练了一个ALBERT的掩码语言模型
  • 一起训练Transformer:任何人都可以加入并贡献计算

10.1.9 总结

  • 混合专家:起源于将不同专家应用于不同输入的经典理念
  • 允许训练更大的语言模型(1.1万亿个参数)
  • 与稠密Transformer模型相比,每个输入的效率高得多(FLOP更少)
  • 效果难以比较:在相同规模上,直接比较仍然具有挑战性(GPT-3与GLaM与FacebookMoE)
  • 对权力下放的重大影响

10.2 基于检索的模型(Retrieval Augmented)

现在,我们转向另一类语言模型,基于检索的(或检索增强的、记忆增强的模型),它可以帮助我们突破稠密Transformer的缩放上限。

Retrieval-augmented generation (RAG) is an AI framework for improving the quality of LLM-generated responses by grounding the model on external sources of knowledge to supplement the LLM’s internal representation of information. Implementing RAG in an LLM-based question answering system has two main benefits: It ensures that the model has access to the most current, reliable facts, and that users have access to the model’s sources, ensuring that its claims can be checked for accuracy and ultimately trusted.
In a 2020 paper, Meta (then known as Facebook) came up with a framework called retrieval-augmented generation to give LLMs access to information beyond their training data. RAG allows LLMs to build on a specialized body of knowledge to answer questions in more accurate way.
As the name suggests, RAG has two phases: retrieval and content generation.
In the retrieval phase, algorithms search for and retrieve snippets of information relevant to the user’s prompt or question. In an open-domain, consumer setting, those facts can come from indexed documents on the internet; in a closed-domain, enterprise setting, a narrower set of sources are typically used for added security and reliability.
This assortment of external knowledge is appended to the user’s prompt and passed to the language model. In the generative phase, the LLM draws from the augmented prompt and its internal representation of its training data to synthesize an engaging answer tailored to the user in that instant. The answer can then be passed to a chatbot with links to its sources.
Experience teaches us to stop and say when we don’t know something. But LLMs need to be explicitly trained to recognize questions they can’t answer.”
With enough fine-tuning, an LLM can be trained to pause and say when it’s stuck. But it may need to see thousands of examples of questions that can and can’t be answered. Only then can the model learn to identify an unanswerable question, and probe for more detail until it hits on a question that it has the information to answer.
RAG is currently the best-known tool for grounding LLMs on the latest, verifiable information, and lowering the costs of having to constantly retrain and update them. But RAG is imperfect, and many interesting challenges remain in getting RAG done right.
不严谨的就直接从2016年的工作起头了,其实那时候就有一个共识是,往往一些关键词出现过之后有非常大的概率重新出现,但是使用RNN,LSTM这种在进行语言建模的时候多多少少还是存在“记不住“的问题,这篇cached LM就是在之前正常的LM基础上引入了cache机制,即在语言建模时候也要从之前预测过的词语存的cache里面索引然后作为一项考虑因素。但是紧接着再2017年我们都知道这个长距离依赖问题部分被transformer的attention机制解决了,所以说这篇文章作为LM的热度并没有那么高。
当我们使用LM时候,我们到底允不允许它“拖家带口“,即训练完我们必须要把所有的训练数据扔掉,即“扔掉书本,闭卷考试“,还是说允许在预测时候允许带着所有训练数据(毕竟见一面见多面训练数据并不是犯错误),即“允许带着书进入考场,开卷考试”。这两种方式不仅仅是持续学习角度里面的不同的setting,从我们做NLP的角度来讲,实际的工业部署需求是一定要考虑在其中的,到底是把知识存到模型里面效率高一点还是把知识放在内存里面检索出来效率高,随着软硬件结构的改变随时洗牌完全有可能。
19年的时候Luke和Mike团队提出了一种knn-LM,看图就大概能明白思路,简而言之就是
语言模型负责一部分下一个token(在他这里面叫target)的概率分布预测
,即LM的target概率预测,然后**从语料库里面通过计算各个表示的相似度找到k个最相似的然后加权求得一个分布概率,即knn LM的target概率预测。**然后把他们加权求和得到概率预测。
在这里插入图片描述
把retrieve引入到语言模型的话其实每一个token都有一个key和value的(看图来理解),所以检索的数据是一个相当大的规模的数据。他这里面使用了FAISS(一个用来快速寻找k个最大相似向量的系统)来加速。
另一条线上,检索方法的重度使用区其实是开放域问答和机器阅读理解(著名的SQuAD benchmark等等都是开放域问答),也就是陈丹琦所在的领域。这几年检索增强的NLP论文里面大家经常提的一篇论文也是她在ACl 2017年的论文[9],当然我们这里面不拘泥于QA,只是去了解一下他当时的操作和思路。
在这里插入图片描述
系统分为两大块,首先有一个 Document Retriever,对给定的问题 question,从所有维基百科文章中检索(这里面注意SQuAD 实际上是有具体的位置的,但是WebQuestion等等数据集就是没有的,这里面她是通过远程监督的方式做的处理);检索到文章后切分成段落,然后用一个称之为 Document Reader 的模块在段落中预测答案位置并给出分数。后者其实就是标准的阅读理解模型了,完全可以替换成其他的机器阅读理解模型。
现在看来,至今也都是Retriever+Reader的这个路子,只不过,1)检索和理解的对象;2)检索器和理解器所使用的工具;3)检索端和理解端端侧重都沧海桑田地发生了变化。我们后面慢慢来看。

10.2.1 编码器-解码器

让我们首先关注使用编码器-解码器框架的序列到序列任务:
input  x ⇒ output  y \text{input } x \quad\Rightarrow\quad \text{output } y input xoutput y
示例(开放问答):

  • 输入 x x x:What is the capital of Canada?
  • 输出 y y y:Ottawa

回想一下,BARTT5是编码器-解码器模型的代表:
p ( y ∣ x ) p(y \mid x) p(yx)
其使用去噪目标函数进行训练。
例如:
输入 x x x:Thank you < X > <X> <X> me to your party < Y > <Y> <Y> week.
输出 y y y < X > <X> <X> for inviting < Y > <Y> <Y> last

10.2.2 检索方法

假设我们有一个存储库 S S S,它是一组序列(通常是文档或段落)的集合。
S = { Why is the... , Thanks for , . . . , The quick... , Stanford... } . S = \{ \text{Why is the...}, \text{Thanks for}, ..., \text{The quick...}, \text{Stanford...} \}. S={Why is the...,Thanks for,...,The quick...,Stanford...}.
基于检索的模型直观的生成过程:

  • 基于输入 x x x,检索相关序列 z z z
  • 给定检索序列 z z z和输入 x x x,生成输出 y y y

示例(开放问答):

  • 输入 x x x:What is the capital of Canada?
  • 检索 z z z:Ottawa is the capital city of Canada.
  • 输出 y y y:Ottawa

最近邻是最常用的一种检索方法:

  • S S S是训练集。
  • 检索 ( x ′ , y ′ ) ∈ S (x',y') \in S (x,y)S,使得 x ′ x' x x x x最相似。
  • 生成 y = y ′ y = y' y=y

Generalization through memorization: Nearest neighbor language models [ICLR 2020]
这篇论文提出了一种将 kNN 最近邻模型与语言模型预测分布相结合的方法,
NN-LM。该方法可以有效提高预训练语言模型对例如事实知识等稀有文本形式的建模能力。
在这里插入图片描述

10.2.3 Retrieval-augmented generation (RAG) (Lewis et al., 2020)

这篇论文在语言模型预训练阶段中引入了一个知识检索模型。相比于不能在下游任务中微调的
K N N − L M KNN-LM KNNLM,REALM 能够在预训练、微调和推理阶段显式利用大型语料库中的知识。

形式上,RAG模型定义如下:
( y ∣ x ) = ∑ z ∈ S p ( z ∣ x ) ⏟ retriever p ( y ∣ z , x ) ⏟ generator . (y \mid x) = \sum_{z \in S} \underbrace{p(z \mid x)}_\text{retriever} \underbrace{p(y \mid z, x)}_\text{generator}. (yx)=zSretriever p(zx)generator p(yz,x).
在实践中, ∑ z ∈ S \sum_{z \in S} zS由前k个代替(类似于为混合专家选择前1个或2个专家)。

10.2.3.1 检索器:

Dense Passage Retrieval (DPR)** (Karpukhin et al., 2020)

p ( z ∣ x ) = exp ⁡ ( BERT d ( z ) ⋅ BERT q ( x ) ) ∑ z ′ ∈ S exp ⁡ ( BERT d ( z ′ ) ⋅ BERT q ( x ) ) . p(z \mid x) = \frac{\exp(\text{BERT}_\text{d}(z) \cdot \text{BERT}_\text{q}(x))}{\sum_{z' \in S} \exp(\text{BERT}_\text{d}(z') \cdot \text{BERT}_\text{q}(x))}. p(zx)=zSexp(BERTd(z)BERTq(x))exp(BERTd(z)BERTq(x)).

  • 这里以用维基百科文章的标题来检索段落为例
  • 使用QA数据集(如NaturalQuestions、TriviQA等)的query、正例、负例 ( q , p + , p 1 − , … , p n − ) (q, p^+, p^-_1, \dots, p^-_n) (q,p+,p1,,pn)来训练模型:
    • 负例:随机或者使用BM25检索出的不包含答案的段落
  • 推理:使用FAISS(Facebook AI相似性搜索)
10.2.3.2 生成器:

p ( y ∣ z , x ) = p ( y ∣ concat ( z , x ) ) . p(y \mid z, x) = p(y \mid \text{concat}(z, x)). p(yz,x)=p(yconcat(z,x)).

  • 使用BART-large(400M参数),其中输入为检索出的段落 z z z和输入 x x x
  • 回想一下,BART是基于网络、新闻、书籍和故事数据,使用去噪目标函数(例如,掩码)训练得到的
10.2.3.3 训练:
  • 用BART、DPR(用BERT初始化)初始化
  • 训练 BART \text{BART} BART BERT q \text{BERT}_\text{q} BERTq
10.2.3.4 实验:
  • 在Jeopardy问题生成任务上,输入Hemingway的检索结果:

  • 实验结果表明,优于非检索方法:

这里引用GPT-3 few-shot的结果进行比较:NaturalQuestions (29.9%), WebQuestions (41.5%), TriviaQA (71.2%)

10.2.4 RETRO (Borgeaud et al., 2021)

Improving Language Models by Retrieving from Trillions of Tokens

这项工作提出了一种从大规模语料库中检索文档块用于增强自回归模型的方法。相较于之前检索增强生成的方法,该论文使用了超大规模的检索语料库,表明了检索语料库规模的可扩展性。

首先,RETRO 建立了用于检索的数据库,其键为 BERT 编码表示,值为对应的文档块以及该文档块的下一个文档块。RETRO 的模型架构包含检索器,编码器以及带有块注意力(Chunked cross attention, CCA)模块的解码器。模型将输入也分为若干固定大小的块,基于已经生成的上下文及上下文分块检索到的文档块生成当前目标词。
在这里插入图片描述

  • 基于32个token的块进行检索
  • 存储库:2 trillion tokens
  • 70亿参数(比GPT-3少25倍)
  • 使用冻结的BERT进行检索(不更新)
  • 在MassiveText上训练(与训练Gopher的数据集相同)
10.2.4.1 实验结果
  • 在语言建模方面表现出色
  • NaturalQuestions准确率:45.5%(SOTA为54.7%)
  • 这类模型可以通过扩展数据库规模和更新数据库的方式来解决模型复杂度和知识更新的问题,显式的检索文档集合也让模型输出的依据更加透明。

10.2.5 讨论

  • 基于检索的模型高度适合知识密集型的问答任务。
  • 除了可扩展性之外,基于检索的模型还提供了可解释性和更新存储库的能力。
  • 目前尚不清楚这些模型是否具有与稠密Transformer相同的通用能力。

10.3 总体总结

  • 为了扩大模型规模,需要改进稠密Transformer。
  • 混合专家和基于检索的方法相结合更有效。
  • 如何设计更好的、可扩展的体系结构仍然是一个悬而未决的问题。

延申阅读

混合专家模型

基于检索的模型

  • REALM: Retrieval-Augmented Language Model Pre-Training. Kelvin Guu, Kenton Lee, Z. Tung, Panupong Pasupat, Ming-Wei Chang. 2020. Introduces REALM.
  • Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. Patrick Lewis, Ethan Perez, Aleksandara Piktus, Fabio Petroni, Vladimir Karpukhin, Naman Goyal, Heinrich Kuttler, M. Lewis, Wen-tau Yih, Tim Rocktäschel, Sebastian Riedel, Douwe Kiela. NeurIPS 2020. Introduces RAG.
  • Improving language models by retrieving from trillions of tokens. Sebastian Borgeaud, A. Mensch, Jordan Hoffmann, Trevor Cai, Eliza Rutherford, Katie Millican, G. V. D. Driessche, J. Lespiau, Bogdan Damoc, Aidan Clark, Diego de Las Casas, Aurelia Guy, Jacob Menick, Roman Ring, T. Hennigan, Saffron Huang, Lorenzo Maggiore, Chris Jones, Albin Cassirer, Andy Brock, Michela Paganini, Geoffrey Irving, Oriol Vinyals, Simon Osindero, K. Simonyan, Jack W. Rae, Erich Elsen, L. Sifre. 2021. Introduces RETRO.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity Mirror是一种非常有用的组队工具,它允许多个玩家共享和交互的游戏世界。无论是开发多人在线游戏、合作游戏还是竞技游戏,Unity Mirror都能提供强大的网络功能。 借助Unity Mirror,我们可以轻松地创建一个支持多人游戏的环境。无论是局域网还是互联网,Unity Mirror都能提供稳定的网络连接,并且具备较低的延迟。这使得玩家可以流畅地与其他玩家一起玩游戏,共同完成任务或对战。 Unity Mirror还提供了丰富的同步功能,如角色同步、物体同步和动画同步等等。这些功能确保了游戏中的所有玩家都能看到并与同一游戏世界进行互动。无论玩家在哪个地点,都能感受到与其他玩家的实时互动。 在组队方面,Unity Mirror提供了简便的方式来创建和管理队伍。我们可以很容易地将玩家分配到不同的队伍,并且提供相应的组队功能。例如,我们可以实现队伍内成员之间的实时通讯,协同作战和分享资源等等。 通过Unity Mirror,我们可以创建一个灵活且强大的多人游戏体验。无论是与好友合作还是与陌生人对战,多人游戏的乐趣将大大增加。Unity Mirror的出色网络功能和组队管理能力,使得游戏开发者能够设计出更具互动性和社交性的游戏。 总之,Unity Mirror是一个非常适合组队游戏的工具,它提供了可靠的网络连接、实时的同步功能以及便捷的组队管理。无论是作为游戏开发者还是玩家,我们都可以享受到Unity Mirror带来的多人游戏乐趣。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值