自己动手实现深度学习框架-7 RNN层--GRU, LSTM

本文介绍了如何在深度学习框架中实现RNN、GRU和LSTM层,详细讲解了各个门控单元的工作原理,并通过代码实现展示了正余弦叠加函数的拟合过程,验证了GRU和LSTM模型的有效性。
摘要由CSDN通过智能技术生成

代码仓库: https://github.com/brandonlyg/cute-dl

目标

        这个阶段会给cute-dl添加循环层,使之能够支持RNN–循环神经网络. 具体目标包括:

  1. 添加激活函数sigmoid, tanh.
  2. 添加GRU(Gate Recurrent Unit)实现.
  3. 添加LSTM(Long Short-term Memory)实现.
  4. 使用基于GRU和LSTM的RNN模型拟合一个正余弦叠加函数.

RNN原理

原始的RNN

        RNN模型用来捕捉序列数据的特征. 给定一个长度为T的输入系列 X = ( x 1 , x 2 , . . , X T ) X=(x_1, x_2, .., X_T) X=(x1,x2,..,XT), RNN层输出一个长度为T的序列 H = ( h 1 , h 2 , . . . , H T ) H=(h_1, h_2, ..., H_T) H=(h1,h2,...,HT), 对于任意时间步t, 可以表示为:
H t = δ ( X t W x + H t − 1 W h + b ) , t = 2 , 3 , . . , T H_t = δ(X_tW_x + H_{t-1}W_h + b), \quad t = 2, 3, .., T Ht=δ(XtWx+Ht1Wh+b),t=2,3,..,T
        函数δ是sigmoid函数:
δ = 1 1 + e − x δ = \frac{1}{1 + e^{-x}} δ=1+ex1
        H t H_t Ht包含了前面第1到t-1步的所有信息。 和CNN层类似, CNN层在空间上共享参数, RNN层在时间步上共享参数 W x , W h , b W_x, W_h, b Wx,Wh,b.

        RNN层中隐藏层的数量为T-2, 如果T较大(超过10), 反向传播是很容易出现梯度爆炸. GRU和LSTM就是为了解决这个问题而诞生, 这两种模型,可以让RNN能够支持长度超过1000的输入序列。

GRU

        GRU使用了不同功能的门控单元, 分别捕捉序列上不同时间跨度的的依赖关系。每个门控单元都会都有独立的参数, 这些参数在时间步上共享。

        GRU的门控单元有:

        R t = δ ( X t W x r + H t − 1 W h r + b r ) R_t = δ(X_tW^r_x + H_{t-1}W^r_h + b^r) Rt=δ(XtWxr+Ht1Whr+br), 重置门用于捕捉短期依赖关系.

        U t = δ ( X t W x u + H t − 1 W h u + b u ) U_t = δ(X_tW^u_x + H_{t-1}W^u_h + b^u) U

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值