前言
上期说到了自注意力机制,也叫做单头注意力机制。单头注意力只有一套,它只能产生一种注意力分布,如果所有信息都挤在一个注意力空间里,不同类型的关系容易互相干扰。
举个例子:
假设有这样一句话:
这个动物过不了马路,因为它太累了
这里的it指的是谁?
- 可能关注 animal ↔ tired (理解代词指代)
- 也可能关注 cross ↔ street (理解动作关系)
在单头注意力机制中:
它一次只能"重点看一种关系"
如果所有信息都挤在
多头注意力怎么做
假设有8个头(8 heads)。
输入 X 后,不再只学习一组头投影矩阵,而是学习8组
表示从不同角度观察这些词的关系,例如:代词关系,动作关系等...
...
每个头独立计算:
最后拼接:
每个头学什么?
训练后,不同头往往会自动分工。
例如:
The little boy who was wearing a red hat kicked the ball.
可能出现:
- 头1:关注主谓关系
- boy -> kicked
- 头2:关注修饰关系
- boy -> little
- 头3:关注局部邻近词
- wearing -> a red hat
- 头4:关注长距离依赖
- boy -> hat
总结
多头注意力的核心目的是:
让模型在不同表示子空间中并行的关注不同类型的信息关系,从而获得比单头注意力更强的表达能力
如果把一句话理解成观察一个人:
- 单头注意力:只有一个摄影师,只能选择一个角度拍照。
- 多头注意力:有很多摄影师同时拍照:
- 有人拍正面;
- 有人拍侧面
- 有人拍全身;
- 有人拍细节
最后这些照片综合起来,你会对这个人理解更加完整。