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

文章目录

  • 6、循环神经网络
    • 6.7、深度循环神经网络
      • 6.7.1、理论部分
      • 6.7.2、代码实现
    • 6.8、双向循环神经网络
      • 6.8.1、理论部分
      • 6.8.2、代码实现
    • 6.9、机器翻译
      • 6.9.1、理论部分
    • 6.10、编码器解码器架构
      • 6.10.1、理论部分

6、循环神经网络

6.7、深度循环神经网络

6.7.1、理论部分

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

循环神经网络——下篇【深度学习】【PyTorch】【d2l】_第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)

循环神经网络——下篇【深度学习】【PyTorch】【d2l】_第2张图片

6.8、双向循环神经网络

6.8.1、理论部分

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

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

原理图

循环神经网络——下篇【深度学习】【PyTorch】【d2l】_第3张图片

前向隐状态

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)

循环神经网络——下篇【深度学习】【PyTorch】【d2l】_第4张图片

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

6.9、机器翻译

6.9.1、理论部分

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

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

(待补充。。。)

6.10、编码器解码器架构

6.10.1、理论部分

循环神经网络——下篇【深度学习】【PyTorch】【d2l】_第5张图片

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

编码器(Encoder)

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

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

解码器(Decoder)

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

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

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

你可能感兴趣的:(深度学习,Python,深度学习,rnn,pytorch)