循环神经网络RNN

1、简介

RNN主要用来处理序列数据,在传统的神经网络模型中,是从输入层到隐含层再到输出层,每层内的节点之间无连接,循环神经网络中一个当前神经元的输出与前面的输出也有关,网络会对前面的信息进行记忆并应用于当前神经元的计算中,隐藏层之间的节点是有连接的,并且隐藏层的输入不仅包含输入层的输出还包含上一时刻隐藏层的输出。理论上,RNN可以对任意长度的序列数据进行处理。

2、模型

一个经典的RNN网络:
在这里插入图片描述
RNN采用参数共享的机制,在时间维度上共享权重U、V、W一个简单的前向传播过程入下图所示:
在这里插入图片描述
h t h_t ht是t时刻隐藏层的值, y t y_t yt是t时刻输出层的值,也就是最终的标签,其中参数 w h h w_{hh} whh w x h w_{xh} wxh w h y w_{hy} why是需要通过训练学习到的参数。
通常我们这样定义一个RNN模型:
在这里插入图片描述

x x x是输入, h h h是隐层单元, o o o为输出, L L L为损失函数, y y y为训练集的标签。下标 t t t代表 t t t时刻的状态,其中需要注意的是,隐藏单元 h h h t t t时刻的表现不仅由此刻的输入决定,还受 t t t时刻之前时刻的影响。 V V V W W W U U U是权值。
h t = ϕ ( U x i + W h t − 1 + b ) h_t=\phi(Ux_i+Wh_{t-1}+b) ht=ϕ(Uxi+Wht1+b)
ϕ \phi ϕ是激活函数,一般为 t a n h tanh tanh函数, b b b是偏置。
t t t时刻的输出为:( c c c是偏置)
o t = V h t + c o_t=Vh_t+c ot=Vht+c
模型的输出: y ^ t = σ ( o t ) \hat y_t=\sigma(o_t) y^t=σ(ot)这里 σ \sigma σ是激活函数,通常RNN用于分类,所以常为softmax函数。

3、训练

RNN使用反向传播梯度下降法更新权重。
在这里插入图片描述
上图的损失函数的定义针对机器翻译,不同的任务,损失函数的设定不同。
由上图可知,对于较大程度的序列,使用RNN的训练过程容易出现梯度消失的现象。因为求到的偏导数本身就是一个比较小的值,较长的链式求导,易导致梯度几乎为0,导致系统误差仍是一个较大的值,最终导致训练失败。对于较长的序列,我们通常使用LSTM模型。

参考:
[1]赵卫东《机器学习》

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值