注意力机制的核心计算可以表示为:
其中:
-
$Q$ (Query): 查询向量 -
$K$ (Key): 键向量 -
$V$ (Value): 值向量 -
$d_k$ : 键向量的维度
-
Query/Key/Value计算:
- 输入向量$X$通过线性变换得到$Q$,
$K$ ,$V$ :$$Q = XW_q, \quad K = XW_k, \quad V = XW_v$$
- 输入向量$X$通过线性变换得到$Q$,
-
注意力分数计算:
- 计算查询和键的点积并缩放:
$$\text{scores} = \frac{QK^T}{\sqrt{d_k}}$$
- 计算查询和键的点积并缩放:
-
Softmax归一化:
- 对注意力分数进行softmax归一化得到权重:
$$\text{weights} = \text{softmax}(\text{scores})$$
- 对注意力分数进行softmax归一化得到权重:
-
加权求和:
- 用权重对值向量加权求和得到输出:
$$\text{output} = \text{weights} \cdot V$$
- 用权重对值向量加权求和得到输出:
多头注意力并行计算多组注意力并将结果拼接:
其中每个注意力头:
一个用于可视化Transformer注意力机制的工具,支持交互式3D可视化。
- 逐步展示注意力机制计算过程
- 3D可视化Query/Key/Value向量
- 3D注意力权重热力图
- 命令行和Web两种交互方式
- 提供多种注意力模式示例(局部/全局/翻译任务)
git clone https://github.com/yourusername/attention_visualizer.git
cd attention_visualizer
pip install -r requirements.txtfrom attention_visualizer import AttentionVisualizer
visualizer = AttentionVisualizer(input_dim=4)
X = np.random.rand(4, 4) # 输入矩阵
figures = visualizer.visualize_step_by_step(X)推荐使用启动脚本运行:
# 添加执行权限
chmod +x run_app.sh
# 启动应用
./run_app.sh应用启动后会自动打开浏览器访问 http://127.0.0.1:8050/
或者也可以手动运行:
PYTHONPATH=. python visualization/dash_app.py项目提供了三种典型的注意力模式示例:
-
局部注意力 (
examples/local_attention.py):- 模拟序列中每个token主要关注附近token的情况
- 适用于处理局部依赖的任务(如文本分类)
-
全局注意力 (
examples/global_attention.py):- 模拟序列中每个token关注所有token的情况
- 适用于需要全局信息的任务(如语言建模)
-
翻译任务注意力 (
examples/translation_attention.py):- 模拟源语言和目标语言token之间的特定关注关系
- 适用于机器翻译等跨语言任务
attention_visualizer/
├── core/ # 核心注意力计算逻辑
│ └── attention.py
├── examples/ # 注意力模式示例
│ ├── local_attention.py
│ ├── global_attention.py
│ └── translation_attention.py
├── visualization/ # 可视化组件
│ ├── components.py
│ └── dash_app.py
└── attention_visualizer.py # 主入口
欢迎提交Issue和PR!请确保:
- 代码符合PEP8规范
- 添加相应的测试用例
- 更新相关文档
MIT License





