← Back to Learning Notes

Lecture 9:注意力机制

Chinese-language Computer Science 408 note: Lecture 9:注意力机制. Original source available where applicable.

On this page

This note is currently available in Chinese. The original wording, formulas and diagrams are preserved to avoid an unverified technical translation.

描述:本节从查询、键和值的注意力池化出发,推导非参数注意力、可加性注意力和缩放点积注意力;随后整理自注意力、多头注意力、正弦位置编码以及 Transformer 编码器、解码器、因果掩码、层归一化和交叉注意力的信息流。

9.1 注意力机制的直觉

9.1.1 随意线索与不随意线索

课件借用心理学中的两类线索解释注意力:

  • 随意线索:由当前目标主动决定关注方向,例如“我现在想找什么”。
  • 不随意线索:由环境中显眼、突出的信息自然吸引注意。

卷积、池化和普通全连接层主要按固定参数和输入内容处理信息,没有为每个目标显式提供“我想找什么”的查询。

注意力机制则显式加入查询,使模型能根据当前目的偏向性地选择输入。

9.1.2 Query、Key、Value

每个候选输入可表示为键值对:

$$ (\boldsymbol k_i,\boldsymbol v_i). $$

另给定查询:

$$ \boldsymbol q. $$

三者含义为:

  • Query(查询):当前想寻找的信息,表示关注目标。
  • Key(键):候选信息的匹配索引,用来与 Query 计算相关性。
  • Value(值):候选位置实际携带、最终要被聚合的内容。

注意力层先比较 Query 与各 Key,再用所得权重加权聚合对应 Value。

9.2 注意力分数、权重与输出

设有 $m$ 个键值对:

$$ (\boldsymbol k_1,\boldsymbol v_1), \ldots, (\boldsymbol k_m,\boldsymbol v_m). $$

9.2.1 注意力分数

用评分函数衡量 Query 与第 $i$ 个 Key 的相关性:

$$ s_i=a(\boldsymbol q,\boldsymbol k_i). $$

Softmax 默认把更大的分数解释为更相关。点积、余弦相似度或可学习网络可直接产生相似度分数;若原始量是距离 $d(\boldsymbol q,\boldsymbol k_i)$,应先转成随距离减小而增大的分数,例如 $s_i=-d(\boldsymbol q,\boldsymbol k_i)$ 或高斯核的负平方距离,不能把正距离直接送入 Softmax。

9.2.2 注意力权重

对所有分数做 Softmax:

$$ \alpha_i =\frac{\exp(s_i)} {\sum_{j=1}^{m}\exp(s_j)}. $$

因此:

$$ \alpha_i>0, \qquad \sum_{i=1}^{m}\alpha_i=1. $$

9.2.3 加权聚合

注意力输出为:

$$ \boldsymbol o =\sum_{i=1}^{m}\alpha_i\boldsymbol v_i. $$

核心关系可以记为:

Query 与 Key → 注意力分数
注意力分数 → Softmax → 注意力权重
注意力权重 × Value → 加权求和 → 输出

WARNING · 易错点 分数 $s_i$ 可以为任意实数;经过 Softmax 后的 $\alpha_i$ 才位于 $(0,1)$ 且总和为 1。

9.3 非参数注意力池化

9.3.1 定义

非参数注意力池化不学习评分函数参数,而是使用预先规定的相似度或核函数动态分配权重。

给定样本:

$$ {(x_i,y_i)}_{i=1}^{n}, $$

对查询 $x$ 的预测为:

$$ f(x)=\sum_{i=1}^{n}\alpha(x,x_i)y_i. $$

其中 $x_i$ 相当于 Key,$y_i$ 相当于 Value,$x$ 是 Query。

9.3.2 高斯核形式

课件给出的 Nadaraya-Watson 型注意力为:

$$ f(x)

\sum_{i=1}^{n} \operatorname{softmax}_i!\left( -\frac{1}{2}(x-x_i)^2 \right)y_i. $$

也就是:

$$ \alpha(x,x_i)

\frac{ \exp!\left[-\frac12(x-x_i)^2\right] }{ \sum_{j=1}^{n} \exp!\left[-\frac12(x-x_j)^2\right] }. $$

查询越接近某个 $x_i$,对应 $y_i$ 的权重通常越大。

9.3.3 一般相似函数

若输入是向量,可使用:

  • 点积 $\boldsymbol q^{\mathrm T}\boldsymbol k$。
  • 余弦相似度。
  • 负欧氏距离。
  • 高斯核或其他核函数。

非参数表示评分规则本身没有可学习参数,并不表示模型的其他部分一定没有参数。

9.4 可加性注意力

9.4.1 适用场景

当 Query 和 Key 的维数不同,或希望通过可学习非线性变换计算相关性时,可使用可加性注意力(Additive Attention)。

它常见于经典 RNN Seq2Seq 注意力模型。原始 Transformer 的核心注意力则采用缩放点积,而不是可加性注意力。

9.4.2 公式

设:

$$ W_k\in\mathbb R^{h\times d_k}, \qquad W_q\in\mathbb R^{h\times d_q}, \qquad \boldsymbol v\in\mathbb R^h. $$

单个 Query-Key 对的分数为:

$$ a(\boldsymbol k,\boldsymbol q)

\boldsymbol v^{\mathrm T} \tanh!\left( W_k\boldsymbol k+W_q\boldsymbol q \right). $$

对第 $i$ 个查询与第 $j$ 个键:

$$ e_{ij}

\boldsymbol v^{\mathrm T} \tanh!\left( W_q\boldsymbol q_i+W_k\boldsymbol k_j \right). $$

这等价于把变换后的 Query 和 Key 广播相加,经过隐藏维度为 $h$ 的 $\tanh$ 非线性,再映射为一个标量。

三个可学习部分的作用:

参数 作用
$W_q$ 把 Query 映射到共同隐藏空间
$W_k$ 把 Key 映射到共同隐藏空间
$\boldsymbol v$ 把隐藏表示映射为标量分数

9.5 缩放点积注意力

9.5.1 单个 Query-Key 对

若 Query 与 Key 维度均为 $d_k$:

$$ a(\boldsymbol q,\boldsymbol k_i)

\frac{\boldsymbol q^{\mathrm T}\boldsymbol k_i} {\sqrt{d_k}}. $$

除以 $\sqrt{d_k}$ 是为了防止维度较大时点积方差随 $d_k$ 增长,使 Softmax 过早饱和、梯度过小。

9.5.2 向量化公式

设:

$$ Q\in\mathbb R^{n\times d_k}, \qquad K\in\mathbb R^{m\times d_k}, \qquad V\in\mathbb R^{m\times d_v}. $$

注意力分数矩阵:

$$ S=\frac{QK^{\mathrm T}}{\sqrt{d_k}} \in\mathbb R^{n\times m}. $$

沿每个 Query 对应的 Key 维做 Softmax:

$$ A=\operatorname{softmax}(S) \in\mathbb R^{n\times m}. $$

最终输出:

$$ \operatorname{Attention}(Q,K,V) =AV

\operatorname{softmax}!\left( \frac{QK^{\mathrm T}}{\sqrt{d_k}} \right)V \in\mathbb R^{n\times d_v}. $$

9.6 掩码与可加性注意力代码

变长序列批处理会补 padding。无效 Key 不应参与 Softmax,因此要把对应分数置为极小值。

下面把课件的 AdditiveAttention 代码补全为可解析版本:

import torch
from torch import nn


def sequence_mask(x, valid_lens, value=0.0):
    """屏蔽每行中超过有效长度的位置。"""
    max_len = x.size(1)
    mask = (
        torch.arange(max_len, device=x.device)[None, :]
        < valid_lens[:, None]
    )
    x = x.clone()
    x[~mask] = value
    return x


def masked_softmax(x, valid_lens):
    """在最后一维做带有效长度掩码的 Softmax。"""
    if valid_lens is None:
        return nn.functional.softmax(x, dim=-1)

    shape = x.shape
    if valid_lens.dim() == 1:
        valid_lens = valid_lens.repeat_interleave(shape[1])
    else:
        valid_lens = valid_lens.reshape(-1)

    flat = x.reshape(-1, shape[-1])
    mask = (
        torch.arange(shape[-1], device=x.device)[None, :]
        < valid_lens[:, None]
    )
    masked = flat.masked_fill(~mask, -1e6)
    weights = nn.functional.softmax(masked, dim=-1) * mask
    normalizer = weights.sum(dim=-1, keepdim=True)
    weights = torch.where(
        normalizer > 0,
        weights / normalizer.clamp_min(torch.finfo(weights.dtype).tiny),
        torch.zeros_like(weights),
    )
    return weights.reshape(shape)


class AdditiveAttention(nn.Module):
    """可加性注意力。"""

    def __init__(
        self,
        key_size,
        query_size,
        num_hiddens,
        dropout,
    ):
        super().__init__()
        self.w_k = nn.Linear(key_size, num_hiddens, bias=False)
        self.w_q = nn.Linear(query_size, num_hiddens, bias=False)
        self.w_v = nn.Linear(num_hiddens, 1, bias=False)
        self.dropout = nn.Dropout(dropout)
        self.attention_weights = None

    def forward(self, queries, keys, values, valid_lens):
        """
        queries: [batch, num_queries, query_size]
        keys: [batch, num_keys, key_size]
        values: [batch, num_keys, value_size]
        """
        queries = self.w_q(queries)
        keys = self.w_k(keys)

        # [batch, num_queries, num_keys, num_hiddens]
        features = queries.unsqueeze(2) + keys.unsqueeze(1)
        features = torch.tanh(features)

        # [batch, num_queries, num_keys]
        scores = self.w_v(features).squeeze(-1)
        self.attention_weights = masked_softmax(scores, valid_lens)

        # [batch, num_queries, value_size]
        return torch.bmm(
            self.dropout(self.attention_weights), values
        )

代码与公式的对应关系:

  • w_q 对应 $W_q$。
  • w_k 对应 $W_k$。
  • w_v 对应 $\boldsymbol v^{\mathrm T}$。
  • queries.unsqueeze(2) + keys.unsqueeze(1) 通过广播得到所有 Query-Key 组合。
  • masked_softmax 保证 padding 不获得注意力权重;当某行 valid_len=0 时显式返回全零,而不是对一整行 -1e6 做 Softmax 后得到均匀分布。

9.7 CNN、RNN 与自注意力

设序列长度为 $n$、表示维数为 $d$、卷积核宽度为 $k$。课件的理想化比较为:

架构 计算复杂度 同层可并行位置数 最长信息路径
CNN $O(knd^2)$ $O(n)$ $O(n/k)$
RNN $O(nd^2)$ $O(1)$ $O(n)$
自注意力 $O(n^2d)$ $O(n)$ $O(1)$

9.7.1 含义

  • CNN:局部连接,可并行;要跨越远距离通常需堆叠多层、扩大核或使用膨胀卷积。
  • RNN:每一步依赖前一步,时间维串行;两端信息交互路径长。
  • 自注意力:任意两个位置可在一层直接交互,并能并行计算各 Query;但完整注意力矩阵有 $n^2$ 个元素。

NOTE 表中复杂度依赖具体实现、通道宽度和 CNN 感受野增长方式。“同层可并行位置数”若改写成“最少串行步骤”,CNN 与自注意力为 $O(1)$,RNN 为 $O(n)$。

9.7.2 长序列的取舍

自注意力的最长路径短,适合建立远距离关系;但标准全注意力的时间和显存通常随 $n^2$ 增长。

因此“能直接看远处”和“适合任意超长序列”不是同义词。很长序列常需要局部注意力、稀疏注意力、线性注意力或分块策略。

9.8 自注意力

9.8.1 定义

自注意力(Self-Attention)在同一序列内部建立元素之间的联系。输入序列为:

$$ X\in\mathbb R^{n\times d_{\mathrm{model}}}. $$

通过三组可学习投影:

$$ Q=XW_Q, \qquad K=XW_K, \qquad V=XW_V. $$

因为 Query、Key、Value 都来自同一个 $X$,所以称为自注意力。

输出为:

$$ Z

\operatorname{softmax}!\left( \frac{QK^{\mathrm T}}{\sqrt{d_k}} \right)V. $$

9.8.2 三个特点

  1. 长程依赖:任意两个位置可直接计算相关性。
  2. 动态权重:根据内容为不同位置分配不同权重,而不是固定卷积核连接。
  3. 并行计算:没有 RNN 那样的逐时间步状态依赖。

9.8.3 课件二维数值图

课件用二维 Query 与 Key 说明缩放点积。取:

$$ \boldsymbol q_1=(1,2), \qquad \boldsymbol q_2=(1,1), $$

$$ \boldsymbol k_1=(1,0), \qquad \boldsymbol k_2=(0,1), \qquad d_k=2. $$

对 $\boldsymbol q_1$:

$$ \left( \frac{\boldsymbol q_1^{\mathrm T}\boldsymbol k_1}{\sqrt2}, \frac{\boldsymbol q_1^{\mathrm T}\boldsymbol k_2}{\sqrt2} \right)

(0.71,1.41). $$

Softmax 后约为:

$$ (0.33,0.67). $$

对 $\boldsymbol q_2$:

$$ \left( \frac{1}{\sqrt2}, \frac{1}{\sqrt2} \right) =(0.71,0.71), $$

Softmax 后为:

$$ (0.50,0.50). $$

因此两位置聚合结果为:

$$ \boldsymbol b_1 =0.33\boldsymbol v_1+0.67\boldsymbol v_2, $$

$$ \boldsymbol b_2 =0.50\boldsymbol v_1+0.50\boldsymbol v_2. $$

9.9 Q、K、V 的含义

向量 角色 搜索类比 NLP 中的含义
Query 主动寻找信息的主体 搜索词 当前词/当前位置想寻找什么
Key 被匹配的信息索引 网页关键词标签 各位置用于匹配的特征
Value 实际携带的信息 网页正文 各位置要被聚合的语义内容

可以把三个投影矩阵理解为:

  • $W_Q$:学习“如何提出问题”。
  • $W_K$:学习“如何组织可检索索引”。
  • $W_V$:学习“匹配后要传递什么内容”。

点积 $QK^{\mathrm T}$ 只决定匹配强度;真正被加权汇总的是 $V$。

9.10 多头自注意力

9.10.1 动机

单个注意力头只有一套投影,可能只擅长一种关系。多头注意力让不同子空间分别学习:

  • 短距离与长距离关系。
  • 语法依赖与语义相似。
  • 不同位置或不同特征维度的交互。

9.10.2 每个头

对第 $r$ 个头:

$$ \operatorname{head}_r

\operatorname{Attention}!\left( QW_r^Q, KW_r^K, VW_r^V \right). $$

课件的两头图把每个输入投影/划分为两部分,分别送入 head1 和 head2 独立计算。

9.10.3 拼接与输出投影

$$ \operatorname{MultiHead}(Q,K,V)

\operatorname{Concat} (\operatorname{head}_1,\ldots,\operatorname{head}_h) W^O. $$

完整步骤:

  1. 各头用自己的 $W_r^Q,W_r^K,W_r^V$ 投影输入。
  2. 各头独立计算注意力和输出。
  3. 对同一 token 的各头输出沿特征维拼接。
  4. 用 $W^O$ 融合所有头。

课件图中的 $b_{1,1},b_{1,2}$ 是第一个 token 在不同头中的输出分块;拼接后再经 $W^O$,才得到最终表示。

WARNING 多头不是把同一份单头结果复制多次。各头有独立投影参数,能学习不同关系;拼接后还需要输出投影。

9.11 自注意力为什么需要位置编码

9.11.1 无位置时的性质

自注意力仅根据内容计算两两关系,本身没有 CNN 的局部位置结构,也没有 RNN 的递推顺序。

若 $P$ 是位置置换矩阵,则无位置自注意力满足:

$$ \operatorname{SA}(PX)=P\operatorname{SA}(X). $$

这叫排列等变(permutation equivariant):输入位置被置换,输出位置以同样方式置换。

若随后对所有位置做对称池化,整体表示才可能是排列不变的。

WARNING · 课件表述纠错 课件直接写“自注意力本身是排列不变的”不够准确。保留逐位置输出的自注意力是排列等变;集合池化后的结果才可排列不变。

9.11.2 注入位置信息

设输入嵌入为:

$$ X\in\mathbb R^{n\times d}, $$

位置编码矩阵为:

$$ P\in\mathbb R^{n\times d}. $$

送入第一层的表示为:

$$ X'=X+P. $$

位置编码不改变注意力公式,而是先把顺序信息写入输入表示。

9.12 正弦/余弦位置编码

9.12.1 公式

经典 Transformer 的固定位置编码为:

$$ P_{\mathrm{pos},2i}

\sin!\left( \frac{\mathrm{pos}} {10000^{2i/d}} \right), $$

$$ P_{\mathrm{pos},2i+1}

\cos!\left( \frac{\mathrm{pos}} {10000^{2i/d}} \right). $$

不同维度使用不同频率,因此课件曲线图中各列具有不同周期。

9.12.2 为什么用 Sin/Cos

由加法公式:

$$ \sin(a+b)=\sin a\cos b+\cos a\sin b, $$

$$ \cos(a+b)=\cos a\cos b-\sin a\sin b. $$

对某一频率 $\omega$:

$$ \begin{bmatrix} \sin\omega(\mathrm{pos}+k)\ \cos\omega(\mathrm{pos}+k) \end{bmatrix}

\begin{bmatrix} \cos\omega k & \sin\omega k\ -\sin\omega k & \cos\omega k \end{bmatrix} \begin{bmatrix} \sin\omega\mathrm{pos}\ \cos\omega\mathrm{pos} \end{bmatrix}. $$

因此固定偏移 $k$ 对应一个只依赖 $k$ 的线性变换,有利于模型学习相对位置关系。

9.12.3 长度外推的准确说法

正弦/余弦位置编码由公式生成,可以为训练长度之外的位置计算数值,不受固定嵌入表大小限制。

但“编码可计算”不等于“模型一定能可靠理解超长序列”。注意力模式、训练分布和数值频率都可能限制外推性能。

NOTE 相比固定大小的 learned positional embedding,正弦编码具备生成任意位置表示的结构优势;实际长上下文泛化仍需单独验证。

9.13 Transformer 总体架构

Transformer 基于编码器-解码器处理序列对,但不使用 RNN 递推,核心序列交互由多头注意力完成。

9.13.1 编码器块

经典编码器每层包含:

  1. 多头自注意力。
  2. 残差连接与层归一化。
  3. 逐位置前馈网络(Feed-Forward Network,FFN)。
  4. 残差连接与层归一化。
输入
 ↓
多头自注意力
 ↓  + 残差
LayerNorm
 ↓
前馈网络
 ↓  + 残差
LayerNorm

9.13.2 解码器块

经典解码器每层包含:

  1. 带因果掩码的多头自注意力。
  2. 残差连接与层归一化。
  3. 编码器-解码器交叉注意力。
  4. 残差连接与层归一化。
  5. 逐位置前馈网络。
  6. 残差连接与层归一化。

最后用线性层与 Softmax 生成输出 token 概率。

NOTE 课件图采用原始 Transformer 的 Post-LN 画法,即子层后做 Add & Norm。现代模型也常采用 Pre-LN,先归一化再进入子层。

9.14 因果掩码注意力

自回归解码时,第 $i$ 个位置不能读取未来位置 $j>i$,否则训练时会泄漏答案。

构造掩码:

$$ M_{ij}

\begin{cases} 0,&j\le i,\ -\infty,&j>i. \end{cases} $$

带掩码注意力为:

$$ A

\operatorname{softmax}!\left( \frac{QK^{\mathrm T}}{\sqrt{d_k}}+M \right). $$

Softmax 后,被掩码的未来位置权重为 0。

课件所说“计算 $x_i$ 输出时,假装当前序列长度为 $i$”就是这一因果约束的直观解释。

padding mask 与 causal mask 作用不同:

  • padding mask:忽略补齐位置。
  • causal mask:阻止访问未来位置。

9.15 层归一化

9.15.1 LayerNorm

对单个 token 表示:

$$ \boldsymbol x\in\mathbb R^d, $$

在特征维上计算:

$$ \mu=\frac1d\sum_{j=1}^{d}x_j, $$

$$ \sigma^2 =\frac1d\sum_{j=1}^{d}(x_j-\mu)^2. $$

层归一化为:

$$ \operatorname{LN}(\boldsymbol x)

\boldsymbol\gamma\odot \frac{\boldsymbol x-\mu} {\sqrt{\sigma^2+\epsilon}} +\boldsymbol\beta. $$

它对每个样本、每个 token 独立沿隐藏维归一化,不依赖其他样本或序列长度。

9.15.2 与 BatchNorm 的区别

对形状 $[B,L,D]$ 的序列张量:

  • BatchNorm 通常按特征通道统计跨 batch、位置的均值方差,受批大小、padding 和长度分布影响。
  • LayerNorm 对每个 $[D]$ token 向量独立归一化,训练与推理行为一致,更适合变长序列。

WARNING · 课件表述纠错 “Transformer 中不能使用 BatchNorm”过于绝对。标准 Transformer 选择 LayerNorm,且它通常更合适;但研究和变体中可以设计使用 BatchNorm 或其他归一化的方法。应记为“标准结构使用 LayerNorm”,不是数学上的禁止。

9.16 编码器到解码器的信息传递

设编码器输出:

$$ Y=(\boldsymbol y_1,\ldots,\boldsymbol y_n). $$

在解码器交叉注意力中:

  • Query 来自解码器当前目标序列表示。
  • Key 来自编码器输出 $Y$。
  • Value 也来自编码器输出 $Y$。

因此:

$$ Q=H_{\mathrm{dec}}W_Q, \qquad K=YW_K, \qquad V=YW_V. $$

交叉注意力输出:

$$ \operatorname{CrossAttention}

\operatorname{softmax}!\left( \frac{QK^{\mathrm T}}{\sqrt{d_k}} \right)V. $$

这让每个目标位置按需读取全部源序列表示,而不是把整个源序列压成单一固定向量。

课件图中编码器和解码器都堆叠 $N$ 层,并保持 $d_{\mathrm{model}}$ 不变,便于残差连接;这是经典 Transformer 的对称设计,并非所有变体必须使用相同层数。

9.17 易错点

  • Query 决定想找什么,Key 决定如何匹配,Value 才是被汇总的信息。
  • 注意力分数不是注意力权重;只有 Softmax 后的权重才非负且和为 1。
  • 非参数注意力没有可学习评分参数,但仍可嵌入有参数模型。
  • 可加性注意力用 MLP 式打分;原始 Transformer 使用缩放点积注意力。
  • 缩放因子是 $\sqrt{d_k}$,不是 $d_k$ 或 Value 维度。
  • Softmax 沿 Key 维执行,因此每个 Query 对所有可见 Key 的权重和为 1。
  • 标准自注意力能直接建立远距离关系,但完整注意力的时间和显存为二次规模。
  • 无位置编码的逐位置自注意力是排列等变,不应简单说成排列不变。
  • 多头注意力具有独立的 Q/K/V 投影,各头拼接后还需 $W^O$ 融合。
  • 位置编码加在输入嵌入上,不是给注意力权重矩阵简单加位置编号。
  • 正弦位置编码可计算训练长度外的位置,但不保证模型一定成功外推。
  • causal mask 防未来泄漏,padding mask 忽略补齐,两者用途不同。
  • 标准 Transformer 使用 LayerNorm;“绝对不能使用 BatchNorm”是过强表述。
  • 编码器-解码器交叉注意力的 Query 来自解码器,Key/Value 来自编码器。
  • 残差连接要求相加张量形状兼容,因此经典块保持统一的 $d_{\mathrm{model}}$。

相关知识

9.18 本节复盘

  • 注意力用 Query 与 Key 计算分数,Softmax 得到权重,再对 Value 加权求和。
  • 非参数注意力可用固定距离核;可加性注意力用可学习 MLP 式评分;缩放点积注意力使用 $QK^T/\sqrt{d_k}$。
  • 向量化注意力输出是 $\operatorname{softmax}(QK^T/\sqrt{d_k})V$,掩码可排除 padding 或未来位置。
  • 自注意力的 Q、K、V 都来自同一序列,支持全局交互和并行计算,但标准实现具有 $O(n^2d)$ 复杂度。
  • 课件二维例子中,$q_1$ 对两个 Key 的权重约为 $(0.33,0.67)$,$q_2$ 为 $(0.50,0.50)$。
  • 多头注意力在多个子空间独立计算关系,拼接各头后用 $W^O$ 融合。
  • 无位置自注意力不记录顺序;正弦/余弦位置编码通过 $X+P$ 注入绝对位置并提供相对偏移结构。
  • Transformer 编码器由自注意力、前馈网络、残差和归一化组成;解码器还含因果掩码和交叉注意力。
  • LayerNorm 对每个 token 的隐藏维归一化,通常比依赖批统计的 BatchNorm 更适合变长序列。
  • 交叉注意力用解码器状态作 Query、编码器输出作 Key/Value,实现源序列到目标序列的信息传递。