P47 · 注意力与 Transformer
Transformer(上)
1这节解决什么问题
翻译、语音识别这类任务,输入是一段序列,输出是另一段序列,而且输入和输出长度不必相同,不能只预设一个固定长度的输出。
2一句话讲清
编码器把输入的每个位置都变成一份「带上下文的笔记」,解码器再一边写译文、一边回来翻这些笔记。
3通俗解释
- 先读原文:编码器为各个位置整理信息,同一层可以并行处理;每个位置可以参考完整输入(不是只看左边),所以「小猫坐在垫子上」里的「坐」能同时参考「小猫」和「垫子」。
- 每个位置都做同样的两步:先做自注意力并配合残差和归一化,再做各位置单独的小加工,同样配合残差和归一化。这两步可以叠很多层。残差就是「保留原来的信息,只学要改的部分」,叠得再深也不容易被冲掉。
- 归一化不用手算,只是把每个位置的那组数调到大致相同的尺度,避免有的特别大、有的特别小,让训练更稳。编码器不加「遮住后面」的限制,因为它读的是完整原文;这也正是它能把左右两边都带给解码器的原因。
- 旧方案是把整句压成一份固定长度的摘要,解码器每一步拿到的都一样。这里改成每个位置留一份笔记,解码器每写一个词,就能重新决定该翻哪几份。
4一个例子
帮助理解(不是讲义原例)
帮助理解的例子:把「小猫坐在垫子上」翻成英文时,编码器不是把整句压成一份固定长度的摘要,而是给每个词留一份笔记——「小猫」那份带着「坐」和「垫子」的信息,「坐」那份带着谁在坐、坐在哪。解码器写译文时,写 cat 主要翻「小猫」那份,写 mat 时又回去翻「垫子」那份。写一个词翻一次笔记,所以译文不必和原文一样长。
5常见误区
- 以为编码器把整句压成一份固定长度的摘要。这一讲的编码器是每个位置留一份表示;「压成一份」是更早的序列到序列做法。
- 以为归一化就是批归一化换个名字。这里是在一个位置内部把数值尺度调稳,跟一批里有多少样本无关,所以序列长短、批很小都能用。
- 以为所有 Transformer 都长这样。这一讲讲的是编码器-解码器结构;后来的模型有的只用编码器、有的只用解码器,不能一概而论。
6和相邻几节的关系
P36、P37 给了自注意力、多头和位置信息,这一节把它们组装成编码器;P48 讲解码器、遮住未来和交叉参考;P38 的循环网络是另一种编码器选择。
730 秒回顾
输入输出长度不必相同;编码器给每个位置留一份带上下文的表示;残差保留原信息,归一化稳住数值尺度,位置要另外补;不加遮罩所以能看全句。
8小自测
先自己答,再点开对答案。
1. 残差和归一化各自解决什么问题?
残差把这一步的输入加回输出,保留原来的信息,让「只学要改的部分」成为可能,叠深了也不容易退化;归一化把那组数的尺度调稳,避免大小悬殊让训练不稳。
2. 编码器为什么可以不加「遮住后面」的限制?
它读的是完整原文,不需要一个词一个词往外写;能看到左右两边,才能给解码器提供更完整的上下文。
9来源
来源与说明(点开可查)
基于对应官方讲义整理并做复习补充,不是视频逐字稿;本页不标注视频时间点。
对应讲义页码:seq2seq_v9.pdf 第 2–21 页;另见 normalization_v4.pdf 第 4–6 页