4.7.深层循环神经网络
深层循环网络
就是更深了,因为之前的网络都只有一层隐藏层,弄多一点

我们将多层循环神经网络堆叠在一起,通过对几个简单层的组合,产生了一个灵活的机制。上图展示了一个具有LL个隐藏层的深度循环神经网络,每个隐状态都连续地传递到当前层的下一个时间步和下一层的当前步。
1.函数依赖关系
假设在时间步tt有一个小批量的输入数据Xt∈Rn×dX_t\in \R^{n\times d}(样本数:n,每个样本中的输入数:d),同时,将第ll个隐藏层(l=1,⋯ ,Ll=1,\cdots,L)的隐状态设为KaTeX parse error: Expected group as argument to '\H' at position 3: \H_̲t^{(l)}\in \R^{…(隐藏单元数:h),输出层变量设为Ot∈Rn×qO_t\in \R^{n\times q}(输出数:qq),设置Ht(0)=XtH^{(0)}t = X_t,第ll个隐藏层的隐状态使用激活函数ϕt\phi_t,则:
Ht(l)=ϕ(Ht(l−1)Wxh(l)+Ht−1(l)Whh(l)+bh(l)) H_t{(l)}=\phi(H_t{(l-1)}W{xh}{(l)}+H_{t-1}{(l)}W_{hh}{(l)}+b_h{(l)})
其中权重Wxh∈Rh×q,Whh(l)∈Rh×hW_{xh}\in \R^{h\times q},W_{hh}^{(l)}\in R^{h\times h}和偏置bh∈R1×hb_h\in \R ^{1\times h}都是第l个隐藏层的模型参数。
最后,输出层的计算仅基于第ll个隐藏层的最终的隐状态:
Ot=Ht(L)Whq+bq O_t = H_t^{(L)} W_{hq} +b_q
其中,权重Whq∈Rh×qW_{hq}\in \R ^{h\times q}和偏置bq∈R1×qb_q \in \R ^{1\times q}都是输出层的模型参数
使用多个隐藏层来获得更多的非线性性。
2.代码实现
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*1.0, num_epochs, device)
python

