您的位置:首页 > 汽车 > 新车 > 人工智能算法工程师(中级)课程11-PyTorch神经网络之循环神经网络RNN与代码详解

人工智能算法工程师(中级)课程11-PyTorch神经网络之循环神经网络RNN与代码详解

2024/9/8 7:51:19 来源:https://blog.csdn.net/weixin_42878111/article/details/140377549  浏览:    关键词:人工智能算法工程师(中级)课程11-PyTorch神经网络之循环神经网络RNN与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程11-PyTorch神经网络之循环神经网络RNN与代码详解。循环神经网络(Recurrent Neural Network,RNN)是一种处理序列数据的神经网络。本文将详细介绍RNN网络的原理、运行过程、类别、参数计算,以及应用场景,并附上基于PyTorch框架的完整可运行代码。

文章目录

  • 一、RNN网络的原理
    • RNN的基本结构
  • 二、RNN网络的运行过程
  • 三、RNN的类别
    • 1. 普通RNN
    • 2.LSTM模型:记忆魔法的图书馆
    • 3.GRU模型:高效的记忆工作室
  • 四、RNN网络的参数计算
  • 五、RNN网络的应用场景
  • 六、PyTorch框架搭建RNN网络的
  • 七、总结

一、RNN网络的原理

RNN网络的核心思想是利用历史信息来影响当前输出。与传统的前馈神经网络不同,RNN在网络结构中引入了循环结构,使得网络能够记忆前面的信息。

RNN的基本结构

  1. 输入层:输入序列数据,如 x 1 , x 2 , … , x t x_{1}, x_{2}, \ldots, x_{t} x1,x2,,xt
  2. 隐藏层:包含一系列的循环单元,每个循环单元负责处理当前输入和上一时刻的隐藏状态,输出当前时刻的隐藏状态。
  3. 输出层:根据当前时刻的隐藏状态输出结果。
    在这里插入图片描述

二、RNN网络的运行过程

RNN网络的运行过程可以表示为以下公式:
h t = f ( W h h h t − 1 + W x h x t + b h ) h_{t} = f(W_{hh}h_{t-1} + W_{xh}x_{t} + b_{h}) ht=f(Whhht1+Wxhxt+bh)
y t = g ( W h y h t + b y ) y_{t} = g(W_{hy}h_{t} + b_{y}) yt=g(Whyht+by)
其中, h t h_{t} ht表示第 t t t时刻的隐藏状态, x t x_{t} xt表示第 t t t时刻的输入, y t y_{t} yt表示第 t t t时刻的输出, W W W表示权重矩阵, b b b表示偏置向量, f f f g g g分别表示隐藏层和输出层的激活函数。

三、RNN的类别

1. 普通RNN

最简单的RNN结构,存在梯度消失和梯度爆炸问题,难以学习长距离依赖。

2.LSTM模型:记忆魔法的图书馆

想象一下,LSTM模型就像一个拥有魔法能力的图书馆。这个图书馆的特殊之处在于,它能够记住很久以前读过的书籍内容,并且能够决定哪些信息是重要的,需要长期保留,哪些信息是可以丢弃的。

魔法书架(细胞状态)
图书馆的中心有一个魔法书架,称为“细胞状态”。这个书架上的书可以长期保存,是图书馆记忆的核心。书架上的书籍可以随着时间流动,新的书籍可以加入,旧的书籍也可以被替换。
魔法门(门结构)
图书馆有三个魔法门:遗忘门、输入门和输出门。
遗忘门
这个门决定哪些旧书籍(信息)不再重要,需要从书架上移除。如果某个信息对未来的预测不再重要,遗忘门就会让它“消失”。
输入门
这个门负责决定哪些新书(新信息)应该被添加到书架上。它检查新来的书籍,并决定哪些是有价值的,可以增强图书馆的记忆。
输出门
这个门决定哪些书籍的内容需要被阅读(输出),以影响图书馆的下一步行动。它查看书架上的书籍,并决定哪些信息需要传递到下一个时间步。
在这里插入图片描述

3.GRU模型:高效的记忆工作室

现在,让我们将GRU模型想象成一个高效的记忆工作室。这个工作室的任务与图书馆相似,但是它更简洁,更高效。
工作室的一体化空间(更新门和重置门)
GRU模型将LSTM的遗忘门和输入门合并成了一个叫做“更新门”的机制。同时,它还有一个“重置门”。
更新门
这个门同时负责决定哪些信息需要被遗忘,以及哪些新信息需要被存储。它就像一个高效的助手,一边清理旧资料,一边挑选新资料。
重置门
这个门决定如何将新的输入信息与旧的记忆相结合。有时候,我们需要完全忘记旧的信息,以便更好地吸收新的信息。
在这里插入图片描述

四、RNN网络的参数计算

以普通RNN为例,假设输入序列长度为 T T T,隐藏层维度为 H H H,输出维度为 O O O。则网络的参数计算如下:

  1. 输入权重矩阵: W x h ∈ R H × X W_{xh} \in \mathbb{R}^{H \times X} WxhRH×X,其中 X X X为输入维度。
  2. 隐藏权重矩阵: W h h ∈ R H × H W_{hh} \in \mathbb{R}^{H \times H} WhhRH×H
  3. 输出权重矩阵: W h y ∈ R O × H W_{hy} \in \mathbb{R}^{O \times H} WhyRO×H
  4. 隐藏层偏置向量: b h ∈ R H b_{h} \in \mathbb{R}^{H} bhRH
  5. 输出层偏置向量: b y ∈ R O b_{y} \in \mathbb{R}^{O} byRO

五、RNN网络的应用场景

  1. 自然语言处理:如文本分类、情感分析、机器翻译等。
  2. 语音识别:将语音信号转换为文字。
  3. 时间序列预测:如股票价格预测、气温预测等。

六、PyTorch框架搭建RNN网络的

下面是基于PyTorch框架的RNN网络实现代码:

import torch
import torch.nn as nn
# 定义RNN模型
class RNN(nn.Module):def __init__(self, input_size, hidden_size, output_size):super(RNN, self).__init__()self.hidden_size = hidden_size# 输入权重矩阵self.W_xh = nn.Parameter(torch.randn(input_size, hidden_size))# 隐藏权重矩阵self.W_hh = nn.Parameter(torch.randn(hidden_size, hidden_size))# 输出权重矩阵self.W_hy = nn.Parameter(torch.randn(hidden_size, output_size))# 隐藏层偏置向量self.b_h = nn.Parameter(torch.randn(hidden_size))# 输出层偏置向量self.b_y = nn.Parameter(torch.randn(output_size))def forward(self, x):h = torch.zeros(1, self.hidden_size)for i in range(x.size(0)):h = torch.tanh(torch.mm(x[i], self.W_xh) + torch.mm(h, self.W_hh) + self.b_h)y = torch.mm(h, self.W_hy) + self.b_yreturn y
# 实例化模型
input_size = 10
hidden_size = 20
output_size = 1
model = RNN(input_size, hidden_size, output_size)
# 损失函数和优化器
criterion = nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 输入数据
x = torch.randn(5, input_size)
y_true = torch.randn(output_size)
# 训练模型
for epoch in range(100):model.zero_grad()y_pred = model(x)loss = criterion(y_pred, y_true)loss.backward()optimizer.step()if (epoch + 1) % 10 == 0:print(f'Epoch [{epoch+1}/100], Loss: {loss.item()}')
# 测试模型
with torch.no_grad():y_pred = model(x)print(f'Predicted: {y_pred}, True: {y_true}')

以上我利用pytorch搭建了一个RNN模型,用于序列数据的预测。详细解释一下代码:

  1. 定义RNN模型类,继承自nn.Module
  2. 在初始化方法中,定义了输入权重矩阵 W x h W_xh Wxh、隐藏权重矩阵 W h h W_hh Whh、输出权重矩阵 W h y W_hy Why、隐藏层偏置向量 b h b_h bh和输出层偏置向量 b y b_y by
  3. f o r w a r d forward forward方法实现了RNN的前向传播过程。对于每个时间步,计算隐藏状态 h h h,并在最后一个时间步计算输出 y y y
  4. 实例化RNN模型,设置输入维度、隐藏层维度和输出维度。
  5. 定义损失函数 M S E L o s s MSELoss MSELoss和优化器 S G D SGD SGD
  6. 生成随机的输入数据 x x x和真实标签 y t r u e y_true ytrue
  7. 训练模型,通过前向传播、计算损失、反向传播和更新权重。
  8. 每隔10个epoch打印损失,观察模型训练过程。
  9. 在测试阶段,关闭梯度计算,预测输入数据的输出,并与真实标签进行比较。

七、总结

本文详细介绍了循环神经网络(RNN)的原理、运行过程、类别、参数计算和应用场景,并通过PyTorch框架给出了一个完整的RNN模型实现。通过本文,读者可以了解到RNN在处理序列数据方面的优势,以及如何在实际应用中使用RNN。
需要注意的是,实际应用中通常会使用PyTorch提供的内置RNN模块,如nn.RNNnn.LSTMnn.GRU,这些模块提供了更高效、更灵活的实现。以下是一个使用PyTorch内置LSTM模块的示例:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com