内容正文:
第12章 循环神经网络
循环神经网络概述
语言模型
双向循环神经网络
深度循环神经网络
循环神经网络的训练
循环神经网络中的梯度爆炸和梯度消失
RNN的应用举例———基于RNN的语言模型
循环神经网络概述
语言模型
双向循环神经网络
深度循环神经网络
循环神经网络的训练
循环神经网络中的梯度爆炸和梯度消失
RNN的应用举例———基于RNN的语言模型
理解循环神经网络的含义和学习过程
了解循环神经网络的作用和用法
掌握循环神经网络的训练方法
学 习 目 标
LEARNING OBJECTIVES
初心至善 匠心育人
在本书之前的章节中已经对全连接神经网络的相关知识进行了讲解,然而全连接神经网络只适用于处理前后两个输入数据之间完全没有关系的情况。在深度学习,经常遇到需要对前后两个输入数据之间存在关系的序列信息进行处理的情况。例如,人类的自然语言大部分情况下是由前后具有语义联系的词语组成的,单独对语句中的某个词进行分析而脱离上下文的联系很可能产生歧义,通过上下文的联系也可以帮助预测一个语句中接下来的词可能是什么。这时,就可以用到循环神经网络( RecurrentNeuralNetwork )。循环神经网络种类繁多,本章将与大家一起学习循环神经网络的部分类别及相应知识。
初心至善 匠心育人
12.1 循环神经网络概述
循环神经网络(RecurrentNeuralNetwork,RNN)是一类用于处理序列数据(即一个序列当前的输出与之前的输出存在关联性)的神经网络,其缩写与递归神经网络相同,本章的RNN缩写仅代指循环神经网络。RNN的具体表现形式为,对当前时刻之前的信息进行记忆并对当前时刻的输出计算产生影响,即RNN中隐藏层之间的节点不再相互独立而是相互连接。当前时刻隐藏层的输入不仅包括输入层的数据还包括上一时刻隐藏层的输出。目前,RNN网络在基础研究领域和工程领域都取得了十分显著的进步,例如,Bengio 教授提出的在自然语音处理领域通过神经网络模型对N-gram模型进行改进,有关内容将在下一节中进行详细介绍。
初心至善 匠心育人
12.1 循环神经网络概述
本书将在第14章介绍的卷积网络是专门用于处理网格化数据的神经网络,而循环神经网络则是专门用于处理序列化数据的神经网络。卷积网络可以很容易地扩展到具有较大宽度和高度的图像,以及处理大小可变的图像,相比之下,循环网络可以扩展到更长的序列(长度可以远远大于没有基于序列的特化网络),不仅如此,大多数循环网络还能处理可变长度序列。RNN最早主要被用于处理自然语言领域的问题,比如为语言模型建模。
在下图是一个简单的循环神经网络,该神经网络由输入层、隐藏层和输出层组成。
初心至善 匠心育人
12.1 循环神经网络概述
在图中,表示输入数据集; s表示隐藏层的值; 表示输入层到隐藏层的权重矩阵; 表示输出数据集; 表示隐藏层到输出层的权重矩阵。循环神经网络的隐藏层的值 s不仅仅取决于当前这次的输入,还受到上一层隐藏层的值的影响(后面会进行讲解)。是上一时间步的隐藏层与当前时间步的隐藏层的权重矩阵,从图中可以看出,如果把隐藏层右侧的部分去掉,就会得到一个普通的全连接神经网络。上图只画出了隐藏层中的一个节点,该层隐藏层实际上含有多个节点,并且节点之间是相互连接的,节点数与向量s的维度相同,将上图展开后可以得到下图。
初心至善 匠心育人
12.1 循环神经网络概述
表示时刻的输入数据。
表示时刻的隐藏层的值, 基于上一时刻的隐状态和当前时刻的输入得到: , 通常为非线性的激活函数。在计算第一个词的隐藏层状态时,需要用到 ,显而易见的是,第一个词没有“上一个词”,所以在实际操作中 通常置为 0 。
表示时刻的输出,例如,下个单词的向量表示, , g为激活函数。因此,可以通过下面的公式来计算循环神经网络。
初心至善 匠心育人
12.1 循环神经网络概述
在传统神经网络中,每层的参数都是相互独立的。如果在每个时间步长对应参数相互独立,那么将极大地影响泛化训练的效果,这会使得模型无法将训练结果泛化到训练数据长度以外的情形,也无法根据时刻来共享不同序列长度和不同位置的统计强度。当信息的特定部分能够在该序列内的多个位置出现时,此时共享不同序列长度和不同位置的统计强度尤为重要。
假设需要训练一个处理固定长度句子的前馈网络,传统的全连接前馈网络会给每个输入特征一个单独的参数,这就需要分别对句子每个位置的所有语言规则进行学习。而循环神经网络可以在每一层各自共享参数(如上图中的、 、 ),由此可以看出,RNN中的每一步都在执行相同的步骤,只是每一次的输入发生了改变。采用共享参数大大地降低了网络需要学习的参数数量。
初心至善 匠心育人
12.1 循环神经网络概述
是输出层的计算公式,RNN的输出层为全连接层,即该