文章目录
- [1 概述](#1 概述)
- [2 部分摘录](#2 部分摘录)
-
- [2.1 噪声信道模型(Noisy Channel Models)](#2.1 噪声信道模型(Noisy Channel Models))
- [2.2 n-Gram模型](#2.2 n-Gram模型)
-
- [1. 什么是n-Gram模型](#1. 什么是n-Gram模型)
- [2. 早期的n-Gram模型](#2. 早期的n-Gram模型)
- [3. Google n-Gram项目](#3. Google n-Gram项目)
- [4. 模型规模与训练数据](#4. 模型规模与训练数据)
- [5. n-Gram模型的局限性](#5. n-Gram模型的局限性)
- 总结
- [2.3 当今前沿大模型的训练数据量和参数量](#2.3 当今前沿大模型的训练数据量和参数量)
- [2.4 计算图的概念](#2.4 计算图的概念)
-
- [1. 计算图(Computation Graph)简介](#1. 计算图(Computation Graph)简介)
- [2. 图中各部分的详细解释](#2. 图中各部分的详细解释)
- [3. 计算图的要点](#3. 计算图的要点)
- 总结:
- [2.5 Deep BiLSTM 长什么样、LSTM系列变种问题](#2.5 Deep BiLSTM 长什么样、LSTM系列变种问题)
- [2.6 为什么transformer中需要加入位置编码?](#2.6 为什么transformer中需要加入位置编码?)
- [2.7 关于 GPT3 的模型结构和参数](#2.7 关于 GPT3 的模型结构和参数)
- [3 阅读材料(LSTM, transformer, 讲解博客)](#3 阅读材料(LSTM, transformer, 讲解博客))
1 概述
该文件主要介绍了Transformer语言模型的背景、架构以及与其他语言模型的对比。以下是主要内容的概述:
- 语言模型的历史:文件首先介绍了在2017年之前使用的噪声信道模型在语音识别和机器翻译中的应用。这些模型通过结合转导模型和语言模型来进行预测。
- 大规模语言模型的发展:讨论了早期的n-Gram语言模型,如Google n-Gram模型,这些模型基于网页文本进行训练,并覆盖多种语言。接着,文件还对比了近年来的一些大规模语言模型(LLMs),如GPT-2、GPT-3、PaLM等。
- 递归神经网络(RNNs)及其局限性:介绍了RNN语言模型的基本概念,并讨论了RNN在学习长距离依赖时的困难。
- 长短期记忆网络(LSTM):详细解释了LSTM如何通过其内部结构(如输入门、遗忘门、输出门等)克服RNN的梯度消失问题,并帮助记忆长时间步的信息。
- 双向LSTM(BLSTM):讲述了将LSTM与双向RNN结合形成的深度双向LSTM(DBLSTM)如何用于处理更复杂的任务。
- Transformer语言模型:文件详细介绍了Transformer模型的架构,包括多头注意力机制、前馈神经网络、层归一化、残差连接等。
- 模型实现细节:文件还包括了Transformer模型的实现细节,展示了矩阵版本的单头注意力机制等。
2 部分摘录
2.1 噪声信道模型(Noisy Channel Models)
主要内容:
- 噪声信道模型的背景:
-
在2017年之前,语言模型被广泛应用于两个主要任务:语音识别和机器翻译。
-
在这些任务中,噪声信道模型是一种重要的工具。
-
噪声信道模型的定义:
- 噪声信道模型结合了一个转导模型(transduction model)和一个语言模型(language model)。
- 转导模型的作用是计算将输出y转化为输入x的概率,而语言模型则计算y的概率。
-
噪声信道模型的目标:
- 该模型的目标是从输入x中恢复出最可能的输出y。
- 对于语音识别,x是声学信号,y是相应的转录文本。
- 对于机器翻译,x是源语言中的句子,y是目标语言中的句子。
公式解释:
公式表示的内容是从x推断出最可能的y值。这是通过找到使得( p(y | x) )最大化的y值来实现的。在噪声信道模型中,这一过程被分解为两个部分:首先是计算给定y生成x的概率( p(x | y) )(即转导模型),然后是计算y本身的概率( p(y) )(即语言模型)。最终的目标是找到使得这两个概率的乘积最大的y值。
应用举例:
- 语音识别:模型的输入是声学信号(x),目标是找出最有可能的文本转录(y)。
- 机器翻译:模型的输入是源语言的句子(x),目标是找出最有可能的目标语言翻译(y)。
这种方法为早期的语音识别和机器翻译任务奠定了基础,并在这些领域中得到了广泛应用。
2.2 n-Gram模型
"Large (n-Gram) Language Models" 部分主要介绍了早期的大规模n-Gram语言模型的发展与应用。以下是详细介绍:
1. 什么是n-Gram模型
n-Gram模型是一种通过统计方法预测下一个词出现概率的语言模型。它基于这样一个假设:一个词的出现概率只取决于前面n-1个词。例如,三元组模型(trigram)就是基于前两个词预测下一个词的出现概率。
2. 早期的n-Gram模型
早期的大型语言模型使用的是n-Gram模型,其中最具代表性的是Google的n-Gram模型。这些模型通过分析大量的文本数据来统计词序列的频率,并由此预测词的出现概率。
3. Google n-Gram项目
- 第一次发布 (2006年): Google发布了首个英语n-Gram数据集,训练数据来自于1万亿个token(词或词的单位),涵盖了95亿个句子。该模型包含了1-gram(单词)、2-gram(双词组)、3-gram(三词组)、4-gram(四词组)和5-gram(五词组)。
- 扩展至其他语言 (2009-2010年): 随后,Google将n-Gram模型扩展至其他语言,包括日语、中文、瑞典语、西班牙语、罗马尼亚语、葡萄牙语、波兰语、荷兰语、意大利语、法语、德语和捷克语。
4. 模型规模与训练数据
- 模型规模: 英语n-Gram模型的参数量约为30亿个。与现代的大型语言模型相比,这样的规模已经非常庞大。
- 训练数据的规模: 模型的训练数据包括了1万亿个token和95亿个句子,这样的大数据量为n-Gram模型的预测提供了强大的支持。
5. n-Gram模型的局限性
尽管n-Gram模型在其时代取得了重要的成功,但其也存在一定的局限性:
- 上下文限制: n-Gram模型只能考虑有限个(n-1)前缀词,这使得它无法捕捉长距离的依赖关系。
- 数据稀疏性: 随着n的增大,模型的参数量迅速增加,导致模型容易遇到数据稀疏问题,因为许多n-gram可能在训练数据中很少甚至从未出现过。
总结
n-Gram语言模型是早期自然语言处理中的重要工具,它通过统计词序列的出现频率来预测文本。然而,随着计算能力的提高和更复杂模型的出现,如基于深度学习的Transformer模型,n-Gram模型的应用逐渐减少,但它为语言模型的发展奠定了基础。
2.3 当今前沿大模型的训练数据量和参数量
模型名称 | 开发者 | 发布年份 | 训练数据(# Tokens) | 模型规模(# 参数量) |
---|---|---|---|---|
GPT-2 | OpenAI | 2019 | ~10 billion (40GB) | 1.5 billion |
GPT-3 (ChatGPT) | OpenAI | 2020 | 300 billion | 175 billion(1750亿) |
PaLM | 2022 | 780 billion | 540 billion | |
Chinchilla | DeepMind | 2022 | 1.4 trillion | 70 billion |
LaMDA (Bard) | 2022 | 1.56 trillion | 137 billion | |
LLaMA | Meta | 2023 | 1.4 trillion | 65 billion |
LLaMA-2 | Meta | 2023 | 2 trillion(2万亿) | 70 billion |
GPT-4 | OpenAI | 2023 | ? | ? |
2.4 计算图的概念
这张图片展示了如何绘制神经网络的计算图(Computation Graph)以及计算图的一些基本原则和元素。下面详细解释每个部分的含义:
1. 计算图(Computation Graph)简介
计算图是用来表示算法的图形化工具。在计算图中:
- 节点(Nodes):表示算法中的中间变量。节点在图中通常用矩形表示。
- 边(Edges):表示变量之间的依赖关系,边是有方向的,指向依赖项。
- 无标签的边:在计算图中,边通常不需要标签,因为边的方向已经表明了依赖关系。
2. 图中各部分的详细解释
- (A) Input: 这一部分表示输入层。每个输入变量 (x_i) 被表示为节点。图中也指出,每个输入参数 (\alpha_{ij}) 也需要在图中表示出来。
- (B) Hidden (linear): 这一层表示神经网络中的隐藏层的线性部分。计算公式为 (a_j = \sum_{i=0}^{M} \alpha_{ji} x_i),这表示每个隐藏层的节点 (a_j) 是输入 (x_i) 的线性组合。
- © Hidden (sigmoid): 隐藏层的非线性部分,使用sigmoid函数。公式为 (z_j = \frac{1}{1 + \exp(-a_j)})。这一步是将线性组合后的结果通过激活函数(如sigmoid)转换。
- (D) Output (linear): 输出层的线性部分,计算公式为 (b = \sum_{j=0}^{D} \beta_j z_j),即对隐藏层的输出再做一次线性组合。
- (E) Output (sigmoid): 最终输出结果通过sigmoid函数转换,公式为 (y = \frac{1}{1 + \exp(-b)})。
- (F) Loss : 损失函数 (J = \frac{1}{2} (y - y^*)^2) 用于衡量模型输出 (y) 与真实值 (y^*) 之间的误差。
3. 计算图的要点
- 拦截项作为节点:在神经网络中,每个拦截项(bias)都应被表示为一个节点,除非它已被整合进其他部分。
- 每个参数都应在图中表示:这确保了计算图的完整性和清晰性。
- 常数、标签等应在图中表示:例如,真实标签 ( y^* ) 应在图中作为节点出现。
- 可以包含损失节点:将损失函数作为图的一部分是完全可以的。
总结:
通过计算图,能够直观地理解数据如何在网络中流动,以及如何通过每一层的计算得到最终的输出。这种图示法对于理解复杂的神经网络模型非常有帮助,尤其是在进行反向传播和梯度计算时。
2.5 Deep BiLSTM 长什么样、LSTM系列变种问题
相比BiLSTM大概就是多个跳跃连接,感觉有点类似残差,防止梯度消失。
LSTM系列变种问题:
- 他们仍然在处理长距离依赖方面存在困难。
- 他们的计算本质上是串行的,因此无法轻松地在GPU上并行化。
- 尽管他们(大多数情况下)解决了梯度消失问题,但仍可能会遭遇梯度爆炸的困扰。
2.6 为什么transformer中需要加入位置编码?
一句话总结:注意力机制无法捕捉到词序信息,而词序蕴含的信息很重大,因此需要通过额外的位置编码将位置信息融入到词嵌入编码中。
位置嵌入(Position Embeddings)
- 问题:由于注意力机制是位置不变的,因此我们需要一种方法来学习关于位置的信息。
- 解决方案:使用(或学习)一组特定于位置的嵌入:( p_t ) 表示在位置 ( t ) 处的含义。将其与词嵌入 ( w_t ) 相加。关键思想是,每个出现在位置 ( t ) 的词都使用相同的位置嵌入 ( p_t )。
- 位置嵌入有多种形式:
- 一些是固定的(基于正弦和余弦),而另一些是学习到的(类似于词嵌入)。
- 一些是绝对的(如上所述),但我们也可以使用相对位置嵌入(即相对于查询向量的位置)。
注释:
- ( P_1 \neq P_3 )(位置1的嵌入不等于位置3的嵌入)。
- ( W_1 = W_3 )(词"cat"的嵌入在两个位置上是相同的)。
解释:
这张图和文本介绍了在Transformer模型中使用的位置嵌入(Position Embeddings)。在Transformer架构中,注意力机制本身是位置不变的,这意味着它不会直接考虑词语在句子中的顺序。然而,句子中的词语顺序在理解语义时是非常重要的。因此,引入了位置嵌入来弥补这一点。
关键点:
- 位置嵌入的必要性:
-
由于注意力机制不考虑词语的顺序,因此引入位置嵌入来为每个词语添加位置信息,以便模型能够区分同一个词在不同位置上的不同含义。
-
如何实现:
- 每个位置 ( t ) 都有一个对应的位置嵌入 ( p_t ),它表示该位置的特定含义。该位置嵌入与词嵌入 ( w_t ) 相加,形成包含位置信息的输入向量。这样,模型就可以在处理时保留位置信息。
-
位置嵌入的种类:
- 固定位置嵌入:这些位置嵌入通常基于正弦和余弦函数生成,不随训练过程变化。
- 学习位置嵌入:类似于词嵌入,通过训练过程动态学习和调整。
- 绝对位置嵌入:表示词语的具体位置(如第一个词、第二个词)。
- 相对位置嵌入:表示一个词相对于另一个词的位置关系。
-
示例解释:
- 在图中,词语"Cat"和"saw"在不同的位置上分别有其位置嵌入 ( p_1, p_2 ),并与词嵌入 ( w_1, w_2 ) 相加,以便模型知道"Cat"和"saw"分别出现在句子的什么位置。
- 在例子中,尽管"Cat"在两个不同的位置上出现(位置1和位置3),它的词嵌入 ( W_1 ) 和 ( W_3 ) 是相同的,但其位置嵌入 ( P_1 ) 和 ( P_3 ) 不同,从而帮助模型区分它们在句子中的不同角色。
通过位置嵌入,Transformer模型能够更好地理解词语的顺序和语境,从而提升对序列数据的处理能力。
2.7 关于 GPT3 的模型结构和参数
GPT的全称:Generative Pre-trained Transformer,即生成式预训练变换模型。
核心思想:GPT本质上是一个基于Transformer架构的语言模型(LM),其特别之处在于拥有大量的参数。
属性/版本 | 解释 | GPT (2018) | GPT-2 (2019) | GPT-3 (2020) |
---|---|---|---|---|
层数 | Transformer的层数(# layers)。表示模型的深度,层数越多,模型能捕捉到的特征越复杂。 | 12 | 48 | 96 |
状态维度 | 每层Transformer的输出向量维度(dimension of states)。更高的维度允许模型捕捉更丰富的信息。 | 768 | 1600 | 12288 |
内部状态维度 | 前馈神经网络(FFN)的中间层维度(dimension of inner states)。通常是状态维度的4倍,用于增强非线性能力。 | 3072 | -- | 4*12288 |
注意力头数量 | 多头自注意力机制中的头的数量(# attention heads)。更多的注意力头可以捕捉更多的序列特征。 | 12 | -- | 96 |
参数数量 | 模型中的总参数数量(# params)。包括所有可训练的权重和偏置,参数数量越大,模型的表达能力越强。 | 117M | 1542M | 175000M |
3 阅读材料(LSTM, transformer, 讲解博客)
- The Long Short-Term Memory and Other GatedRNNs. Ian Goodfellow, Yoshua Bengio, & Aaron Courville (2016). Deep Learning, Chapter 10.10-10.12.
- Attention Is All You Need. Vaswani et al. (2017). NeurIPS.
- The Illustrated Transformer. Alammar (2018).
第一个就是花书中的LSTM及其变种部分。
第二个就是鼎鼎大名的XXX is all you need原论文。
第三个是广泛被国内转载并引用原图的某位国外作者撰写的讲解Transformer论文的博文。(有十几个语种的翻译版。。。)
原版地址:https://jalammar.github.io/illustrated-transformer/
中文版1:https://blog.csdn.net/yujianmin1990/article/details/85221271
中文版2:https://blog.csdn.net/qq_36667170/article/details/124359818