论文《Learning Phrase Representations using RNN Encoder–Decoderfor Statistical Machine Translation》解析

       论文《Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation》是由Kyunghyun Cho等人于2014年发表的。该论文主要有两个贡献:(1)是提出了RNN Encoder-Decoder架构,首次将Seq2Seq模型引入到统计机器翻译(SMT),为后续基于神经网络的机器翻译奠定了基础;(2)是提出了门控循环单元(GRU),通过引入重置门(reset gate)和更新门(update gate)的门控机制,解决了传统RNN的梯度消失问题和长期依赖学习困难。

      本文对该论文的上述两个贡献做详细的讲解。

一、GRU门控循环单元

       GRU的网络架构如下(我借用网上的一张图,在论文中的原始图片并这样,原论文中的图片较为简单,不便于理解)

         与LSTM不同,GRU没有细胞状态,而是直接使用隐藏状态。GRU由两个门控制:重置门(R)和更新门(Z)。

1.1 重置门

  • 作用:控制历史隐藏状态对当前候选状态的影响,决定是否“遗忘”部分历史信息。
  • 数学表达式                                                                             (1)
  • 功能解析:若,重置门关闭,忽略前一时刻隐藏状态,候选状态仅基于当前输入计算:  适用于需要丢弃无关历史信息的场景;若,保留全部历史信息,候选状态由共同决定:适用于依赖上下文的任务。
  • 示例:在句子“The cat, which ate the fish, was happy”中,处理到“was”时,重置门可能关闭(),忽略“which ate the fish”的中间信息,直接关联主语“The cat”。

1.2 更新门

  • 作用:平衡历史隐状态与新候选状态的比例,决定隐状态的更新程度。
  • 数学表达式                                                                           (2)
  • 功能解析:最终隐藏状态是历史状态和候选状态的加权和:

                                                                                         (3)

其中                                                                      (4)

   若,保留大部分历史信息(),适合长期记忆;若,优先采用新信息(),适合快速适用变化。

  • 示例:在时序预测中,若当前输入与历史模式高度相关(如气温周期性变化),更新门倾向于,保留历史模式;若出现异常值(如突然降温),则,快速更新状态。

      因此,GRU前向传播(除输出外)的公式为(1)~(4)。

二、RNN Encoder-Decoder

       循环神经网络编码器-解码器(简称RNN Encoder-Decoder)由两个协同工作的循环神经网络RNN构成,分别担任编码器与解码器的功能。编码器将变长源语言序列映射为定长向量表征,而解码器则将该向量表征重构为变长目标语言序列。两个网络通过联合训练,旨在最大化给定源语言序列条件下目标语言序列的条件概率。RNN Encoder-Decoder网络结构如下图所示:

       “两个网络通过联合训练,旨在最大化给定源语言序列条件下目标语言序列的条件概率”这句话的意思是:对于每一个源语言-目标语言对(),都有条件概率,那么目标函数可写为:,取对数后,目标函数变为。其中,可使用softmax进行求解。在RNN Encoder-Decoder中,条件概率更为复杂些,因为Decoder预测时受定长向量c、隐藏状态(Decoder中的隐藏状态)和前一时刻输出的影响。下面对Encoder和Decoder进行详述:

2.1 Encoder

       在训练时,作者先是把源语言短句和目标语言短句进行了分词,变为了一个个词,然后将词进行了embedding,每个词都映射到了500维的次空间。表示的就是将词embedding到词空间。

      Encoder中包含了1000个GRU,计算过程见上文的公式(1)~(4)。隐藏状态初始化为0()。

      定长向量c的计算公式为                                                        (5)

     下标N表示源语言在Encoder中经过N步后完成计算。因此,整个Encoder的过程就是公式(1)~(5)。

2.2 Decoder

       在Decoder中,初始化的隐藏状态为,为了进行区分,用表示Decoder中的隐藏状态,表示Decoder中C的权重向量。

       在时刻t,Decoder中的隐藏状态为:

       其中:

                

                

       Decoder需要生成目标语言短句。在时刻t,Decoder生成第j个词的概率为:

      上式中,为输出层权重矩阵的第j行,对应词表中的第j个词的权重向量。为输出层的输出。不过,作者采用了maxout激活函数,所以并不是直接输出层的输出。输出层的输出为:

经过maxout后,中的第i个元素为

 对做个解释:

       在RNN编码器-解码器中,输出层权重矩阵G的每一行对应目标语言此表的第j个词的权重向量,其作用是将隐藏状态映射到词表空间,计算生成每个词的概率。

1、输出层权重矩阵的结构

假设:

  • 目标语言词表大小为K(例如:法语词表中有50000个词)
  • 解码器隐藏状态维度为d(例如:d=1000)

则输出层权重矩阵的结构为:

  • 每一行对应此表中的第j个词的权重向量;
  • 第j个词的生成概率由与解码器隐藏状态的点击决定。

2、权重向量的作用

在时间步t,解码器隐藏状态为。生成第j个词的概率计算为:

  • 点积意义:衡量隐藏状态与词j的权重向量的相似度。相似度越高,生成该词的概率越大。
  • softmax归一化:将所有词的得分转换为概率分布(和为1)

3、直观理解

  • 每个词对应一个“方向”:可视为词j在d维空间中的方向向量。当隐藏状态指向某个词的方向时,生成该词的概率更高。例如:若与g"chat"(法语“猫”)方向接近,模型倾向于生成“chat”。
  • 与词嵌入关系:在部分模型中,可能与词嵌入矩阵E绑定(即),此时:是词j的嵌入向量的转置。

4、实际应用

假设目标词表包含3个词:“chat”(猫)、“chien”(狗)、“oiseau”(鸟),隐藏状态维度d=2。

权重矩阵G可能如下(简化示意):

若解码器隐藏状态,计算得分:

  • softmax概率为:

所以,模型更可能生成“chat”。

三、论文实验

3.1 实验数据

       在本论文中,作者采用了英法双语语料库,包括:欧洲会议(61M word)、新闻评论(5.5M)、UN(421M)和两个网络爬虫文本(分别为90M和780M)。网络爬虫文本数据集的噪声较多些。这里的所有词数均是指经过分词后对应的法语词汇数量。作者对源语言和目标语言的词汇进行了限制:仅保留了最高词频的15000个词,其他的词用[UNK]来代替。然后作者将这些词都embedding到维度为100的向量中。

3.2 RNN Encoder-Decoder网络

        1、网络结构:在RNN Encoder-Decoder中,编码器和解码器均采用了1000个隐藏单元。候选状态的激活函数采用双曲正切函数。在decoder的输出层采用的是maxout激活函数。

        2、权重初始化:除RNN的权重外,其他权重初始化值来自于均值为0,标准差为0.01的高斯分布。对于RNN的权重初始化采用如下方式:随机生成一个均值为0,标准差为0.01的高斯分布W。对W进行SVD分解,得到。取左奇异向量矩阵U作为初始化权重,得到的U为正交矩阵。在训练初期,权重矩阵的正交性有助于缓解梯度问题。

3.3 定量与定性分析

        在定量分析方面,作者采用BLEU得分作为模型性能的评判标准。通过实验可知,RNN Encoder-Decoder、CSLM+RNN Encoder-Decoder及CSLM+RNN Encoder-Decoder+WP(WP为UNK单词惩罚项,与UNK的数量相关)的得分要比传统统计契机翻译要高。在定性分析方面,为了探究模型性能提升的来源,作者分析了RNN Encoder-Decoder计算的 短句对 评分与传统翻译模型中的短句翻译概率p(f|e)的差异。结果显示,RNN Encoder-Decoder通过捕捉语音规律而非语料统计特性,有效弥补了传统模型在低频短句上的不足。

 

### Gated Recurrent Unit (GRU) 原始论文下载 Gated Recurrent Unit (GRU) 是一种简化版的循环神经网络单元,最初由 Cho 等人在 2014 年提出。该方法通过引入更新门和重置门来解决传统 RNN 中存在的梯度消失问题[^3]。以下是 GRU 的原始论文及其 PDF 下载链接: #### 论文基本信息 - **标题**: Learning Phrase Representations using RNN EncoderDecoder for Statistical Machine Translation - **作者**: Kyunghyun Cho, Bart van Merriënboer, Caglar Gulcehre, Dzmitry Bahdanau, Fethi Bougares, Holger Schwenk, Yoshua Bengio - **发表年份**: 2014 - **会议**: EMNLP 这篇论文首次提出了 Gated Recurrent Unit (GRU),并将其应用于序列到序列的学习任务中。 #### 下载地址 可以通过以下链接获取原始论文的 PDF 文件: - [Learning Phrase Representations using RNN EncoderDecoder for Statistical Machine Translation](https://arxiv.org/pdf/1406.1078.pdf) #### 关键概念回顾 在 GRU 中,最小化参数数量的同时保留了类似于完全门控单元的功能。具体来说,更新门和重置门被合并为遗忘门向量,这改变了输出向量方程的形式[^2]。这种设计使得 GRU 在计算效率上优于 LSTM,同时仍能有效捕捉长期依赖关系。 ```python import torch import torch.nn as nn class GRUCell(nn.Module): def __init__(self, input_size, hidden_size): super(GRUCell, self).__init__() self.input_size = input_size self.hidden_size = hidden_size # 定义权重矩阵 self.W_z = nn.Linear(input_size, hidden_size) self.U_z = nn.Linear(hidden_size, hidden_size) self.W_r = nn.Linear(input_size, hidden_size) self.U_r = nn.Linear(hidden_size, hidden_size) self.W_h = nn.Linear(input_size, hidden_size) self.U_h = nn.Linear(hidden_size, hidden_size) def forward(self, x, h_prev): z_t = torch.sigmoid(self.W_z(x) + self.U_z(h_prev)) # 更新门 r_t = torch.sigmoid(self.W_r(x) + self.U_r(h_prev)) # 重置门 n_t = torch.tanh(self.W_h(x) + r_t * self.U_h(h_prev)) # 新候选状态 h_t = (1 - z_t) * n_t + z_t * h_prev # 当前隐藏状态 return h_t ``` 上述代码展示了如何手动实现一个简单的 GRU 单元,其中 `z_t` 和 `r_t` 分别表示更新门和重置门。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值