相关文章
目录
一、概述
为什么需要序列模型呢?在前馈神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力。前馈神经网络可以看作一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于当前的输入。但在很多现实任务中,网络的输入不仅和当前时刻的输入相关,也和其过去一段时间的输出相关。比如一个 有限状态自动机,其下一个时刻的状态 (输出) 不仅仅和当前输入相关, 也和当前状态 (上一个时刻的输出) 相关。此外,前馈网络难以处理长度通常并不固定的时序数据,如视频、语音、文本等。而前馈神经网络却要求输入和输出的维数/长度/尺寸都是固定的,不能任意改变。当然,可以将所有输入数据填充到相同的固定长度。然而,这样做的表现仍不如序列模型,因为这些 前馈模型不了解给定输入的上下文环境。这是序列模型和前馈模型的主要区别之一。从另一角度看,前馈模型作为 “静态模型”,通常不会对处理过的信息保留记忆,而 序列模型则能够实现某种 “记忆功能”。如同人类能够凭借过去的认知记忆更好地认识当下和未来一样。这使得序列模型成为了序列信息分析和处理的最佳选择之一。例如,对于一个句子,当看到一个词时,序列模型试图从同一句子中前面的词推导出关系。当读一个句子时,不会每次遇到一个新词都从头开始,而是会根据对所读过单词的理解来处理后续的每个单词。
本文要介绍的 序列模型 —— 循环神经网络 (Recurrent Neural Network, RNN) 是一类具有 短期记忆能力 的神经网络,可以适应 不同长度 / 尺寸的输入数据。在 RNN 中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。RNN 已被广泛应用在语音识别、语言模型以及自然语言生成等任务上。RNN 的参数学习可通过随时间反向传播算法实现,即按照时间的逆序将错误信息一步步地往前传递。当输入序列较长时,会存在 梯度爆炸和消失问题,也称为 长程依赖问题。为解决该问题,人们对循环神经网络进行了很多的改进,其中最有效的改进方式引入 门控机制。 此外,RNN 可以很容易地扩展到两种更广义的记忆网络模型:递归神经网络 (Recursive Neural Network) 和 图网络 (Graph Network)。
二、语言模型 与 N 元语法 (N-Gram)
语言模型 (language model) 是自然语言处理的重要技术。自然语言处理中最常见的数据类型是文本,以下不妨把一段 自然语言文本 看作一段 离散时间序列。假设一段长度为 的文本,其中的词 (words) 依次为
,那么在离散时间序列中,
可视为在 时间步 (time step)
的 输出或标签。给定一个长度为
的词的序列
,语言模型将计算该序列的概率:
语言模型可用于提升语音识别和机器翻译的性能。例如,在语音识别中,给定一段 “没有海豹” 的语音,可能识别出 “没有海豹” 和 “没有海报” 这两段读音相同但语义有别的文本序列。若语言模型判断出前者概率大于后者,则最终会决定输出 “没有海豹” 的文本序列。在机器翻译中,若将英文 “you go first” 逐词翻译成中文,可能得到 “你走先”、“你先走” 等具有不同排列方式的文本序列。若语言模型判断 “你先走” 的概率大于其他排列方式的概率,则可将 “you go first” 翻译为 “你先走”。
关于语言模型的计算,设序列 中的每个词是根据顺序依次生成的,则所有词同时出现的 联合概率 为:
例如,一段含有 4 个词的文本序列的概率为:
为计算语言模型,需要计算词的概率,以及一个词在给定前几个词的情况下的条件概率,即 语言模型参数。设训练数据集为一个大型文本语料库,如维基百科的所有条目。词的概率可通过该词在训练数据集中的 相对词频 计算得到。例如, 可计算为
在训练数据集中的词频 与 训练数据集总词数 之比。同理,根据条件概率定义,一个词在给定前几个词的情况下的条件概率,也可通过训练数据集中的 相对词频 计算。例如,
可计算为
两词相邻出现的频率与
的词频 之比,即
。以此类推,可计算任意词的的条件概率。
当序列长度增加时,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。而 n 元语法 (N-Grams) 通过 马尔可夫假设 (虽然并不一定成立) 简化了语言模型的计算。此处的马尔可夫假设是指 一个词的出现只与前面 n 个词 (对应于前 n 个状态) 相关,即 n 阶马尔可夫链 (Markov chain of order n)。若 ,那么有
。若基于 n-1 阶马尔可夫链,可将语言模型改写为:
以上即为 n 元语法 (N-Grams)。它是基于 n−1 阶马尔可夫链的概率语言模型。当 n 分别为1、2、3 时,分别称作 一元语法 (unigram)、二元语法 (bigram) 和 三元语法 (trigram)。例如,长度为 4 的序列 在一元语法、二元语法和三元语法中的概率分别为:
当 n 较小时,n 元语法往往并不准确。例如,在一元语法中,由三个词组成的句子 “你走先” 和 “你先走” 的概率是一样的,只是连乘的顺序不同罢了。然而,当 n 较大时,n 元语法需计算并存储大量的词频和多词相邻频率,成本较高。那么,有没有方法在语言模型中更好地平衡以上这两点呢?
三、循环神经网络的原理
3.1 基本 RNN
由上节可知,n 元语法下,时间步 的词
基于前面所有词的条件概率只考虑了最近时间步的
个词。若要考虑比
更早时间步的词对
的可能影响,需要增大 n。但这样将导致模型参数呈指数级增长。本节将介绍循环神经网络,以下简称为 RNN。RNN 不是刚性地记忆所有固定长度的序列,而是通过隐藏状态来存储之前时间步的信息。

由上图可见:一个典型的 RNN 网络架构包含一个输入 ,一个输出
和一个神经网络单元
。和普通的前馈神经网络的区别在于,RNN 的神经网络单元
不但与输入
和输出
存在联系,而且自身也存在一个 循环 / 回路 / 环路 / 回环 (loop)。这种回路允许信息从网络中的一步传递到下一步。
同时,RNN 还能按 时间序列展开循环 (unroll the loop) 为如下形式:

以上架构不仅揭示了 RNN 的实质:上一个时刻的网络状态将会作用于 / 影响到下一个时刻的网络状态,还表明 RNN 和序列数据密切相关。同时,RNN 要求每一个时刻都有一个输入,但是不一定每个时刻都需要有输出。
进一步地,公式化 RNN 的结构:


设在时刻 ,RNN 的输入为
,输出表示为
,隐藏层状态为
,则
不但与当前时刻
的输入
相关,还与上一个时刻
的隐藏层状态
有关,此时有: