首页 > 其他分享 >机器学习——门控循环单元(GRU)

机器学习——门控循环单元(GRU)

时间:2023-11-14 11:35:56浏览次数:24  
标签:vocab 状态 GRU 重置 num d2l 门控 单元

在 8.7节中, 我们讨论了如何在循环神经网络中计算梯度, 以及矩阵连续乘积可以导致梯度消失或梯度爆炸的问题。 下面我们简单思考一下这种梯度异常在实践中的意义:

  • 我们可能会遇到这样的情况:早期观测值对预测所有未来观测值具有非常重要的意义。 考虑一个极端情况,其中第一个观测值包含一个校验和, 目标是在序列的末尾辨别校验和是否正确。 在这种情况下,第一个词元的影响至关重要。 我们希望有某些机制能够在一个记忆元里存储重要的早期信息。 

  • 我们可能会遇到这样的情况:一些词元没有相关的观测值。 例如,在对网页内容进行情感分析时, 可能有一些辅助HTML代码与网页传达的情绪无关。 我们希望有一些机制来跳过隐状态表示中的此类词元。

  • 我们可能会遇到这样的情况:序列的各个部分之间存在逻辑中断。 例如,书的章节之间可能会有过渡存在, 或者证券的熊市和牛市之间可能会有过渡存在。 在这种情况下,最好有一种方法来重置我们的内部状态表示。

 

门控隐状态

门控循环单元与普通的循环神经网络之间的关键区别在于: 前者支持隐状态的门控。 这意味着模型有专门的机制来确定应该何时更新隐状态, 以及应该何时重置隐状态。 这些机制是可学习的,并且能够解决了上面列出的问题。 例如,如果第一个词元非常重要, 模型将学会在第一次观测之后不更新隐状态。 同样,模型也可以学会跳过不相关的临时观测。 最后,模型还将学会在需要的时候重置隐状态。 下面我们将详细讨论各类门控。

 

重置门和更新门

 

 

候选隐状态

 

隐状态

总之,门控循环单元具有以下两个显著特征:

  • 重置门有助于捕获序列中的短期依赖关系;

  • 更新门有助于捕获序列中的长期依赖关系。

 

简洁实现

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, device = len(vocab), 256, d2l.try_gpu()
num_epochs, lr = 500, 1
model = d2l.RNNModelScratch(len(vocab), num_hiddens, device, get_params,
                            init_gru_state, gru)
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)

 

标签:vocab,状态,GRU,重置,num,d2l,门控,单元
From: https://www.cnblogs.com/yccy/p/17831213.html

相关文章

  • Junit单元测试下载、配置、使用
    Junit单元测试下载、配置、使用目录什么是Junit单元测试?为什么要使用Junit单元测试?如何下载(junit.jar和hamcrest-core都要下载):在IDEA中配置Junit(以下好的文件进行配置)Junit4常用注解Junit单元测试的使用1,@Test注解示例:2、用例的执行顺序:3,@Before示例:4,@After:5,@BeforeC......
  • java里junit 单元测试、注释(入门)
    什么是Junit单元测试?JUnit单元测试是指使用JUnit框架编写的针对代码中小的、独立的模块(通常是方法或者类)的测试。在JUnit中,您可以使用断言来验证代码的行为是否符合预期,以及使用注解来标记测试方法、测试套件等。执行单元测试可以帮助验证代码是否满足特定的业务需求和技术......
  • Readonly只针对input(text/password)和textarea有效,而disabled对于所有的表单元素有效
    Readonly只针对input(text/password)和textarea有效,而disabled对于所有的表单元素有效,包括select,radio,checkbox,button等Readonly和Disabled是用在表单中的两个属性,它们都能够做到使用户不能够更改表单域中的内容。但是它们之间有着微小的差别,总结如下:Readonly只针对input(tex......
  • C++U2-第12课-单元测评(二)
    上节课作业部分(点击跳转)单元测评2题目和答案解析1、 2、  3、不定长数组,不允许不初始化列,可以不初始化行;  4、比较常见的字符的ASCII码,空格为32,字符0为48,大写字母A为65,小写字母a为97  5、abs为绝对值函数,正数的绝对值是本身,负数的绝对值为相反数,ceil表示向......
  • Spring Junit单元测试
    发现通过Spring进行bean管理后,做测试会有各种不足,例如,很多人做单元测试的时候,还要在Before方法中,初始化Spring容器,导致容器被初始化多次。@Beforepublicvoidinit(){newFileSystemXmlApplicationContext("classpath:spring/spring-basic.xml");......
  • SpringBoot 单元测试
    1、什么是单元测试?单元测试(UnitTesting)是一种软件测试方法,用于验证和确认代码中的各个单元(通常是函数、方法或类)是否按照预期工作。单元测试旨在检测代码中的小部分,以确保其功能的正确性。2、单元测试有哪些好处?在单元测试中使用模拟对象来替代实际的数据库访问操作,不会实际修改数......
  • 使用Github Copilot生成单元测试并执行
    上一篇文章我们介绍了使用GithubCopilot完成代码编写本文我们继续使用GithubCopilot在已有代码的基础上生成代码测试并执行。一、先说一下代码的背景需要上需要提供一个度量衡的工具类,实现各种转换,例如将长度值转换为英寸将长度值转换为英里将长度值转换为厘米将长度......
  • C++U2-第11课-单元复习(二)
    上节课作业部分(点击跳转) 单元复习(二)[【字符串】作者名]【思路分析】1、定义字符串s2、使用cin>>s,输入字符串3、输出字符串的第一个字符s[0],因为第一个作者名前面没有-4、遍历字符串,遇到-的位置,输出此位置的下一个位置【参考代码】#include<iostream>#in......
  • grub损坏无法进入系统
    如果grub的文件损坏,在重新引导后会导致无法进入系统。进入紧急营救模式将系统关机挂载系统镜像进入bios界面开机时鼠标点进系统,按F2进入bios界面进行调试速度一定要快,系统启动立马连点F2选中第二个选项HardDrive,按-减号,改变启动顺序代表光驱优先启动光驱优先启动按F10保存加载......
  • 单元测试编写
      @SpringBootTest@RunWith(SpringJUnit4ClassRunner.class)publicclassHelloTest{@AutowiredprivateSysDictionaryDaodictionaryDao;@Beforepublicvoidbefore(){TableInfoHelper.initTableInfo(newMapperBuilderAssista......