在机器学习领域,序列到序列(Sequence to Sequence)的学习任务一直是一个巨大的挑战。这种问题涉及到将输入序列映射到输出序列,其复杂性和困难性在于对序列结构的有效处理。然而,随着神经网络的发展,尤其是深度神经网络(DNNs)和长短期记忆网络(LSTM)的出现,让我们看到了解决这一问题的希望。
介绍与背景
Sequence to Sequence Learning with Neural Network 是语言翻译和证明深度神经网络可用于执行"端到端"翻译的先驱论文之一。该论文证明了 LSTM 可以在最小的假设下使用,提出了一种 双 LSTM("编码器"-"解码器")架构来执行从英语到法语的语言翻译,展示了神经机器翻译 (NMT) 相对于统计机器翻译 (SMT) 的前景。
这篇论文是 2014 年发表的,当时还没有像 TensorFlow 或 PyTorch 这样的广泛开源框架,而深度神经网络(Deep Neural Networks, DNN)刚表现出使用前景。任务是将句子或者单词构成的"序列"从英语翻译成法语。
核心方法
文章建议使用 2 个深度 LSTM 网络:第一个充当编码器,获取输入并将其映射到固定维度的向量中;第二个充当解码器,获取固定向量并将其映射到输出序列。LSTM 的任务是预测给定从最后一层生成的输入序列的目标序列的条件概率,使用此概率生成的序列的长度可能与源文本不同。
编码器
-
编码器使用 LSTM 模型
-
编码器读取输入序列并将信息总结为内部状态向量或上下文向量(对于 LSTM,这些称为隐藏状态和单元状态向量),会丢弃编码器的输出,只保留内部状态。该上下文向量旨在封装所有输入元素的信息,以帮助解码器做出准确的预测。
-
隐藏状态 hₜ 使用以下公式计算:
-
LSTM 依次读取数据,如果输入是长度为"t"的序列,那么 LSTM 以 "t" 时间步长读取它。
- Xᵢ 表示时间步 i 处的输入序列。
- hᵢ 和 cᵢ 是 LSTM 在每个时间步维持两个状态("h" 表示隐藏状态,"c" 表示单元状态)。这些组合在一起就是 LSTM 在时间步 i 的内部状态。
- Yᵢ 表示时间步 i 处的输出序列。Yᵢ 实际上是使用 softmax 激活生成的整个词汇表的概率分布。因此,每个 Yᵢ 都是一个大小为"vocab_size"的向量,表示概率分布。
解码器
-
解码器使用 LSTM 模型
-
解码器的初始状态被初始化为编码器 LSTM 的最终状态,即编码器最终单元的上下文向量被输入到解码器网络的第一个单元。使用这些初始状态,解码器开始生成输出序列,并且这些输出也被考虑用于未来的输出。
-
每个 LSTM 单元在时间步 t 预测输出 yₜ。
-
每个循环单元接受前一个单元的隐藏状态,并生成和输出以及它自己的隐藏状态。
-
隐藏状态 hₜ 均使用以下公式计算:
-
使用以下公式计算时间步 t 处的输出 yₜ:
-
使用当前时间步的隐藏状态以及相应的权重 W(S) 来计算输出。Softmax 用于创建概率向量,这将帮助我们确定最终输出(例如问答问题中的单词)。
- 在推理过程中,一次生成一个单词。
- 解码器的初始状态设置为编码器的最终状态。
- 解码器的初始输入始终是 START 令牌。
- 在每个时间步,保留解码器的状态并将它们设置为下一个时间步的初始状态,预测的输出将作为下一个时间步长的输入。
- 当解码器预测 END 标记时,就中断循环。
提升 LSTM 性能
研究中发现,将输入序列中的单词顺序颠倒可以显著提高 LSTM 的性能,因为这样做引入了许多短期依赖关系,使得优化问题更易于解决。
将源句子中的词序颠倒可能提高 LSTM 的性能的一个原因是,它可以帮助模型更好地利用其内存。较长的句子可能对 LSTM 来说难以处理,但是如果词语是反向排序的,模型可能能够更好地跟踪句子中的信息。此外,颠倒词语的顺序帮助 LSTM 更好地学习词语之间的依赖关系,因为当它们以反向顺序呈现时,模型将能够更容易地识别词语之间的关系。
"编码器"-"解码器" 架构缺点
- 这种架构的内存非常有限。LSTM 的最终隐藏状态是尝试填满需要翻译的整个句子的地方,通常只有几百个单位长,如果试图强制输入这个固定维度向量,神经网络的损耗很大。
- 根据经验,神经网络越深,训练就越困难。对于循环神经网络来说,序列越长,神经网络在时间维度上的深度就越深。这会导致梯度消失,循环神经网络学习的目标的梯度信号在向后传播时消失。即使使用专门用于防止梯度消失的 RNN(例如 LSTM),这仍然是一个问题。
总结
文中提出的 LSTM 在长句上表现出惊人的效果,但是还是存在局限性。随后陆续提出的注意力模型和 Transformers 等模型,可以很好地处理更健壮和更长的句子。