序列到序列模型的简单介绍+
在本文中,我将向您简要介绍序列到序列模型,这些序列模型在诸如机器翻译,视频字幕,图像字幕,问题解答等不同任务中非常流行。
序列到序列模型
先决条件:读者应该已经熟悉神经网络,尤其是递归
神经网络(RNN)。此外,最好具有LSTM或GRU模型的知识。如果您不熟悉LSTM,我希望您阅读LSTM- Long Short-Term Memory。
介绍:
序列到序列(通常简称为seq2seq)模型是一类特殊的递归神经网络体系结构,我们通常使用(但不限于此)解决复杂的语言问题,例如机器翻译,问答,创建聊天机器人,文本摘要等。
编码器-解码器序列到序列: 资源
序列到序列模型的用例
序列到序列模型位于您每天要面对的众多系统的背后。例如,seq2seq模型为诸如Google Translate,启用语音的设备和在线聊天机器人之类的应用程序提供动力。以下是一些应用程序:
机器翻译-Google在2016年发表的一篇论文显示seq2seq模型的翻译质量如何“接近或超过所有当前发布的结果”。
编码器-解码器序列到序列:转换
语音识别-Google的另一篇论文,比较了语音识别任务上现有的seq2seq模型。
编码器-解码器序列到序列:语音识别
这些只是将seq2seq视为最佳解决方案的某些应用程序。该模型可以用作任何基于序列的问题的解决方案,尤其是那些输入和输出具有不同大小和类别的问题。
我们将在下面详细讨论模型结构。
编码器-解码器体系结构:
用于构建Seq2Seq模型的最常见架构是Encoder-Decoder架构。
编码器-解码器序列到序列:体系结构
基于神经网络的序列到序列学习的Ilya Sutskever模型
顾名思义,它包含两个组件-编码器和解码器。
编码器:
编码器和解码器均为LSTM模型(有时也为GRU模型)
编码器读取输入序列,并在称为内部状态向量或上下文向量的情况下汇总信息(在LSTM的情况下,它们称为隐藏状态向量和单元状态向量)。我们丢弃编码器的输出,仅保留内部状态。该上下文向量旨在封装所有输入元素的信息,以帮助解码器做出准确的预测。
隐藏状态h_i使用以下公式计算:
编码器-解码器序列到序列:编码器公式
编码器-解码器序列到序列:编码器
LSTM依次读取数据。因此,如果输入是长度为“ t”的序列,我们说LSTM以“ t”个时间步长读取它。
1. Xi =在时间步i处的输入序列。
2. hi和ci = LSTM在每个时间步上都保持两个状态(“ h”表示隐藏状态,“ c”表示单元状态)。这些结合在一起就是时间步骤i处LSTM的内部状态。
3. Yi =在时间步i处的输出顺序。Yi实际上是使用softmax激活生成的整个词汇表上的概率分布。因此,每个Yi是代表概率分布的大小为“ vocab_size”的向量。
解码器:
解码器是一种LSTM,其初始状态被初始化为编码器LSTM的最终状态,即编码器的最终单元的上下文向量被输入到解码器网络的第一个单元。使用这些初始状态,解码器开始生成输出序列,并且将来的输出也将这些输出考虑在内。
多个LSTM单元的堆栈,其中每个LSTM单元在时间步t预测输出y_t。
每个循环单元都接受前一个单元的隐藏状态,并产生和输出以及它自己的隐藏状态。
任何隐藏状态h_i均可使用以下公式计算:
编码器-解码器序列到序列:解码器公式
使用以下公式计算时间步t处的输出y_t:
编解码器序列到序列:Softmax
我们使用当前时间步的隐藏状态以及相应的权重W(S)来计算输出。Softmax用于创建概率向量,该向量将帮助我们确定最终输出(例如,问答题中的单词)。
图片发布
我们将在输出序列中添加两个令牌,如下所示:
例:
“ START_约翰很努力_END ”。
最重要的一点是,将解码器的初始状态(h0,c0)设置为编码器的最终状态。从直觉上讲,这意味着对解码器进行培训,以根据编码器编码的信息开始生成输出序列。
最后,根据每个时间步长的预测输出计算损耗,并随时间反向传播误差,以更新网络参数。用足够大量的数据对网络进行较长时间的训练可以得出很好的预测。
图片发布
整体编解码器架构
在推论过程中,我们一次生成一个单词。
解码器的初始状态设置为编码器的最终状态。
解码器的初始输入始终是START令牌。
在每个时间步,我们都保留解码器的状态,并将其设置为下一时间步的初始状态。
在每个时间步长,预测的输出将作为下一个时间步长的输入。
当解码器预测END令牌时,我们打破了循环。
编码器-解码器模型的缺点:
该体系结构有两个主要缺点,都与长度有关。
首先,与人类一样,该体系结构的内存非常有限。LSTM的最终隐藏状态(我们称为S或W)是您尝试填充必须翻译的整个句子的地方。S或W通常只有几百个单位(读为:浮点数)长-尝试强加到此固定维数向量中的次数越多,神经网络就被迫损失得越多。有时需要神经网络根据需要执行的“有损压缩”来思考。
其次,根据一般经验,神经网络越深,训练起来就越困难。对于递归神经网络,序列越长,沿着时间维度的神经网络越深,这将导致梯度消失,其中递归神经网络从目标中学到的梯度信号随着向后传播而消失。即使使用专门为防止梯度消失而设计的RNN,例如LSTM,这仍然是一个基本问题。
图片发布
此外,对于更健壮和冗长的句子,我们有诸如注意力模型和变形器之类的模型。
下面这个是我的GitHub库的完整的单词水平和字符水平编码器,解码器模型。
题库