9.3深度循环神经网络

发布于:2025-09-09 ⋅ 阅读:(22) ⋅ 点赞:(0)

目前为止讨论了具有一个隐藏循环神经网络其中变量观测具体函数形式交互方式相当随意只要交互类型建模具有足够灵活性不是一个单问题然而对一个单层来说可能具有相当挑战性之前线性模型我们通过添加更多解决这个问题循环神经网络我们首先需要确定如何添加更多以及哪里添加额外非线性

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

9-8展示了一个具有L隐藏深度循环神经网络每个状态都连续传递当前下一个时间步下一层当前时间

9.3.1 函数依赖关系

我们可以将深度架构中函数依赖关系形势这个架构9-8展示L隐藏构成后续的讨论主要集中经典循环神经网络模型但是这些讨论也适应其他序列模型

假设时间步t又一个小批量输入数据Xt属于Rnxd同时l隐藏输出变量Ot属于Rnxq, 设置Ht = Xtl隐藏层状态使用激活函数Sigmal

Ht = Sigma (Ht Wxh + Ht-1Whh + Bh)

权重Wxh属于RhxhWhh属于Rhh偏置Bh属于Rlxh 都是l隐藏模型参数

Ot = HtWhq + Bq

其中权重Whq属于Rhxq偏置Bq属于Rlxq都是输出模型参数

与多层感知机一样隐藏L隐藏单元h都是参数也就是说他们可以我们调整用门控循环单元或者长短期记忆网络状态代替9.8状态进行计算可以很容易得到深度门控循环神经网络或者深度长短期记忆神经网络

9.3.2 简洁实现

实现多层循环神经网络所需许多逻辑细节高级API都是现成为简单起见我们仅仅示范使用此类内置函数实现方式长短期记忆网络模型为例其实现代码之前9.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)

这样参数类型架构决策也与9.2中的决策非常相似因为我们不同词元所以输入输出都选择相同数量vocab_size单元数量仍然256, 唯一区别我们现在通过num_layers 设定隐藏

vocab_size, num_hiddens, num_layers = len(vocab), 256, 2

num_inputs = vocab_size

device = d2l.try_gpu()

lstm = nn.LSTM(num_inputs, num_hiddens, num_layers)

model = d2l.RNNModel(lstm_layer, len(vocab))

model=model.to(device)

9.3.3 训练预测

使用长短期记忆网络模型实例化两个层因此训练速度大大降低了

num_epochs, lr = 500, 2

d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)

小结

在深度循环神经网络状态信息传递当前下一个时间步下一层当前时间步

有许多不同风格深度循环神经网络长短期记忆网络门控循环单元常规循环神经网络这些模型深度学习框架高级API都有涵盖

总体而言深度循环神经网络需要大量调参来确保合适收敛模型初始化也需要谨慎


网站公告

今日签到

点亮在社区的每一天
去签到