赞
踩
一、RNN概述
做笔记自用 转载原文链接
1.什么是RNN?
RNN是一种特殊的神经网络结构,是一种时间系列模型, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种'记忆'功能.
RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。
2.RNN的应用领域
机器翻译
语音识别
图像描述生成等
二、RNN的结构
1.RNN模型结构
RNN具有时间"记忆"的功能,那么它是怎么实现所谓的"记忆"的呢?
如上图所示,RNN主要有输入层,隐藏层,输出层,并且隐藏层有循环更新,就是实现时间记忆功能的方法,下面将这个循环展开:
如图所示为层级展开图. t-1, t, t+1表示时间序列. X表示输入的样本. St表示样本在时间t处的的记忆,St = f(W*St-1 +U*Xt). W表示输入的权重, U表示此刻输入的样本的权重, V表示输出的样本权重。
在t =1时刻, 一般初始化输入S0=0, 随机初始化W,U,V, 进行下面的公式计算:
其中,f和g均为激活函数. 其中f可以是tanh,relu,sigmoid等激活函数,g通常是softmax也可以是其他。
时间就向前推进,此时的状态s1作为时刻1的记忆状态将参与下一个时刻的预测活动, 以此类推, 可以得到最终的输出值为:
注意: 1. 这里的W,U,V在每个时刻都是相等的(权重共享).
2. 隐藏状态可以理解为: S=f(现有的输入+过去记忆总结)
2. RNN反向传播
那么RNN的权重参数W,U,V都是怎么更新的呢?
由于每一步的输出不仅仅依赖当前步的网络,并且还需要前若干步网络的状态,那么这种BP改版的算法叫做Backpropagation Through Time(BPTT) , 也就是将输出端的误差值反向传递,运用梯度下降法进行更新.(不熟悉BP的可以参考这里)
也就是要求参数的梯度:
首先我们求解W的更新方法, 由前面的W的更新可以看出它是每个时刻的偏差的偏导数之和.
在这里我们以 t = 3时刻为例, 根据链式求导法则可以得到t = 3时刻的偏导数为:
此时, 根据公式我们会发现, S3除了和W有关之外, 还和前一时刻S2有关.
对于S3直接展开得到下面的式子:
对于S2直接展开得到下面的式子:
对于S1直接展开得到下面的式子:
将上述三个式子合并得到:
这样就得到了公式:
这里要说明的是:表示的是S3对W直接求导, 不考虑S2的影响.(也就是例如y = f(x)*g(x)对x求导一样)
其次是对U的更新方法. 由于参数U求解和W求解类似,这里就不在赘述了,最终得到的具体的公式如下:
最后,给出V的更新公式(V只和输出O有关):
注:RNN它处理时间序列的问题的效果很好, 但是仍然存在着一些问题, 其中较为严重的是容易出现梯度消失或者梯度爆炸的问题。RNN有点过时啦,现在都用transformer模型比较多
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。