循环神经网络

栏目: 数据库 · 发布时间: 4年前

内容简介:动态系统的经典形式:举个例子,当 τ=3时:展开的计算图如下:

动态系统的经典形式:

循环神经网络

举个例子,当 τ=3时:

循环神经网络

展开的计算图如下:

循环神经网络

考虑由外部信号 x(t) 驱动的动态系统:

循环神经网络

定义隐藏单元的值。为了表明状态是网络的隐藏单元,我们使用变量 h 代表状态重写式:

循环神经网络

典型 RNN 会增加额外的架构特性,如读取状态信息 h 进行预测的输出层:

循环神经网络

以用一个函数 g(t) 代表经 t 步展开后的循环:

循环神经网络

展开的循环架构允许我们将 g(t) 分解为函数 f 的重复应用。因此,展开过程引入两个主要优点:

  1. 无论序列的长度,学成的模型始终具有相同的输入大小,因为它指定的是从一种状态到另一种状态的转移,而不是在可变长度的历史状态上操作。

  2. 我们可以在每个时间步使用相同参数的相同转移函数 f。      无论是循环图和展开图都有其用途。循环图简洁。展开图能够明确描述其中的 计算流程。展开图还通过显式的信息流动路径帮助说明信息在时间上向前(计算 出和损失)和向后(计算梯度)的思想。

循环神经网络

循环神经网络

图 10.3: 计算循环网络(将 x 值的输入序列映射到输出值 o 的对应序列) 训练损失的计算图。

损失 L 衡量每个 o 与相应的训练目标 y 的距离。

当使用 softmax 输出时,我们假设 o 是未归一化的 对数概率。

损失 L 内部计算 ˆ y = softmax(o),并将其与目标 y 比较。

RNN输入到隐藏的连接由 权重矩阵 U 参数化,隐藏到隐藏的循环连接由权重矩阵 W 参数化以及隐藏到输出的连接由权重 矩阵 V 参数化。

循环神经网络

这个模型明显没有第一个强大,第一个使用隐藏层 h 来存放过去的信息,并把它传播到未来。上图则将输出值放入到o中,用o来传播,o通常会缺乏过去的信息,除非它非常高维度且内容丰富,虽然不那么强大,但更容易训练,每个时间步可以分离,允许并行化。

前向传播推导过程

循环神经网络

与 x 序列配对的 y 的总损失就是所有时间步的损失之和。例如,L (t) 为 给定的 x (1) , . . . , x (t) 后 y (t) 的负对数似然,则

循环神经网络

其中 pmodel( y (t) | {x (1) , . . . , x (t)} ) 需要读取模型输出向量 yˆ (t) 中对应于 y (t) 的项。 关于各个参数计算这个损失函数的梯度是计算成本很高的操作。梯度计算涉及执行 一次前向传播(如在图 10.3 展开图中从左到右的传播),接着是由右到左的反向传 播。运行时间是 O(τ ),并且不能通过并行化来降低,因为前向传播图是固有循序的; 每个时间步只能一前一后地计算。前向传播中的各个状态必须保存,直到它们反向 传播中被再次使用,因此内存代价也是 O(τ )。

因此隐藏单元之间存在循环的网络非常强大但训练代价也 很大。我们是否有其他选择呢?

吴恩达的课程

百面机器学习的提问部分

问题一、处理文本数据时,循环神经网络与前馈神经网络比有什么优点?

传统文本处理任务一般讲TF-IDF向量作为特征输入。但这样会丧失文本序列的单词顺序。卷积神经网络对文本建模的时候输入变长的字符串或者单词串,然后通过滑动窗口加池化的方式将原先的输入转化为一个固定的向量。这样可以捕捉到局部特征,但两个单词之间的长距离依赖问题没有被学习到。 循环神经网络可以很好的处理文本数据编程且有序的输入序列。它模拟了人阅读文章的顺序。

问题二、循环神经网络为什么会出现梯度消失和梯度爆炸?有哪些改进方案?

引用( zhuanlan.zhihu.com/p/33594517)

雅克比矩阵

先百科一下什么是雅克比矩阵。引用维基百科上的定义,the matrix of all first-order partial derivatives of a vector-valued function。首先,他是一个矩阵,其次矩阵的元素是一个一阶函数的偏导数,最后这个一阶函数的偏导数的对象是一个向量函数。 举个例子,大家应该就能明白这个定义意思: 假设有如下函数排列:

循环神经网络

可以将y1....yn组成一个向量Y,其shape为n 1,同理x1...xn也组成一个向量X,其shape也为n 1,可以看到该平方函数就是一个对向量X的一个向量函数,而其雅克比矩阵可以写成如下形式:

循环神经网络

可以看到除了对角线上的所有矩阵元素值都是0,而对角线上的矩阵元素值就是对应y与x的一阶偏导数值。

RNN中的梯度消失和梯度爆炸问题

循环神经网络

该公式表示了RNN的隐藏层的计算过程,其中,h表示隐藏层的输出,W(hh)表示隐藏层到隐藏层的权重矩阵。(是个方阵)在梯度反向传播过程中,需要计算损失函数对W权重矩阵的梯度,可以得到如下公式:

循环神经网络

t表示时刻,E表示损失函数,该公式表示将所有时刻t的权重偏导数求和,得到这个序列的最终权重偏导,继续使用链式推导,可以得到:

循环神经网络

其中,损失函数E对y的偏导数、y对ht的偏导数,以及h对W的偏导数都能很容易的求得,除了中间的ht对hk的偏导数。我们下面就重点关注这一项的求解。该式子最终可写成:

循环神经网络

可得知,我们最终需要求的是某时刻的隐藏层值h对上一时刻隐藏层值h的偏导数在所有时刻上的和。

将这个式子再用链式法则拆开一下,令

循环神经网络

.

得到:

循环神经网络

其实,从上面的式子可以得知,等式右边的两个乘子项分别是两个不同的雅克比矩阵,因为ht-1本身是一个向量函数,而zt是对ht-1的向量函数,因此分别将两个乘子式化为雅克比矩阵:

循环神经网络

这个矩阵怎么求?回想一下我在上一章介绍雅克比矩阵时举的例子,其实可以类比到这个矩阵,其中ht是一个n 1的向量,而zt也是一个n 1的向量,写成函数排列可得:

循环神经网络

简单的说,就是该雅克比矩阵中,某一行或某一列上,只有一个偏导数是非0的元素,即该矩阵除了对角线元素,其他元素都为0,因此可写成:

循环神经网络

该矩阵时一个对角矩阵,用diag来表示,其中对角相当于一个向量,每个元素是h对z的偏导数,h与z的关系映射函数是我们网络中的激活函数,这里用 表示h对z的偏导,则上述可写成:

现在关注一下另一个雅克比矩阵:

循环神经网络

同样写成函数排列形式:

循环神经网络

看到这个函数排列式,是不是对上面的雅克比矩阵求解比较清晰了呢?是的,该雅克比矩阵的每个元素都是对应W权重矩阵的对应元素,即

循环神经网络

最终,可得到:

循环神经网络

可以得知,当序列长度越长,对一个序列进行BPTT,每次时刻多有对

循环神经网络

的连乘操作,即相当于W权重矩阵的连乘,刚开始的几层可能影响不大,因为连乘较少,但是当越往前传播,W连乘的级数是急剧上升的,若W矩阵初始化不当,小于1或大于1,都将会使得梯度计算朝着接近于0或者无限大的趋势发展。而我们的激活函数sigmoid或tanh(tanh函数其实就是sigmoid函数沿y轴向下平移0.5个单位得到),在梯度很大或很小时的曲线都是很平滑的,很容易导致越往后训练,梯度几乎不变。因此产生了梯度消失和梯度爆炸问题。

循环神经网络

如何解决梯度爆炸

  1. 梯度裁剪:当梯度的范式大于某个给定值时,对梯度进行等比缩放。而梯度消失比较麻烦,需要对模型本身进行改进(如深度残差网络是对前馈神经网络的改进,通过残差的方式缓解了梯度消失的现象。) 而对于循环神经网络来说,LSTM和它的变种加入了门控制机制,很大程度弥补了梯度消失带来的问题。

问题三、循环神经网络能否使用RELU作为激活函数

在卷积神经网络等前馈神经网络中采用ReLU激活函数通常可以有效地改善梯度消失,取得更快的收敛速度和收敛结果。那么循环神经网络中能否使用同样的技巧呢?

循环神经网络

如何用ReLU替代公式中的激活函数,如果ReLU一直处于激活区域, 继续展开。net的表达式最终会包含t个W的连乘。如果W不是单位矩阵,最终结果将会趋于0或者无穷。


以上所述就是小编给大家介绍的《循环神经网络》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Graph Algorithms

Graph Algorithms

Shimon Even / Cambridge University Press / 2011-9-19 / USD 32.99

Shimon Even's Graph Algorithms, published in 1979, was a seminal introductory book on algorithms read by everyone engaged in the field. This thoroughly revised second edition, with a foreword by Richa......一起来看看 《Graph Algorithms》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具