作者:真理难辩_175 | 来源:互联网 | 2023-09-13 12:59
感谢伯禹平台举办的活动,本文记录学习SequencetoSequence模型,包含如下:1.Encoder-Decoder结构传统的RNN模型一般是给定输入,然后会有一个对应的输出
感谢伯禹平台举办的活动,本文记录学习Sequence to Sequence模型,包含如下:
1.Encoder-Decoder结构
传统的RNN模型一般是给定输入,然后会有一个对应的输出,对于自然语言处理中的生成任务来说,输出不限定长度的序列有点难以处理,这时候encoder-decoder结构就可以很好的解决这个问题。如下图所示:
encoder部分和decoder部分都是RNN网络,其中Encoder部分将输入的序列编码成一个向量,即隐藏层的输出hidden_state,再将这个hidden_state输入decoder中逐步生成序列,直到输出停止符号, 这种结构可以有效的解决不定长的输出问题,但是在生成序列的时候每一步都是用的encoder结构输出的hidden_state作为背景变量C来输入,但是翻译的过程中,一个目标词可能只对应输入序列的个别词,这时候,带有注意力机制的Encoder-Decoder结构就可以有效的解决这个问题
2.Encoder-Decoder with attention结构
attention机制就是在Decoder中生成每一个新的状态时,每一步都会采用不同的背景变量Ci,所以attention机制的一个重点就是如何计算第i步的背景向量Ci。如下图所示,在第i步时,用第i-1步的隐藏输出状态充当一个查询变量query来和encoder编码器的每一个隐藏层状态h1,h2,…(这时这些隐藏状态充当keys)来进行计算(一般是相似度计算或者其他计算),得到与每一个hi的分数,然后进行softmax运算生成一个概率分布,然后将这个概率分布于隐藏状态hi(这时这些隐藏状态充当valuess)相结合,生成attention输出,用作第i步的背景向量Ci。
3.transformer(Encoder-Decoder with self-attention)
传统的Encoder-decoder结构中的模块用的都是RNN模块,但是RNN的问题在于无法并行化计算,而且对于较长的序列问题不能很好的处理,为了解决这个问题transformer中采用了一种self-attention的机制来解决这个问题,做到可以并行化处理,又能保持句子间的依赖关系。
在self-attention中,每一个句子的输入都会同时被编码然后经过矩阵运算同时生成每一个词的qi,ki,vi.
在计算第一个词的attention时,让qi和其他的kj进行相似度计算,生成当前这个词的attention输出,可以发现,这里的每一个词都是可以同时计算的,这样在保证了并行化处理的同时,也解决了句子的内部的依赖问题。
参考文章:
1.讲解attention非常详细的文章https://blog.csdn.net/malefactor/article/details/78767781
2.李宏毅老师讲解transformer
https://www.you tu be.com/watch?v=ugWDIIOHtPA
3.https://leemeng.tw/neural-machine-translation-with-transformer-and-tensorflow2.html