✍内容

项目地址:第3章 模型架构 (datawhalechina.github.io)&&第4章 新的模型架构 (datawhalechina.github.io)

首先模型架构这一章先是简述了大模型的模型概括,然后是两个讨论的主题分词模型架构

首先是分词包括:

  • 基于空格的分词

  • 字节对编码(BEP算法的原理)

    • Unicode的问题(BPE算法的作用)

  • Unigram模型(SentencePiess)

    • 算法流程

随后睡觉哦模型架构,包括了:

  • 语言模型分类

    • 编码端(Encoder-Only)架构

    • 解码器(Decoder-Only)架构

    • 编码-解码端(Encoder-Decoder)架构

  • 语言模型理论

    • 基础架构

    • 递归神经网络

    • Transformer

      • 注意力机制

      • 残差连接和归一化

      • 位置嵌入

其次就讲了当前这种模型面临的问题,在这些问题上提出了两种不同类型的新模型一种是混合专家模型另一种是基于检索的模型。然后就主要讨论了这两种模型。关于混合专家模型讲的比较多其中讲了这种模型的实现方法以及问题如何去解决,还举了很多例子来表现这种模型的性能,以及如何一步一步优化模型的。关于基于检索的模型介绍了检索方法以及如何增强检索能力,这里对检索器生成器分别做了介绍。最后对这两种方法做了讨论,它们能够解决什么问题以及它们还存在什么问题我们仍要解决。

🖊总结

第三章 模型架构

1.什么分词是好的?

  • 不需要太多的词元(极端情况:字符或字节),否则序列会变得难以建模。

  • 词元也不能过少,否则单词之间就无法共享参数(例如,mother-in-law和father-in-law应该完全不同吗?),这对于形态丰富的语言也是个问题(例如,阿拉伯语、土耳其语等)。

  • 每个词元应该是一个在语言或统计上有意义的单位

2.什么是字节对编码?

字节对编码BPE)算法应用于数据压缩领域,用于生成其中一个最常用的分词器。BPE分词器需要通过模型训练数据进行学习,获得需要分词文本的一些频率特征。

3.什么是Unicode?

Unicode(统一码)是当前主流的一种编码方式。其中这种编码方式对BPE分词产生了一个问题(尤其是在多语言环境中),Unicode字符非常多(共144,697个字符)。在训练数据中我们不可能见到所有的字符。

4.什么是似然值?

似然值的计算是 unigram 模型中重要的一部分,它用于评估分词结果的质量。较高的似然值表示训练数据与分词结果之间的匹配程度较高,这意味着该分词结果较为准确或合理。

5.(Unigram模型)的算法流程是什么目标是什么?

流程:

  • 从一个“相当大”的种子词汇表 V 开始。

    • 给定 V ,使用EM算法优化 p(x)T

    • 计算每个词汇 x∈Vloss(x) ,衡量如果将 xV 中移除,似然值会减少多少。

    • 按照 loss 进行排序,并保留 V 中排名靠前的80%的词汇。

目标:

旨在优化词汇表,剔除对似然值贡献较小的词汇,以减少数据的稀疏性,并提高模型的效果。通过迭代优化和剪枝,词汇表会逐渐演化,保留那些对于似然值有较大贡献的词汇,提升模型的性能。

6.什么是上下文向量表征?

上下文向量表征 (Contextual Embedding)是一种表示方法,用于捕获输入数据的权重总和。在深度学习中,向量通常被用来表示数据的抽象表示。例如,单词可以被表示为一个向量,这个向量捕获了单词的语义信息。在含有注意力机制的模型中,上下文向量是用来保存输入数据的权重总和的一种表示方式。

  • 符号表示:我们将 ϕ:V^{L}→ℝ^{d×L} 定义为嵌入函数(类似于序列的特征映射,映射为对应的向量表示)。

  • 对于词元序列 x1:L=[x_{1},…,x_{L}]ϕ 生成上下文向量表征 ϕ(x_{1:L})

7.语言模型被分为哪三个类型?

  • 编码端(Encoder-Only)

    • 这种语言模型生成上下文向量表征,这些上下文向量表征通常用于分类任务(也被称为自然语言理解任务),这种模型对于文本的上下文信息有更好的理解,但它不能自然地生成完成文本,且需要更多的特定训练目标(如掩码语言建模)。

  • 解码端(Decoder-Only)(自回归语言模型)

    • 给定一个提示 x_{1:i} ,它可以生成上下文向量表征,并对下一个词元 x_{i+1} (以及递归地,整个完成 x_{i+1:L}) 生成一个概率分布。它能够自然地生成完成文本,有简单的训练目标(最大似然),但是对于每个 xi ,上下文向量表征只能单向地依赖于左侧上下文 (x_{1:i−1})

  • 编码-解码端(Encoder-Decoder)

    • 最初的是Transformer模型,这种模型可以使用双向上下文向量表征来处理输入 x_{1:L} ,并且可以生成输出 y_{1:L} 。可以公式化为:

      x1:L⇒ϕ(x1:L),p(y1:L∣ϕ(x1:L))。

    • 该模型的具有编码端,解码端两个架构的共同的优点,对于每个 x_{i} ,上下文向量表征可以双向地依赖于左侧上下文( x_{1:i−1} ) 和右侧上下文 ( x_{i+1:L} ),可以自由的生成文本数据。但是它需要更多的特定训练目标。

8.什么是注意力机制?

注意力机制(Attention Mechanism)是一种让模型在处理大量信息时,能够集中注意力于关键信息,忽略无关紧要的冗余信息的机制。

9.什么是位置嵌入?

位置嵌入(Position Embedding)是一种技术,用于将位置信息编码为特征向量,以便在神经网络中引入位置信息。

在这一章后面部分了解了如何定义一个构建模块库,和构建一个完整的Transformer模型的流程,以及在不同版本之间的Transformer的差异:

  • 层归一化“后归一化”(原始Transformer论文)与“先归一化”(GPT-2),这影响了训练的稳定性。

  • 应用了丢弃(Dropout)以防止过拟合。

  • GPT-3使用了sparse Transformer(稀释 Transformer)来减少参数数量,并与稠密层交错使用。

  • 根据Transformer的类型(Encdoer-Only, Decoder-Only, Encdoer-Decoder),使用不同的掩码操作。

第四章 新的模型架构

1.什么是混合专家模型?

创建一组专家。每个输入只激活一小部分专家。 简单来说就是类似一个由专家组成的咨询委员会,每个人都有不同的背景(如历史、数学、科学等)。

\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}.

2.什么是基于检索的模型?

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

\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}.

3.基于专家的混合方法是什么?

  • 定义 E 个专家。

  • 每个专家 e = 1, \dotsE 都具有自己的嵌入 w_e \in \mathbb{R}^d

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

g_e(x) = \frac{\exp(w_e \cdot x)}{\sum_{e' = 1}^E \exp(w_{e'} \cdot x)}.


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

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

h_{\theta_e}(x) = W_2^{(e)} \max(W_1^{(e)} x, 0).


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

f(x) = \sum_{e=1}^E \underbrace{g_e(x)}_\text{gating} \underbrace{h_{\theta_e}(x)}_\text{expert}.


4.对混合专家模型的总结

  • 混合专家:起源于将不同专家应用于不同输入的经典理念

  • 允许训练更大的语言模型(1.1万亿个参数)

  • 与稠密Transformer模型相比,每个输入的效率高得多(FLOP更少)

  • 效果难以比较:在相同规模上,直接比较仍然具有挑战性(GPT-3与GLaM与FacebookMoE)

  • 对权力下放的重大影响

5.基于检索的模型可以解决什么问题?

它可以帮助我们突破稠密Transformer的缩放上限。其中这种模型使用的是编码器-解码器框架

6.基于检索的模型的生成过程是什么?

基于检索的模型直观的生成过程:

  • 基于输入 x ,检索相关序列 z

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

示例(开放问答):

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

  • 检索 z :Ottawa is the capital city of Canada.

  • 输出 y :Ottawa

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

  • S 是训练集。

  • 检索 (x',y') \in S ,使得 x'x最相似。

  • 生成 y = y'