循环神经网络——下篇【深度学习】【PyTorch】【d2l】

6、循环神经网络

6.7、深度循环神经网络

6.7.1、理论部分

设计多个隐藏层,目的是为了获取更多的非线性性。深度循环神经网络需要大量的调参(如学习率和修剪) 来确保合适的收敛,模型的初始化也需要谨慎。

在这里插入图片描述

6.7.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()
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)

在这里插入图片描述

6.8、双向循环神经网络

6.8.1、理论部分

适合抽取特征,填空,如:填充缺失的单词、词元注释。

并不适合预测未来,它需要上下文,下文(未来)未知逻辑上讲不通的一个结构。

原理图

在这里插入图片描述

前向隐状态

H t → = Φ ( X t W x h ( f ) + H t − 1 → w h h ( f ) + b h ( f ) ) H^→_t = Φ(X_tW_{xh}^{(f)}+H_{t-1}^→w_{hh}^{(f)}+b_{h}^{(f)}) Ht=Φ(XtWxh(f)+Ht1whh(f)+bh(f))

反向隐状态

H t ← = Φ ( X t W x h ( b ) + H t + 1 ← w h h ( b ) + b h ( b ) ) H_t^← = Φ(X_tW_{xh}^{(b)}+H_{t+1}^←w_{hh}^{(b)}+b_h^{(b)}) Ht=Φ(XtWxh(b)+Ht+1whh(b)+bh(b))

隐状态

两者连接后,得到 H t H_t Ht

输出

O t = H t W h q + b q O_t= H_tW_{hq} +b_q Ot=HtWhq+bq

6.8.2、代码实现

双向循环神经网络的错误应用

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

# 加载数据
batch_size, num_steps, device = 32, 35, d2l.try_gpu()
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)
# 通过设置“bidirective=True”来定义双向LSTM模型
vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
lstm_layer = nn.LSTM(num_inputs, num_hiddens, num_layers, bidirectional=True)
model = d2l.RNNModel(lstm_layer, len(vocab))
model = model.to(device)
# 训练模型
num_epochs, lr = 500, 1
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)

在这里插入图片描述

不能盲目地将这一语言模型应用于任何预测任务。 尽管模型产出的困惑度是合理的, 该模型预测未来词元的能力却可能存在严重缺陷。

6.9、机器翻译

6.9.1、理论部分

将序列从一种语言自动翻译成另一种语言。

神经网络机器翻译方法,强调的是端到端的学习。机器翻译的数据集是由源语言和目标语言的文本序列对组成的。

(待补充。。。)

6.10、编码器解码器架构

6.10.1、理论部分

在这里插入图片描述

这个架构常用于编码器-解码器架构是一种常用于序列到序列(Seq2Seq)任务的深度学习架构。序列到序列的问题举例:NLP问题(机器翻译、问答系统和文本摘要)。

编码器(Encoder)

将输入形式编码成中间表达形式。

中间表示被称为“编码”或“特征”。

解码器(Decoder)

将中间表示解码成输出形式。

也会有额外的输入。为啥?

输入一些额外的信息来帮助解码器生成正确的输出序列。这些额外的信息可以是一些上下文信息,例如输入序列的长度、标点符号和语法结构等。

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来杯Sherry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值