@[toc]
非参注意力池化层
-
给定数据
-
平均池化是最简单的方案:
-
更好的方案是60年代提出来的Nadaraya-Watson核回归
-
使用高斯核
参数化的注意力机制
- 心理学认为人通过随意线索和不随意线索选择注意点
- 注意力机制中,通过query(随意线索)和key(不随意线索)来有偏向性的选择输入
- 可以一般的写作,这里是注意力权重
- 早在60年代就有非参数的注意力机制
注意力分数
拓展到高维度
- 假设query ,这里
Additive Attention
-
可学参数:
-
等价于将key和value合并起来后放入到一个隐藏大小为h输出大小为1的单隐藏层MLP
Scaled Dot-Product Attention
-
如果query和key都是同样的长度,那么可以
-
向量化版本
- 注意力分数:
- 注意力池化:
总结
- 注意力分数是query和key的相似度,注意力权重是分数的softmax结果
- 两种常见的分数计算:
- 将query和key合并起来进入一个单输出单隐藏层的MLP
- 直接将query和key做内积
使用注意力机制的seq2seq
动机
- 机器翻译中,每个生成的词可能相关于源句子中不同的词
- seq2seq模型中不能对此直接建模
加入注意力 Encoder
- 编码器对每次词的输出作为key和value
- 解码器RNN对上一个词的输出是query
- 注意力的输出和下一个词的词嵌入合并进入
总结
- seq2seq中通过隐状态在编码器和解码器中传递信息
- 注意力机制可以根据解码器RNN的输出来匹配到合适的解码器RNN的输出来更有效的传递信息
自注意力机制
自注意力
-
给定序列
-
自注意力池化层将xi当做key,value,query来对序列抽取特征得到,这里
跟CNN,RNN对比
CNN | RNN | 自注意力 | |
---|---|---|---|
计算复杂度 | |||
并行度 | O(n) | O(1) | O(n) |
最常路径 | O(n/k) | O(n) | O(1) |
位置编码
-
跟CNN/RNN不同,自注意力并没有记录位置信息
-
位置编码将位置信息注入到输入里
-
假设长度为n的序列是,那么使用位置编码矩阵来输出作为自编码输入
-
P的元素如下计算:
-
位置编码矩阵
相对位置信息
- 位置于处的位置编码可以线性投影位置i处的位置编码来表示
- 记,那么
总结
- 自注意力池化层将xi当做key,value,query来对序列抽取特征
- 完全并行,最长序列为1,但对长序列计算复杂度高
- 位置编码在输入中加入位置信息,使得自注意力能够记忆位置信息
transformer
Transformer架构
- 基于编码器-解码器架构来处理序列对
- 跟使用注意力的seq2seq不同,transformer是纯基于注意力
多头注意力
-
对同一key,value,query,希望抽取不同的信息
例如短距离关系和长距离关系
-
多头注意力使用h个独立的注意力池化
- 合并各个头(head)输出得到最终输出
有掩码的多头注意力
- 解码器对序列中一个元素输出时,不应该考虑该元素之后的元素
- 可以通过掩码来实现
- 也就是计算xi输出时,假装当前序列长度为i
基于位置的前馈网络
- 将输入形状由变换成
- 作用两个全连接层
- 输出形状由变化为
- 等价于两层核窗口为1的一维卷积层
层归一化
- 批量归一化对每个特征/通道里元素进行归一化
- 不适合序列长度会变的NLP应用
- 层归一化对每个样本里的元素进行归一化
信息传递
- 编码器中的输出
- 将其作为解码中的第i个transformer块中多头注意力的key和value
- 它的query来自目标序列
- 意味着编码器和解码器中块的个数和输出维度都是一样的
预测
- 预测第t+1个输出时
- 解码器中输入前t个预测值
- 在自注意力中,前t个预测值作为key和value,第t个预测值还作为query
总结
- transformer是一个纯使用注意力的编码-解码器
- 编码器和解码器都有n个transformer块
- 每个块里使用多头(自)注意力,基于位置的前馈网络,和层归一化
网友评论