Transformer
1. 自然语言处理 (NLP) 概览
自然语言处理 (NLP) 是探索计算机与人类语言之间交互的领域,旨在实现人与计算机之间使用自然语言进行有效通信。
2. 词的表示 (Word Representations)
2.1 传统表示:One-hot 向量
在传统NLP中,单词被视为离散符号,可以用 one-hot 向量表示。
- 例如:
motel = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]hotel = [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
- 向量维度 = 词典大小 (可能非常大, e.g., 500,000+)。
2.2 分布式表示:词嵌入 (Word Embeddings)
分布语义学 (Distributional Semantics):一个词的含义由其上下文(经常一起出现的词)给出。
“You shall know a word by the company it keeps” (J. R. Firth 1957: 11)
- 为每个单词构建一个简短而密集的实数向量(通常50-300维)。
- 使得在相似上下文中出现的单词具有相似的向量表示(通过点积衡量相似性)。
- 这些向量也称为词嵌入 (Word Embeddings) 或词表征 (Word Representations)。
2.3 Word2Vec
Word2Vec (Mikolov et al. 2013) 是一个学习词向量的框架。
核心思想:
- 拥有一个大型文本语料库。
- 固定词汇表中的每个单词都由一个向量表示。
- 遍历文本中的每个位置
t,包含一个中心词c和上下文(“外部”)词o。 - 使用
c和o的词向量相似性来计算给定c时o的概率(反之亦然)。 - 不断调整单词向量来最大化此概率。
目标函数:
最小化负对数似然的均值。对于中心词 和窗口大小为 的上下文词 ():
计算概率 :
对每个单词 w,使用两个向量:
- :当
w是中心词时。 - :当
w是上下文词时。
这两个向量都是模型参数 的一部分。
对于中心词 c 和上下文词 o:
其中 是词汇表。
Word2Vec的两种模型架构:
-
Continuous Bag of Words (CBOW):使用窗口中的上下文单词来预测中心词。
- 输入:上下文词向量的平均 (或拼接)。
- 输出:中心词的概率分布。
-
Skip-grams:使用中心词来预测窗口中的上下文单词。
- 输入:中心词向量。
- 输出:各个上下文词的概率分布。
(示意图,实际PPT中为更详细的结构图)
Word2Vec 训练参数 (以Skip-gram为例,预测一个上下文词):
- 输入层: 中心词 (one-hot vector, )
- 隐藏层: (中心词的词向量, )
- 是输入到隐藏层的权重矩阵 (),其行是中心词向量 。
- 输出层: ()
- 是隐藏层到输出层的权重矩阵 (),其列是上下文词向量 。
- 需要学习的参数是 和 。
3. 机器翻译 (Machine Translation, MT)
MT任务:将一种语言(源语言)的句子 翻译为另一种语言(目标语言)的句子 。
3.1 统计机器翻译 (SMT) vs. 神经机器翻译 (NMT)
- SMT (1990s-2010s):
- 系统复杂,包含许多单独设计的子组件。
- 需要大量特征工程和额外的语言资源(如短语表)。
- 人力维护成本高。
- NMT (2014 onwards):
- 使用编码器-解码器 (Encoder-Decoder) 神经网络模型。
- 端到端训练,减少了特征工程。
- 迅速成为主流,性能超越SMT。
3.2 Seq2Seq 模型
- 核心思想:
- 编码器 (Encoder):一个神经网络(通常是RNN,如LSTM/GRU)读取输入序列 并将其压缩成一个固定长度的上下文向量 (context vector) 。
- 解码器 (Decoder):另一个神经网络(通常是RNN)以 为初始状态,逐个生成目标序列 中的词。
- Seq2Seq 模型是条件语言模型:解码器预测下一个词,其预测以源句子 (通过 ) 为条件。
- 应用广泛:文本摘要、对话系统、代码生成等。
4. 注意力机制 (Attention Mechanism)
Seq2Seq模型的一个瓶颈是编码器需要将源句子的所有信息压缩到一个固定长度的向量 中,这对于长句子来说很困难。
注意力机制的核心思想: 在解码器的每一步,允许解码器直接查看并关注 (attend to) 源序列的不同部分,而不是仅仅依赖于最终的上下文向量 。
- 解码器在生成每个目标词时,会计算源序列中每个词的注意力权重 (attention weights)。
- 这些权重决定了在当前解码步骤中,源序列的哪些部分更重要。
- 然后,根据这些权重对编码器的隐藏状态进行加权求和,得到一个动态的上下文向量,用于当前词的预测。
更一般的注意力定义:
给定一个查询向量 (query) 和一组键值对 (key-value pairs),注意力机制计算一个输出,该输出是值的加权和,其中每个值的权重由查询和对应键的相似度计算得出。
- 在Seq2Seq+Attention中:解码器隐藏状态是query,编码器隐藏状态是keys和values。
5. Transformer: Attention Is All You Need?
[Vaswani et al., 2017] 提出的Transformer模型,完全摒弃了RNN结构,仅依赖注意力机制来捕捉输入和输出之间的依赖关系。
5.1 自注意力 (Self-Attention)
自注意力允许输入序列中的每个位置关注输入序列中的所有其他位置(包括自身),以计算该位置的新表示。
将自注意力类比为“模糊的”哈希表:
- Query (Q): 当前词,用于查询信息。
- Key (K): 序列中的其他词,用于与Query匹配。
- Value (V): 序列中其他词的实际内容。
Query和Key计算相似度(注意力分数),该分数作为权重,对Values进行加权求和。
自注意力计算步骤 (对于输入词嵌入 ):
-
生成Q, K, V向量:
其中 是可学习的权重矩阵。
-
计算注意力分数 (Attention Scores):Query与所有Keys的点积。为了梯度稳定,通常会进行缩放。
其中 是key向量的维度。
-
归一化分数 (Softmax):对分数进行softmax,得到注意力权重 。
-
计算输出 (Weighted Sum of Values):用注意力权重对Value向量进行加权求和。
即为词 经过自注意力层后的新表示。
向量化表示:
输入词嵌入矩阵
- (按行softmax)
5.2 解决自注意力的局限
-
缺乏非线性:自注意力本身是线性操作(加权平均)。
- 解决方案:在自注意力层之后添加一个前馈神经网络 (Feed-Forward Network, FFN),通常包含两层线性变换和一个ReLU激活函数。
-
无法感知序列顺序:自注意力对输入顺序不敏感(置换不变性)。
- 解决方案:位置编码 (Positional Encoding)。将位置信息编码成向量 ,并将其加到输入词嵌入 上。
- 位置编码向量 可以是学习得到的,也可以是固定的(如使用不同频率的正弦和余弦函数)。
5.3 多头注意力 (Multi-Head Attention)
与其只用一组 计算一次注意力,多头注意力机制允许模型并行地多次执行注意力计算。
- 将Q, K, V分别线性投影 次( 是头的数量),得到 组不同的 。
- 对每一组 并行计算自注意力,得到 个输出向量 。
- 将这 个输出向量拼接 (concatenate) 起来,再通过一个线性变换得到最终输出。 其中 是可学习的参数矩阵。
优势:允许模型在不同位置关注来自不同子空间表征的信息,增强了模型的表达能力。
(示意图,源自 “Attention Is All You Need” 论文)
5.4 Transformer 整体架构
Transformer模型主要由编码器 (Encoder) 和解码器 (Decoder) 堆栈组成。
最终输出:
解码器堆栈的输出会经过一个线性层,将向量投影到词汇表大小的维度,然后通过一个Softmax层生成下一个词的概率分布。
(示意图,源自 “Attention Is All You Need” 论文)
6. 总结与展望
Transformer架构凭借其强大的并行计算能力和对长距离依赖的出色建模,已成为现代NLP领域几乎所有最先进模型的基础。随着模型大小、训练数据和计算资源的增加,基于Transformer的语言模型性能仍在持续提升,展现出巨大的潜力。
