sequence2sequence

news2024/11/17 1:38:41

1. 基本模型

所谓的Seq2seq模型从字面上理解很简单,就是由一个序列到另一个序列的过程(比如翻译、语音等方面的应用):

image-20211203220629182

那么既然是序列模型,就需要搭建一个RNN模型(神经单元可以是GRU模型或者是LSTM模型)

image-20211103220229796

下面两篇文章提出了这样的seq2seq的模型设计,引入了encode和decode机制。

[Sutskever et al.,2014.Sequence to sequence learning with neural networks]
[Cho et al., 2014.Learning phrase representations using RNN encoder-decoder for statistical machine translation]


同样类似的设计方法还有image2sequence

就是根据一张图片来生成文字,效果如下图所示:

image-20211103220331186

那么根据上图中的网络结构可以看出,就是先用一个ALexnet(去掉最后的softmax)的输出作为RNN的输入,进而输出文字。

下面是三篇文章介绍了这个工作。

[Mao et.al.,2014. Deep captioning with multimodal recurrent neural networks]

[[Vinyals et.al.,2014.Show and tell: Neural image caption generator]
[Karpathy and Fei Fei, 2015.Deep visual-semantic alignments for generating image descriptions]

2. 选择最可能的句子

先说一下这个标题的意思,为什么说是“选择最可能的句子”?

因为在翻译的过程中,比如谷歌翻译就是会翻译出3个左右的结果让用户来选择,至于哪一个是最优的结果,算法只能根据概率来推断。因此说是“选择最可能的句子”。


言归正传,机器翻译的模型和我们前面讲到的语言模型有很多相似的地方,同时也有很多重要的区别,下面就来看看有什么地方的异同点。

从下面的模型中可以看出:

  • 语言模型是根据一个零向量作为的输入,然后去预测的结果;
  • 机器翻译的模型是有一个编码器(会生成一系列的向量结果)和译码器组成的,其中译码器就是是语言模型的框架,因此也叫做条件语言模型

image-20211104140908281


我们以翻译法语到英语的例子为例,说一说什么是“选择最可能的句子”的含义,以及如何选择“最可能”的句子。

如下图所示,X是入门输入的法语,Y是我们需要翻译出来的结果,那么这个结果有很多种。

image-20211104141741924

那么如何选择最优的结果就是算法需要衡量的。

image-20211104141857476

那么根据解码器输出的结果(是一个softmax分类的结果),假设我们的字典中有10000个,那么最后的输出结果是10个单词左右,如何选择最优的翻译结果呢(不可能是全部的排列组合,这样的计算量是 1000 0 10 10000^{10} 1000010)?

有一种很容易就可以想到的方法就是,每次选择预测结论更大的,这样最后的概率乘积结果也是最大的(看上图的最后面提到的公式),这样做是否是可行的呢,看下面的例子:

image-20211104142210755

我们从概率的角度上来考虑的话,肯定是第二个翻译的结果的概率成绩是最大的,因为 P ( v i s i t i n g ∣ J a n e , i s ) < P ( g o i n g    t o    b e ∣ J a n e i s ) P(visiting| Jane, is)<P(going \;to \;be|Jane is) P(visitingJane,is)<P(goingtobeJaneis)(在英语中going to be出现的概率是很大的)。

但是从语义结果上来看就发现第一个句子更加简单,那么就出现了我们前面提到的问题——如何选择一个最可能的结果呢?其实有一种近似的搜索算法可以达到比较好的翻译结果,那就是——Beam search。

3. Beam search

不仅仅是考虑第二个单词最大的可能性,还需要考虑第一个单词和第二个单词对的最大可能性(本质上还是利用了贪心的思想)。

  • 第一步

Beam search算法的第一步就是需要定一个Beam width,这个变量是用于确定每一步选择前Beam width个最大的概率的结果。

在下面的步骤中,我们定义Beam width的宽度是3,这就意味着该算法需要考虑前三个可能性。

假设我们有10000个单词,那么第一步就是让decode部分来输出整个词库的可能性,然后选取概率最大的前三个作为结果(假设选择了in,jane,september),并存入内存中,进行下一步的分析。

image-20211104150337193

  • 第二步

第二步就是需要用到第一步中保存的三个信息,我们要考虑一个联合的概率问题,就是让解码器的第一个输出设定为我们第一步选择的单词,比如当判断单词in的时候,设定 y ~ < 1 > \tilde y^{<1>} y~<1>​=in,效果如下图所示。

image-20211104151521340

那么这次就获得了所有的第一个单词为in的前提下,10000个单词的所有概率结果。同理,剩下的单词也是做同样的处理。

image-20211104151742204

这样就获得了30000个概率,然后再选择概率最大的前三个作为下一步的输入。

  • 第三步

image-20211104151946661

剩下的就是每一步重复添加一个单词,然后输出最后的结果。

当然目前这个算法还是有一些改进的地方的,这里就不阐述了。

4.误差分析

我们在使用Beam search的时候,难免会做误差分析,因为我们想知道预测结果不如意的原因是怎么回事,到底是RNN的结构出了问题还是Beam search算法出了问题需要调参等等。

那么具体来说如何判断呢?

看下面的例子,假设模型输出的结果是 y ^ \hat{y} y^,人工翻译的结果是 y ∗ y^{*} y

image-20211104155243432

可以看出,模型输出的效果不尽如意,因此我们需要做一个误差分析。


具体的工作是这样的,我们将 y ^ \hat{y} y^ y ∗ y^{*} y两个输出序列分别在decode里面做概率的乘积计算,最后发现结果是有两种可能情况的,一种是 P ( y ^ ∣ x ) > P ( y ∗ ∣ x ) P(\hat{y}|x)>P(y^{*}|x) P(y^x)>P(yx);另一种结果就是 P ( y ^ ∣ x ) < P ( y ∗ ∣ x ) P(\hat{y}|x)<P(y^{*}|x) P(y^x)<P(yx)​。

那么这两种结果分别是什么意思呢?

image-20211104155806984

那么上图只是一个过程,整个分析过程应该如下图所示:

image-20211104160028898

通过分析整篇文章的句子来得出一个结论表格,通过这个表格来分析出是RNN(简称R)的出错比例大,还是Beam search(简称B)的出错比例大,从而有针对性的解决这个问题。

如何判断一个翻译结果的好坏,其实是有一个叫做BLEU得分的东西来评判的。这里就先不做出阐述。有时间再去看了。https://zhaojichao.blog.csdn.net/article/details/106649367

5. Attention model intuition(直观上)

什么是注意力机制呢?

注意力模型源于[Bahdanau et.al.,2014.Neural machine translation by jointly learning to align and translate]虽然这个模型源于机器翻译,但它也推广到了其他应用领域。吴老师认为在深度学习领域,这个是个非常有影响力的,非常具有开创性的论文。

看下面的这个例子,我们知道,前面一直在说的机器翻译的过程是一个将所有文本记住,然后输出的过程,但是对于人来说并非这样的,也不现实。人翻译的时候是根据自己注意的地方来一点点翻译的,因此注意力机制就是仿照着这样的思想来实现的。

image-20211104162123714


下面就举一个简单的例子来从直观上理解Attention机制的工作过程。

还是一个法语的句子,这里先使用一个双向RNN(Bidirectional RNN)来作为生成法语单词的特征集。

image-20211104164419534

我们要对单词做的就是,对于句子里的每五个单词,计算一个句子中单词的特征集,也有可能是周围的词,让我们试试,生成英文翻译。

我们将使用另一个RNN生成英文翻译,这是我平时用的RNN记号。不用 A 来表示感知机(the activation),这是为了避免和这里的感知机(the activations)混淆。会用另一个不同的记号,我会用 S来表示RNN的隐藏状态(the hidden state in this RNN),不用 A < 1 > A ^{< 1 >} A<1>,而是用 $ S^{<1>}$

我们希望在这个模型里第一个生成的单词将会是Jane,为了生成Jane visits Africa in September。于是等式就是,当你尝试生成第一个词,即输出,那么我们应该看输入的法语句子的哪个部分?似乎你应该先看第一个单词,或者它附近的词。但是你别看太远了,比如说看到句尾去了。

所以注意力模型就会计算注意力权重(a set of attention weights):

  • 我们将用 a < 1 , 1 > a^{<1,1>} a<1,1>​来表示当你生成第一个词时(或者说在第1步的时候)你应该放多少注意力在这个第一块信息处。
  • a < 1 , 2 > a^{<1,2>} a<1,2> 它告诉我们当你尝试去计算第一个词Jane时,我们应该花多少注意力在输入的第二个词上面.
  • 同理 a < 1 , 3 > a^{<1,3>} a<1,3>就是预测第一个单词的是,应该在第3个单词上投放多少注意力。
image-20211104165032122

RNN的第二步,我们将有一个新的隐藏状态 S < 2 > S^{<2>} S<2>​​​,我们也会用一个新的注意力权值集(a new set of the attention weights),我们将用 a < 2 , 1 > a^{<2,1>} a<2,1>​​ 来告诉我们在生成第二个词, 应该花多少注意力在输入的第一个法语词上。然后同理 a < 2 , 2 > a^{<2,2>} a<2,2>也是跟第一步中讨论的一样。接下去也同理。

不过和第一步不同的地方就是,我们需要将第一步的结果作为输入传给隐藏状态 S < 2 > S^{<2>} S<2>

image-20211104165429703

这一节主要是说了关于注意力模型的一些直观的东西。我们现在可能对算法的运行有了大概的感觉,下一节将会说一些细节的东西。

注意:上面图中这样的双层图,其实就是encode和decode的变形,只不过没有那样画出来罢了,如果按照下图中这样来画,那么就更好理解了。

img img

注意力模型可以看作一种通用的思想,本身并不依赖于特定框架,这点需要注意。

比如如果Source是中文句子,Target是英文句子,那么这就是解决机器翻译问题的Encoder-Decoder框架;如果Source是一篇文章,Target是概括性的几句描述语句,那么这是文本摘要的Encoder-Decoder框架;如果Source是一句问句,Target是一句回答,那么这是问答系统或者对话机器人的Encoder-Decoder框架。由此可见,在文本处理领域,Encoder-Decoder的应用领域相当广泛。

Encoder-Decoder框架不仅仅在文本领域广泛使用,在语音识别、图像处理等领域也经常使用。比如对于语音识别来说,图2所示的框架完全适用,区别无非是Encoder部分的输入是语音流,输出是对应的文本信息;而对于“图像描述”任务来说,Encoder部分的输入是一副图片,Decoder的输出是能够描述图片语义内容的一句描述语。一般而言,文本处理和语音识别的Encoder部分通常采用RNN模型,图像处理的Encoder一般采用CNN模型。

6. Attention model detail(细节上)

我们还是回归到下面的这个图上:

image-20211104165429703

对这个图再做一些细致化的符号说明:

  • t ′ t' t表示输入语句中第t个词;
  • a < t ′ > = ( a → < t ′ > , a ← < t ′ > ) a^{<t'>}=( \overrightarrow{a}^{<t'>} , \overleftarrow{a}^{<t'>}) a<t>=(a <t>,a <t>)表示第t个输入词的前向传播的激活值和后向传播的激活值的特征值;
  • α < t , t ′ > \alpha^{<t,t'>} α<t,t>表示第t‘个输入词在第t个时间步数(第t个输出词)的权重值,其中 ∑ t ′ α < t , t ′ > = 1 \sum_{t'}\alpha^{<t,t'>}=1 tα<t,t>=1;
  • C表示隐藏层的输入的上下文,其中 C < 1 > = ∑ t ′ α < t , t ′ > a < t ′ > C^{<1>}=\sum_{t'}\alpha ^{<t,t'>}a^{<t'>} C<1>=tα<t,t>a<t>;

那么详细的过程如下图(仅考虑第1步的输出过程):

image-20211104172752425

image-20211104182334789

第2步,第3步……的过程以此类推。


那么现在出现了一个细节需要考虑的就是,权重 α < t , t ′ > \alpha^{<t,t'>} α<t,t>是怎么选择的。

还是先回归定义:

image-20211104173000883

再放公式:
α < t , t ′ > = e x p ( e < t , t ′ > ) ∑ t ′ = 1 T x e x p ( e < t , t ′ > ) \alpha^{<t,t'>}=\frac{exp(e^{<t,t'>})}{\sum_{t'=1}^{T_x}exp(e^{<t,t'>})} α<t,t>=t=1Txexp(e<t,t>)exp(e<t,t>)
仔细观察,其实就是一个softmax层的输出(这也就解释了为什么 ∑ t ′ α < t , t ′ > = 1 \sum_{t'}\alpha^{<t,t'>}=1 tα<t,t>=1)。


那么e这个项是怎么计算的呢?

是通过一个小的神经网络(有的地方采用了函数操作)来实现组合:

image-20211104174936946

就是采用前一个状态的输出来于这次的输入做某种运算,从而得到了e。

这篇文章讲到了注意力机制在翻译中的应用:[Bahdanau et. al.,2014.Neural machine translation by jointly learning to align and translate]

这篇文章讲到了注意力机制在图像中的应用:[Xu et. al., 2015.Show, attend and tell:Neural image caption generation with visual attention]-


至此注意力机制的概念,简单地介绍完了,但是还是有一些不太理解的地方,比如如何求出e的,权重是怎么求的,如何从抽象的角度上理解,为此我准备写一篇关于【注意力机制】的文章。

u et. al.,2014.Neural machine translation by jointly learning to align and translate]

这篇文章讲到了注意力机制在图像中的应用:[Xu et. al., 2015.Show, attend and tell:Neural image caption generation with visual attention]-


至此注意力机制的概念,简单地介绍完了,但是还是有一些不太理解的地方,比如如何求出e的,权重是怎么求的,如何从抽象的角度上理解,为此我准备写一篇关于【注意力机制】的文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/634614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NVM安装教程

我是小荣&#xff0c;给个赞鼓励下吧&#xff01; NVM安装教程 简介 nvm 是node.js的版本管理器&#xff0c;设计为按用户安装&#xff0c;并按 shell 调用。nvm适用于任何符合 POSIX 的 shell&#xff08;sh、dash、ksh、zsh、bash&#xff09;&#xff0c;特别是在这些平台…

ChatGPT 五个写论文的神技巧,让你的老师对你刮目相看!

导读&#xff1a;ChatGPT这款AI工具在推出两个月内就累积了超过1亿用户。我们向您展示如何使用ChatGPT进行写作辅助&#xff0c;以及其他一些有用的写作技巧。 本文字数&#xff1a;2000&#xff0c;阅读时长大约&#xff1a;12分钟 ChatGPT这款AI工具在推出两个月内就累积了超…

【Java|golang】2460. 对数组执行操作

给你一个下标从 0 开始的数组 nums &#xff0c;数组大小为 n &#xff0c;且由 非负 整数组成。 你需要对数组执行 n - 1 步操作&#xff0c;其中第 i 步操作&#xff08;从 0 开始计数&#xff09;要求对 nums 中第 i 个元素执行下述指令&#xff1a; 如果 nums[i] nums[i…

物联网Lora模块从入门到精通(三)按键的读取与使用

一、前言 在Lora例程中&#xff0c;为我们提供了三个按键标志位&#xff0c;我们不需要手动再次初始化按键&#xff0c;即可完成按键的读取。 二、代码实现 首先&#xff0c;我们一起来阅读hal_key.c中的代码&#xff1a; /* Includes -------------------------------------…

点云地面滤波--patchwork++

文章目录 1前言2 反射噪声去除RNR3区域垂直平面拟合 (R-VPF)4自适应地面似然估计(A-GLE)5时序地面恢复TGR总结 1前言 patchwork是在patchwork的基础上进行改进的&#xff0c;主要有2个贡献&#xff1a; 提出了自适应地面似然估计(adaptive ground likelihood estimation (A-G…

Java实训日记第一天——2023.6.6

这里写目录标题 一、关于数据库的增删改查总结&#xff1a;五步法1.增2.删3.改4.查 二、设计数据库的步骤第一步&#xff1a;收集信息第二步&#xff1a;标识对象第三步&#xff1a;标识每个实体的属性第四步&#xff1a;标识对象之间的关系 一、关于数据库的增删改查 总结&am…

Java框架学习--Spring

1.Spring概念【托管很多对象的框架】 一个包含了众多工具方法的IoC容器。 1.1 什么是容器? 容器是用来容纳各种物品的&#xff08;基本&#xff09;装置。--来自百度百科 之前常见的容器有&#xff1a; List/Map-》数据存储容器 Tomcat-》Web容器 1.2什么是IoC? IoCInve…

【Docker】Docker对用户的应用程序使用容器技术遵循的五个步骤和GRSEC详细讲解(文末赠书)

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

序列的有关知识

&#x1f4e2;博客主页&#xff1a;盾山狂热粉的博客_CSDN博客-C、C语言,机器视觉领域博主&#x1f4e2;努力努力再努力嗷~~~✨ &#x1f4a1;大纲 ⭕列表、元组、字符串都是序列&#xff0c;列表是可变序列&#xff0c;元组和字符串是不可变序列 一、跟序列相关的操作符 &am…

Hazel游戏引擎(008-009)事件系统

文中若有代码、术语等错误&#xff0c;欢迎指正 文章目录 008、事件系统-设计009、事件系统-自定义事件前言自定义事件类与使用声明与定义类代码包含头文件使用事件 事件调度器代码 C知识&#xff1a;FunctionBind用法function基本使用 012、事件系统-DemoLayer用EventDispache…

7-3 sdut-oop-6 计算各种图形的周长(多态)

定义接口或类 Shape&#xff0c;定义求周长的方法length()。 定义如下类&#xff0c;实现接口Shape或父类Shape的方法。 &#xff08;1&#xff09;三角形类Triangle &#xff08;2&#xff09;长方形类Rectangle &#xff08;3&#xff09;圆形类Circle等。 定义测试类Shap…

QT基础教程之一创建Qt项目

QT基础教程1创建Qt项目 根据模板创建 打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项 弹出New Project对话框&#xff0c;选择Qt Widgets Application 选择【Choose】按钮&#xff0c;弹出如下对话框 设置项目名称和路径&#xff0c;…

Cesium雷达追踪追踪(雷达探照效果)

Cesium雷达追踪追踪(圆锥体效果) 文章最后附有源码!!!!!!!!!!!!!!!!! 解析 第一步 、从gif图中可以看出,首先添加了两个运动的实体(在cesium entity与时间轴关联(添加运动轨迹))中有讲解 第二步、添加一个圆锥,修改圆锥朝向,来表示跟综照射效果,…

Windows安装MySQL及Python操作MySQL数据库脚本实例详解

1、Windows 上安装 MySQL 便于测试&#xff0c;笔者在 windows 上安装 MySQL&#xff0c;如有现成Linux下的MySQL和Python环境&#xff0c;也可直接使用。MySQL的官网下载链接安装步骤1)下载后的mysql-5.7.23-winx64.zip安装包解压至某一位置&#xff0c;在mysql-5.7.23-winx6…

Linux学习之用户管理useradd、userdel、passwd、usermod和chage

useradd 超级管理员root才能使用useradd 用户名添加用户&#xff0c;这条命令会新增一个用户&#xff0c;然后为新增用户在/home下新添一个用户名称相同的目录&#xff0c;在/var/spool/mail目录下添加一个用户名称相同的文件&#xff0c;而且还会在/etc/passwd、/etc/shadow和…

【Unity入门】25.入门结课Demo--神鸟大战怪兽

【Unity入门】入门结课Demo--神鸟大战怪兽 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 (一) 前言 经过了两个月的学习&#xff0c;我们也顺利的完成了入门课程&#xff0c;最后就用一个Demo作为我们的结课句号吧&am…

【夜深人静学数据结构与算法 | 第一篇】KMP算法

目录 前言&#xff1a; KMP算法简介&#xff1a; 引入概念&#xff1a; 前缀后缀 前缀表&#xff1a; 简单例子&#xff1a; 暴力遍历&#xff1a; KMP算法&#xff1a;​ KMP算法难点&#xff1a; 总结&#xff1a; 前言&#xff1a; 本篇我们将详细的从理论层面介绍一…

理解和创建Windows和Linux下的动态和静态库区别

一、引言 在计算机编程的世界中&#xff0c;库是一个非常重要的改变。它的出现提供了一种共享和重用代码的可能性&#xff0c;复杂的程序因为动态库的出现而变得简洁和方便。然而&#xff0c;库并不是单一的&#xff1a;它们可以是动态的&#xff0c;也可以是静态的&#xff0…

达梦数据库的下载与安装(Linux)

一、创建用户组 1、创建一个用户组和用户 添加分组 groupadd dinstall添加用户 useradd -g dinstall dmdba设置用户名和密码 echo "dameng123" | passwd --stdin dmdba查看操作系统中id为 dmdba 的用户的用户ID&#xff08;uid&#xff09;、组ID&#xff08;gi…

web漏洞-逻辑越权之水平垂直越权全解(33)

他是业务逻辑层面&#xff0c;和一些业务方便应用的安全问题&#xff0c;这个是因为代码层面没用考虑到的逻辑关系所造成的安全问题&#xff0c;越权是其中一个比较关键的问题。登录是指在登录这里出现了安全问题&#xff0c;业务等等今天只说越权。 越权漏洞 分为水平和垂直…