赞
踩
参考博客:https://zhuanlan.zhihu.com/p/38816145
1. 什么是序列到序列(seqence2sequence)?
Seq2Seq模由encoder和decoder两个部分来构成,假设模型的训练样本为
(
X
,
Y
)
(X,Y)
(X,Y),encoder负责把输入
X
X
X映射到隐向量
Z
Z
Z,再由decoder把
Z
Z
Z映射到输出
Y
Y
Y. 现在大多数场景下使用的Seq2Seq模型基于RNN (LSTM, GRU) 构成的,虽然取得了不错的效果,但也有一些学者发现使用CNN来替换Seq2Seq中的encoder或decoder可以达到更好的效果
编码器和解码器一般都是由RNN类网络构成,常用LSTM。
1.1 序列到序列任务往往具有以下两个特点:
2. 编码器和解码器
2.1 编码器
通信领域,编码器(Encoder)指的是将信号进行编制,转换成容易传输的形式。
而在这里,主要指的是将句子编码成一个能够映射出句子大致内容的固定长度的向量。
对于投入到的每个RNN展开的节点,我们将会得到一个输出层输出和一个隐含层输出,我们最终需要使用到的是最后一个输入节点的隐含层输出。这里面最后一个隐含节点的输出蕴含了前面所有节点的输入内容。
RNN的隐含层输出和输出层的输出内容其实是一样的,除了LSTM具有多一个hidden state来作为一种控制向量。
2.2 解码器
解码器(Decoder),这里就是将由编码器得到的固定长度的向量再还原成对应的序列数据,一般使用和编码器同样的结构,也是一个RNN类的网络。
实际操作过程会将由编码器得到的定长向量传递给解码器,解码器节点会使用这个向量作为隐藏层输入和一个开始标志位作为当前位置的输入。得到的输出向量能够映射成为我们想要的输出结果,并且会将映射输出的向量传递给下一个展开的RNN节点。
每一次展开,会使用上一个节点的映射输出所对应的向量来投入到下一个输入中去,直到遇到停止标志位,即停止展开。
sequence2sequence的另一种解释
seq2seq模型由编码器和解码器组成。编码器将原文编码为一个向量,解码器将这个向量解码为译文。编码器和解码器都是RNN,具体可以是LSTM。编码器和RNN语言模型的操作流程基本一样。编码器逐个读入原文的词,先经过词向量层得到RNN的输入向量,再结合前一时刻的隐状态,得到当前时刻的隐状态,最后时刻的隐状态记为。解码器以 作为初始隐状态,跟RNN语言模型做一样的迭代操作。 解码器每一个时刻的隐状态经过softmax层就变成词表的概率分布,概率最大的那个词就是这一时刻解码出的词。
可以将解码器看做一个特殊的RNN语言模型。普通的RNN语言模型以0向量作为初始状态,解码器以编码器的最后一个隐状态作为初始状态。解码器主要执行的是语言模型的生成功能。
3. 网络的训练
编码器的输入, 解码器的输入以及解码器的输出
3.1 编码器的输入
序列任务的数据集主要分为原序列和转换序列,比如说对话任务中,编码器的LSTM投入的输入为 are you free tomorrow四个词所对应的向量,而对起始的隐含层输入不做具体要求。
3.2 解码器的输入
解码器的第一个输入节点位置为开始的标志位。
而后面跟进的输入在训练阶段一般有两种选择。一种是投入正确输出的输入。也被称为teacher force输入,即每一个节点的输入都为上一个节点正确的输出。
以下图为例,我们需要的正确输出为W X Y Z,那么我们不论实际输出为多少,我们都将输入W X Y Z。
3.3 解码器的输出
对于输出部分没有什么特殊的,一般会将RNN节点所对应的输出通过一个全连接神经映射到字典维度大小的向量。再通过交叉熵来量化生成的分布和实际分布之间的差异,通过反向传播进而训练整个网络。
4. 总结
序列到序列模型看似非常完美,但是实际使用的过程中仍然会遇到一些问题。比如说句子长度过长,会产生梯度消失的问题。由于使用的是最后的一个隐含层输出的定长向量,那么对于远靠近末端的单词,“记忆”得会越深刻,而远远离的单词则会被逐渐稀释掉。面对这些问题,也有对应的一些解决方案比如加入attention,将句子倒向输入等。
5.端到端模型
5.1 什么是端到端?
传统的图像识别问题往往通过分治法将其分分解为预处理、特征提取和选择、分类器设计等若干步骤。分治法的动机是将图像识别的母问题分解为简单、可控且清晰的若干小的子问题。不过分步解决子问题时,尽管可以在子问题上得到最优解,但子问题上的最优解并不意味着就能得到全局问题的最后解。
深度学习提供了一种“端到端”的学习范式,整个学习的流程并不进行人为的子问题划分,而是完全交给深度学习模型直接学习从原始数据到期望输出的映射。
对深度模型而言,其输入数据是未经任何人为加工的原始样本形式,后续则是堆叠在输入层上的众多操作层。这些操作层整体可以看作一个复杂的函数Fcnn,最终的损失函数由数据损失(data loss)和模型参数的正则化损失(regularization loss)共同组成,模型深度的训练则是在最终损失驱动下对模型进行参数更新并将误差反向传播至网络各层。模型的训练可以简单抽象为从原始数据向最终目标的直接拟合,而中间的这些部件起到了将原始数据映射为特征随后在映射为样本标记的作用。
总结一下:端到端的学习其实就是不做其他额外处理,从原始数据输入到任务结果输出,整个训练和预测过程,都是在模型里完成的。
一个比较通俗的解释:
类比一下,我们想磨豆浆,那么普通料理机就不是端到端的。料理机的输入是洗干净、浸泡过的黄豆,料理机的输出是生豆浆。用这样的料理机磨豆浆,我们需要实现自行清洗、浸泡黄豆,事后我们还要自己煮豆浆(喝生豆浆很可能导致食物中毒)。相反,如果我们有一个端到端的豆浆机,就可以直接把豆浆和水(原始数据)放进去,最后得到的是可以直接喝的热豆浆(结果)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。