首页 > 其他分享 >序列到序列的学习 (seq2seq - 词嵌入 - Embedding层 - mask掩码 - 后续会加入注意力机制) + 代码实现 —— 笔记3.10《动手学深度学习》

序列到序列的学习 (seq2seq - 词嵌入 - Embedding层 - mask掩码 - 后续会加入注意力机制) + 代码实现 —— 笔记3.10《动手学深度学习》

时间:2024-11-29 10:58:52浏览次数:7  
标签:解码器 torch mask batch 掩码 num 序列 size

目录

0. 前言

1. 编码器 (encoder)

补充1:词嵌入 (Word Embedding)

补充2:嵌入层 (Embedding Layer)

2. 解码器 (decoder)

3. 损失函数

4. 训练

5. 预测

6. 预测序列的评估 (BLEU)

7. 小结


0. 前言

正如我们在 :numref:sec_machine_translation中看到的, 机器翻译中的输入序列和输出序列都是长度可变的。 为了解决这类问题,我们在 :numref:sec_encoder-decoder中 设计了一个通用的”编码器-解码器“架构。 本节,我们将使用两个循环神经网络的编码器和解码器, 并将其应用于序列到序列(sequence to sequence,seq2seq)类的学习任务 :cite:Sutskever.Vinyals.Le.2014,Cho.Van-Merrienboer.Gulcehre.ea.2014

遵循编码器-解码器架构的设计原则, 循环神经网络编码器使用长度可变的序列作为输入, 将其转换为固定形状的隐状态。 换言之,输入序列的信息被编码到循环神经网络编码器的隐状态中。 为了连续生成输出序列的词元, 独立的循环神经网络解码器是基于输入序列的编码信息 和输出序列已经看见的或者生成的词元来预测下一个词元。 :numref:fig_seq2seq演示了 如何在机器翻译中使用两个循环神经网络进行序列到序列学习。

:label:fig_seq2seq

在 :numref:fig_seq2seq中, 特定的“<eos>”表示序列结束词元。 一旦输出序列生成此词元,模型就会停止预测。 在循环神经网络解码器的初始化时间步,有两个特定的设计决定: 首先,特定的“<bos>”表示序列开始词元,它是解码器的输入序列的第一个词元。 其次,使用循环神经网络编码器最终的隐状态来初始化解码器的隐状态。 例如,在 :cite:Sutskever.Vinyals.Le.2014的设计中, 正是基于这种设计将输入序列的编码信息送入到解码器中来生成输出序列的。 在其他一些设计中 :cite:Cho.Van-Merrienboer.Gulcehre.ea.2014, 如 :numref:fig_seq2seq所示, 编码器最终的隐状态在每一个时间步都作为解码器的输入序列的一部分。 类似于 :numref:sec_language_model中语言模型的训练, 可以允许标签成为原始的输出序列, 从源序列词元“<bos>”“Ils”“regardent”“.” 到新序列词元 “Ils”“regardent”“.”“<eos>”来移动预测的位置。

  • 从计算损失的角度理解,输入英语(编码器输入)+法语(解码器输入),得出的法语预测;
    • 当整个法语句子的预测完成后,会将预测的法语句子和真实的法语输入句子进行比较来做损失(如交叉熵)。
  • 在序列到序列学习中,解码器的输入(本篇用到的)可以是真值(教师强制模式-收敛快),也可以是上个时间步输出的预测值(学得慢-性能好)

下面,我们动手构建 :numref:fig_seq2seq的设计, 并将基于 :numref:sec_machine_translation中 介绍的“英-法”数据集来训练这个机器翻译模型。

In [1]:

import collections
import math
import torch
from torch import nn
from d2l import torch as d2l

1. 编码器 (encoder)

从技术上讲,编码器将长度可变的输入序列转换成 形状固定的上下文变量

标签:解码器,torch,mask,batch,掩码,num,序列,size
From: https://blog.csdn.net/weixin_57972634/article/details/144082045

相关文章

  • Java反序列化 - CC6链 (代码审计)
    一、漏洞简述:相比较于CC6链,CC1链对jdk版本有较多的限制。在jdk_8u71版本之后,AnnotationInvocationHandler类中的readObject方法代码被修改,移除了原有的setValue()方法,导致利用链断开。jdk_8u65:jdk_8u71:二、CC6链分析:1、利用逻辑:Hashmap.readObject()->Hashmap.hash()......
  • 获取最大轮廓对应的掩码图
    获取最大轮廓对应的掩码图示例代码defget_max_contour_mask(mask):#Findconnectedcomponents#mask=cv2.inRange(mask,100,255)num_labels,labels,stats,centroids=cv2.connectedComponentsWithStats(mask,connectivity=8)......
  • Day49 | 动态规划 :线性DP 判断子序列&&两个字符串的删除操作
    Day49|动态规划:线性DP判断子序列&&两个字符串的删除操作动态规划应该如何学习?-CSDN博客动态规划学习:1.思考回溯法(深度优先遍历)怎么写注意要画树形结构图2.转成记忆化搜索看哪些地方是重复计算的,怎么用记忆化搜索给顶替掉这些重复计算3.把记忆化搜索翻译成动态规......
  • C#反序列化XML时提示XML 文档(1, 1)中有错误
    最近在反序列化一个XML时,遇到了如下报错: XML文档(1,1)中有错误。内部异常XmlException:根级别上的数据无效。第1行,位置1。 看描述应该是XML格式的问题,我把XML复制到新建的控制台程序,反序列化又是可以的。代码如下:1internalclassProgram2{3stati......
  • 非子串的子序列
     #include<bits/stdc++.h>usingnamespacestd;intmain(){intn,q;cin>>n>>q;strings;cin>>s;boolflag[n]={true},flag2[n]={true};inta,b,p,num=0,c=0;while(q--){......
  • 代码随想录 -- 动态规划 -- 最长回文子序列
    516.最长回文子序列-力扣(LeetCode)思路:dp数组的含义:dp[i][j]:字符串s从i到j的最长回文子序列的长度为dp[i][j]递推公式:当s[i]=s[j]时:dp[i][j]=dp[i+1][j-1]+2当s[i]!=s[j]时:dp[i][j]=max(dp[i][j-1],dp[i+1][j])初始化:当i=j时:dp[i][j]=1遍历顺序:从下到上,从左到右最......
  • 什么是随机变量序列
    什么是随机变量序列?随机变量序列就是一列按某种规则排列的随机变量.这种规则可以随意,但强调的是一个次序.例如: 若Xi表示第i次抛硬币的结果,那么{Xi}这个序列就是若干次抛硬币的结果序列.X1指第一次跑的结果,Xn指第n次抛的结果.若Yi表示前i次抛硬币正面向上的次......
  • leetcode 2099. 找到和最大的长度为 K 的子序列
    2099.找到和最大的长度为K的子序列特别注意,题目要求不改变原来的元素顺序我的代码classSolution{public:vector<int>maxSubsequence(vector<int>&nums,intk){vector<int>temp(nums);sort(temp.begin(),temp.end());intsize=t......
  • H5-6 列表标签 有序列表
    1、有序标签有序列表是一列项目,列表项目使用数学进行标记。有序列表始于<ol>标签。每个列表始于<li>标签。  <ol>    <li></li>    <li></li>  </ol> 2、type属性:<ol>的属性type拥有的选项1表示列表项目用数字标号(1,2,3...)......
  • MATLAB 实现 SSA-GRU和 GRU(门控循环单元)结合麻雀算法优化时间序列预测
    目录1.项目概述...11.1背景...11.2模型描述...12.项目设计...12.1数据生成...12.2TTA分解...22.3GTT模型构建...32.4麻雀算法优化GTT超参数...32.5模型训练与预测...42.6结果评估与优化前后比较...43.完整代码...54.项目总结...7未来......