Skip to content

Commit 12c7fdc

Browse files
committed
updates
1 parent 2257551 commit 12c7fdc

File tree

4 files changed

+178
-0
lines changed

4 files changed

+178
-0
lines changed
44.2 KB
Loading

src/assets/cover/ChatBot.png

44.2 KB
Loading
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
icon: file
3+
category:
4+
- 开源项目
5+
tag:
6+
- 编辑中
7+
footer: 技术共建,知识共享
8+
date: 2025-05-25
9+
cover: assets/cover/ChatBot.png
10+
author:
11+
- BinaryOracle
12+
---
13+
14+
`基于Transformer实现的聊天机器人`
15+
16+
<!-- more -->
17+
18+
# 基于Transformer实现的聊天机器人
19+
Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
---
2+
title: Attention运算过程中维度变换的理解
3+
icon: file
4+
category:
5+
- 开源项目
6+
tag:
7+
- 已发布
8+
footer: 技术共建,知识共享
9+
date: 2025-06-10
10+
author:
11+
- BinaryOracle
12+
---
13+
14+
`Attention运算过程中维度变换的理解`
15+
16+
<!-- more -->
17+
18+
# Attention运算过程中维度变换的理解
19+
20+
在注意力机制(特别是 **Transformer** 中的 **自注意力机制**)中,**Q(Query)、K(Key)、V(Value)** 的维度对最终注意力输出的结果维度有直接影响。我们来一步步分析这个过程:
21+
22+
## 一、注意力机制的基本流程
23+
24+
在标准的 **缩放点积注意力(Scaled Dot-Product Attention)** 中,计算公式如下:
25+
26+
$$
27+
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
28+
$$
29+
30+
其中:
31+
- $Q \in \mathbb{R}^{n \times d_k}$
32+
- $K \in \mathbb{R}^{m \times d_k}$
33+
- $V \in \mathbb{R}^{m \times d_v}$
34+
35+
> - $n$:query的数量(如句子长度)
36+
> - $m$:key/value的数量(也通常是句子长度)
37+
> - $d_k$:每个 query 和 key 的维度
38+
> - $d_v$:每个 value 的维度
39+
40+
41+
42+
## 二、Q、K、V 的初始维度对结果的影响
43+
44+
### 1. **Q × K^T 的维度**
45+
46+
这是注意力权重矩阵的来源。
47+
48+
- $Q \in \mathbb{R}^{n \times d_k}$
49+
- $K^T \in \mathbb{R}^{d_k \times m}$
50+
- 所以$QK^T \in \mathbb{R}^{n \times m}$
51+
52+
👉 这个矩阵表示的是每个 query 对应所有 key 的相似度(即注意力得分),共$n \times m$个值。
53+
54+
55+
56+
### 2. **Softmax 操作**
57+
58+
对每一行做 softmax,得到归一化的注意力权重:
59+
60+
- 输入:$n \times m$
61+
- 输出:仍是$n \times m$
62+
63+
64+
65+
### 3. **与 V 相乘**
66+
67+
- 注意力权重:$A \in \mathbb{R}^{n \times m}$
68+
- Value 矩阵:$V \in \mathbb{R}^{m \times d_v}$
69+
- 结果:$AV \in \mathbb{R}^{n \times d_v}$
70+
71+
👉 最终输出的维度是$n \times d_v$,也就是和输入的 query 数量一致,但每个输出向量的维度由 value 的维度决定。
72+
73+
74+
75+
## 三、总结:输入维度 → 输出维度
76+
77+
| 输入 | 维度 | 含义 |
78+
| --- | --- | --- |
79+
| Query (Q) | $n \times d_k$ | 查询向量,n 是序列长度 |
80+
| Key (K) | $m \times d_k$ | 键向量,用于匹配查询 |
81+
| Value (V) | $m \times d_v$ | 值向量,实际携带信息 |
82+
83+
| 输出 | 维度 | 含义 |
84+
| --- | --- | --- |
85+
| Attention Output | $n \times d_v$ | 每个 query 聚合了所有 value 的加权信息 |
86+
87+
88+
89+
## 四、如何理解这个过程?
90+
91+
我们可以从以下角度理解:
92+
93+
### ✅ 1. **信息融合机制**
94+
- 每个 Query 都是在寻找最相关的 Key。
95+
- 根据相关性(注意力权重),从对应的 Value 中提取信息。
96+
- 最终每个 Query 得到一个融合了上下文信息的向量。
97+
98+
### ✅ 2. **维度设计的灵活性**
99+
- $d_k$控制了相似度计算的维度,影响模型容量和梯度稳定性。
100+
- $d_v$决定了输出的信息维度,可以独立于$d_k$设计。
101+
- 这种分离的设计让模型更灵活,比如多头注意力中可以分别控制每个 head 的表达能力。
102+
103+
### ✅ 3. **可类比为“软检索”系统**
104+
- 类似数据库查询:
105+
- Query 是你输入的问题;
106+
- Key 是数据库中的索引;
107+
- Value 是数据库中的内容;
108+
- Attention 就是根据问题找到相关内容并返回。
109+
110+
111+
112+
## 五、例子说明(以 Transformer 为例)
113+
114+
假设我们在 Transformer 中:
115+
116+
- 输入是一个 batch of sequences,shape 为$B \times T \times D$
117+
- 我们通过线性变换得到:
118+
- $Q = XW_Q \in \mathbb{R}^{B \times T \times d_k}$
119+
- $K = XW_K \in \mathbb{R}^{B \times T \times d_k}$
120+
- $V = XW_V \in \mathbb{R}^{B \times T \times d_v}$
121+
122+
那么最终输出为:
123+
124+
$$
125+
\text{Output} \in \mathbb{R}^{B \times T \times d_v}
126+
$$
127+
128+
> 如果使用多头注意力(Multi-head Attention),我们会拼接多个这样的头,最后再经过一个线性层映射回原始维度$D$。
129+
130+
131+
132+
## 六、常见疑问解答
133+
134+
### ❓Q: 为什么$d_k$和$d_v$可以不同?
135+
> 因为它们的作用不同:
136+
> - $d_k$是用于计算相似度的维度;
137+
> - $d_v$是用于信息表达的维度;
138+
>
139+
> 两者解耦可以让模型更灵活地分配资源。
140+
141+
### ❓Q: 为什么要除以$\sqrt{d_k}$?
142+
> 防止内积过大导致 softmax 梯度消失。
143+
> 当$d_k$较大时,QK^T 的数值会很大,除以$\sqrt{d_k}$可以缓解这个问题。
144+
145+
146+
147+
## 七、可视化示意
148+
149+
```
150+
Q: [n x dk] K: [m x dk] V: [m x dv]
151+
↓ ↓ ↓
152+
Q @ K.T → [n x m] ↓
153+
↓ ↓
154+
softmax → [n x m] V → [m x dv]
155+
↓__________________________↓
156+
157+
Output → [n x dv]
158+
```
159+

0 commit comments

Comments
 (0)