现代循环神经网络-3.深层循环神经网络【动手学深度学习v2】

上一篇:现代循环神经网络-2.长短期记忆网络(LSTM)【动手学深度学习v2】

3.深度循环神经网络

在前面几篇文章中,只讨论了具有一个单向隐藏层的循环神经网络。 其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。 只要交互类型建模具有足够的灵活性,这就不是一个大问题。 然而,对于一个单层来说,这可能具有相当的挑战性。 之前在线性模型中,我们通过添加更多的层来解决这个问题。 而在循环神经网络中,我们首先需要确定如何添加更多的层, 以及在哪里添加额外的非线性,因此这个问题有点棘手。

事实上,我们可以将多层循环神经网络堆叠在一起, 通过对几个简单层的组合,产生了一个灵活的机制。 特别是,数据可能与不同层的堆叠有关。 例如,我们可能希望保持有关金融市场状况 (熊市或牛市)的宏观数据可用, 而微观数据只记录较短期的时间动态。

下图描述了一个具有个隐藏层的深度循环神经网络, 每个隐状态都连续地传递到当前层的下一个时间步和下一层的当前时间步。

  • 浅RNN
    • 输入
    • 隐层
    • 输出
  • 深层RNN
    • 输入
    • 隐层
    • 隐层
    • 输出

H t ( l ) = ϕ l ( H t l − 1 W x h ( l ) + H ( l ) t − 1 W h h ( l ) + b h l ) H^{(l)}_t = \phi_{l}(H^{l-1}_t W^{(l)}_{xh}+H^(l)_{t-1} W^{(l)}_{hh} + b^{l}_{h}) Ht(l)=ϕl(Htl1Wxh(l)+H(l)t1Whh(l)+bhl)

O t = H t ( l ) W h q + b q O_t = H^{(l)}_t W_{hq} + b_q Ot=Ht(l)Whq+bq

其中l是循环神经网络的层数,t代表时间步,L是最后一层隐藏层。 H t H_t Ht需要考虑上一层的隐藏单元和上一时间步的隐藏单元的影响。

import torch
from torch import nn
from d2l import torch as d2l

batch_size, num_steps = 32, 35
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)

vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
device = d2l.try_gpu()
# 通过num_layers的值来设定隐藏层数
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)

num_epochs, lr = 500, 2
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)
perplexity 1.0, 222604.4 tokens/sec on cuda:0
time traveller for so it will be convenient to speak of himwas e
travelleryou can show black is white by argument said filby

对比单层网络来说,收敛速度明显增快。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值