<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>0xAstraZhang</title><link>https://0xastrazhang.github.io/</link><description>Recent content on 0xAstraZhang</description><generator>Hugo -- gohugo.io</generator><language>zh-CN, en-US</language><lastBuildDate>Mon, 11 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://0xastrazhang.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>注意力机制</title><link>https://0xastrazhang.github.io/p/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://0xastrazhang.github.io/p/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6/</guid><description>&lt;p&gt;&lt;em&gt;这篇文章是我在学习《动手学深度学习》时记录的笔记，或有疏漏，望海涵。&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="1-什么是注意力"&gt;1. 什么是注意力？
&lt;/h2&gt;&lt;p&gt;人们认为，注意力由自主性注意力和非自主性注意力构成。&lt;/p&gt;
&lt;p&gt;自主性注意力是指人类主观意愿上分配的注意力，非自主性注意力是指在无主观意愿时被色彩、声音等刺激吸引的注意力。&lt;/p&gt;
&lt;h2 id="2-注意力机制"&gt;2. 注意力机制
&lt;/h2&gt;&lt;p&gt;&lt;img alt="注意力机制" class="gallery-image" data-flex-basis="563px" data-flex-grow="234" height="1030" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://0xastrazhang.github.io/p/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6.png" srcset="https://0xastrazhang.github.io/p/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6_hu_f8f09f39f4127fbf.png 800w, https://0xastrazhang.github.io/p/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6_hu_40ab8681423e5dd1.png 1600w, https://0xastrazhang.github.io/p/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6_hu_7414a5df207c9698.png 2400w, https://0xastrazhang.github.io/p/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6/%E6%B3%A8%E6%84%8F%E5%8A%9B%E6%9C%BA%E5%88%B6.png 2418w" width="2418"&gt;&lt;br&gt;
注意力机制中有三种数据：查询 Query, 键 Key, 值 Value。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Query 是自主性线索，代表着我们当下想要查询的内容。&lt;/li&gt;
&lt;li&gt;Key 是非自主性线索，蕴含着对 Value 在一定程度上的抽象后的信息。&lt;/li&gt;
&lt;li&gt;Value 是实际输入的数据。&lt;/li&gt;
&lt;li&gt;Key-Value 是成对出现的。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在注意力汇聚层中，我们通过计算 Query 和 Key 的相似度来分配 Value 的权重。&lt;/p&gt;
&lt;h2 id="3-nadaraya-watson-核回归模型"&gt;3. Nadaraya-Watson 核回归模型
&lt;/h2&gt;&lt;blockquote class="alert alert-note"&gt;
 &lt;div class="alert-header"&gt;
 &lt;span class="alert-icon"&gt;📝&lt;/span&gt;
 &lt;span class="alert-title"&gt;历史&lt;br&gt;&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="alert-body"&gt;
 &lt;p&gt;Nadaraya-Watson 核回归模型于 1964 年被提出。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/blockquote&gt;
&lt;p&gt;Nadaraya-Watson 核回归模型使用非参数注意力机制：&lt;/p&gt;
$$
f(x) = \sum_{i=1}^n \frac{K(x - x_i)}{\sum_{j=1}^n K(x - x_j)} y_i
$$&lt;p&gt;其中，$K$ 是核函数。&lt;/p&gt;
&lt;h2 id="4-注意力汇聚"&gt;4. 注意力汇聚
&lt;/h2&gt;&lt;p&gt;我们可以进一步推广得到通用的&lt;strong&gt;注意力汇聚&lt;/strong&gt;的公式：&lt;/p&gt;
$$
f(x) = \sum_{i=1}^n \alpha(x, x_i) y_i
$$&lt;p&gt;其中 $x$ 是查询，$(x_{i}, y_{i})$ 是键值对。&lt;/p&gt;
&lt;p&gt;我们可以简单的认为：$\alpha$ 是注意力权重，注意力汇聚则是进行一次加权平均。&lt;/p&gt;
&lt;p&gt;注意力权重满足：非负，且总和为 1。因此它们可以被看作是一个概率分布。&lt;/p&gt;
&lt;p&gt;考虑高斯核：&lt;/p&gt;
$$
K(u) = \frac{1}{\sqrt{2\pi}} \exp(-\frac{u^2}{2})
$$&lt;p&gt;将其带入后，得到：&lt;/p&gt;
$$
\begin{split}\begin{aligned} f(x) &amp;=\sum_{i=1}^n \alpha(x, x_i) y_i\\ &amp;= \sum_{i=1}^n \frac{\exp\left(-\frac{1}{2}(x - x_i)^2\right)}{\sum_{j=1}^n \exp\left(-\frac{1}{2}(x - x_j)^2\right)} y_i \\&amp;= \sum_{i=1}^n \mathrm{softmax}\left(-\frac{1}{2}(x - x_i)^2\right) y_i. \end{aligned}\end{split}
$$&lt;p&gt;从这里我们理解其内涵，Query 离 Key 越近，其权重越高。&lt;/p&gt;
&lt;h2 id="5-注意力分数"&gt;5. 注意力分数
&lt;/h2&gt;&lt;p&gt;进一步抽象，我们可以将 $softmax$ 的输入作为一个注意力分数，$softmax$ 负责将其映射到概率空间。&lt;/p&gt;
$$
f(\mathbf{q}, (\mathbf{k}_1, \mathbf{v}_1), \ldots, (\mathbf{k}_m, \mathbf{v}_m)) = \sum_{i=1}^m \alpha(\mathbf{q}, \mathbf{k}_i) \mathbf{v}_i \in \mathbb{R}^v,
$$$$
\alpha(\mathbf{q}, \mathbf{k}_i) = \mathrm{softmax}(a(\mathbf{q}, \mathbf{k}_i)) = \frac{\exp(a(\mathbf{q}, \mathbf{k}_i))}{\sum_{j=1}^m \exp(a(\mathbf{q}, \mathbf{k}_j))} \in \mathbb{R}.
$$&lt;p&gt;这样做将模型结构进一步解耦合。&lt;/p&gt;
&lt;p&gt;我们接下来对注意力分数的“评分机制”进行优化。&lt;br&gt;
现有的机制是将 Query 和 Key 直接相减后计算差向量大小，这在一定程度上描述了两者的距离，但不够精确。&lt;/p&gt;
&lt;h3 id="51-缩放点积注意力"&gt;5.1 缩放点积注意力
&lt;/h3&gt;&lt;p&gt;两向量的点积描述了它们之间的相似度。&lt;/p&gt;
&lt;p&gt;点积要求两向量拥有相同的长度 $d$，假设查询和键的所有元素都是独立的随机变量，并且满足：均值为 0、方差为 1，那么其点积就满足：均值为 0、方差为 $d$。&lt;br&gt;
方差过大会使注意力分数差异过大，分配的注意力权重就会不平衡，导致模型过早收敛。&lt;br&gt;
为了避免上述影响，我们将点积后的结果除 $\sqrt{d}$，这样其方差就变为 $1$。&lt;br&gt;
于是我们得到缩放点积注意力（Scaled Dot-Product Attention）的&lt;strong&gt;评分函数&lt;/strong&gt;：&lt;/p&gt;
$$
a(\mathbf q, \mathbf k) = \frac{\mathbf{q}^\top \mathbf{k}}{\sqrt{d}}
$$&lt;p&gt;使用小批量计算的缩放点积注意力则是：&lt;/p&gt;
$$
\mathrm{softmax}\left(\frac{\mathbf Q \mathbf K^\top }{\sqrt{d}}\right) \mathbf V \in \mathbb{R}^{n\times v}
$$&lt;h3 id="52-加性注意力"&gt;5.2 加性注意力
&lt;/h3&gt;&lt;p&gt;当 Query 和 Key 的维度不同时，无法&lt;strong&gt;直接&lt;/strong&gt;使用点积注意力。这时我们可以选择加性注意力。&lt;/p&gt;
&lt;p&gt;加性注意力的评分函数是：&lt;/p&gt;
$$
a(\mathbf q, \mathbf k) = \mathbf w_v^\top \text{tanh}(\mathbf W_q\mathbf q + \mathbf W_k \mathbf k) \in \mathbb{R}
$$&lt;p&gt;其中可学习的参数是 $\mathbf W_q\in\mathbb R^{h\times q}$、$\mathbf W_k\in\mathbb R^{h\times k}$ 和 $\mathbf w_v\in\mathbb R^{h}$。&lt;br&gt;
将查询和键连结起来使用 $\tanh$ 激活，然后输入到一个 MLP 中， 感知机包含一个隐藏层，其参数为 $\mathbf w_v$，其隐藏单元数是一个超参数 $h$，最终输出一个实数作为注意力分数。&lt;/p&gt;
&lt;p&gt;加性注意力实际上使用了一个小的 MLP 来学习 Q、K、V 中隐含的关系。&lt;/p&gt;
&lt;h3 id="53-对比"&gt;5.3 对比
&lt;/h3&gt;&lt;p&gt;由于缩放点积注意力的并行性、计算效率更高，所以它更加流行。&lt;/p&gt;</description></item></channel></rss>