【自然语言处理】GRU模型

本文介绍了GRU(GatedRecurrentUnit)的结构,包括更新门和重置门的作用,以及与LSTM的区别。讨论了双向GRU的应用,并提供了如何在PyTorch中使用nn.GRU类的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GRU

    a.GRU(Gated Recurrent Unit)也称门控循环单元结构,它也是传统RNN的变体。同LSTM一样也可以捕捉长序列之间的语义关联,缓解梯度爆炸或梯度消失现象,但它的结构和计算要比LSTM要简单。但GRU不能完全解决梯度消失的问题,同时其作为RNN的变体,有着RNN结构本身的一大弊端,即不能进行并行计算,这在数据量和模型体量逐步增大的未来,是RNN发展的瓶颈

b.GRU的核心结构可以分为两部分:更新门和重置门

c.GRU的内部结构如下图所示

      同之前分析过的LSTM的门控一样,首先要计算更新重置门和更新门的门值,分别为r(t)和z(t),计算方法就是使用h(t-1)和x(t)进行拼接再进行线性变换,再使用sigmoid进行激活。之后更新门门值作用在h(t-1)上代表控制上一时间步传来的信息有多少可以被利用。接着使用更新后的h(t-1)进行基本的RNN计算,即与x(t)拼接进行线性变换,经过tanh激活后得到新的h(t)。最后重置门的门值会作用在新的h(t)上,而1-门值会作用在h(t-1)上,随后将两者结果相加,得到最终的输出状态h(t),这个过程意味着重置门有能力重置之前所有的计算,当门值趋向于1时得到新的h(t),当门值趋向于0时得到上一时间步的h(t-1)。

Bi-GRU

    a.即双向GRU,不改变GRU的内部结构,而是将模型在不同方向应用两次,再将两次得到的结果进行拼接作为最后的输出结果。

GRU的使用

a.调用torch.nn.GRU

b.nn.GRU类初始化主要参数解释

   input_size:输入张量x中特征维度的大小

   hidden_size:隐藏层张量h中特征维度的大小

   num_layers:隐含层的数量

   bidirectional:是否选择双向GRU,如果为True,则为使用。默认为False

c.nn.GRU类实例化对象的主要参数解释:

    input:输入张量

    h0:初始化的隐藏层张量h

d.简单的代码调用

import torch
import torch.nn as nn
#定义LSTM参数的含义:(input_size,hidden_size,num_layers)
gru=nn.GRU(5,6,2)
#定义输入张量参数的含义:(squence_length,batch_size,input_size)
input=torch.randn(1,3,5)
#定义隐层初始化张量:(num_layers*num_directions(方向数),batch_size,hidden_size)
h0=torch.randn(2,3,6)

output,hn=gru(input,h0)
print(output)
print(hn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值