Self-Attention

受Attention的启发,当要表示序列中某一时刻的状态时,可以通过该状态与其他时刻状态之间的相关性计算,即所谓的“观其伴,知其意”,这又被称作自注意力机制(Self-Attention)。

self-attention:把Attention用在一个RNN网络上。

  • 在提出self-attention的原始论文:Long Short-Term Memory-Networks for Machine Reading中,对LSTM网络使用了Self-Attention。本文为了方便理解,对SimpleRNN使用Self-Attention。

具体流程

  1. RNN的输入为 [ x 1 , x 2 , . . . . . . ] [x_1,x_2,......] [x1,x2,......]、初始隐藏状态 h 0 = 0 h_0=0 h0=0、初始context vector c 0 = 0 c_0=0 c0=0
  2. 更新 h 1 h_1 h1 h 1 = t a n h ( A ⋅ [ x 1 c 0 ] + b ) h_1=tanh(A \cdot \begin{bmatrix}x_1\\c_0\\ \end{bmatrix}+b) h1=tanh(A[x1c0]+b)
    也可以 h 1 = t a n h ( A ⋅ [ x 1 c 0 h 0 ] + b ) h_1=tanh(A \cdot \begin{bmatrix}x_1\\c_0\\h_0 \end{bmatrix}+b) h1=tanh(Ax1c0h0+b)
  3. 更新context vector c 1 = h 1 c_1=h_1 c1=h1
  4. 更新 h 2 h_2 h2 h 2 = t a n h ( A ⋅ [ x 2 c 1 ] + b ) h_2=tanh(A \cdot \begin{bmatrix}x_2\\c_1\\ \end{bmatrix}+b) h2=tanh(A[x2c1]+b)
  5. 重点更新context vector: c 2 c_2 c2
    • 计算权重:对 h 2 h_2 h2 h 1 , h 2 h_1,h_2 h1h2 h 0 h_0 h0为全0,忽略) α i = a l i g n ( h i , h 2 ) \alpha_i=align(h_i,h_2) αi=align(hi,h2)
    • 更新 c 2 c_2 c2 c 2 = α 1 h 1 + α 2 h 2 c_2=\alpha_1h_1+\alpha_2h_2 c2=α1h1+α2h2

此后重复以上过程
Self-Attention_第1张图片

总结

通过self-attention,可以直接计算两个距离较远的时刻之间的关系。

而在RNN中,由于信息是沿着时刻逐层传递的,因此当两个相关性较大的时刻距离较远时,会产生较大的信息损失。虽然引入了门控机制,如LSTM、GRU等,可以部分解决这种长距离依赖问题,但是治标不治本。

因此,基于自注意力机制的自注意力模型已经逐步取代RNN,成为自然语言处理的标准模型。

参考

RNN模型与NLP应用(9/9):Self-Attention (自注意力机制)

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