P36 · 注意力与 Transformer
自注意力机制(上)
1这节解决什么问题
前面模型的输入都是一组固定长度的数(向量)。可一句话是一串这样的数,长度还会变;同一个词在不同句子里意思不同,固定窗口又盖不住整句。
2一句话讲清
让每个位置自己决定「该参考句中哪些位置、各参考多少」,再把那些位置的内容按比例混进自己的表示——这就是自注意力。
3通俗解释
- 每个位置的向量先变出三种角色:查询、匹配线索、实际内容(课程里叫 query、key、value)。查询负责发问,匹配线索负责被比对,实际内容是被取走的信息。这一行只是名字对照,不用记流程。
- 拿这个位置的查询,去和句中每个位置的匹配线索比一比,越像分数越高;把这一行分数变成「加起来等于一的比重」,就得到「该看谁、看多少」。
- 按这组比重,把所有位置的实际内容加权混起来,就是该位置的新表示。谁比重高,新表示里就更多带着谁的信息。
- 所有位置可以同时算,所以训练能并行;代价是要两两比较,句子长一倍,比较的次数大约变四倍。
4一个例子
讲义例子
讲义用「我看见一把锯子」这类句子说明:同一个词在不同句子里角色不同,光看它自己分不出来,要看它周围。自注意力做的就是让这个词主动去「问」整句:跟谁关系大,就把谁的信息多拿一点过来。所以同一个词,在「锯木头」和「别锯了」里得到的表示可以不一样。
5常见误区
- 以为自注意力只能用于语言。语音的每一帧、图像的每个小块、图的每个节点,只要是一组向量都能用。
- 以为查询、线索、内容来自三份不同输入。三者都来自同一个输入,只是各自乘了不同的可学习权重。
- 以为比重是按列归一化。是按「每个位置的这一行」归一化:一个位置分给全句的比重加起来是一。
6和相邻几节的关系
P37 接着讲多头、位置信息,以及它和卷积、循环网络的关系;P47、P48 把这个模块堆成编码器与解码器。
730 秒回顾
输入是一组变长的向量;每个位置用自己的查询去比对全句,得到「看谁、看多少」;再按比重混合内容;能并行,代价是两两比较;不给位置信息就分不清先后。
8小自测
先自己答,再点开对答案。
1. 自注意力里「比重」是怎么用的?
每个位置得到一组加起来等于一的比重,表示它该参考句中哪些位置、各参考多少;再用这组比重把各位置的内容混合成自己的新表示。
2. 不给位置信息,模型还能分清词的先后吗?
不能。这一步本身对顺序不敏感:打乱输入,输出只是跟着打乱。顺序要在进入这一步之前另外加进去。