SimpleRNN+attention中注意力α的原理?

就是说,α是由s0和hi计算出来的,s0就是编码器的最后一个输出hm,那样的话简单rnn的最后的输出不是会遗忘早先时候的数据么?那这个遗忘了数据的hm去和早先时候的hi线性变换后相乘,乘出来的值有意义么?还有,s0就是hm的话,那和hm相乘的时候不就会获得最高的注意力么?是怎么在decoder中推测出起始符后的第一个字的?

注意力机制在 RNN 中的应用是用来解决 RNN 在处理长序列时会遗忘早期信息的问题。在 SimpleRNN+attention 模型中,注意力机制通过计算每个时间步的输出和编码器的最终输出之间的相似度来分配权重。这样,在解码器阶段,可以在每一步选择一个最相似的编码器输出来进行处理。

具体来说,对于每一个时间步 i,我们将解码器的隐藏状态 hi 与编码器的最终输出 hm 进行线性变换,再通过 softmax 函数得到每个时间步的注意力权重 ai,即 ai = softmax(hi * W * hm)。这样,早期时间步的 hi 也能够通过 ai 的高权重得到重视,从而解决了 RNN 处理长序列时遗忘早期信息的问题。

关于解码器阶段,在解码器阶段,我们使用起始符后的第一个字来预测第一个输出,这个输出通常是在预训练语言模型中获取的,然后第一步的输出将被用来预测第二个输出,以此类推,直到预测出所有的目标序列。

总的来说, Attention 机制将信息从编码器传递给解码器的过程中,通过计算每一步解码器的隐藏状态与编码器最终输出之间的相似度,来确定在当前时间步中对编码器输出的关注。这样,在解码器阶段,每一步都可以从编码器输出中选择最相关的信息来进行处理,这使得我们可以避免 RNN 网络在处理长序列时的遗忘问题。比如说,在翻译模型中,编码器接收输入的源语句 "I have a cat" 并产生一个隐藏状态序列,解码器接着使用这个隐藏状态序列来生成目标语句 "Je ai un chat"。在解码器生成目标语句的过程中,它可能会在生成 "Je" 的时候主要关注 "I" 和 "have",而在生成 "ai" 的时候主要关注 "cat"。这样可以解决解码器在生成每一个目标词时,都能根据编码器的输出来关注那些重要的源语言词汇。

当然,这仅仅是一个简单的例子,在实际应用中,注意力机制还可以用于语音识别,图像分类等其他领域。