机器学习入门--门控循环单元(GRU)原理与实践

这篇具有很好参考价值的文章主要介绍了机器学习入门--门控循环单元(GRU)原理与实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GRU模型

随着深度学习领域的快速发展,循环神经网络(RNN)已成为自然语言处理(NLP)等领域中常用的模型之一。但是,在RNN中,如果时间步数较大,会导致梯度消失或爆炸的问题,这影响了模型的训练效果。为了解决这个问题,研究人员提出了新的模型,其中GRU是其中的一种。

本文将介绍GRU的数学原理、代码实现,并通过pytorch和sklearn的数据集进行试验,最后对该模型进行总结。

数学原理

GRU是一种门控循环单元(Gated Recurrent Unit)模型。与传统的RNN相比,它具有更强的建模能力和更好的性能。

重置门和更新门

在GRU中,每个时间步有两个状态:隐藏状态 h t h_t ht和更新门 r t r_t rt。。更新门控制如何从先前的状态中获得信息,而隐藏状态捕捉序列中的长期依赖关系。

GRU的核心思想是使用“门”来控制信息的流动。这些门是由sigmoid激活函数控制的,它们决定了哪些信息被保留和传递。
在每个时间步 t t t,GRU模型执行以下操作:

1.计算重置门
r t = σ ( W r [ x t , h t − 1 ] ) r_t = \sigma(W_r[x_t, h_{t-1}]) rt=σ(Wr[xt,ht1])
其中, W r W_r Wr是权重矩阵, σ \sigma σ表示sigmoid函数。重置门 r t r_t rt告诉模型是否要忽略先前的隐藏状态 h t − 1 h_{t-1} ht1,并只依赖于当前输入
x t x_t xt

2.计算更新门
z t = σ ( W z [ x t , h t − 1 ] ) z_t = \sigma(W_z[x_t, h_{t-1}]) zt=σ(Wz[xt,ht1])
其中,更新门 z t z_t zt告诉模型新的隐藏状态 h t h_t ht在多大程度上应该使用先前的状态 h t − 1 h_{t-1} ht1

候选隐藏状态和隐藏状态

在计算完重置门和更新门之后,我们可以计算候选隐藏状态 h ~ t \tilde{h}_{t} h~t和隐藏状态 h t h_t ht

1.计算候选隐藏状态
h ~ t = tanh ⁡ ( W [ x t , r t ∗ h t − 1 ] ) \tilde{h}_{t} = \tanh(W[x_t, r_t * h_{t-1}]) h~t=tanh(W[xt,rtht1])
其中, W W W是权重矩阵。候选隐藏状态 h ~ t \tilde{h}_{t} h~t利用当前输入 x t x_t xt和重置门 r t r_t rt来估计下一个可能的隐藏状态。

2.计算隐藏状态
h t = ( 1 − z t ) ∗ h t − 1 + z t ∗ h ~ t h_{t} = (1 - z_t) * h_{t-1} + z_t * \tilde{h}_{t} ht=(1zt)ht1+zth~t
这是GRU的最终隐藏状态公式。它在候选隐藏状态 h ~ t \tilde{h}_{t} h~t和先前的隐藏状态 h t h_t ht之间进行加权,其中权重由更新门 z t z_t zt控制。

代码实现

下面是使用pytorch和sklearn的房价数据集实现GRU的示例代码:

import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt

# 加载数据集并进行标准化
data = load_boston()
X = data.data
y = data.target
scaler = StandardScaler()
X = scaler.fit_transform(X)
y = y.reshape(-1, 1)

# 转换为张量
X = torch.tensor(X, dtype=torch.float32).unsqueeze(1)
y = torch.tensor(y, dtype=torch.float32)

# 定义GRU模型
class GRUNet(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(GRUNet, self).__init__()
        self.hidden_size = hidden_size
        self.gru = nn.GRU(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

    def forward(self, x):
        out, _ = self.gru(x)
        out = self.fc(out[:, -1, :])
        return out

input_size = X.shape[2]
hidden_size = 32
output_size = 1
model = GRUNet(input_size, hidden_size, output_size)

# 定义损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# 训练模型
num_epochs = 10000
loss_list = []
for epoch in range(num_epochs):
    optimizer.zero_grad()
    outputs = model(X)
    loss = criterion(outputs, y)
    loss.backward()
    optimizer.step()

    if (epoch+1) % 100 == 0:
        loss_list.append(loss.item())
        print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item()}')

# 可视化损失曲线
plt.plot(range(100), loss_list)
plt.xlabel('num_epochs')
plt.ylabel('loss of GRU Training')
plt.show()

# 预测新数据
new_data_point = X[0].reshape(1, 1, -1)
prediction = model(new_data_point)
print(f'Predicted value: {prediction.item()}')

上述代码首先加载并标准化房价数据集,然后定义了一个包含GRU层和全连接层的GRUNet模型,并使用均方误差作为损失函数和Adam优化器进行训练。训练完成后,使用matplotlib库绘制损失曲线(如下图所示),并使用训练好的模型对新的数据点进行预测。
机器学习入门--门控循环单元(GRU)原理与实践,机器学习入门,机器学习,gru,人工智能

总结

GRU是一种门控循环单元模型,它通过更新门和重置门,有效地解决了梯度消失或爆炸的问题。在本文中,我们介绍了GRU的数学原理、代码实现和代码解释,并通过pytorch和sklearn的房价数据集进行了试验。文章来源地址https://www.toymoban.com/news/detail-828991.html

到了这里,关于机器学习入门--门控循环单元(GRU)原理与实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【长短时记忆网络(LSTM)和门控循环单元(GRU)】

    长短时记忆网络(LSTM)和门控循环单元(GRU)都是为了解决传统循环神经网络(RNN)在处理长序列数据时遇到的梯度消失问题而设计的。它们通过引入门控机制,有效地保持长期依赖信息,同时避免了梯度在时间反向传播过程中消失的问题。 LSTM通过使用三个门(输入门、遗

    2024年04月09日
    浏览(44)
  • 故障诊断模型 | Maltab实现GRU门控循环单元故障诊断

    故障诊断模型 | Maltab实现GRU门控循环单元故障诊断 利用各种检查和测试方法,发现系统和设备是否存在故障的过程是故障检测;而进一步确定故障所在大致部位的过程是故障定位。故障检测和故障定位同属网络生存性范畴。要求把故障定位到实施修理时可更换的产品层次(可

    2024年02月08日
    浏览(49)
  • 回归预测 | MATLAB实现GRU门控循环单元多输入多输出

    预测效果 基本介绍 MATLAB实现GRU门控循环单元多输入多输出,数据为多输入多输出预测数据,输入10个特征,输出3个变量,程序乱码是由于版本不一致导致,可以用记事本打开复制到你的文件,运行环境MATLAB2020b及以上。命令窗口输出MAE和R2,可在下载区获取数据和程序内容。

    2024年02月12日
    浏览(42)
  • GRU门控循环单元神经网络的MATLAB实现(含源代码)

    在深度学习领域,循环神经网络(RNN)因其在处理序列数据方面的卓越能力而受到广泛关注。GRU(门控循环单元)作为RNN的一种变体,以其在捕捉时间序列长距离依赖关系方面的高效性而备受推崇。在本文中,我们将探讨如何在MATLAB环境中实现GRU网络,以及该实现在处理各类

    2024年01月21日
    浏览(47)
  • 分类预测 | MATLAB实现PCA-GRU(主成分门控循环单元)分类预测

    预测效果 基本介绍 Matlab实现基于PCA-GRU主成分分析-门控循环单元多输入分类预测(完整程序和数据) Matlab实现基于PCA-GRU主成分分析-门控循环单元多输入分类预测(完整程序和数据) 基于主成分分析-门控循环单元分类预测,PCA-GRU分类预测,多输入分类预测(Matlab完整程序和

    2024年02月09日
    浏览(40)
  • 时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测

    预测效果 基本介绍 1.MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测; 2.运行环境为Matlab2021b; 3.单变量时间序列预测; 4.data为数据集,excel数据,单变量时间序列,MainTCN_GRUTS.m为主程序,运行即可,所有文件放在一个文件夹; 5.命令窗口输出R2、MSE、RMSE、MAE、MAPE多指标评

    2024年02月09日
    浏览(47)
  • 回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(不调用工具箱函数)

    预测效果 基本介绍 GRU神经网络是LSTM神经网络的一种变体,LSTM 神经网 络是在RNN的基础上发展起来的。RNN是一种成熟的机器学习方法,在处理时序数列方面具有着很大优势。RNN中包含信号反馈结构,能将t时刻的输出信息与t时刻之前的信息相关联,具有动态特征和记忆功能。

    2024年02月16日
    浏览(48)
  • 时序预测 | MATLAB实现PSO-GRU(粒子群优化门控循环单元)时间序列预测

    预测效果 基本介绍 Matlab基于PSO-GRU粒子群算法优化门控循环单元的时间序列预测(完整程序和数据) Matlab基于PSO-GRU粒子群算法优化门控循环单元的时间序列预测,PSO-GRU时间序列预测(完整程序和数据) 优化参数为学习率,隐藏层节点个数,正则化参数,要求2020b及以上版本,

    2024年02月11日
    浏览(56)
  • 时序预测 | MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元时间序列预测

    预测效果 基本介绍 MATLAB实现WOA-GRU鲸鱼算法优化门控循环单元时间序列预测 基于鲸鱼算法优化门控循环单元(WOA-GRU)的时间序列预测。 优化参数为学习率,隐藏层节点个数,正则化参数,要求2020b及以上版本,matlab代码。 评价指标包括:MAE、MSE、RMSE等,代码质量极高,方便学习

    2023年04月27日
    浏览(37)
  • 时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测

    效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测。基于贝叶斯(bayes)优化门控循环单元的时间序列预测,BO-GRU/Bayes-GRU时间序列预测模型。 1.优化参数为:学习率,隐含层节点,正则化参数。 2.评价指标包括:R2、MAE、MSE、RMSE和MAPE等。 3.运行环境matlab202

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包