RNN-循环神经网络

【模型】RNN-Encoder-Decoder模型(基本模型)

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



RNN-Encoder-Decoder模型是解决翻译问题的一种经典模型

本文介绍一种基本的、经典的、简单的RNN-Encoder-Decoder模型,

通过本文可以初步了解RNN-Encoder-Decoder模型是如何解决翻译问题的





  01. 基本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的效果更好








  02. 基本RNN-Encoder-Decoder模型-计算流程  




本节讲解基本RNN-Encoder-Decoder模型的详细计算流程




     基本RNN-Encoder-Decoder模型-详细计算流程   


基本RNN-Encoder-Decoder的具体计算流程如下:
 
1. 迭代编码器:                                                                   
编码器的迭代公式如下:                                            
     
   其中,初始条件
 2. 计算编码信息c                                                                 
   用编码器最后一时刻的隐层作为编码信息c           
         
 3. 计算解码器的输出                                                            
     按以下公式计算解码器,直到输出为终止符'<eof>'则终止
                                                           
         
                      
         其中,            
           
                        
备注:原文中使用的是4层LSTM,且没有给出具体计算公式
上述流程与公式是笔者根据自己的理解自行编写,并为了简化,使用RNN替代LSTM





   Encoder-Decoder模型的teachForcing训练      


模型的训练一般以teachForcing的方式进行训练
teachForcing方式是指,在训练阶段以真实的来作为解码器的实时输入,而不是预测值
也就是说,模型训练时的实时输入为,然后期待的输出为 
 模型训练时解码器之所以不用预测的来作为实时输入,是因为初始解是非常糟糕的
在模型初始阶段,很难得到终止符"<eof>"的输出 ,这样解码器模型会不断的预测下去
而反过来,如果以真实值训练成功时,那么模型的预测值与真实值是近似的
也就是说,用真实值训练与预测值训练,模型的训练是殊途同归的,

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










 End 








联系老饼