详细摘要 摘要
生成:2025-05-18 16:33摘要详情
- 音频文件
- 2025 MIT | MIT 6.S191: Recurrent Neural Networks, Transformers, and Attention
- 摘要类型
- 详细摘要
- LLM 提供商
- openai
- LLM 模型
- gemini-2.5-pro-exp-03-25
- 已创建
- 2025-05-18 16:33:48
摘要内容
概览/核心摘要 (Executive Summary)
本讲座(MIT 6.S191 深度学习导论第二讲)由讲师 Ava Amini 主讲,深入探讨了深度序列建模的核心概念、方法和应用。讲座首先强调了序列数据在现实世界中的普遍性(如音频、文本、生物序列),并介绍了不同类型的序列建模任务(如情感分类、图像描述、机器翻译)。核心内容首先聚焦于循环神经网络 (RNNs),详细阐述了其通过引入“记忆”或隐藏状态 ($h_t$) 来处理序列信息的机制,即当前输出 $\hat{y}t$ 不仅依赖于当前输入 $x_t$,还依赖于前一时刻的隐藏状态 $h}$。讲座解释了 RNN 的状态更新公式 ($h_t = \tanh(W_{hh}^T h_{t-1} + W_{xh}^T x_t)$) 和输出计算 ($\hat{yt = W^T h_t$),以及权重共享的特点。接着讨论了训练 RNNs 所使用的沿时间反向传播 (BPTT) 算法及其面临的梯度爆炸和梯度消失问题,这些问题尤其影响模型学习长期依赖的能力。为解决此问题,引入了门控机制(如 LSTM, GRU)。
随后,讲座指出了 RNNs 的局限性,包括编码瓶颈、顺序处理导致的并行化困难以及并非真正的长时记忆。作为对 RNN 局限性的回应,讲座重点介绍了“自注意力 (Self-Attention)”机制,这是 Transformer 模型(如 GPT)的核心。自注意力机制允许模型在处理序列时,无需循环,而是通过计算查询 (Query)、键 (Key) 和值 (Value) 之间的关系来直接关注输入序列中的重要部分,从而实现并行化处理和更有效地捕捉长距离依赖。讲座详细拆解了自注意力的计算过程,包括位置编码、QKV 提取、注意力分数的计算 ($softmax(\frac{Q \cdot K^T}{\text{scaling}})$) 以及加权值的聚合。最后,概述了自注意力机制在语言处理、生物序列分析和计算机视觉等领域的广泛应用,并预告了后续关于大型语言模型的课程内容。
深度序列建模导论 (Introduction to Deep Sequence Modeling)
讲师 Ava Amini 开始本讲座(6.S191 第二讲),旨在为后续关于大型语言模型 (LLM) 的前沿内容奠定序列建模的基础。
- 序列在现实生活中的应用 (Sequences in the Wild)
- 序列数据无处不在,例如:
- 音频 (Audio):语音可以被分解为声波序列。 [cite: 6]
- 文本 (Text):自然语言可以被分解为字符或单词序列。 [cite: 9, 10]
- 其他:医学信号 (ECGs)、股票价格、生物序列(核酸、蛋白质)、天气、运动视频等。
- 序列数据无处不在,例如:
- 序列建模的应用 (Sequence Modeling Applications) [cite: 12]
- 一对一 (One to One): 例如,二元分类 (Binary Classification),判断学生是否能通过课程(传统神经网络)。 [cite: 11]
- 多对一 (Many to One): 例如,情感分类 (Sentiment Classification),根据一段文字判断其情感倾向。
- 一对多 (One to Many): 例如,图像描述 (Image Captioning),根据一张图片生成描述文字。
- 多对多 (Many to Many): 例如,机器翻译 (Machine Translation),将一种语言的序列翻译成另一种语言的序列。
循环神经网络 (Recurrent Neural Networks - RNNs)
讲座从感知机和前馈网络出发,引出处理序列数据的需求。
- 带循环的神经元 (Neurons with Recurrence)
- 传统全连接神经网络 (Feed-Forward Networks) 中,每个输入 $x_t$ 独立地产生输出 $\hat{y}_t$ ($\hat{y}_t = f(x_t)$)。 [cite: 17, 18]
- 对于序列数据,当前输出可能依赖于过去的输入。因此,循环神经元引入了过去信息的概念:$\hat{y}t = f(x_t, h$ 代表过去的记忆或内部状态。 [cite: 19, 20]})$,其中 $h_{t-1
- RNNs 的核心思想 [cite: 21]
- RNNs 在每个时间步应用一个循环关系来处理序列: $h_t = f_W(x_t, h_{t-1})$。 [cite: 22]
- $h_t$ 是当前时间步的隐藏状态 (cell state)。 [cite: 22]
- $x_t$ 是当前时间步的输入向量。 [cite: 22]
- $h_{t-1}$ 是前一时间步的隐藏状态。 [cite: 22]
- $f_W$ 是一个带权重 $W$ 的函数。 [cite: 22]
- 关键点:在每个时间步都使用相同的函数和参数集。 [cite: 22] RNNs 拥有一个状态 $h_t$,它在处理序列的每个时间步都会更新。 [cite: 22]
- RNNs 在每个时间步应用一个循环关系来处理序列: $h_t = f_W(x_t, h_{t-1})$。 [cite: 22]
- RNN 直观理解: [cite: 23, 24, 25, 26, 27, 28]
- 一个 RNN 单元接收当前输入(如单词)和上一刻的隐藏状态,输出一个预测和更新后的隐藏状态。这个过程在序列的每个元素上重复。
- 示例(伪代码):处理句子 "I love recurrent neural",逐词输入 RNN,更新隐藏状态,并预测下一个词。
- RNN 状态更新和输出: [cite: 29, 30, 31, 32]
- 更新隐藏状态 (Update Hidden State): $h_t = \tanh(W_{hh}^T h_{t-1} + W_{xh}^T x_t)$ [cite: 31]
- 计算输出向量 (Output Vector): $\hat{y}t = W^T h_t$ [cite: 32]
- RNN 的时间计算图 (Computational Graph Across Time): [cite: 33, 34]
- RNN 可以被看作是在时间上展开 (unrolled) 的计算图。
- 在每个时间步,都重复使用相同的权重矩阵 ($W_{xh}, W_{hh}, W_{hy}$)。 [cite: 34]
- RNN 实现:
- 从零开始用 TensorFlow 实现 RNN (RNNs from Scratch in TensorFlow): [cite: 35] 可以定义一个自定义的 RNN 单元层,初始化权重矩阵和隐藏状态,并在
call方法中实现前向传播逻辑(更新隐藏状态、计算输出)。 - 主流框架实现 (TensorFlow & PyTorch): [cite: 36]
- TensorFlow:
tf.keras.layers.SimpleRNN(rnn_units) - PyTorch:
torch.nn.RNN(input_size, rnn_units)
- TensorFlow:
- 学员将在实验课中动手操作。
- 从零开始用 TensorFlow 实现 RNN (RNNs from Scratch in TensorFlow): [cite: 35] 可以定义一个自定义的 RNN 单元层,初始化权重矩阵和隐藏状态,并在
- 损失计算:在每个时间步计算损失,总损失是所有时间步损失之和。
序列建模的设计标准与挑战 (Sequence Modeling: Design Criteria and Challenges)
[cite: 39, 57]
序列建模需要模型具备以下能力:
1. 处理可变长度的序列 (Handle variable-length sequences)。
2. 追踪长期依赖关系 (Track long-term dependencies)。
3. 保持关于顺序的信息 (Maintain information about order)。
4. 在整个序列中共享参数 (Share parameters across the sequence)。
讲师指出 RNNs 满足这些设计标准。
- 一个序列建模问题:预测下一个词 (A Sequence Modeling Problem: Predict the Next Word) [cite: 40, 41, 42, 43, 44, 45]
- 例如,给定句子 "This morning I took my cat for a walk",预测下一个词。 [cite: 41, 43, 45]
- 这是大型语言模型训练的核心任务。
- 将语言表示给神经网络 (Representing Language to a Neural Network): [cite: 46]
- 神经网络需要数值输入。 [cite: 46, 48]
- 编码语言给神经网络 (Encoding Language for a Neural Network): [cite: 47, 48, 49]
- 词汇表 (Vocabulary): 建立一个包含所有语料中单词的词汇表。 [cite: 49]
- 索引 (Indexing): 将每个单词映射到一个唯一的整数索引。 [cite: 49]
- 嵌入 (Embedding): 将索引转换为固定大小的向量。 [cite: 48, 49]
- One-hot embedding: 高维稀疏向量,只有一个维度为1。 [cite: 48]
- Learned embedding: 通过神经网络学习得到的低维稠密向量表示,相似的单词在向量空间中距离更近。 [cite: 48]
- 序列建模的复杂性:
- 处理可变序列长度 (Handle Variable Sequence Lengths) [cite: 50, 51]:句子长度不一。
- 捕捉长期依赖 (Model Long-Term Dependencies) [cite: 52, 53]:例如,在句子 "France is where I grew up, but I now live in Boston. I speak fluent __." 中,准确预测 "French" 需要回溯到句子开头的 "France"。 [cite: 52]
- 捕捉序列顺序的差异 (Capture Differences in Sequence Order) [cite: 55, 56]:词序改变会极大影响句子含义,如 "The food was good, not bad at all." vs "The food was bad, not good at all."。 [cite: 55, 56]
沿时间反向传播 (Backpropagation Through Time - BPTT) 及其挑战
[cite: 58]
训练 RNNs 需要特殊的反向传播算法。
- 回顾:前馈模型中的反向传播 (Recall: Backpropagation in Feed Forward Models): [cite: 59] 通过计算损失函数对参数的梯度来调整参数。
- RNNs:沿时间反向传播 (RNNs: Backpropagation Through Time): [cite: 60, 61]
- 损失在每个时间步计算,总损失是所有时间步损失的聚合。
- 梯度需要沿着时间步反向传播。由于权重在所有时间步共享,梯度的计算会涉及到所有时间步的贡献。 [cite: 61]
- 标准 RNN 的梯度流问题 (Standard RNN Gradient Flow): [cite: 62, 63]
- 计算早期隐藏状态(如 $h_0$)的梯度会涉及到多个 $W_{hh}$ 矩阵的连乘以及激活函数导数的连乘。 [cite: 63]
- 梯度爆炸 (Exploding Gradients): [cite: 65, 66] 如果 $W_{hh}$ 的某些值或激活函数导数较大,梯度在反向传播过程中会指数级增大。
- 解决方法: 梯度裁剪 (Gradient clipping) – 当梯度超过阈值时对其进行缩放。 [cite: 66]
- 梯度消失 (Vanishing Gradients): [cite: 67, 68] 如果 $W_{hh}$ 的某些值或激活函数导数较小(例如 tanh 函数在饱和区导数接近0),梯度会指数级减小至接近于零。
- 这使得模型难以学习长期依赖关系,因为来自较早时间步的误差信号对参数更新的贡献变得微乎其微。 [cite: 70, 72, 74, 76, 78]
- 模型偏向于学习短期依赖。例如,易预测 "The clouds are in the sky",难预测 "I grew up in France, ... and I speak fluent French"。 [cite: 72, 76, 78]
- 解决方法: [cite: 68]
- 选择合适的激活函数 (Activation function)。
- 恰当的权重初始化 (Weight initialization)。
- 改进网络架构 (Network architecture),例如使用 LSTM 或 GRU。
- 神经元中的门控机制 (Gating Mechanisms in Neurons): [cite: 79]
- 思想:使用门 (gates) 来选择性地在每个循环单元内添加或移除信息,控制信息流。
- 门通过逐点相乘 (Pointwise multiplication) 和 Sigmoid 激活函数实现。
- 长短期记忆 (Long Short Term Memory - LSTMs) 和 GRU 等网络依赖门控单元来更好地追踪长期信息。 [cite: 79]
RNN 的应用与局限性 (RNN Applications & Limitations)
[cite: 81]
- 示例任务:音乐生成 (Example Task: Music Generation): [cite: 82]
- 输入乐谱的一部分,预测并生成乐谱的下一个音符。学员将在实验课中训练 RNN 模型生成新音乐。
- 提及一个创业公司使用神经网络完成舒伯特未完成的交响曲的例子。
- 示例任务:情感分类 (Example Task: Sentiment Classification): [cite: 84, 85, 86, 87, 88, 89]
- 输入文本序列(如推文),输出其情感倾向(如积极情感的概率)。 [cite: 84, 86]
- 循环模型的局限性 (Limitations of Recurrent Models): [cite: 90, 91, 93]
- 编码瓶颈 (Encoding bottleneck): 所有先前的信息都需要被压缩到一个固定大小的隐藏状态向量 $h_t$ 中。 [cite: 90, 93]
- 速度慢,难以并行化 (Slow, no parallelization): 计算是按顺序进行的 ($h_t$ 依赖 $h_{t-1}$),难以利用并行计算硬件。 [cite: 90, 93]
- 并非真正的长时记忆 (Not truly long memory): 尽管 LSTM 等有所改进,但捕获极长的依赖关系仍然非常困难。 [cite: 90, 93]
超越循环:自注意力机制 (Beyond Recurrence: Self-Attention Mechanism)
讲座探讨了克服 RNN 局限性的方法,引出了自注意力机制。
- 序列建模的目标 (Goal of Sequence Modeling) [cite: 92, 93, 94, 95, 96, 97, 98, 99]
- 期望的能力:高效处理连续流数据、并行化计算、具备长时记忆能力。 [cite: 95, 97]
- 简单地将所有输入拼接后送入密集网络 (dense network) 的问题:不可扩展、丢失顺序信息、无长时记忆。 [cite: 98, 99]
- 新思路:识别并关注 (attend to) 输入序列中的重要部分。 [cite: 99]
- Attention Is All You Need [cite: 100]
- 2017年提出的论文,引入了 Transformer 模型,其核心是自注意力机制。
- GPT 模型中的 "T" 即代表 Transformer。
- 自注意力机制的直观理解 (Intuition Behind Self-Attention): [cite: 101]
- 核心思想:关注输入中最重要的部分。
- 步骤:1. 识别哪些部分需要关注。2. 提取具有高注意力权重的特征。 [cite: 102]
- 类比搜索问题: [cite: 102, 104]
- 查询 (Query - Q): 用户的搜索词(例如 "deep learning")。 [cite: 105]
- 键 (Key - K): 数据库中各项的描述符(例如 YouTube 视频标题/元数据)。 [cite: 105, 106]
- 计算 Query 和每个 Key 之间的相似度,得到注意力权重 (attention weights/mask)。 [cite: 106]
- 根据注意力权重,提取与 Query 最相关的项的值 (Value - V)(例如视频内容)。 [cite: 108]
- 用神经网络学习自注意力 (Learning Self-Attention with Neural Networks): [cite: 109, 110, 111]
- 目标:识别并关注输入序列中最重要的特征。
- 以句子 "He tossed the tennis ball to serve" 为例: [cite: 110]
- 步骤:
- 编码位置信息 (Encode position information): 由于数据是一次性输入的(非时序),需要明确编码位置信息来理解顺序。通过将词嵌入 (word embedding) 和位置编码 (positional encoding, $p_i$) 相加,得到位置感知的编码。 [cite: 110, 111, 113]
- 提取查询 (Query)、键 (Key)、值 (Value): [cite: 110, 115]
- 将位置感知的编码分别通过不同的线性层 (Linear layer) 转换得到 Q, K, V 向量(或矩阵)。这些线性层有各自独立的权重。 [cite: 115]
- 计算注意力权重 (Compute attention weighting): [cite: 110, 117, 118, 120, 121]
- 注意力分数 (Attention score): 计算每个 Query 和所有 Key 之间的成对相似度。常用方法是点积 (Dot product) 相似度。 [cite: 117, 118]
- 公式:$\text{Score} = Q \cdot K^T$
- 缩放 (Scaling): 为防止点积结果过大导致梯度过小,通常会除以一个缩放因子,即 K 向量维度的平方根 ($\sqrt{d_k}$)。 公式:$\frac{Q \cdot K^T}{\sqrt{d_k}}$ [cite: 118]
- 注意力权重 (Attention weighting): 将缩放后的注意力分数通过 softmax 函数进行归一化,得到每个 Key 相对于 Query 的权重分布。 [cite: 123, 124]
- 公式:$\text{Weights} = softmax(\frac{Q \cdot K^T}{\sqrt{d_k}})$ [cite: 124]
- 提取具有高注意力权重的特征 (Extract features with high attention): [cite: 110, 125, 126]
- 将注意力权重与对应的 Value 向量(或矩阵)相乘并求和(加权平均)。 [cite: 126]
- 公式:$A(Q,K,V) = softmax(\frac{Q \cdot K^T}{\sqrt{d_k}}) \cdot V$ [cite: 126]
- 自注意力头 (Self-Attention Head): 上述 Q, K, V 计算过程构成一个自注意力头。 [cite: 128, 129]
- 多头注意力 (Multi-Head Attention): [cite: 133] 可以并行使用多个自注意力头,每个头可以学习关注输入序列的不同方面或不同子空间表示,然后将它们的输出拼接或组合起来,以增强模型的表达能力。
自注意力机制的应用 (Self-Attention Applied)
[cite: 134]
自注意力机制及其核心组件构成的 Transformer 模型在多个领域取得了巨大成功:
* 语言处理 (Language Processing): 如 BERT, GPT 等大型语言模型。 [cite: 134]
* 生物序列 (Biological Sequences): 如蛋白质结构预测模型 (AlphaFold)。 [cite: 135]
* 计算机视觉 (Computer Vision): 如 Vision Transformers (ViT),将 Transformer 架构应用于图像数据。 [cite: 135]
课程总结与后续安排 (Lecture Summary and Next Steps)
[cite: 136]
讲师总结了本讲的主要内容:
1. RNNs 非常适合序列建模任务,通过循环关系对序列进行建模。
2. 使用沿时间反向传播 (BPTT) 训练 RNNs,但存在梯度问题。
3. RNNs 可用于音乐生成、分类、机器翻译等。
4. 自注意力 (Self-attention) 机制可以无需循环即可对序列进行建模,是许多大型语言模型 (LLMs) 的基础。
后续安排:
* 周四、周五将有关于大型语言模型的客座讲座。
* 软件实验课已在 GitHub 发布 (TensorFlow 和 PyTorch 版本),学员将动手实现 RNN 进行音乐生成,以及接触 LLMs。
* 课后将在 Kendall Square 举办课程启动招待会。