Multi-head attention with DR

好久不见. 提交于 2020-03-10 06:55:45

注意力机制的核心部分是通过计算KK(键)序列与qq(查询)的相关性,来得到注意力权重a(通过一定的映射关系ff): a=f(q.K)a=f(q.K)。具体来说,Attention(Q,K,V)Attention(Q, K, V)函数在输入矩阵 Q、K 和 V 的情况下可计算 Query 序列与 Value 序列之间的注意力关系。其中 Q 的维度为 n×dkn×d_k,表示有 nn 条维度为 dkd_k 的 Query、KK 的维度为 m×dkm×d_kVV 的维度为 m×dvm×d_v。这三个矩阵的乘积可得出 n×dvn×d_v 维的矩阵,它表示 nn 条 Query 对应注意到的 Value 向量

在实际论文的表述里或者开展的实验中,KK是词嵌入向量或模型的隐藏层状态向量hth_tqq是计算注意力分配多少的参考(reference)。本质上就是通过多次QKQK得到多个权重aijk...a_{ijk...},(就有了分布函数),再利用权重的分布对VV加权。最基础的例子比如:
在这里插入图片描述

多头注意力,就是在上面Attention(Q,K,V)Attention(Q,K,V)里,获得了hh个不同版本的Q,K,VQ,K,VMultiHead(Q,K,V)=Concat(head1,...,headh)WO\text{MultiHead}(Q,K,V) = \text{Concat}(\text{head1},...,\text{head}_h)\boldsymbol{W}^Oheadi=Attention(QWiQ,KWiK,VWiV)\text{head}_i = \text{Attention}(\boldsymbol{Q}\boldsymbol{W}_i^Q,\boldsymbol{K}\boldsymbol{W}_i^K,\boldsymbol{V}\boldsymbol{W}_i^V)Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(\boldsymbol{Q},\boldsymbol{K},\boldsymbol{V}) = \text{softmax}(\frac{\boldsymbol{Q}\boldsymbol{K}^T}{\sqrt{d_k}})\boldsymbol{V}
我们记QWiQ=Qi,KWiK=Ki,VWiV=Vi,i[1,h]\boldsymbol{Q}\boldsymbol{W}_i^Q=Q^i,\boldsymbol{K}\boldsymbol{W}_i^K=K^i,\boldsymbol{V}\boldsymbol{W}_i^V=V^i,i \in [1,h],
WiQ,WiK,WiV\boldsymbol{W}_i^Q,\boldsymbol{W}_i^K,\boldsymbol{W}_i^V称为transformation matrics

如果我们把这些注意头可以看作是从不同角度对序列中同一实体的不同观察结果(权重),那么是否可以尝试从h个注意力头uiu_i中找到一个最合适的vvui=softmax(QiKiTdk)Viu_i = \text{softmax}(\frac{\boldsymbol{Q_i}\boldsymbol{K_i}^T}{\sqrt{d_k}})\boldsymbol{V_i}
这不禁让人想入非非产生联想,在胶囊网络中,我们知道,对于v in v out的capsule,识别图片中的某一组件(component)的旋转不变性,是通过对该组件的feature与Pose向量做transformation。而我们知道,如果输入的是对同一实体在语言学上的不同描述,那么利用路由机制,就可以决定不同描述的information中谁能流向下一层胶囊层,进而是否可以利用这一性质,对上述h个头进行路由选择呢?

首先,通过将输入胶囊ui乘以表示部分和整体之间的视点不变关系的学习转换矩阵Wij来计算投票:
uiu_i是多头注意力机制的权值分布,WijW_ij是“部分”和“整体”的视点不变关系转换矩阵(为啥叫这个名字我也不知道…)u^ji=Wijui\hat u_{j|i}=W_{ij}u_i
然后计算并更新输出胶囊vv和vote u^\hat u,以及它们之间的分配概率cccc路由迭代中的归一化操作中的量,将输出归一化到下一层的输入胶囊:v=f(u^,c)v=f(\hat u,c),c=Update(u^,v)c=Update(\hat u,v)

最后,将输出胶囊v串联在一起,送入前馈网络(FFN),该网络由两个线性变换层组成,线性变换层中通过ReLU完成激活。FFN(x)=max(0,xW1+b1)W2+b2FFN(x)=max(0,xW_1+b_1)W_2+b_2

另外,通过添加了层uuvv之间的剩余连接后,最终的输出是:O+FFN(v)O+FFN(v)添加剩余连接就是用Concatenate操作实现:
在这里插入图片描述

Dynamic Routing

我们把所有这些加权vote向量加起来,得到胶囊类型输出向量sj=iciju^jis_j=\sum_ic_{ij}\hat u_{j|i}其中cij=exp(bij)kexp(bik)c_{ij}=\frac{exp(b_{ij})}{\sum_kexp(b_{ik})},其中bijb_{ij}初值=0
然后就和动态路由一样,用sjs_j启动squash:vj=sj21+sj2sjsjv_j=\frac{||s_j||^2}{1+||s_j||^2}\frac{s_j}{||s_j||}

初始的coefficientsbijb_{ij}是胶囊输入值u^ji\hat u_{j|i}和每个胶囊输出值vjv_j两者的点积(点积衡量相似性,也即coefficients代表输入和输出的相似度,聚类的思想)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!