Hulu机器学习问题与解答系列 | 第九弹:循环神经网络

大噶好,今天是有关RNN问题的解答。记得多多思考和转发,公式供应充足的Hulu机器学习系列,怎么能只自己知 (shou)道 (nue) Hulu机器学习问题与解答系列 | 第九弹:循环神经网络 ~

今天的内容是

循环神经网络

场景描述

循环神经网络(Recurrent Neural Network)是一种主流的深度学习模型,最早在20世纪80年代被提出 ,目的是建模序列化的数据。我们知道,传统的前馈神经网络一般的输入都是一个定长的向量,无法处理变长的序列信息,即使通过一些方法把序列处理成定长的向量,模型也很难捕捉序列中的长距离依赖关系。而RNN通过将神经元串行起来处理序列化的数据,比如文本的词序列、音频流和视频流序列等。由于每个神经元能用它的内部变量保存之前输入的序列信息,使得整个序列可以被浓缩成抽象的表示,并可以据此进行分类或生成新的序列。近年来,得益于计算能力的大幅提升和网络设计的改进(LSTM、GRU、Attention机制等),RNN在很多领域取得了突破性的进展。比如机器翻译、序列标注、图像描述、视频推荐、智能聊天机器人、自动作词作曲等,给我们的日常生活带来了不少便利和乐趣。

问题描述

  1. 什么是循环神经网络?如何用它产生文本表示?

  2. RNN为什么会出现梯度的消失或爆炸?有什么样的改进方案?

解答与分析

1. 什么是循环神经网络?如何用它产生文本表示?

传统的前馈神经网络,包括卷积神经网络(Convolutional Neural Network, CNN)在内,一般都是接受一个定长的向量作为输入。比如在做文本分类时,我们可以将一篇文章所对应的TF-IDF(Term Frequency-Inverse Document Frequency)向量作为前馈神经网络的输入,其中TF-IDF向量的维度是词汇表的大小。显而易见,这样的表示实际上丢失了输入的文本序列中每个单词的顺序。在用卷积神经网络对文本进行建模时,我们可以输入变长的字符串或者单词串,然后通过滑动窗口+Pooling的方式将原先的输入转换成一个固定长度的向量表示;这样做可以捕捉到原文本中的一些局部特征,但是两个单词之间的长距离依赖关系还是很难被学习到。

RNN(Recurrent Neural Network,循环神经网络)的目的便是处理像文本这样变长并且有序的输入序列。它模拟了人阅读一篇文章的顺序,从前到后阅读文章中的每一个单词,并且将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好地理解之后的文本。下图展示了一个典型RNN的网络结构[1]:

Hulu机器学习问题与解答系列 | 第九弹:循环神经网络

Hulu机器学习问题与解答系列 | 第九弹:循环神经网络

Hulu机器学习问题与解答系列 | 第九弹:循环神经网络

其中f和g为**函数,U为输入层到隐含层的权重矩阵,W为隐含层从上一时刻到下一时刻状态转移的权重矩阵,在文本分类任务中(如上图),f可以选取Tanh或者ReLU函数,g可以采用Softmax函数,更多关于**函数的细节可以参见[2]。

2. RNN为什么会出现梯度的消失或爆炸?有什么样的改进方案?

RNN模型的求解可以采用BPTT(Back Propagation Through Time)算法实现 ,实际上是反向传播(Back Propagation)算法的简单变种;如果将RNN按时间展开成T层的前馈神经网络来理解,就和普通的反向传播算法没有什么区别了。RNN的设计初衷之一就是能够捕获长距离输入之间的依赖。从结构上来看,RNN也绝对能够做到这一点。然而实践发现,使用BPTT算法学习的RNN并不能成功捕捉到长距离的依赖关系,这一现象可以用梯度消失来解释。传统的RNN梯度可以表示成连乘的形式:

Hulu机器学习问题与解答系列 | 第九弹:循环神经网络

其中

Hulu机器学习问题与解答系列 | 第九弹:循环神经网络

Hulu机器学习问题与解答系列 | 第九弹:循环神经网络

由于预测的误差是沿着神经网络的每一层反向传播的,因此当Jacobian矩阵的最大特征值大于1时,随着离输出越来越远,每层的梯度大小会呈指数增长,导致梯度爆炸(gradient explosion);反之,若Jacobian矩阵的最大特征值小于1,梯度的大小会呈指数缩小,即产生了梯度消失(gradient vanishing)。对于普通的前馈网络来说,梯度消失导致无法通过加深网络层次来改善神经网络的预测效果,因为无论如何加深网络,只有靠近输出的若干层才真正起到的学习的作用。对于RNN来说,这导致模型很难学习到输入序列中的长距离依赖关系。

梯度爆炸的问题可以通过梯度裁剪(Gradient Clipping)来缓解,也就是当梯度的范式大于某个给定值时,对梯度进行等比收缩;而梯度消失问题相对比较棘手,需要对模型本身进行改进。 ResNet[3]是对前馈神经网络的改进,通过残差学习的方式缓解了梯度消失的现象,从而使得我们能够学习到更深层的网络表示;而对于RNN来说,LSTM(Long short-term memory)[4]及其变种GRU(Gated recurrent unit)[5]等模型通过加入门控机制(Gate),很大程度上改善了梯度消失所带来的损失。关于ResNet和LSTM的细节会在其他章节介绍,敬请期待。

参考文献:

[1] Liu, Pengfei, Xipeng Qiu, and Xuanjing Huang. "Recurrent neural network for text classification with multi-task learning." arXiv preprint arXiv:1605.05101 (2016).

[2] https://en.wikipedia.org/wiki/Activation_function

[3] He, Kaiming, et al. "Deep residual learning for image recognition." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.

[4] Hochreiter, Sepp, and Jürgen Schmidhuber. "Long short-term memory." Neural computation 9.8 (1997): 1735-1780.

[5] Chung, Junyoung, et al. "Empirical evaluation of gated recurrent neural networks on sequence modeling." arXiv preprint arXiv:1412.3555 (2014).


下一题预告

【LSTM】

场景描述

俗话说,前事不忘,后事之师,各种带有记忆功能的网络是近来深度学习研究和实践的一个重要领域。由于RNN有着梯度弥散(vanishing gradient)和梯度爆炸(explosion gradient)等问题,难以学习长期的依赖,在遇到重要的信息时,又难以清空之前的记忆,因此在实际任务中的效果往往并不理想。LSTM是Long Short-Term Memory(长短期记忆网络)的简称。作为RNN的最知名和成功的扩展,LSTM可以对有价值的信息进行长期记忆,并在遇到新的重要信息时,及时遗忘过去的记忆,减小了RNN的学习难度。它在语音识别,语言建模,机器翻译,图像描述生成,命名实体识别等各类问题中,取得了巨大的成功。

问题描述

LSTM是如何实现长短期记忆功能的?它的各模块分别使用了什么**函数,可以使用别的**函数么?


欢迎留言提问或探讨

关注“Hulu”微信公众号

点击菜单栏“机器学习”获得更多系列文章

Hulu机器学习问题与解答系列 | 第九弹:循环神经网络