attention中计算权重值的几种方法

权重 α i \alpha_i αi

decoder的初始状态是encoder的最后一个状态 h m h_m hm,在attention下,encoder的所有状态都要保留下来。首先需要计算 s 0 s_0 s0与encoder的每一个 h i h_i hi的相关性(权重) α i = a l i g n ( h i , s 0 ) \alpha_i = align(h_i, s_0) αi=align(hi,s0)。最终算出来 α 1 , α 2 , ⋯   , α m \alpha_1, \alpha_2, \cdots, \alpha_m α1,α2,,αm a l p h a i alpha_i alphai都是介于01之间的实数,且所有 α \alpha α的和为1
attention中计算权重值的几种方法_第1张图片

计算方法

方法一(attention第一篇论文中提出的)

attention中计算权重值的几种方法_第2张图片
首先将 h i h_i hi s 0 s_0 s0作concatenation得到一个更高维的向量。然后求矩阵 w w w与这个向量的乘积,得到一个向量,然后将tanh应用于向量的每一个元素上,将每一个元素压缩到[-1,1],将tanh的输出与 v v v求内积,结果为一个实数 α i ~ \tilde{\alpha_i} αi~
需要注意的是,图中的矩阵 w w w v v v都是参数,需要通过训练数据学习。
求出 m m m个参数 α 1 ~ , α 2 ~ , ⋯   , α m ~ \tilde{\alpha_1}, \tilde{\alpha_2}, \cdots , \tilde{\alpha_m} α1~,α2~,,αm~需要对他们使用softmax变换(和为1):
[ α 1 , α 2 , ⋯   , α m ] = S o f t m a x ( [ α 1 ~ , α 2 ~ , ⋯   , α m ~ ] ) [\alpha_1, \alpha_2, \cdots, \alpha_m] = Softmax([\tilde{\alpha_1}, \tilde{\alpha_2}, \cdots , \tilde{\alpha_m}]) [α1,α2,,αm]=Softmax([α1~,α2~,,αm~])

方法二(更常用)

  1. Linear maps( W k , W Q W_k,W_Q Wk,WQ通过训练得到):
    k i = W k ⋅ h i k_i = W_k \cdot h_i ki=Wkhi, for i = 1  to  m i = 1 \text{ to } m i=1 to m
    q 0 = W Q ⋅ s 0 q_0 = W_Q \cdot s_0 q0=WQs0
  2. Inner product:
    α i ~ = k i T q 0 \tilde{\alpha_i} = k^{T}_{i}q_0 αi~=kiTq0, for i = 1  to  m i = 1 \text{ to } m i=1 to m
  3. Normalization:
    [ α 1 , α 2 , ⋯   , α m ] = S o f t m a x ( [ α 1 ~ , α 2 ~ , ⋯   , α m ~ ] ) [\alpha_1, \alpha_2, \cdots, \alpha_m] = Softmax([\tilde{\alpha_1}, \tilde{\alpha_2}, \cdots , \tilde{\alpha_m}]) [α1,α2,,αm]=Softmax([α1~,α2~,,αm~])

你可能感兴趣的:(人工智能,机器学习,深度学习,算法)