Seq2Seq2四个实验进行对比学习
0 前言:
四个实验对比分析,第一个实验Encoder+LSTM(多层)+Decoder(最普通),Seq2Seq(Encoder+GRU(单层)+Decoder) 上下文向量仍然需要包含有关源句子的所有信息,共同学习(Decoder+Attention+Decoder) ,Packed Padded Sequences, Masking, Inference and BLEU
1 Seq2Seq(Encoder+LSTM(多层)+Decoder)
2 Seq2Seq(Encoder+GRU(单层)+Decoder)![](https://img-blog.csdnimg.cn/20200930171057952.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3NDU3MjAy,size_16,color_FFFFFF,t_70)
即第二个实验使我们减少了一些压缩,我们的上下文向量仍然需要包含有关源句子的所有信息。
3 共同学习(Decoder+Attention+Decoder)
此实验实现的模型通过允许解码器在每个解码步骤中查看整个源句子(通过其隐藏状态)来避免这种压缩!它是如何做到的?它使用Attention。
注意首先通过计算注意向量𝑎(即源句子的长度)来进行。注意向量具有以下属性:每个元素在0和1之间,并且整个向量之和为1。然后,我们计算源句子隐藏状态𝐻的加权和,以获得加权的源向量𝑤。
3.1 Seq2Seq模型建立
首先,我们将构建编码器。与以前的模型类似,我们仅使用单层GRU,但是现在使用双向RNN。对于双向RNN,我们在每个层中都有两个RNN。前向RNN从左到右遍历嵌入的句子(下面以绿色显示),而后向RNN从右到左遍历嵌入的句子(深青色)。我们需要在代码中做的所有事情都是将bidirectional = True设置为“ true”,然后像以前一样将嵌入的句子传递给RNN
hidden的大小为[n层* num个方向,批处理大小,隐藏的昏暗],其中[-2,:,:]在最后的时间步长后(即在看到最后一个单词之后)给出顶层正向RNN隐藏状态在句子中)和[-1,:,:]在最后的时间步之后(即在看到句子中的第一个单词之后)给出顶层后向RNN隐藏状态。
由于解码器不是双向的,因此只需要一个上下文向量𝑧即可将其用作初始隐藏状态𝑠0,而我们目前有两个,向前和向后一个(𝑧→=ℎ→𝑇和𝑧←= ℎ←𝑇)。我们通过将两个上下文向量串联在一起,将它们穿过线性层and并应用tanh激活函数来解决此问题。
当我们希望模型回顾整个源语句时,我们返回输出,源语句中每个标记的堆叠的向前和向后隐藏状态。我们还返回了hidden,这是我们在解码器中的初始隐藏状态。
3.1.1 Encoder
3.1.2Attention:
接下来是Attention层。这将采用解码器的先前隐藏状态𝑠𝑡−1,以及来自编码器all的所有堆叠的向前和向后隐藏状态。该层将输出一个注意向量𝑎𝑡,即源句子的长度,每个元素在0到1之间,并且整个向量之和为1。
直观地讲,该层采用到目前为止已解码的𝑠𝑡−1以及所有已编码的𝑠𝑡−1来产生向量𝑎𝑡,该向量表示源句中我们应按顺序注意最多的单词正确预测下一个要解码的字𝑡+ 1。
首先,计算先前解码器隐藏状态和编码器状态之间的能量
可以将其视为计算每个编码器隐藏状态与先前解码器隐藏状态“匹配”的程度。
将v视为所有编码器隐藏状态下能量的加权总和的权重。
最后,我们确保注意力向量符合使所有元素在0到1之间且向量通过softmax层求和为1的约束。
如下所示。这是用于计算第一关注向量,其中St-1 =𝑠0=𝑧。绿色/茶色块代表前向和后向RNN的隐藏状态,注意力计算全部在粉红色块内完成。
代码实现
偏置实际上是对神经元激活状态的控制,本实验不进行偏置
关于偏置,请点击这里
3.1.3 Decode
解码器中包含Attention层, 含关注层注意,该关注层采取先前的隐藏状态𝑠𝑡−1,所有编码器隐藏状态𝐻并返回关注向量
然后,我们使用此注意力向量创建一个加权源向量,用weighted表示,它是使用hidden作为权重的编码器隐藏状态𝐻的加权和。
然后将嵌入的输入字𝑑(𝑦𝑡),加权源向量𝑤𝑡和先前的解码器隐藏状态𝑠𝑡-1传递到解码器RNN中,并将𝑦𝑡(and)和𝑤𝑡连接在一起
然后,我们将𝑑(𝑦𝑡),𝑤𝑡和𝑠𝑡穿过线性层𝑓,以预测目标句子𝑦̂ +1中的下一个单词。这是通过将它们全部串联在一起来完成的。
3.2 Seq2Seq
这是第一个不需要编码器RNN和解码器RNN具有相同隐藏尺寸的模型,但是编码器必须是双向的。
初始化权重
结果分析
计算参数数量,与上一个模型相比,参数数量增加了近50%
4.Packed Padded Sequences, Masking, Inference and BLEU
我们将为之前几个实验的模型添加一些改进-填充填充序列和遮罩。
Packed填充序列用于告诉我们的RNN跳过编码器中的填充令牌。
屏蔽明确地迫使模型忽略某些值,例如对填充元素的关注。这两种技术通常都在NLP中使用。
我们还将研究如何使用我们的模型进行推理,方法是给它一个句子,看看它将其翻译为什么,以及在翻译每个单词时确切注意的地方。
最后,我们将使用BLEU度量标准来衡量翻译质量
实验代码出处:
相关文章
- ROS actionlib学习(二)
- JavaWeb学习之Servlet(二)----Servlet的生命周期、继承结构、修改Servlet模板
- cmake学习笔记
- Opencv学习笔记 - 使用opencvsharp和knn进行手写识别训练和预测
- 机器学习笔记 - 使用TensorFlow2.0 + ResNet进行疟疾预测
- 机器学习笔记 - 使用自己收集的图片以及卷积神经网络,进行图像分类训练
- 机器学习笔记 - 使用Keras、TensorFlow框架进行自定义数据集目标检测训练
- 机器学习笔记 - 使用 GAN 进行数据增强以进行缺陷检测
- 机器学习笔记 - 使用Face recognition、OpenCV、Python进行人脸识别
- 机器学习笔记 - TorchIO用于在深度学习中对 3D 医学图像进行高效预处理、增强的库
- 数据库设计学习②:数据库设计的步骤
- AutoJs学习-MC我的世界自动钓鱼
- AutoJs学习-传感器图像
- 用python进行办公自动化都需要学习什么知识呢?
- ML之回归预测:利用九大类机器学习算法对无人驾驶汽车系统参数(2018年的data,18+2)进行回归预测值VS真实值
- DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏)
- 机器学习案例(六):Python 大数据进行信用卡欺诈检测(完整源码和分析)
- 数学建模学习(94):Jaya 算法对定位问题进行寻优
- 机器学习实践:基于支持向量机算法对鸢尾花进行分类
- Python学习78:XML
- Python学习58:StringIO和BytesIO
- 《TPM原理及应用指南》学习 —— TPM实体3
- 最早的attention论文学习-通过联合学习进行对齐和翻译的神经机器翻译
- 语义分析的waf 目前就看到长亭 机器学习的waf有fortnet 阿里云的waf也算
- 为什么一些机器学习模型需要对数据进行归一化?——1)归一化后加快了梯度下降求最优解的速度;2)归一化有可能提高精度
- 【机器学习】如何进行中文命名实体识别?(面试回答)
- VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的简介、案例应用之详细攻略
- Windows安装WSL进行机器学习(windows和Ubuntu同时使用)
- labelme的安装以及如何用labelme标注的json文件转换成coco和pascal voc数据集的格式进行深度学习的训练