现实生活中会经常遇到序列数据,比如语音是声音振动的序列,自然语言的一句话是单词的序列等等。在这样的序列数据中,前后数据单元之间的关系至关重要,例如“打开”后面可能会接“盒子”,但不会接“太阳”。为了描述这种序列上的相关性,人们提出了循环神经网络(Recurrent Neural Net, RNN)模型。
以自然语言处理为例,假设一句话是由n个单词组成的序列 ... ,每个单词构成了序列的基本组成单元。现在把这句话的每个单词依次输入到一个神经网络中,我们希望网络会依这些词的输入顺序生成合理的输出。循环神经网络通过一个内部状态单元(记为h)来实现这一能力,如下图所示。
图1:RNN状态单元示意图
具体来说,如果t-1时刻状态单元的状态为 ,在t时刻输入单词是 ,则状态单元更新后得到新的状态 ,更新的规则如下:
其中W、U、b是网络参数,g是一个非线性激活函数。也就是说,RNN网络将当前状态延迟一拍后与下一个单词组合在一起共同构成新的输入,得到下一个单词对应的状态。因此,新的状态既包含了当前单词的信息,也包括了之前历史上所有单词的信息,从而形成了一种“信息压缩”效应。当一句话输入结束时,最后一个单词对应的状态实际上浓缩了整句话的全部信息。值得说明的是,图1所示的RNN只是最基础的结构,事实上人们提出了很多改进方法,但基本原理是一样的。
这样的网络如何使用呢?下面给出两个应用实例。
1. 情感分类
在情感分类任务中,一句话的情感表达在整句话的遣词造句中,单个词是不能完整表示情感的。因此我们需要将一句话有顺序地压缩到一个向量中,并基于此进行分类。RNN恰好可以实现这种有序压缩。如图2所示,经过循环神经网络对一句话进行压缩,到句尾得到向量表示 ,该向量即表达了整句话的语义信息。对 再经过一个全连层得到输出 ,最后再经过softmax激活函数即可得到情感预测的结果y。除了情感分类,这一方法可以也可以用于其它文本分类任务中,如文档类型划分,正负面新闻分类等。
图2:RNN用于情绪识别示意图
2. 机器翻译
机器翻译的目的是将源语言的句子翻译成目标语言,如将中文翻译成英语。在这一任务中,机器需要读入中文的句子,理解其语义,并将其转译成英语。RNN可以帮助我们完成这一任务。如图3所示,可以设计一个编码-解码模型,该模型由两部分组成,第一部分是编码器,由一个循环神经网络将中文句子“编码”成一个向量C;第二部分是解码器,由另一个循环神经网络对C进行解码,依次得到英文的单词输出序列 。
图3:RNN用于机器翻译示意图
总结起来,RNN是一种重要的序列模型,在机器学习和人工智能的各个领域有广泛应用。然而,RNN也有其局限性,特别是在信息累积过程中的快速“遗忘”问题。研究者提出了若干新方法来解决这一问题,典型的如长短时记忆单元(LSTM)模型,通过引入门机制对信息进行控制,以提高长时建模能力。近年来,人们提出自注意力机制,可以跨单元(如单词)提取信息,极大提高了对序列数据的建模能力。
By:清华大学 马少平 王东