差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
| 深度学习:循环神经网络 [2026/03/02 22:19] – [1.7 RNN的应用] 张叶安 | 深度学习:循环神经网络 [2026/03/02 22:23] (当前版本) – [4. 答案与解析] 张叶安 | ||
|---|---|---|---|
| 行 253: | 行 253: | ||
| 1. **顺序计算限制**:难以并行化 | 1. **顺序计算限制**:难以并行化 | ||
| + | |||
| 2. **长距离依赖**:即使LSTM也难以捕捉非常长的依赖 | 2. **长距离依赖**:即使LSTM也难以捕捉非常长的依赖 | ||
| + | |||
| 3. **计算效率**:逐时间步计算,速度慢 | 3. **计算效率**:逐时间步计算,速度慢 | ||
| + | |||
| 4. **梯度问题**:深层堆叠时仍面临梯度问题 | 4. **梯度问题**:深层堆叠时仍面临梯度问题 | ||
| 行 260: | 行 263: | ||
| Transformer完全基于注意力机制,摒弃了循环结构: | Transformer完全基于注意力机制,摒弃了循环结构: | ||
| - | - 完全并行计算 | + | |
| - | - 捕捉任意距离的依赖关系 | + | - 捕捉任意距离的依赖关系 |
| - | - 在大规模数据上表现优异 | + | - 在大规模数据上表现优异 |
| **1.8.3 现代发展趋势** | **1.8.3 现代发展趋势** | ||
| 1. **RNN与Transformer混合**:Reformer、Transformer-XL | 1. **RNN与Transformer混合**:Reformer、Transformer-XL | ||
| + | |||
| 2. **结构化稀疏注意力**:降低Transformer复杂度 | 2. **结构化稀疏注意力**:降低Transformer复杂度 | ||
| + | |||
| 3. **状态空间模型(SSM)**:Mamba等,结合RNN和CNN优点 | 3. **状态空间模型(SSM)**:Mamba等,结合RNN和CNN优点 | ||
| 行 275: | 行 280: | ||
| **题目**:考虑一个简单的RNN单元,输入维度为2,隐藏状态维度为3。给定: | **题目**:考虑一个简单的RNN单元,输入维度为2,隐藏状态维度为3。给定: | ||
| - | - $W_{xh} = \begin{bmatrix} 0.1 & 0.2 \\ 0.3 & 0.4 \\ 0.5 & 0.6 \end{bmatrix}$ | + | |
| - | - $W_{hh} = \begin{bmatrix} 0.1 & 0.2 & 0.3 \\ 0.4 & 0.5 & 0.6 \\ 0.7 & 0.8 & 0.9 \end{bmatrix}$ | + | - $W_{hh} = \begin{bmatrix} 0.1 & 0.2 & 0.3 \\ 0.4 & 0.5 & 0.6 \\ 0.7 & 0.8 & 0.9 \end{bmatrix}$ |
| - | - $b_h = \begin{bmatrix} 0.1 \\ 0.2 \\ 0.3 \end{bmatrix}$ | + | - $b_h = \begin{bmatrix} 0.1 \\ 0.2 \\ 0.3 \end{bmatrix}$ |
| - | - 初始隐藏状态$h_0 = \begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix}$ | + | - 初始隐藏状态$h_0 = \begin{bmatrix} 0 \\ 0 \\ 0 \end{bmatrix}$ |
| - | - 输入序列:$x_1 = \begin{bmatrix} 1 \\ 1 \end{bmatrix}$,$x_2 = \begin{bmatrix} 0.5 \\ 0.5 \end{bmatrix}$ | + | - 输入序列:$x_1 = \begin{bmatrix} 1 \\ 1 \end{bmatrix}$,$x_2 = \begin{bmatrix} 0.5 \\ 0.5 \end{bmatrix}$ |
| 使用tanh激活函数,计算$h_1$和$h_2$。 | 使用tanh激活函数,计算$h_1$和$h_2$。 | ||
| 行 288: | 行 293: | ||
| 首先计算线性组合: | 首先计算线性组合: | ||
| + | |||
| $$z_1 = W_{xh} x_1 + W_{hh} h_0 + b_h$$ | $$z_1 = W_{xh} x_1 + W_{hh} h_0 + b_h$$ | ||
| 行 312: | 行 318: | ||
| **结论**: | **结论**: | ||
| - | - $h_1 \approx [0.380, 0.716, 0.885]^T$ | + | |
| - | - $h_2 \approx [0.602, 0.918, 0.986]^T$ | + | - $h_2 \approx [0.602, 0.918, 0.986]^T$ |
| ==== 例题2:LSTM门控机制分析 ==== | ==== 例题2:LSTM门控机制分析 ==== | ||
| **题目**:分析LSTM的门控机制。假设在一个时间步: | **题目**:分析LSTM的门控机制。假设在一个时间步: | ||
| - | - 上一时刻细胞状态$C_{t-1} = 5$ | + | |
| - | - 遗忘门输出$f_t = 0.1$ | + | - 遗忘门输出$f_t = 0.1$ |
| - | - 输入门输出$i_t = 0.9$ | + | - 输入门输出$i_t = 0.9$ |
| - | - 候选状态$\tilde{C}_t = 0.5$ | + | - 候选状态$\tilde{C}_t = 0.5$ |
| (1) 计算新的细胞状态$C_t$ | (1) 计算新的细胞状态$C_t$ | ||
| + | |||
| (2) 分析遗忘门接近0和接近1时的不同行为 | (2) 分析遗忘门接近0和接近1时的不同行为 | ||
| + | |||
| (3) 说明为什么LSTM能解决梯度消失问题 | (3) 说明为什么LSTM能解决梯度消失问题 | ||
| 行 332: | 行 340: | ||
| 根据LSTM细胞状态更新公式: | 根据LSTM细胞状态更新公式: | ||
| + | |||
| $$C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$$ | $$C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$$ | ||
| 代入数值: | 代入数值: | ||
| + | |||
| $$C_t = 0.1 \times 5 + 0.9 \times 0.5$$ | $$C_t = 0.1 \times 5 + 0.9 \times 0.5$$ | ||
| + | |||
| $$= 0.5 + 0.45$$ | $$= 0.5 + 0.45$$ | ||
| + | |||
| $$= 0.95$$ | $$= 0.95$$ | ||
| 行 342: | 行 354: | ||
| **情况A:$f_t \approx 0$** | **情况A:$f_t \approx 0$** | ||
| - | - 遗忘门关闭,丢弃大部分历史信息 | + | |
| - | - $C_t \approx i_t \odot \tilde{C}_t$ | + | - $C_t \approx i_t \odot \tilde{C}_t$ |
| - | - 细胞状态主要由当前输入决定 | + | - 细胞状态主要由当前输入决定 |
| - | - 用于" | + | - 用于" |
| **情况B:$f_t \approx 1$** | **情况B:$f_t \approx 1$** | ||
| - | - 遗忘门打开,保留历史信息 | + | |
| - | - $C_t \approx C_{t-1} + i_t \odot \tilde{C}_t$ | + | - $C_t \approx C_{t-1} + i_t \odot \tilde{C}_t$ |
| - | - 历史信息可以几乎无损耗地传递 | + | - 历史信息可以几乎无损耗地传递 |
| - | - 用于长期记忆的保持 | + | - 用于长期记忆的保持 |
| **示例**: | **示例**: | ||
| - | - 在语言模型中,遇到句号时遗忘门应较低,重置上下文 | + | |
| - | - 在描述同一人/ | + | - 在描述同一人/ |
| **(3) 解决梯度消失的原因** | **(3) 解决梯度消失的原因** | ||
| 行 364: | 行 376: | ||
| **导数分析**: | **导数分析**: | ||
| + | |||
| $$\frac{\partial C_t}{\partial C_{t-1}} = f_t$$ | $$\frac{\partial C_t}{\partial C_{t-1}} = f_t$$ | ||
| 当$f_t \approx 1$时,梯度可以在时间步之间几乎无损传播: | 当$f_t \approx 1$时,梯度可以在时间步之间几乎无损传播: | ||
| + | |||
| $$\frac{\partial C_T}{\partial C_1} = \prod_{t=2}^T f_t \approx 1$$ | $$\frac{\partial C_T}{\partial C_1} = \prod_{t=2}^T f_t \approx 1$$ | ||
| 相比之下,标准RNN使用乘法更新: | 相比之下,标准RNN使用乘法更新: | ||
| + | |||
| $$h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t)$$ | $$h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t)$$ | ||
| 行 375: | 行 390: | ||
| **实际意义**: | **实际意义**: | ||
| + | |||
| LSTM可以学习在需要时保持细胞状态不变($f_t=1, | LSTM可以学习在需要时保持细胞状态不变($f_t=1, | ||
| 行 420: | 行 436: | ||
| **分析**: | **分析**: | ||
| - | - 注意力权重:$[0.245, | + | |
| - | - 解码器关注程度:$h_2 > h_1 > h_3$ | + | - 解码器关注程度:$h_2 > h_1 > h_3$ |
| - | - 这是因为$s_{t-1} = [1, 0]$与$h_2 = [2, 0]$方向最相似(点积最大) | + | - 这是因为$s_{t-1} = [1, 0]$与$h_2 = [2, 0]$方向最相似(点积最大) |
| - | - 上下文向量是编码器状态的加权平均,偏向与解码器状态相似的$h_2$ | + | - 上下文向量是编码器状态的加权平均,偏向与解码器状态相似的$h_2$ |
| ===== 3. 训练题 ===== | ===== 3. 训练题 ===== | ||
| 行 484: | 行 500: | ||
| 1. **答案:B** | 1. **答案:B** | ||
| - | 解析:RNN在不同时间步使用相同的权重矩阵($W_{xh}, | + | |
| + | 解析:RNN在不同时间步使用相同的权重矩阵($W_{xh}, | ||
| 2. **答案:B** | 2. **答案:B** | ||
| - | 解析:遗忘门(Forget Gate)通过$f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$控制历史信息的保留程度。 | + | |
| + | 解析:遗忘门(Forget Gate)通过$f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$控制历史信息的保留程度。 | ||
| 3. **答案:B** | 3. **答案:B** | ||
| - | 解析:GRU将LSTM的遗忘门和输入门合并为更新门,细胞状态和隐藏状态合并,参数量约为LSTM的75%。 | + | |
| + | 解析:GRU将LSTM的遗忘门和输入门合并为更新门,细胞状态和隐藏状态合并,参数量约为LSTM的75%。 | ||
| 4. **答案:B** | 4. **答案:B** | ||
| - | 解析:注意力机制允许解码器动态关注输入序列的不同部分,解决了固定长度上下文向量的信息瓶颈问题。 | + | |
| + | 解析:注意力机制允许解码器动态关注输入序列的不同部分,解决了固定长度上下文向量的信息瓶颈问题。 | ||
| 5. **答案:B** | 5. **答案:B** | ||
| - | 解析:双向RNN包含前向和后向两个RNN,分别捕获过去和未来的上下文信息。 | + | |
| + | 解析:双向RNN包含前向和后向两个RNN,分别捕获过去和未来的上下文信息。 | ||
| **二、填空题答案:** | **二、填空题答案:** | ||
| 6. **答案:**输入;输出 | 6. **答案:**输入;输出 | ||
| - | 解析:LSTM的三个门是遗忘门(Forget Gate)、输入门(Input Gate)和输出门(Output Gate)。 | + | |
| + | 解析:LSTM的三个门是遗忘门(Forget Gate)、输入门(Input Gate)和输出门(Output Gate)。 | ||
| 7. **答案:**加法 | 7. **答案:**加法 | ||
| - | 解析:$C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$,加法更新使梯度可以直接传播,缓解了梯度消失。 | + | |
| + | 解析:$C_t = f_t \odot C_{t-1} + i_t \odot \tilde{C}_t$,加法更新使梯度可以直接传播,缓解了梯度消失。 | ||
| 8. **答案:**BPTT(或Backpropagation Through Time) | 8. **答案:**BPTT(或Backpropagation Through Time) | ||
| - | 解析:BPTT将RNN按时间展开,使用反向传播算法计算梯度。 | + | |
| + | 解析:BPTT将RNN按时间展开,使用反向传播算法计算梯度。 | ||
| 9. **答案:**编码(Encoder);解码(Decoder) | 9. **答案:**编码(Encoder);解码(Decoder) | ||
| - | 解析:Seq2Seq(序列到序列)模型由编码器处理输入序列,解码器生成输出序列。 | + | |
| + | 解析:Seq2Seq(序列到序列)模型由编码器处理输入序列,解码器生成输出序列。 | ||
| 10. **答案:**梯度爆炸 | 10. **答案:**梯度爆炸 | ||
| - | | + | |
| + | 解析:当梯度过大时,梯度裁剪将其缩放到阈值以内,防止参数更新失控。 | ||
| **三、计算题答案:** | **三、计算题答案:** | ||
| 行 519: | 行 545: | ||
| 11. **解答:** | 11. **解答:** | ||
| | | ||
| - | | + | $h_1 = \tanh(0.5 \times 0 + 0.3 \times 1) = \tanh(0.3) \approx 0.291$ |
| | | ||
| - | | + | |
| + | $h_2 = \tanh(0.5 \times 0.291 + 0.3 \times 2) = \tanh(0.146 + 0.6) = \tanh(0.746) \approx 0.633$ | ||
| | | ||
| - | | + | $h_3 = \tanh(0.5 \times 0.633 + 0.3 \times 1) = \tanh(0.317 + 0.3) = \tanh(0.617) \approx 0.549$ |
| | | ||
| - | | + | 因此:$h_1 \approx 0.291$,$h_2 \approx 0.633$,$h_3 \approx 0.549$ |
| 12. **解答:** | 12. **解答:** | ||
| | | ||
| - | | + | |
| + | $C_t = f_t \times C_{t-1} + i_t \times \tilde{C}_t$ | ||
| | | ||
| - | | + | $= 0.2 \times 10 + 0.8 \times 2$ |
| | | ||
| - | | + | $= 2 + 1.6$ |
| | | ||
| - | | + | $= 3.6$ |
| 13. **解答:** | 13. **解答:** | ||
| | | ||
| - | | + | 计算点积: |
| - | - $e_1 = s \cdot h_1 = [2, 1] \cdot [1, 0] = 2 \times 1 + 1 \times 0 = 2$ | + | - $e_1 = s \cdot h_1 = [2, 1] \cdot [1, 0] = 2 \times 1 + 1 \times 0 = 2$ |
| - | - $e_2 = s \cdot h_2 = [2, 1] \cdot [1, 1] = 2 \times 1 + 1 \times 1 = 3$ | + | - $e_2 = s \cdot h_2 = [2, 1] \cdot [1, 1] = 2 \times 1 + 1 \times 1 = 3$ |
| - | - $e_3 = s \cdot h_3 = [2, 1] \cdot [0, 1] = 2 \times 0 + 1 \times 1 = 1$ | + | - $e_3 = s \cdot h_3 = [2, 1] \cdot [0, 1] = 2 \times 0 + 1 \times 1 = 1$ |
| | | ||
| - | | + | Softmax: |
| - | - $\sum \exp(e_i) = \exp(2) + \exp(3) + \exp(1) = 7.389 + 20.086 + 2.718 = 30.193$ | + | - $\sum \exp(e_i) = \exp(2) + \exp(3) + \exp(1) = 7.389 + 20.086 + 2.718 = 30.193$ |
| - | - $\alpha_1 = 7.389 / 30.193 \approx 0.245$ | + | - $\alpha_1 = 7.389 / 30.193 \approx 0.245$ |
| - | - $\alpha_2 = 20.086 / 30.193 \approx 0.665$ | + | - $\alpha_2 = 20.086 / 30.193 \approx 0.665$ |
| - | - $\alpha_3 = 2.718 / 30.193 \approx 0.090$ | + | - $\alpha_3 = 2.718 / 30.193 \approx 0.090$ |
| | | ||
| - | | + | 注意力权重:$[0.245, |