LLM 09-新的模型架构

2023-09-20 01:27:43

LLM 09-新的模型架构

回想一下第6章 模型架构,神经语言模型的核心接口是一个将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.

9.1 混合专家模型

9.1.1 基础知识

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

在这里插入图片描述

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

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).

9.1.1.1 示例

考虑d=2,并且每个专家都是一个线性分类器(来源):
在这里插入图片描述

9.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)成比例,并且同时更新门控函数和专家。

9.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].

9.1.1.4 平衡专家
  • 只有所有专家都参与进来,混合专家才有效。
  • 如果只有一个专家处于活跃状态(例如, g ( x ) = [ 0 , 1 , 0 , 0 ] g(x) = [0, 1, 0, 0] g(x)=[0,1,0,0]),那么这就是浪费。
  • 此外,如果我们一直处于这种状态,那么未使用的专家的梯度将为零,因此他们将不会收到任何梯度并得到改善。
  • 因此,使用混合专家的主要考虑因素之一是确保所有专家都能被输入使用。
9.1.1.5 并行
  • 混合专家非常有利于并行。
  • 每个专家都可以放置在不同的机器上。
  • 我们可以在中心节点计算近似门控函数 g ~ ( x ) \tilde g(x) g~(x)
  • 然后,我们只要求包含激活专家的机器(稀疏)来处理 x x x

9.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 $。
9.1.2.1 符号定义:
  • B B B是一个batch中的token数量(在所有序列中);通常在百万数量级。
  • E E E是专家数目;通常在千数量级。
  • x 1 , … , x B x_1, \dots, x_B x1,,xB为一个batch中的token。
9.1.2.2 平衡专家
  • 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

9.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的权重,避免其被过度使用。

9.1.3 Switch Transformer (Fedus et al. 2021)

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

9.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的专家即可。
9.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,但更稳定。

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

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

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

在这里插入图片描述

在这里插入图片描述

9.1.5.4 WinoGender上的结果:

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

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

9.1.6 FacebookMoE (Artetxe et al., 2021)

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

在这里插入图片描述

StereoSet上的结果:

9.1.6.2 示例:

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

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

在这里插入图片描述

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

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

在这里插入图片描述

9.1.7.4 论文实验:
  • 选取top-4的专家(共256名专家)
  • 每个专家都是一个Transformer层
  • 在4个GPU上训练了一个小型Transformer LM

9.1.8 Diskin et al., 2021

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

在这里插入图片描述

9.1.9 总结

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

9.2 基于检索的模型

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

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

9.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

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

在这里插入图片描述

形式上,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个专家)。

9.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相似性搜索)
9.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是基于网络、新闻、书籍和故事数据,使用去噪目标函数(例如,掩码)训练得到的
9.2.3.3 训练:
  • 用BART、DPR(用BERT初始化)初始化
  • 训练 BART \text{BART} BART BERT q \text{BERT}_\text{q} BERTq
9.2.3.4 实验:
  • 在Jeopardy问题生成任务上,输入Hemingway的检索结果:

在这里插入图片描述

  • 实验结果表明,优于非检索方法:
    在这里插入图片描述

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

9.2.4 RETRO (Borgeaud et al., 2021)

  • 基于32个token的块进行检索
  • 存储库:2 trillion tokens
  • 70亿参数(比GPT-3少25倍)
  • 使用冻结的BERT进行检索(不更新)
  • 在MassiveText上训练(与训练Gopher的数据集相同)
9.2.4.1 实验结果
  • 在语言建模方面表现出色
  • NaturalQuestions准确率:45.5%(SOTA为54.7%)

在这里插入图片描述

9.2.5 讨论

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

9.3 总体总结

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

基于LUT查找表方法的图像gamma校正算法FPGA实现,包括tb测试文件和MATLAB辅助验证

目录1.算法运行效果图预览2.算法运行软件版本3.部分核心程序4.算法理论概述5.算法完整程序工程1.算法运行效果图预览将gamma=2.2和gamma=1/2.2的数据分别导入到matlab进行对比:2.算法运行软件版本matlab2022a3.部分核心程序`timescale1ns/1ps////Company:/

公共4G广播音柱有哪些用处

公共广播音柱有哪些用处公共广播音柱是一种用于广播音频信号的设备,一般安装在公共场所或街道上。它具有以下几个主要用处:1.喊话广播:公共广播音柱可以用于喊话广播,用来传达重要信息、紧急通知、警报等,如公共安全提示、灾害警报、紧急疏散指示等。2.音乐播放:公共广播音柱可以通过播放音乐来为公共场所创造愉悦的氛围,如在公园、广

【STM32】使用RTE ,从 0 开始创建一个 (keil) ARM MDK工程(纯keil,标准库,以STM32F103C8T6为例)

学习相关的基础知识请阅读本专栏其他文章,一定有你想要的。https://blog.csdn.net/weixin_43764974/category_11021363.html本文软硬件:STM32F103C8T6ARMMDK5.38ARMcomplier6ST-Linkv2StdPeriphDrivers(标准库)一

Java基础(二十四):MySQL

文章目录一、数据库(创建、显示、删除、备份、恢复)二、MySQL常用数据类型2.1数值型(整数)2.2数值型(二进制bit)2.3数值型(小数)2.4字符型2.5日期类型三、表结构的操作四、表的增删改查4.1插入INSERT4.2修改UPDATE4.3删除DELETE4.4(单表)查询SELETE五、函数5.1排序、统

详细介绍oracle分区的使用:如何创建修改删除分区、插入数据提示分区已满或者分区不存在如何操作、近期数据使用分区历史数据不分区如何操作

一、前言什么是表分区:Oracle的分区是一种将表或索引数据分割为更小、更易管理的部分的技术。它可以提高查询性能、简化维护操作,并提供更好的数据组织和管理。表分区和表空间的区别和联系:在Oracle数据库中,表空间(Tablespace)是用于存储表、索引和其他数据库对象的逻辑存储单元。而分区(Partition)是表

blog--2建站

建站1loginorsigningithub2在github账户中创建一个项目名为你的Github用户名.github.io这是存放生成出来的网站文件的地方3在本地环境编写网站(原因开头:每次更新发布都需要修改整个网站延迟2min左右)选择hugo主题模板网站的地方https://themes.gohugo.io/打开

微服务生态系统:使用Spring Cloud构建分布式系统

文章目录什么是微服务?为什么选择SpringCloud?SpringCloud的关键组件示例:构建一个简单的微服务步骤1:创建SpringBoot项目步骤2:配置Eureka服务发现步骤3:创建REST控制器步骤4:运行项目步骤5:使用Feign进行服务间通信构建更大规模的微服务生态系统1.安全性2.监控和追踪3.熔断

企业怎么优化固定资产管理

在优化固定资产管理的过程中,不仅要关注硬件设备和设施的维护,还要重视软件系统和数据管理。一些可能的方法:需要建立一套完整的资产管理系统。这个系统应该包括资产的采购、登记、使用、维修、报废等各个环节的管理流程。通过这个系统,可以实时了解每个资产的状态,及时发现并解决潜在的问题。应该对固定资产进行定期的盘点和维护。这不仅可

PostgreSQL 排查慢 SQL

文章目录前言1.日志参数设置2.pg_stat_statements插件2.1确认是否安装插件2.2编译插件2.3载入插件2.4插件使用3.慢SQL排查手段3.1查询当前会话3.2查看TOPSQL前言所谓慢SQL是指在数据库中执行时间超过指定阈值的语句。慢查询太多,对于业务而言,是有很大风险的,可能随时都会因为某种原因

使用Git把项目上传到Gitee的详细步骤

1.到Git官网下载并安装2.到Gitee官网进行注册,然后在Gitee中新建一个远程仓库3.设置远程仓库的参数4.返回Gitee查看仓库是否生成成功5.新建一个文件夹作为你的本地仓库6.将新建好的文件夹初始化成本地仓库第一步:右键点击刚创建的本地仓库,然后点击GitBashHere第二步:在命令行里输入gitinit

八、【漏洞复现】jupyter-notebook 命令执行(CVE-2019-9644)

8.0、基础知识1、测试功能点(这种情况基本上很难遇到)8.1、漏洞原理​JupyterNotebook是一套用于创建、共享代码和说明性文本文档的开源Web应用程序。JupyterNotebook可直接使用命令行执行任意命令。​8.2、影响范围未授权开启终端权限的系统8.3、指纹识别1.有主页与明显logo主页:log

热文推荐