概述
1、RNN产生原因
一些数据前后有关联,且关联的长度不确定,需要根据数据前后关系进行预测。比如视频每一帧与之前与之后的关联,要分析这些帧连接起来的整个序列。
2、几种神经网络
(1)基本循环神经网络
考虑例子:
我 昨天 上学 迟到 了 ,老师 批评 了 ____。
分为如下几步:
1、通过one-hot编码将数据向量化变为对应的数字序列
2、根据如下神经网络进行预测后面的数据
通过公式:
计算St与Ot
(1)首先随机初始化一个W作为向后传递的初始值
(2)然后通过输入的x向量与权重矩阵U做乘积映射成隐藏层,这个过程类似于全连接矩阵映射,比如x向量是1维的,设置的隐藏层节点个数是16,则矩阵规格是(1*16)。与全连接矩阵不同的是,在此还要加上W矩阵与上一次的隐藏层相乘的值,即将本次结果与上一次的结果建立联系
(3)通过隐藏层与输出层矩阵相乘,然后经过一个激活函数(例如softmax函数)得到本次输入的结果,将结果与预期值进行比较,然后使用梯度下降法更新U和W矩阵,直到误差最小
(2)双向循环神经网络
考虑例子:
我的手机坏了,我打算____一部新手机。
我们发现,本次预测不仅和前面值相关,还与预测值后面的数据相关因此还需要建立本次预测值与后面数据的联系
考虑使用下面模型:
(1)第一步仍然是与上面一样进行向量化
(2)此时每个隐藏层需要保存两个值,一个是正向计算时的Ai,一个是反向计算时的Ai`,前向传播时,与基本循环神经网络方法相同计算出Ai
(3)在计算出最后一个数据的隐藏层值后,初始化一个向前关联的权值矩阵W·,然后通过如下公式向前传播,计算出每一步的A·
(4)当传递到第一层后,通过两个隐藏层的值与两个输出层的权重矩阵V与V·分别乘积加和,得到这个输入数据的结果
简而言之就是,通过前向和反向的两个隐藏层矩阵建立起了两套共享的权值
U、W、V和U·,W·,V·
(5)通过反向传播算法更新这两组共享权值矩阵,使得误差最小
(3)深度循环网络
在训练神经网络时,隐藏层不一定只有一层,因此可以有多个隐藏层的RNN:
其与双向神经网络的区别就是隐藏层多加了几层,每一层共享一套W、W·与U、U·
3、RNN中存在的问题
使用梯度下降法训练RNN实际上就是调整几个权重参数
Wx对应于上面的输入层权值矩阵U
Ws对应于隐藏层传递的权值矩阵W
Wo对应于上面的输出层权值矩阵V
使用误差函数求偏导得到梯度公式:
可以看出W0求偏导并没有长期依赖
对于Wx与Ws 求偏导,会随着时间序列产生长期依赖。
因为St会随着时间序列向前传播,而St又是Wx、Ws的函数
----------------------------数学公式----------------------------
任意时刻Wx、Ws求偏导公式:
对Ws也一样,外加tanh激活函数查看效果
解决办法:
梯度爆炸:
梯度爆炸的时候,我们的程序会收到NaN错误。我们也可以设置一个梯度阈值,当梯度超过这个阈值的时候可以直接截取。
梯度消失:
(1)合理的初始化权重值。初始化权重,使每个神经元尽可能不要取极大或极小值,以躲开梯度消失的区域。
(2)使用relu代替sigmoid和tanh作为激活函数。
(3)使用其他结构的RNNs,比如长短时记忆网络(LTSM)和Gated Recurrent Unit(GRU),这是最流行的做法。我们将在以后的文章中介绍这两种网络。
最后
以上就是受伤蚂蚁为你收集整理的使用例子看懂RNN的全部内容,希望文章能够帮你解决使用例子看懂RNN所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复