本文是在学习RNN中Attention机制运用,所产生的一个问题,欢迎在评论区讨论。
在RNN网络中可以引入注意力机制来克服长距离依赖关系造成的困难,其网络示意图如下:
-
在这个新结构中,定义每个输出的条件概率为:
𝑝(𝑦𝑖│𝑦1,⋯,𝑦𝑖−1, 𝒙)=𝑔(𝑦𝑖−1,𝑥𝑖,𝑐𝑖 ) -
其中𝑠𝑖为解码器RNN中的隐层状态:
𝑠𝑖=𝑓(𝑠𝑖−1,𝑦𝑖−1,𝑐𝑖) -
这里的上下文向量𝑐𝑖取决于注释向量序列 (encoder转化得到),通过使用注意力系数𝛼𝑖𝑗对 h𝑗 加权求得
在RNN网络中attention的计算方式如下。其中函数a()为相似度计算函数,Si-1和hj是两个向量,因此最简单的相似度计算方式为点乘。
存在的问题
由于St的隐状态位置,因此采用St-1来代替近似,这导致一个问题,位置并未对齐。用一个例子说明这个问题:
下面图中添加了一句话:”Tom is a boy"
如果要计算"boy"和其它所有词的依赖权重aij,实际上使用的是"a"和其它词的相似度的权重。
在这个例子里,“boy"更依赖于"Tom”,但实际上使用的是"a"这个词计算权重aij,词"a"更依赖于词"is",因此最终计算"boy"时更多考虑了"is"的权重,这会产生较大的错位问题。
可能的解决的方法
- Transformer框架(参见《attention is all you need》)使用栈式编码器规避计算顺序依赖关系
- 对上层解码器中的隐状态S也采用一个双向RNN输出,来通过上下文计算依赖关系来减少误差。
如果你有更好的解决方案或者认为文本有误,欢迎在评论区提出~