RNN笔记

RNN(Recurrent Neural Network)是深度神经网络的一种,因为拥有「记忆」功能,主要应用在时序相关的场景中,如NLP、图像标注等。目前应用比较多的是RNN 的一种变种LSTM(Long Short-term Memory)、GRU 等。

先来看一张 RNN 经典的图

  

RNN 的计算公式如下:

s_t=f(Ux_t + Ws_{t-1})

o_t = \mathrm{softmax}(Vs_t)

其中,x_t是 t 时刻的输入;

s_t是 t 时刻的「记忆」,也可以说是系统的状态, 它保存了之前的信息,一般情况下,f某个非线性函数,比如 RELU,tanh 等;

o_t是 t 时刻的输出,这个输入有时候有用,有时候没用,具体看在什么场景了,如果在翻译场景中,应该是有用的,如果在情感分类中,那只有最后一个输出是有用的。

上面就介绍完 RNN是什么了,下面说一下RNN 的参数 W/U/V 怎么调节以拟合训练数据。

这里也是用到了反向传播,是一种增强版,BPTT(Backpropagation Through Time),

首先说一下链式法则,链式法则主要提供了计算复杂函数梯度(导数)的方法。

我们来看一个具体的例子:

上式就是一个 sigmoid 函数,  

{\displaystyle S(t)={\frac {1}{1+e^{-t}}}.}

其中,t=W0*X0 + W1*X1+W2

感兴趣的可以自己推到一下哈

ok,链式法则知道后,BP 算法应该也差不多了,就是通过链式法则来调节网络参数,达到训练目的。

下来再介绍下 BPTT 在 RNN 中的应用。

为什么这里是 BPTT 呢,从 RNN 的计算公式可以看到,V 是可以应用 BP 算法进行优化的,但是 W/U 就不可以。那我们该怎么做呢?

我们先来看下 V

\begin{aligned}  \frac{\partial E_3}{\partial V} &=\frac{\partial E_3}{\partial \hat{y}_3}\frac{\partial\hat{y}_3}{\partial V}\\  &=\frac{\partial E_3}{\partial \hat{y}_3}\frac{\partial\hat{y}_3}{\partial z_3}\frac{\partial z_3}{\partial V}\\  &=(\hat{y}_3 - y_3) \otimes s_3 \\  \end{aligned}

V 可以很容易的求出来

接着我们看下 W/U,

好,那BPTT 我们就了解到这里

接下来就是动手实现 RNN 了

可以参考这个 Recurrent Neural Networks Tutorial, Part 2 – Implementing a RNN with Python, Numpy and Theano

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值