自注意力机制
自注意力机制重点在于三个矩阵 Q Q Q、 K K K、 V V V 三大矩阵。
-
其中 Q Q Q、 K K K 计算两者的相似度或相关性得到自注意力矩阵,最常见的方式为点积、Cosine相识性、MLP网络
-
对自注意力矩阵继续数值转换,可以使用归一化概率分布、也可以使用 $ Softmax 内 在 机 制 突 出 重 要 元 素 的 权 重 内在机制突出重要元素的权重 内在机制突出重要元素的权重 a_i$
-
根据$ a_i 即 即 即 Value_i 对 应 的 权 重 系 数 , 加 权 求 和 得 到 对应的权重系数,加权求和得到 对应的权重系数,加权求和得到Attention$数值
A t t e n t i o n ( Q u e r y , S o u r c e ) = ∑ i = 1 L X a i ⋅ V a l u e i Attention(Query, Source)=\sum_{i=1}^{L_X} a_i \cdot Value_i Attention(Query,Source)=i=1∑LXai⋅Valuei
自注意力机制
自注意力机制
是 注意力机制
的变体,其减少了对外部信息的用来,更加关注于内部特点。
- 优点:
- 参数少,相比于CNN、RNN
- 速度快,并行处理
- 效果好,记忆能力强
- CNN是基于局部编码、RNN会出现梯度消失等问题
自注意力机制核心
权重计算函数
眼尖的同学肯定发现这个attention机制比较核心的地方就是如何对Query和key计算注意力权重。下面简单总结几个常用的方法:
1、多层感知机方法
主要是先将query和key进行拼接,然后接一个激活函数为tanh的全连接层,然后再与一个网络定义的权重矩阵做乘积。
这种方法据说对于大规模的数据特别有效。
2、Bilinear方法
通过一个权重矩阵直接建立q和k的关系映射,比较直接,且计算速度较快。
3、Dot Product
这个方法更直接,连权重矩阵都省了,直接建立q和k的关系映射,优点是计算速度更快了,且不需要参数,降低了模型的复杂度。但是需要q和k的维度要相同。
4、scaled-dot Product
上面的点积方法有一个问题,就是随着向量维度的增加,最后得到的权重也会增加,为了提升计算效率,防止数据上溢,对其进行scaling。
我个人通常会使用2和3,4。因为硬件机器性能的限制,1的方法计算比较复杂,训练成本比较高。
总结
本文是在阅读了知乎几篇前人总结的基础上,提出的。
- 感悟如下:
- 英文能力是一个很重要的能力,这是和另一个世界交流的一种方式。很多知乎大牛都是翻译其他人的文章来发表的。
- 阅读一篇论文或文章的同时,需要注意文章的布局、排榜、文章思路等
- 比如Transformer中加入了 position embedding这样模块可以加深词与词之间的关联,这一思想可以运用到其他网络。
- 多多交流与输出
参考