深度学习-一篇入门

【模型】一篇入门之-RNN-Encoder-Decoder基础模型

作者 : 老饼 发表日期 : 2024-04-28 14:46:28 更新日期 : 2024-10-31 07:42:51
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com



Encoder-Decoder模型结构是RNN循环神经网络解决seq2seq问题时的一种常用方案

本文介绍Encoder-Decoder模型结构,以及一种基础、经典的RNN-Encoder-Decoder模型结构

通过本文,可以快速了解RNN-Encoder-Decoder模型是什么,以及它是如何解决seq2seq问题的




   01. RNN的Encoder-Decoder模型是什么    





本节介绍Encoder-Decoder模型以及RNN-Encoder-Decoder模型是什么





       RNN的Encoder-Decoder模型是什么    


RNN的Encoder-Decoder模型是一种用来解决输入与输出都是不定长序列的RNN模型结构
 翻译问题的输入与输出就是任意长度的,例如输入"真好吃",输出"It's really delicious"
这种"输入是不定长的序列,输出也是不定长的序列"的问题,也被称为seq2seq(序列到序列)问题

  什么是Encoder-Decoder模型
Encoder-Decoder模型并非RNN专属结构,而是一种用来解决seq2seq问题的通用结构
 Encoder-Decoder结构如下所示:
      
 如图所示,Encoder-Decoder把模型拆成了两部分构成:编码器与解码器
 第一部分先用一个模型(称为编码器)把输入x压缩成一个信息(称为编码信息c)  
 第二部分用另外一个模型(称为解码器)从编码信息c中得到预测目标y              
 总的来说,就是引入C来作为X与y之间的桥梁,先用Encoder将x压缩为C,再用Decoder将c解码为y
      RNN-Encoder-Decoder模型   
RNN-Encoder-Decoder模型就是将Encoder-Decoder应用到了RNN上,用于解决seq2seq问题
 RNN-Decoder-Encoder模型的主要思路如下:
   
 上图只是一种思路的描述,不能直接作为具体的模型,RNN-Decoder-Encoder的具体模型是多种多样的









  02. 基础RNN-Encoder-Decoder模型  





本节介绍一种经典的、较早提出的、基本的RNN-Encoder-Decoder模型结构 





     RNN-Encoder-Decoder基础模型   


一种经典的、基础的RNN-Encoder-Decoder模型出自2014年论文《Sequence to Sequence Learning with Neural Networks》
 原文中用它来解决翻译问题,因此它的输入与输出都是词元的one-hot向量
它的结构与思路如下:

先预设一个终止符,例如'<eof>',然后再以下方式设计Encoder和Decoder
 
  Encoder-解说 
Encoder部分是一个没有输出的RNN,将输入序列投到该RNN中,最后时刻得到的隐层就是编码信息c
 可以理解为不断地用输入来更新隐层,到最后一个时刻时,隐层就承载了所有输入的信息,即可将它作为编码信息c
 
 Decoder-解说
 Decoder部分是一个带有输出的RNN,下面细看它的实时输入与延迟输入值:
 关于实时输入:它用上一时刻的输出作为当前时刻的实时输入,即           
           实时输入的初始值用终止符来初始化:
 即实时输入为:           
 关于延迟输入:它的延迟输入用c来初始化                                                                   
 即延迟输入为:          
    关于终止条件:
解码器不断用前一个输出预测下一个输出,直到输出结束符<eof>则结束
  模型必须先指定一个结束符,不妨假设为"<eof>"      
   模型训练时,每一个训练输出样本都以"<eof>"作为终结符
   这样模型预测时,当解码器输出"<eof>"时则认为预测结束
 
 关于倒序预测: 论文《Sequence to Sequence Learning with Neural Networks》一直强调,倒序预测效果会更好
 倒序预测是指把输入倒序输入,例如原本用"a,b,c"预测"1,2,3",在输入网络时则输入"c,b,a"来预测"1,2,3"
这是因为a与1的相关性更强,倒序输入使最后的c记载了更多与a相关的信息,因此下一个预测1的效果更好





     基础RNN-Encoder-Decoder的具体计算流程      


 基础RNN-Encoder-Decoder的具体计算流程如下:
 
 一、 迭代编码器:                                                                    
 编码器的迭代公式如下:                         
     

   其中,初始条件

二、计算编码信息c                                                                 
   用编码器最后一时刻的隐层作为编码信息c      
         

 三、计算解码器的输出                                                             
     按以下公式计算解码器,直到输出为终止符'<eof>'则终止
         
                                 
     

      
        
         其中,
      
 备注:原文中使用的是LSTM,这里笔者为了简化,使用RNN替代LSTM
   ✍️Encoder-Decoder模型的teachForcing训练      
模型的训练一般以teachForcing的方式进行训练
teachForcing方式是指,在训练阶段以真实的来作为解码器的实时输入,而不是预测值
也就是说,模型训练时的实时输入为,然后期待的输出为 
 模型训练时解码器之所以不用预测的来作为实时输入,是因为初始解是非常糟糕的
在模型初始阶段,很难得到终止符"<eof>"的输出 ,这样解码器模型会不断的预测下去  
而反过来,如果以真实值训练成功时,那么模型的预测值与真实值是近似的           
也就是说,用真实值训练与用预测值训练,在训练成功时,模型的训练结果是殊途同归的

这样,输出长度在训练时是确定的,使训练得以实施,同时,这样训练也会更加快些,因为输入是真实的数据










 End 








联系老饼