RNN与CharRNN

本文学习循环神经网络(RNN)以及相关的项目,首先会介绍 RNN 经典的结构,以及它的几个变体 。 接着将在 TensorFlow 中使用经典的结构实现一个有趣的项目: CharRNN。 Char RNN 可以对文本的字符级概率进行建模,从而生成各种类型的文本 。

 

一、RNN 的原理

1、经典 RNN 的结构

RNN 的英文全称是 Recurrent Neural Networks,即循环神经网络, 是一种对序列型数据进行建模的深度模型。在实际应用中有很多序列形的数据,例如:自然语言处理问题、语言处理、时间序列问题。序列形的数据不太好用原始的神经网络处理 。

 

(1)隐状态h的计算

为了处理建模序列问题 , 引入了隐状态 h ( hidden state )的概念,h 可以对序列形的数据提取特征,接着再转换为输出。

在计算时,每一步使用的参数 U、W、b 都是一样的,即每个步骤的参数都是共享的,这是 RNN 的重要特点。图中的 U、 W是参数矩阵,b是偏置项参数,f是激活函数,在经典的RNN结构中,通常使用 tanh 作为激活函数 。

 

(2)输出y的计算

目前的 RNN 还没有输出,得到输出值的方法是直接通过 h 进行计算。一个箭头表示对相应的向量做一次类似于f(Wx+b)的变换。

           

V 和 c 是新的参数,通常处理的是分类问题,因此使用 Softmax 函数将输出转换成各个类别的概率。此处的箭头表示对 hi 进行一次变换,得到输出 Yi。这就是经典的RNN结构,输入和输出序列必须是要等长的。由于输入和输出序列必须是要等长的,经典RNN的适用范围比较小 ,但也有一些问题适合用经典的RNN结构建模,如:计算视频中每一帧的分类标签;输入为字符 ,输出为下一个字符的概率。这是著名的 Char RNN 。

 

(3)经典RNN数学定义

设输入为 X1,X2,... ,对应的隐状态为 h1,h2,... , 输出为 Y1,Y2  ... ,则经典RNN的运算过程表示为

其中, U,V,W,b,c均为参数,而 f 表示激活函数,一般为 tanh 函数。

 

2、N VS 1 RNN的结构

若问题的输入是一个序列,输出是一个单独的值而不是序列,此时应该如何建模呢?只在最后一个 h 上进行输出变换就可以了。这种结构通常用来处理序列分类问题 。如输入一段文字判别所属的类别,输入一个句子判断其情感倾向,输入一段视频并判断它的类别等等。

(1)结构

 

(2)数学定义

设输入为 X1,X2,... ,对应的隐状态为 h1,h2,... ,输出为y,那么运算过程为:,输出时对最后一个隐状态做运算即可:

 

3、1 VS N RNN的结构

输入不是序列而输出为序列的情况怎么处理?

(1)结构

可以只在序列开始进行输入计算。

还有一种结构是把输入信息X作为每个阶段的输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值