2022年2022年零基础入门深度学习-循环神经网络 .pdf
《2022年2022年零基础入门深度学习-循环神经网络 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年零基础入门深度学习-循环神经网络 .pdf(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 关闭零基础入门深度学习 (5) - 循环神经网络机器学习深度学习入门无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning )这个超热的技术,会不会感觉马上就out了?现在救命稻草来了,零基础入门深度学习系列文章旨在讲帮助爱编程的你从零基础达到入门级水平。零基础意味着你不需要太多的数学知识,只要会写程序就行了,没错,这是专门为程序员写的文章。虽然文中会有很多公式你也许看不懂,但同时也会有更多的代码,程序员的你一定能看懂的(我周围是一群狂热的Clean Code程序员,所以我写的代码也
2、不会很差)。文章列表零基础入门深度学习 (1) - 感知器零基础入门深度学习 (2) - 线性单元和梯度下降零基础入门深度学习 (3) - 神经网络和反向传播算法零基础入门深度学习 (4) - 卷积神经网络零基础入门深度学习 (5) - 循环神经网络零基础入门深度学习 (6) - 长短时记忆网络 (LSTM)零基础入门深度学习 (7) - 递归神经网络往期回顾在前面的文章系列文章中,我们介绍了全连接神经网络和卷积神经网络,以及它们的训练和使用。他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系
3、的。比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列 ;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列 。这时,就需要用到深度学习领域中另一类非常重要神经网络:循环神经网络 (Recurrent Neural Network)。RNN 种类很多,也比较绕脑子。不过读者不用担心,本文将一如既往的对复杂的东西剥茧抽丝,帮助您理解 RNNs 以及它的训练算法,并动手实现一个循环神经网络 。语言模型RNN 是在自然语言处理领域中最先被用起来的,比如,RNN 可以为 语言模型 来建模。那么,什么是语言模型呢?我
4、们可以和电脑玩一个游戏,我们写出一个句子前面的一些词,然后,让电脑帮我们写下接下来的一个词。比如下面这句:我昨天上学迟到了,老师批评了_。我们给电脑展示了这句话前面这些词,然后,让电脑写下接下来的一个词。在这个例子中,接下来的这个词最有可能是我,而不太可能是小明,甚至是吃饭。语言模型 就是这样的东西:给定一个一句话前面的部分,预测接下来最有可能的一个词是什么。语言模型 是对一种语言的特征进行建模,它有很多很多用处。比如在语音转文本(STT)的应用中,声学模型输出的结果,往往是若干个可能的候选词,这时候就需要语言模型 来从这些候选词中选择一个最可能的。当然,它同样也可以用在图像到文本的识别中(O
5、CR) 。使用RNN 之前,语言模型主要是采用N-Gram 。N 可以是一个自然数,比如 2或者3。它的含义是,假设一个词出现的概率只与前面N 个词相关。我名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 13 页 - - - - - - - - - 们以2-Gram 为例。首先,对前面的一句话进行切词:我 昨天 上学 迟到 了 ,老师 批评 了 _。如果用2-Gram 进行建模,那么电脑在预测的时候,只会看到前面的了,然后,电脑会在语料库中,搜索了后面最可能的一个词。不管
6、最后电脑选的是不是我,我们都知道这个模型是不靠谱的,因为了前面说了那么一大堆实际上是没有用到的。如果是3-Gram 模型呢,会搜索批评了后面最可能的词,感觉上比2-Gram 靠谱了不少,但还是远远不够的。因为这句话最关键的信息我,远在9个词之前!现在读者可能会想,可以提升继续提升N 的值呀,比如 4-Gram 、5-Gram.。实际上,这个想法是没有实用性的。因为我们想处理任意长度的句子, N 设为多少都不合适;另外,模型的大小和N 的关系是指数级的, 4-Gram 模型就会占用海量的存储空间。所以,该轮到 RNN 出场了, RNN 理论上可以往前看 (往后看)任意多个词。循环神经网络是啥循环
7、神经网络种类繁多,我们先从最简单的基本循环神经网络开始吧。基本循环神经网络下图是一个简单的循环神经网络如,它由输入层、一个隐藏层和一个输出层组成:纳尼?!相信第一次看到这个玩意的读者内心和我一样是崩溃的。因为循环神经网络实在是太难画出来了,网上所有大神们都不得不用了这种抽象艺术手法。不过,静下心来仔细看看的话,其实也是很好理解的。如果把上面有W 的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络 。x是一个向量,它表示 输入层 的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示 隐藏层 的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相
8、同); U 是输入层到隐藏层的权重矩阵 (读者可以回到第三篇文章 零基础入门深度学习 (3) - 神经网络和反向传播算法,看看我们是怎样用矩阵来表示全连接神经网络的计算的); o也是一个向量,它表示 输出层 的值;V是隐藏层到输出层的权重矩阵 。那么,现在我们来看看 W 是什么。 循环神经网络的隐藏层 的值s不仅仅取决于当前这次的输入 x,还取决于上一次 隐藏层 的值s。权重矩阵 W 就是 隐藏层 上一次的值作为这一次的输入的权重。如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:现在看上去就比较清楚了,这个网络在t 时刻接收到输入之后,隐藏层的值是,输出值是。关键一点是,的值不仅仅
9、取决于,还取决于。我们可以用下面的公式来表示循环神经网络 的计算方法:式1 是输出层 的计算公式,输出层是一个全连接层 ,也就是它的每个节点都和隐藏层的每个节点相连。V是输出层的 权重矩阵 ,g是激活函数。式2是隐藏层的计算公式,它是循环层 。U 是输入x的权重矩阵, W 是上一次的值作为这一次的输入的 权重矩阵 ,f 是激活函数 。从上面的公式我们可以看出,循环层 和全连接层 的区别就是 循环层 多了一个 权重矩阵 W 。如果反复把 式2带入到 式1,我们将得到:式式名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
10、 - - - - - - - 第 2 页,共 13 页 - - - - - - - - - 从上面可以看出, 循环神经网络的输出值,是受前面历次输入值、. 影响的,这就是为什么循环神经网络可以往前看任意多个 输入值 的原因。双向循环神经网络对于语言模型 来说,很多时候光看前面的词是不够的,比如下面这句话:我的手机坏了,我打算 _一部新手机。可以想象,如果我们只看横线前面的词,手机坏了,那么我是打算修一修?换一部新的?还是大哭一场?这些都是无法确定的。但如果我们也看到了横线后面的词是一部新手机,那么,横线上的词填买的概率就大得多了。在上一小节中的 基本循环神经网络是无法对此进行建模的,因此,我们
11、需要双向循环神经网络,如下图所示:当遇到这种从未来穿越回来的场景时,难免处于懵逼的状态。不过我们还是可以用屡试不爽的老办法:先分析一个特殊场景,然后再总结一般规律。我们先考虑上图中,的计算。从上图可以看出, 双向卷积神经网络的隐藏层要保存两个值,一个A参与正向计算,另一个值 A参与反向计算。最终的输出值取决于和。其计算方法为:和则分别计算:现在,我们已经可以看出一般的规律:正向计算时,隐藏层的值与有关;反向计算时,隐藏层的值与有关;最终的输出取决于正向和反向计算的 加和 。现在,我们仿照 式1和式2,写出双向循环神经网络的计算方法:从上面三个公式我们可以看到,正向计算和反向计算不共享权重 ,也
12、就是说 U 和U、W 和W、V和V都是不同的权重矩阵 。深度循环神经网络前面我们介绍的 循环神经网络只有一个隐藏层,我们当然也可以堆叠两个以上的隐藏层,这样就得到了深度循环神经网络。如下图所示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 13 页 - - - - - - - - - 我们把第 i 个隐藏层的值表示为、,则深度循环神经网络的计算方式可以表示为:循环神经网络的训练循环神经网络的训练算法:BPTTBPTT 算法是针对 循环层 的训练算法,它的基本原理和BP
13、算法是一样的,也包含同样的三个步骤:1. 前向计算每个神经元的输出值;2. 反向计算每个神经元的 误差项值,它是误差函数 E对神经元 j 的 加权输入的偏导数;3. 计算每个权重的梯度。最后再用 随机梯度下降算法更新权重。循环层如下图所示:前向计算使用前面的 式2对循环层进行前向计算:注意,上面的、都是向量,用 黑体字母 表示;而 U 、V是 矩阵 ,用大写字母表示。 向量的下标 表示时刻 ,例如,表示在t 时刻向量s的值。我们假设输入向量 x的维度是 m ,输出向量 s的维度是 n,则矩阵 U 的维度是,矩阵W 的维度是。下面是上式展开成矩阵的样子,看起来更直观一些:在这里我们用 手写体字母
14、 表示向量的一个 元素 ,它的下标表示它是这个向量的第几个元素,它的上标表示第几个时刻 。例如,表示向量s的第j 个元素在 t 时刻的值。表示输入层 第i 个神经元到 循环层 第j 个神经元的权重。表示循环层 第t-1 时刻的第 i 个神经元到 循环层 第t个时刻的第 j 个神经元的权重。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 13 页 - - - - - - - - - 误差项的计算BTPP 算法将第 l 层t 时刻的 误差项值沿两个方向传播,一个方向是其传递到
15、上一层网络,得到,这部分只和权重矩阵 U 有关;另一个是方向是将其沿时间线传递到初始时刻,得到,这部分只和权重矩阵 W 有关。我们用向量表示神经元在 t 时刻的 加权输入 ,因为:因此:我们用a表示列向量,用表示行向量。上式的第一项是向量函数对向量求导,其结果为Jacobian 矩阵:同理,上式第二项也是一个Jacobian 矩阵:其中,diaga 表示根据向量 a创建一个对角矩阵,即最后,将两项合在一起,可得:上式描述了将沿时间往前传递一个时刻的规律,有了这个规律,我们就可以求得任意时刻k的 误差项:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - -
16、 - - - - - 名师精心整理 - - - - - - - 第 5 页,共 13 页 - - - - - - - - - 式3 就是将误差项沿时间反向传播的算法。循环层 将误差项 反向传递到上一层网络,与普通的全连接层 是完全一样的,这在前面的文章零基础入门深度学习 (3) - 神经网络和反向传播算法 中已经详细讲过了,在此仅简要描述一下。循环层 的加权输入与上一层的 加权输入关系如下:上式中是第l 层神经元的 加权输入 (假设第l 层是 循环层 );是第l-1 层神经元的 加权输入 ;是第l-1 层神经元的输出;是第l-1 层的激活函数 。所以,式4 就是将误差项传递到上一层算法。权重梯
17、度的计算现在,我们终于来到了 BPTT 算法的最后一步:计算每个权重的梯度。首先,我们计算误差函数 E对权重矩阵 W 的梯度。上图展示了我们到目前为止,在前两步中已经计算得到的量,包括每个时刻t 循环层 的输出值,以及误差项。回忆一下我们在文章 零基础入门深度学习 (3) - 神经网络和反向传播算法介绍的全连接网络的权重梯度计算算法:只要知道了任意一个时刻的误差项,以及上一个时刻循环层的输出值,就可以按照下面的公式求出权重矩阵在t 时刻的梯度:在式5中,表示t 时刻 误差项 向量的第 i 个分量;表示t-1 时刻循环层 第i 个神经元的输出值。我们下面可以简单推导一下式5。我们知道:式式式名师
18、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 13 页 - - - - - - - - - 因为对W 求导与无关,我们不再考虑。现在,我们考虑对权重项求导。通过观察上式我们可以看到只与有关,所以:按照上面的规律就可以生成式5里面的矩阵。我们已经求得了权重矩阵 W 在t 时刻的梯度,最终的梯度是各个时刻的梯度 之和 :式6就是计算 循环层 权重矩阵 W 的梯度的公式。- - - - - - - - - - 数学公式超高能预警- - - - - - - - -前面已经介绍了的计
19、算方法,看上去还是比较直观的。然而,读者也许会困惑,为什么最终的梯度是各个时刻的梯度之和 呢?我们前面只是直接用了这个结论,实际上这里面是有道理的,只是这个数学推导比较绕脑子。感兴趣的同学可以仔细阅读接下来这一段,它用到了矩阵对矩阵求导、张量与向量相乘运算的一些法则。我们还是从这个式子开始:因为与W 完全无关,我们把它看做常量。现在,考虑第一个式子加号右边的部分,因为W 和都是W 的函数,因此我们要用到大学里面都学过的导数乘法运算:因此,上面第一个式子写成:我们最终需要计算的是:我们先计算 式7加号左边的部分。是矩阵对矩阵求导,其结果是一个四维 张量(tensor),如下所示:式式名师资料总结
20、 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 13 页 - - - - - - - - - 接下来,我们知道,它是一个 列向量 。我们让上面的四维张量与这个向量相乘,得到了一个三维张量,再左乘行向量,最终得到一个矩阵:接下来,我们计算 式7加号右边的部分:于是,我们得到了如下递推公式:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 13 页 - - - - -
21、 - - - - 这样,我们就证明了:最终的梯度是各个时刻的梯度之和。- - - - - - - - - - 数学公式超高能预警解除- - - - - - - - -同权重矩阵 W 类似,我们可以得到权重矩阵U 的计算方法。式8是误差函数在 t 时刻对权重矩阵 U 的梯度。和权重矩阵 W 一样,最终的梯度也是各个时刻的梯度之和:具体的证明这里就不再赘述了,感兴趣的读者可以练习推导一下。RNN 的梯度爆炸和消失问题不幸的是,实践中前面介绍的几种RNNs 并不能很好的处理较长的序列。一个主要的原因是,RNN 在训练中很容易发生梯度爆炸 和梯度消失 ,这导致训练时梯度不能在较长序列中一直传递下去,从
22、而使RNN 无法捕捉到长距离的影响。为什么RNN 会产生梯度爆炸和消失问题呢?我们接下来将详细分析一下原因。我们根据式3可得:上式的定义为矩阵的模的上界。因为上式是一个指数函数,如果t-k 很大的话(也就是向前看很远的时候),会导致对应的误差项 的值增长或缩小的非常快,这样就会导致相应的梯度爆炸 和梯度消失 问题(取决于大于1还是小于 1)。通常来说, 梯度爆炸 更容易处理一些。因为梯度爆炸的时候,我们的程序会收到NaN 错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。梯度消失 更难检测,而且也更难处理一些。总的来说,我们有三种方法应对梯度消失问题:1. 合理的初始化权
23、重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。2. 使用relu 代替sigmoid 和tanh作为激活函数。原理请参考上一篇文章零基础入门深度学习 (4) - 卷积神经网络 的激活函数 一节。3. 使用其他结构的 RNNs ,比如长短时记忆网络( LTSM )和Gated Recurrent Unit(GRU ),这是最流行的做法。我们将在以后的文章中介绍这两种网络。RNN 的应用举例基于 RNN 的语言模型现在,我们介绍一下基于 RNN 语言模型。我们首先把词依次输入到循环神经网络中,每输入一个词,循环神经网络就输出截止到目前为止,下一个最可能的词。例如,当
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年零基础入门深度学习-循环神经网络 2022 基础 入门 深度 学习 循环 神经网络
限制150内