自注意力机制李宏毅
时间: 2025-05-11 08:18:13 浏览: 25
### 李宏毅关于自注意力机制的讲解
李宏毅教授在其课程中深入探讨了自注意力机制(Self-Attention),并将其作为现代深度学习领域的重要组成部分进行了详细的解析。以下是对其讲解的核心内容总结:
#### 1. **Self-Attention 的起源与发展**
Self-Attention 最初由 Vaswani 等人在论文《Attention is All You Need》中提出[^3],该研究奠定了 Transformer 架构的基础。Transformer 使用 Self-Attention 替代传统的 RNN 或 CNN 结构,在自然语言处理任务上取得了显著的效果。
#### 2. **Query、Key 和 Value 的定义**
在 Self-Attention 的计算过程中,输入数据被分解为三个部分:Query (Q)、Key (K) 和 Value (V)[^2]。这些向量分别用于衡量不同位置之间的关联程度以及提取有用的信息。具体来说:
- Query 表示当前词的关注焦点;
- Key 则表示其他词可能吸引关注的程度;
- Value 提供实际的内容信息。
通过矩阵运算 \( \text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V \),可以计算出各个位置之间的重要性权重,并据此加权求和得到最终输出。
#### 3. **Self-Attention 与传统方法的区别**
相比卷积神经网络(CNNs)和循环神经网络(RNNs),Self-Attention 具有更强的表现力和灵活性[^4]。然而这种增强也伴随着更高的资源需求——当训练样本数量不足时容易发生过拟合现象;而在大数据环境下则能更好地发挥其潜力。
#### 4. **应用实例分析**
以翻译为例说明如何利用 multi-head self-attention 实现高效的语言建模。Multi-head 设计允许模型在同一层内捕获多种类型的依赖关系从而提升表达能力[^1]。
```python
import torch.nn as nn
class MultiHeadedAttention(nn.Module):
def __init__(self, h, d_model, dropout=0.1):
super(MultiHeadedAttention, self).__init__()
assert d_model % h == 0
# We assume d_v always equals d_k
self.d_k = d_model // h
self.h = h
self.linears = clones(nn.Linear(d_model, d_model), 4)
self.attn = None
self.dropout = nn.Dropout(p=dropout)
def forward(self, query, key, value, mask=None):
...
```
上述代码片段展示了构建一个多头注意模块的过程,其中包含了线性变换操作来生成 QKV 向量组。
---
###
阅读全文
相关推荐


















