Seq2Seq模型讲解
概述
Seq2Seq是一个Encoder-Deocder结构的模型,输入是一个序列,输出也是一个序列。
Encoder将一个可变长度的输入序列变为固定长度的向量,Decoder将这个固定长度的向量解码成可变长度的输出序列。
使用 x={x1,x2,...,xn} x = { x 1 , x 2 , . . . , x n } x=\{x_1,x_2,...,x_n\}表示输入语句, y={y1,y2,...,yn} y = { y 1 , y 2 , . . . , y n } y=\{y_1,y_2,...,y_n\}代表输出语句, yt y t y_t代表当前输出词。
所有的Seq2Seq模型都是以下目标函数,都是为了优化这个函数:
p(y|x)=\prod_{t=1}^{n_y}p(y_t|y_1,y_2,...,y_{t-1},x)
即输出的 yt y t y_t不仅依赖之前的输出 {y1,y2,...,yn} { y 1 , y 2 , . . . , y n } \{y_1,y_2,...,y_n\},还依赖输入语句 {x1,x2,...,xn} { x 1 , x 2 , . . . , x n } \{x_1,x_2,...,x_n\},模型无论怎么变化都是在该公式的约束下。
【注】
该条件概率模型存在问题:数值下溢问题。
原因:该式中每一项 p(yt|y1,y2,...,yt−1,x) p ( y t | y 1 , y 2 , . . . , y t − 1 , x ) p(y_t|y_1,y_2,...,y_{t-1},x)都小于1甚至于远远小于1,很多1乘起来,会得到很小很小的数字,造成数值下溢(numerical underflow)。
因此,在实际中一般是将其取log值,求其概率的对数和而不是概率的乘积,因此实际中一般用如下目标函数,目标是最大化该目标函数:
P(y|x)=\sum_{t=1}^{n_y}\log P(y_t|y_1,y_2,...,y_{t-1},x)
改进
Seq2Seq的核心部分是其解码部分,大部分改进基于此:
- greedy search:基础解码方法
- beam search:对greedy search的改进
- attention:它的引入使得解码时,每一步可以有针对地关注与当前有关的编码结果,从而减小了编码器输出表示的学习难度,也更容易学到长期的依赖关系。
- memory network:从外部获取知识。
- 其他方法:
- 堆叠多层RNN的Decoder
- 增加dropout机制
- 与Encoder建立残差连接
最早模型
Cho在2014年Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation提出该模型。
该模型包括Encoder和Decoder两个部分,图中每个圆圈是一个RNN Cell,可以是RNN,也可以是LSTM、GRU等。
【流程】
Encoder
- 每个时刻输入一个词,隐藏层状态根据公式 ht=f(ht−1,xt) h t = f ( h t − 1 , x t ) h_t=f(h_{t-1},x_t)改变。其中激活函数 f f f可以是sigmod,tanh,ReLU,sotfplus,LSTM等。
- 读完序列的每一个词之后,会得到一个固定长度向量c=tanh(VhN)" role="presentation" style="position: relative;">c=tanh(VhN)c=tanh(VhN)c=tanh(Vh^N)
Decoder
由结构图可以看出,t时刻的隐藏层状态 ht h t h_t由 ht−1,yt−1,c h t − 1 , y t − 1 , c h_{t-1},y_{t-1},c决定: ht=f(ht−1,yt−1,c) h t = f ( h t − 1 , y t − 1 , c ) h_t=f(h_{t-1},y_{t-1},c),其中 h0=tanh(V′c) h 0 = t a n h ( V ′ c ) h_0=tanh(V'c)
最后的输出 yt y t y_t是由 ht,yt−1,c h t , y t − 1 , c h_t,y_{t-1},c决定
P=(yt|yt−1,yt−2,...,y1,c)=g(ht,yt−1,c) P = ( y t | y t − 1 , y t − 2 , . . . , y 1 , c ) = g ( h t , y t − 1 , c )P=(y_t|y{t-1},y{t-2},...,y1,c)=g(h_t,y{t-1},c)
以上, f,g f , g f,g都是激活函数,其中 g g g一般是softmax
目标
- 最大化对数似然条件概率
maxθ1N∑n=1Nlogpθ(yn|xn)" role="presentation">maxθ1N∑n=1Nlogpθ(yn|xn)maxθ1N∑n=1Nlogpθ(yn|xn)
\max _\theta \frac{1}{N} \sum_{n=1}^N log p_\theta(y_n|x_n)
- 最大化对数似然条件概率
改进模型
该模型由Sequence to Sequence Learning with Neural Networks提出。
该模型包括Encoder和Decoder两个部分,图中每个圆圈是一个RNN Cell,可以是RNN,也可以是LSTM、GRU等。本篇论文中Encoder、Decoder用的都是LSTM
【流程】
Encoder
同上个模型。如下图所示:
Decoder
初始状态:Encoder得到的向量表示即Encoder最后一个时间步长的隐藏层状态会作为Decoder的初始状态输入。通过激活函数与softmax层得到候选symbols,筛选出概率最大的symbol,作为下一时刻的输入。
t时刻的输出 yt y t y_t:由 ht,yt−1 h t , y t − 1 h_t,y_{t-1}决定,而没有 c c c :p(yt)=f(ht,yt−1)" role="presentation" style="position: relative;">p(yt)=f(ht,yt−1)p(yt)=f(ht,yt−1)p(y_t)=f(h_t,y_{t-1})。即在Decoder中,每个时刻 t t t的输出yt" role="presentation" style="position: relative;">ytyty_t会作为下一时刻 t+1 t + 1 t+1的输入,直到Decoder在某个时刻预测出结束符号才停止。
目标函数:
p(y1,...,yT′|x1,...,xT)=∏t=1T′p(yt|v,y1,...,yt−1) p ( y 1 , . . . , y T ′ | x 1 , . . . , x T ) = ∏ t = 1 T ′ p ( y t | v , y 1 , . . . , y t − 1 )p(y_1,...,y_{T'}|x_1,...,x_T)=\prod_{t=1}^{T'}p(y_t|v,y_1,...,y_{t-1})
最终多层模型采用下图说明:
【区别】
与上个模型的区别是Decoder部分
- 上个模型Decoder输入是上一时刻的输出和C向量,而是前一时刻的目标值。
Seq2Seq with Attention
Attention机制由NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE提出。
【流程】
Encoder
- 使用双向RNN
- hj→ h j → \vec{h_j}表示前向RNN的隐藏层状态, hj^ h j ^ \hat{h_j}表示反向隐藏层状态
- hj h j h_j最终因状态将两者拼接起来,即 hj=[hj→,hj^] h j = [ h j → , h j ^ ] h_j=[\vec{h_j},\hat{h_j}]
Decoder
每一时刻 i i i的输出由三个要素决定:时刻i" role="presentation" style="position: relative;">iii的隐状态 si s i s_i,attention计算得到的context向量 ci c i c_i,上一时刻 i−1 i − 1 i-1的输出 yi−1 y i − 1 y_{i-1}
p(yi|y1,...,yi−1,X)=yi=g(yi−1,si,ci) p ( y i | y 1 , . . . , y i − 1 , X ) = y i = g ( y i − 1 , s i , c i )p(y_i|y_1,...,y_{i-1},X)=y_i=g(y_{i-1},s_i,c_i)
其中 si s i s_i由三个要素决定:时刻 i i i的隐状态,attention计算得到的context向量ci" role="presentation" style="position: relative;">cicic_i,上一时刻 i−1 i − 1 i-1输出 yi−1 y i − 1 y_{i-1}si=f(si−1,yi−1,ci) s i = f ( s i − 1 , y i − 1 , c i )s_i=f(s_{i-1},y_{i-1},c_i)
其中 ci c i c_i由以下公式得到
ci=∑j=1Txαijhjαij=exp(eij)∑Txk=1exp(eik)eij=a(si−1,hj) c i = ∑ j = 1 T x α i j h j α i j = e x p ( e i j ) ∑ k = 1 T x e x p ( e i k ) e i j = a ( s i − 1 , h j )c_i=\sum_{j=1}^{T_x}\alpha_{ij}h_j\\\alpha_{ij}=\frac{exp(e_{ij})}{\sum_{k=1}^{T_x}exp(e_{ik})}\\e_{ij}=a(s_{i-1},h_j)
其中ci c i c_i是输入序列全部隐状态的 h1,h2,...,hT h 1 , h 2 , . . . , h T h_1,h_2,...,h_T的加权和
αij α i j \alpha_{ij}代表权重参数,它并不是一个固定权重,而是由另一个神经网络训练得到
【总结】
- context向量 ci c i c_i通过计算输入中的每个单词的权重,加权求和得到。
- 其中权重 αij α i j \alpha_{ij}即Decoder的上一时刻 i−1 i − 1 i-1隐状态 si−1 s i − 1 s_{i-1}和Encoder的最终隐状态 hj h j h_j通过非线性函数得到。
Seq2Seq模型讲解相关推荐
- seq2seq模型_直观理解并使用Tensorflow实现Seq2Seq模型的注意机制
采用带注意机制的序列序列结构进行英印地语神经机器翻译 Seq2seq模型构成了机器翻译.图像和视频字幕.文本摘要.聊天机器人以及任何你可能想到的包括从一个数据序列到另一个数据序列转换的任务的基础.如果 ...
- seq2seq模型案例分析
1 seq2seq模型简介 seq2seq 模型是一种基于[ Encoder-Decoder](编码器-解码器)框架的神经网络模型,广泛应用于自然语言翻译.人机对话等领域.目前,[seq2seq+at ...
- seq2seq模型_带你读论文 | 端到端语音识别模型
编者按:过去十年,得益于人工智能与机器学习的突破.算法与硬/软件能力的进步,以及拥有既多样又大量的语音数据库,用以训练多参数的.大规模的语音识别与合成模型,使得语音处理技术获得飞跃性进展. 随着端到端 ...
- Seq2Seq模型PyTorch版本
Seq2Seq模型介绍以及Pytorch版本代码详解 一.Seq2Seq模型的概述 Seq2Seq是一种循环神经网络的变种,是一种端到端的模型,包括 Encoder编码器和 Decoder解码器部分, ...
- Seq2Seq模型实现(Decoder部分)
0.引言: 承接上一篇,现在继续对于seq2seq模型进行讲解,decoder部分是和encoder部分对应的,层数.隐藏层.单元数都要对应. 1.LSTM Seq2Seq Decoder Decod ...
- Seq2Seq,Seq2Seq模型使用技巧
Seq2Seq是一种循环神经网络的变种,包括编码器(Encoder)和解码器(Decoder)两部分组成.Seq2Seq是自然语言处理中的一种重要模型,可以用于机器翻译.对话系统.自动摘要. 首先介绍 ...
- 开源 | IBM、哈佛共同研发:Seq2Seq模型可视化工具
作者 | Ben Dickson 译者 | 刘旭坤 编辑 | Jane 出品 | AI科技大本营 近年来随着深度学习和神经网络技术的发展,机器翻译也取得了长足的进步.神经网络结构越来越复杂,但我们始终 ...
- 【论文写作分析】之一 《基于混合注意力Seq2seq模型的选项多标签分类》
[1] 参考论文信息 论文名称:<基于混合注意力Seq2seq模型的选项多标签分类> 发布期刊:<计算机工程与应用> 期刊信息:CSCD扩展 论文写作分析摘要: ...
- 机器翻译Seq2Seq模型的启发-人工神经网络系统-诞生
该模型采用了将信息通过某种编码 ,而后通过一个循环神经网络模型解码来实现语言的翻译, 那么我们如果把有的信息都看作是人类的信息,而机器训练需要的数据不是直接的信息,是神经网络的信息,也就是说某个模型的 ...
最新文章
- 华为软件编程规范和范例 可读性
- 什么是僵尸进程与孤儿进程
- [渝粤教育] 武汉交通职业学院 现代物流管理概论 参考 资料
- tf.reshape()
- Brief C Programs of the Bombs
- 融合存储超越统一存储
- Asp.Net MVC 3【Filters(过滤器)】
- mysql查询hash分区数据_mysql分区管理 - hash分区
- 小程序素材抓取软件_小程序上新丨2020冬季产品图库更新,海量素材随你用!...
- BootDo平台数据库使用Oracle
- 华硕主板破linux密码破解,华硕P8B75-M-LE老主板加持NVMe SSD bios(刷新软件和bios)...
- Python脚本教程、问题与解决方案的文章汇总索引目录
- python中encode函数_python中文处理之encode/decode函数
- Keys配置及使用说明
- AMD锐龙7 7745HX和i9-12900HX选哪个 r77745HX和i912900HX对比
- YOLO数据格式说明与转换
- 编译原理:语法树,短语,直接短语,句柄
- python读excel 包含格式_python读取excel格式的文件
- 【新浪面试题】如何技高一筹解决查找单链表中的倒数第k个结点
- C#随手笔记——自动检测外部设备(U盘)的插拔
热门文章
- mac pdf去水印_PDF水印工具Mac版
- 去掉input text边框
- SystemUi概述
- 中兴Blade V2021 5G 刷机root教程 ZTE 8012N root 线刷包下载TWRP 刷入
- strtok和strtok_s函数使用说明
- SNIPER—— SNIP的实战版本 (目标检测)(two-stage)(深度学习)(Arvix 2018)
- css背景透明(css背景透明度怎么设置)
- Android获取所有App信息
- 高新技术企业认定领域细分有几项
- Java SWT的Composite控件刷新