Self-Attention

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

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

具体流程

  1. RNN的输入为[ x 1 , x 2 , . . . . . . ] [x_1,x_2,......][x1,x2,......]、初始隐藏状态h 0 = 0 h_0=0h0=0、初始context vectorc 0 = 0 c_0=0c0=0
  2. 更新h 1 h_1h1h 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 vectorc 1 = h 1 c_1=h_1c1=h1
  4. 更新h 2 h_2h2h 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_2c2
    • 计算权重:对h 2 h_2h2h 1 , h 2 h_1,h_2h1h2h 0 h_0h0为全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_2c2c 2 = α 1 h 1 + α 2 h 2 c_2=\alpha_1h_1+\alpha_2h_2c2=α1h1+α2h2

此后重复以上过程
在这里插入图片描述

总结

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

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

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

参考

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


版权声明:本文为m0_50896529原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。