07 注意力模型直观理解(Attention Model Intuition)
这一节在讲什么
这一节先不急着上公式,而是讲一个核心直觉:
人在翻译长句子时,不会先把整句死记硬背下来,再一次性吐出来;人是看一部分,翻一部分。
注意力模型就是把这个想法交给神经网络。
为什么基础 seq2seq 对长句子吃力
基础编码器-解码器的做法是:
- 编码器把整句都读完
- 把整句信息压成一个固定长度向量
- 解码器再靠这个向量生成整句翻译
短句时这样还行。 但句子一长,问题就来了:
- 你让一个固定长度向量记住所有信息
- 长句的细节很容易被压缩丢失
- 所以越长的句子,翻译质量越容易掉
课程里就强调:普通编码器-解码器在长句上 BLEU 会明显下滑。
人类怎么翻译
人类更像这样做:
- 先看前半句
- 翻译前半句
- 再看下一段
- 再翻译下一段
也就是:
当前要生成哪个词,就重点看输入里最相关的那一小块。
这就是注意力的核心直觉。
课程里的短句例子
输入法语:
\[\text{Jane visite l'Afrique en septembre}\]输出英语:
\[\text{Jane visits Africa in September}\] 当模型准备生成第 1 个英文词 Jane 时,它应该主要看输入中的 Jane 附近。
当模型准备生成 visits 时,它应该主要看 visite 附近。
当模型准备生成 Africa 时,它应该主要看 l'Afrique。
这就不是“整个输入一起平均使用”,而是“按生成步骤动态聚焦”。
什么叫注意力权重
课程里用下面的记号表示:
\[\alpha^{\langle t, t' \rangle}\]它表示:
当生成第 $t$ 个输出词时,应该把多少注意力放在第 $t’$ 个输入词上。
例如:
- $\alpha^{\langle 1,1 \rangle}$:生成第 1 个英文词时,对第 1 个法语词的关注程度
- $\alpha^{\langle 2,2 \rangle}$:生成第 2 个英文词时,对第 2 个法语词的关注程度
这些权重加起来会形成当前时刻的“关注分布”。
上下文向量 $C$ 是什么
你可以把上下文向量 $C^{\langle t \rangle}$ 理解成:
“当前这一步生成输出时,从输入句子里读出来的重点摘要”。
它不是固定不变的。
生成不同输出词时,关注点不同,所以对应的上下文向量也不同。
为什么注意力更像人类
因为它允许模型在第 $t$ 步生成输出时,只抓最相关的输入位置。
所以:
- 不需要把整句所有信息都死塞进一个固定向量
- 长句时更不容易崩
- 对齐关系也更自然
这一节最重要的直觉图景
普通 seq2seq:
\[\text{整句输入} \rightarrow \text{一个固定向量} \rightarrow \text{整句输出}\]注意力模型:
\[\text{整句输入} \rightarrow \text{保留全部中间信息}\]然后在生成每个输出词时:
\[\text{按需查看输入中最相关的位置}\]小白最该理解的一句话
注意力不是“让模型更聪明一点”这么抽象。 它非常具体:
生成当前词时,不再平均看整句,而是给输入中不同位置分配不同权重。
这一节最该记住的要点
要点 1:普通编码器-解码器的瓶颈是固定长度表示
长句的信息容易丢。
要点 2:注意力让模型按步骤看输入
每生成一个词,都重新决定“该看哪里”。
要点 3:注意力权重描述的是关注分布
\[\alpha^{\langle t, t' \rangle}\]衡量第 $t$ 个输出词对第 $t’$ 个输入词的关注程度。
要点 4:上下文向量是“当前时刻读到的重点摘要”
不同时间步的上下文向量不同。
这一节一句话总结
注意力模型的核心直觉是:生成每个输出词时,只重点查看输入中最相关的部分,而不是要求一个固定向量记住整句全部信息,因此它尤其擅长处理更长、更复杂的序列。