RNN原理及输入输出

循环神经网络

一、功能简介

循环神经网络(Recurrent Neural Neural Networks, RNN),是一种反馈网络。它可以有效处理序列特性的数据,能够挖掘数据中的时序信息以及语义信息。常用于语言识别、机器翻译、视频分析、生成图像描述的等。RNN主要用于时序类数据的处理,在文档分类、机器翻译、文本情感分析、文本预测等有着重要作用。

二、基本原理

RNN基本网络结构包括一个输入层,一个输出层,一个隐藏层和一个输出层。我们定义 X t X_t Xt表示 t t t时刻的输入, o t o_t ot表示 t t t时刻的输出, S t S_t St表示 t t t时刻的记忆。因为我们当前时刻的输出是由记忆和当前时刻的输入决定的,因此我们可以定义RNN的基本原理,即隐藏层当前时刻的值 S t S_t St不仅取决于这次的输入 X t X_t Xt,也取决于上一时刻隐藏层的值 S t − 1 S_{t-1} St1。用公式表示如下。
提供给下一时刻的记忆:
S t = σ 1 ( U ∗ X t + W ∗ S t − 1 + b ) S_t=\sigma_{1}(U*X_t+W*S_{t-1}+b) St=σ1(UXt+WSt1+b)
当前时刻的输出:
o t = σ 2 ( V ∗ S t + c ) o_t=\sigma_2(V*S_t+c) ot=σ2(VSt+c)
其中 σ ( ) \sigma() σ()是两个激活函数。 b b b c c c是两组偏置。而在整个模型中,网络中的每一个cell样本都共享了一组权重参数 ( U , V , W ) (U,V,W) (U,V,W)

三、输入格式

在官方文档中,RNN的输入格式是 ( s e q _ l e n , b a t c h _ s i z e , i n p u t _ s i z e ) (seq\_{len},batch\_size,input\_{size}) (seq_len,batch_size,input_size),即输入时一个三维向量。第一个维度表示序列长度,也就是按时间序列展开每个样本有多少个可见的cell。第三维input_size,表示每个时间步输入的x的特征维数,即输入的特征向量的长度。但是在实际应用中,我们常常会遇到一系列样本中每个序列长度不一致的情况,也就是seq_len不一致的情况。比如我们对电影评论进行情感分析时,不可能每个评论的长度都一样,这种情况下我们常常可以对输入序列进行处理,比如对长序列进行截断,对短序列在其之前进行字符补全,使得样本中序列长度一致。此外,我们也可以使用pad_sequence的方式,也就是使用滑动窗口对样本重新采样,使得batch中的样本等长。

四、输出格式

RNN的输出有三项分别为 o u t p u t , h n , c n output,h_n,c_n output,hn,cn。output是RNN最后一层神经网络的输出,维数为 ( s e q _ l e n , b a t c h _ s i z e , p r o j _ s i z e ) (seq\_len,batch\_size,proj\_size) (seq_len,batch_size,proj_size),前两项的大小和输入中一致。第三项是最后一层输出通过变换(比如softmax)得到的满足实际项目需要的输出大小。 h n h_n hn是所有层中每个时间步 o i o_i oi的输出,大小为 ( n u m _ l a y e r s , b a t c h _ s i z e , p r o j _ s i z e ) (num\_layers,batch\_size,proj\_size) (num_layers,batch_size,proj_size),参数大小同上, n u m _ l a y e r s num\_layers num_layers是隐藏层的个数。 c n c_n cn是所有层中每个时间步 S i S_i Si的输出,参数意义同上。RNN的结构如图所示:
在这里插入图片描述

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值