Open zhengyangWang1 opened 11 months ago
基于卷积或循环网络的序列编码都是一种局部的编码方式,只建模了输入信息的局部依赖关系.虽然循环网络理论上可以建立长距离依赖关系,但是由于信息传递的容量以及梯度消失问题,实际上也只能建立短距离依赖关系。 RNN梯度消失的原因是,随着梯度的传导,梯度被近距离梯度主导,模型难以学习到远距离的信息。具体原因也就是 $\prod_{k=t+1}^{T} \frac{\partial h^{(k)}}{\partial h^{(k-1)}}$ 部分,在迭代过程中,每一步 $\frac{\partial h^{(k)}}{\partial h^{(k-1)}}$ 始终在 $[0,1]$ 之间或者始终大于1。 因此,卷积层和循环层不适合用于建模长距离依赖关系。 如果要建立输入序列之间的长距离依赖关系,可以使用以下两种方法:
循环层: $h{t}=f\left(U x{t}+W h_{t-1}\right)$
故一次操作的时间复杂度为 $\mathcal{O}\left(d^{2}\right)$ , n次序列操作后的总时间复杂度为 $\mathcal{O}\left(n d^{2}\right)$
卷积层: 注: 这里保证输入输出都是一样的,即均是 $n \times d$
自注意力层: $A(Q, K, V)={Softmax}\left(Q K^{T}\right)$
参考文献: LSTM如何解决RNN带来的梯度消失问题 - 知乎 Transformer/CNN/RNN的对比(时间复杂度,序列操作数,最大路径长度) - 知乎
当将自注意力模型作为一个神经层使用时,分析它和卷积层以及循环层在建模长距离依赖关系的效率和计算复杂度方面的差异.