seq2seq是什么:
seq2seq是一种常见的NLP模型架构,并不是指某一个具体模型。是指从一个文本序列得到一个新的文本序列。典型任务有机器翻译,文本摘要等任务。
seq2seq模型的输入可以是一个单词,字母,或图像特征序列,输出是另外一个单词,字母,或图像特征序列。
seq2seq原理:
seq2seq由编码器(encoder)和解码器(decoder)组成,编码器会处理输入序列中的每个元素作为输入信息,这些信息会被转化为一个向量(context向量)。然后编码器把context向量发送给解码器,解码器使用context向量中的信息,逐个输出新的序列。
在机器翻译的任务中,seq2seq模型中的编码器解码器一般采用的是RNN循环神经网络,youtube介绍:https://www.youtube.com/watch?v=UNmqTiOnRfg
context向量:
context向量本质上是一组浮点数,这个context的数组长度基于RNN的隐藏层神经元数量。上下文向量的长度通常取决于模型的设计,可以是任意自定义的大小,比如256、512或1024等。这个长度是根据编码器RNN的隐藏层神经元数量确定的。在实际应用中,选择上下文向量的长度通常是一个超参数,需要根据任务和数据集的特征进行调整。更大的上下文向量可能能够捕捉更多的信息,但也可能导致模型变得更加复杂,训练时间更长。
RNN如何处理输入序列:
1. 时间步和序列:
在RNN中,数据被认为是一个序列,每个元素在时间上有序排列。这个序列可以是时间序列、文本序列、音频序列等。我们用 ��xt 表示序列在时间步 �t 上的输入。
2. 循环连接:
RNN的关键特点是引入了循环连接,使得信息可以在不同时间步之间传递。在每个时间步 �t,RNN都会接收当前时间步的输入 ��xt 和前一个时间步的隐藏状态 ℎ�−1ht−1,然后产生当前时间步的隐藏状态 ℎ�ht。这个隐藏状态 ℎ�ht 包含了模型对过去时间步信息的记忆,从而能够捕捉时序信息。
3. 输出:
RNN的输出可以根据任务的不同而变化。在每个时间步上,你可以选择输出一个预测值,也可以在整个序列处理完后输出一个总结性的结果。
4. 反向传播:
训练RNN通常使用反向传播算法。通过比较模型的输出和实际标签,可以计算出误差,然后使用梯度下降等优化算法来更新网络的权重,以减小误差。由于RNN的循环结构,训练时需要通过时间反向传播(Backpropagation Through Time,BPTT)来考虑整个序列的影响。
5. 梯度消失和梯度爆炸:
RNN的一个问题是梯度消失或梯度爆炸,尤其在处理长序列时。为了解决这个问题,后续的改进型RNN结构,如长短时记忆网络(LSTM)和门控循环单元(GRU),引入了更复杂的门控机制,能够更有效地处理长时序信息。
Attention的引入:
基于RNN的seq2seq模型有了对时间维度的掌控,但依然无法很好的捕捉长距离的依赖关系。
而Attention的引入让模型可以有区分度有重点的关注输入序列。
引入Attention之后在引入注意力机制后,RNN的隐藏状态更新和输出计算的公式会发生变化。注意力机制的核心思想是根据输入序列的不同部分赋予不同的权重,使网络更加关注那些对当前任务重要的信息。