8-4 循环神经网络

news2024/11/27 2:18:16

请添加图片描述
对于 (8.4.2)中的函数 f f f,隐变量模型不是近似值。 毕竟 h t h_{t} ht是可以仅仅存储到目前为止观察到的所有数据, 然而这样的操作可能会使计算和存储的代价都变得昂贵。

回想一下,我们在前面讨论过的具有隐藏单元的隐藏层。 值得注意的是,隐藏层和隐状态指的是两个截然不同的概念。 如上所述,隐藏层在从输入到输出的路径上(以观测角度来理解)的隐藏的层, 而隐状态则是在给定步骤所做的任何事情(以技术角度来定义)的输入, 并且这些状态只能通过先前时间步的数据来计算

循环神经网络(recurrent neural networks,RNNs) 是具有隐状态的神经网络。 在介绍循环神经网络模型之前, 我们首先回顾 4-1节中介绍的多层感知机模型。

无隐状态的神经网络

请添加图片描述

有隐状态的循环神经网络

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

import torch
from d2l import torch as d2l

X, W_xh = torch.normal(0, 1, (3, 1)), torch.normal(0, 1, (1, 4))
H, W_hh = torch.normal(0, 1, (3, 4)), torch.normal(0, 1, (4, 4))
torch.matmul(X, W_xh) + torch.matmul(H, W_hh)

请添加图片描述
现在,我们沿列(轴1)拼接矩阵X和H, 沿行(轴0)拼接矩阵W_xh和W_hh。 这两个拼接分别产生形状 ( 3 , 5 ) (3,5) (3,5)和形状 ( 5 , 4 ) (5,4) (5,4)的矩阵。 再将这两个拼接的矩阵相乘, 我们得到与上面相同形状 ( 3 , 4 ) (3,4) (3,4)的输出矩阵。

torch.matmul(torch.cat((X, H), 1), torch.cat((W_xh, W_hh), 0))

请添加图片描述

基于循环神经网络的字符级语言模型

回想一下8-3节中的语言模型, 我们的目标是根据过去的和当前的词元预测下一个词元, 因此我们将原始序列移位一个词元作为标签。 Bengio等人首先提出使用神经网络进行语言建模 (Bengio et al., 2003)。 接下来,我们看一下如何使用循环神经网络来构建语言模型。 设小批量大小为1,批量中的文本序列为“machine”。 为了简化后续部分的训练,我们考虑使用 字符级语言模型(character-level language model)将文本词元化为字符而不是单词。 图8.4.2演示了 如何通过基于字符级语言建模的循环神经网络, 使用当前的和先前的字符预测下一个字符。
请添加图片描述
请添加图片描述

困惑度(Perplexity)

最后,让我们讨论如何度量语言模型的质量, 这将在后续部分中用于评估基于循环神经网络的模型。 一个好的语言模型能够用高度准确的词元来预测我们接下来会看到什么。 考虑一下由不同的语言模型给出的对“It is raining …”(“…下雨了”)的续写:

  1. “It is raining outside”(外面下雨了);

  2. “It is raining banana tree”(香蕉树下雨了);

  3. “It is raining piouw;kcj pwepoiut”(piouw;kcj pwepoiut下雨了)。

就质量而言,例 1 1 1显然是最合乎情理、在逻辑上最连贯的。 虽然这个模型可能没有很准确地反映出后续词的语义, 比如,“It is raining in San Francisco”(旧金山下雨了) 和“It is raining in winter”(冬天下雨了) 可能才是更完美的合理扩展, 但该模型已经能够捕捉到跟在后面的是哪类单词。 例 2 2 2则要糟糕得多,因为其产生了一个无意义的续写。 尽管如此,至少该模型已经学会了如何拼写单词, 以及单词之间的某种程度的相关性。 最后,例 3 3 3表明了训练不足的模型是无法正确地拟合数据的。

我们可以通过计算序列的似然概率来度量模型的质量。 然而这是一个难以理解、难以比较的数字。 毕竟,较短的序列比较长的序列更有可能出现, 因此评估模型产生托尔斯泰的巨著《战争与和平》的可能性 不可避免地会比产生圣埃克苏佩里的中篇小说《小王子》可能性要小得多。 而缺少的可能性值相当于平均数。

在这里,信息论可以派上用场了。 我们在引入softmax回归时定义了熵、惊异和交叉熵, 并在信息论的在线附录 中讨论了更多的信息论知识。 如果想要压缩文本,我们可以根据当前词元集预测的下一个词元。 一个更好的语言模型应该能让我们更准确地预测下一个词元。 因此,它应该允许我们在压缩序列时花费更少的比特。 所以我们可以通过一个序列中所有的 n n n个词元的交叉熵损失的平均值来衡量
请添加图片描述
其中 P P P由语言模型给出, x t x_{t} xt是在时间步 t t t从该序列中观察到的实际词元。 这使得不同长度的文档的性能具有了可比性。 由于历史原因,自然语言处理的科学家更喜欢使用一个叫做困惑度(perplexity)的量。 简而言之,它是 (8.4.7)的指数:
请添加图片描述
困惑度的最好的理解是“下一个词元的实际选择数的调和平均数”。 我们看看一些案例。

  • 在最好的情况下,模型总是完美地估计标签词元的概率为1。 在这种情况下,模型的困惑度为1。

  • 在最坏的情况下,模型总是预测标签词元的概率为0。 在这种情况下,困惑度是正无穷大。

  • 在基线上,该模型的预测是词表的所有可用词元上的均匀分布。 在这种情况下,困惑度等于词表中唯一词元的数量。 事实上,如果我们在没有任何压缩的情况下存储序列, 这将是我们能做的最好的编码方式。 因此,这种方式提供了一个重要的上限, 而任何实际模型都必须超越这个上限。

在接下来的小节中,我们将基于循环神经网络实现字符级语言模型, 并使用困惑度来评估这样的模型。

  1. 词元预测压缩的关系 在数据压缩中,我们希望用尽可能少的比特来表示信息。如果我们能准确预测一个序列中的下一个词元,我们就可以更高效地压缩数据。语言模型的任务之一就是基于已知的上下文来预测下一个词元。
  • 准确预测的意义:如果模型能够非常准确地预测下一个词元,那么它只需要很少的信息(即少量的比特)就可以表示这个词元。换句话说,准确的预测使得压缩更加高效。
  1. 比特数与信息量 信息论中,比特数衡量的是存储或传输信息所需的最小单位。预测得越准确,表示下一个词元所需的比特数就越少,因为模型已经“知道”接下来很可能会是什么。反之,如果预测不准确,那么为了表示所有可能的词元,模型需要使用更多的比特

  2. 语言模型的效果

  • 更好的语言模型:能够更加准确地预测下一个词元,从而减少表示该词元所需的比特数,最终使得整个序列的压缩变得更加高效。

  • 不好的语言模型:由于预测不准确,它需要更多的比特来表示下一个词元,导致压缩效率低下。

  1. 压缩示例 举个例子,如果模型预测“外面下雨了”的概率很高,那么在压缩时就可以用较少的比特来表示这个句子,因为大部分的信息已经被预测覆盖。如果模型的预测是“香蕉树下雨了”这种不合理的内容,那为了准确传达这个奇怪的句子,可能需要更多的比特来表示。

  2. 实际应用 在实际应用中,好的语言模型不仅用于自然语言处理,也在数据压缩、信息传输等领域有重要作用。通过提高预测的准确性,可以显著提升压缩效率,从而节省存储空间和带宽。

请添加图片描述

梯度剪裁

请添加图片描述

更多的RNN应用

请添加图片描述

小结

  • 对隐状态使用循环计算的神经网络称为循环神经网络(RNN)。

  • 循环神经网络的隐状态可以捕获直到当前时间步序列的历史信息

  • 循环神经网络模型的参数数量不会随着时间步的增加而增加。

  • 我们可以使用循环神经网络创建字符级语言模型。

  • 我们可以使用困惑度来评价语言模型的质量。

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS Code安装配置ssh服务结合内网穿透远程连接本地服务器详细步骤

文章目录 前言1. 安装OpenSSH2.VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

Windows系统开机出现Minimal BASH-like line editingis supported解决方法

Minimal BASH-like line editingis supported解决方法 一、问题描述 因为电脑不知道是不是安装了双系统,开机的时候会出现标题中的这个问题,网上查找资料一般说是双系统的问题,引导项缺失,然后Ubuntu进不去。可是我的电脑好像没有…

LR12 在Controller设置脚本并运行

1、当在Generator配置脚本完成后,点击工具-创建Controller场景,输入线程数即Vuser后点击确定。 2、这时会Controller中打开刚才配置的脚本,显示如下图所示, 在全局计划中点击启动Vuser,界面会显示如下弹窗,设置并发用户…

NTP时间服务器的工作原理解析

在当今数字化和信息化高度发展的时代,时间的准确性和同步性对于各种系统和应用程序至关重要。NTP时间服务器作为确保时间精准同步的关键设备,发挥着不可或缺的作用。 NTP 时间服务器的核心目标是为网络中的设备提供准确、一致和可靠的时间信息。它基于一…

RK3576 芯片介绍

RK3576 芯片介绍 RK3576瑞芯微第二代8nm高性能AIOT平台,它集成了独立的6TOPS(Tera Operations Per Second,每秒万亿次操作)NPU(神经网络处理单元),用于处理人工智能相关的任务。此外&#xff0…

7.实时时钟(RTC)

理论 使用时钟晶振:32.768KHz(2{15}) 代码编写 OLED显示实时时间,串口打印 晶体、RTC配置 晶体配置 RTC配置 串口配置参考:链接 Cube IDE代码 mian.c /* USER CODE BEGIN Includes */ #include "string.h" //27行 /* USER CODE EN…

TPAMI 2024 带Token迁移的整体预训练Transformer金字塔网络——Fast-iTPN

Fast-iTPN: Integrally Pre-Trained Transformer Pyramid Network with Token Migration https://github.com/sunsmarterjie/iTPN/blob/main https://arxiv.org/pdf/2211.12735 Introduction 背景 近年来,视觉模型取得了两大进展,一是将Vision Trans…

SAP LE学习笔记03 - 在IM(在库管理)中收货到仓库的流程,关联 WM移动Type与IM移动Type

上一章讲了 LE-WM的 WM和IM之间的关系。 SAP LE学习笔记02 - WM和库存管理(IM)之间的关系,保管Lot(Quant)-CSDN博客 本章继续将LE-WM的知识。 目录 1,在IM(在库管理)中收货到仓库的流程 a)&…

Golang | Leetcode Golang题解之第337题打家劫舍III

题目: 题解: func rob(root *TreeNode) int {val : dfs(root)return max(val[0], val[1]) }func dfs(node *TreeNode) []int {if node nil {return []int{0, 0}}l, r : dfs(node.Left), dfs(node.Right)selected : node.Val l[1] r[1]notSelected : …

EMC学习笔记5——辐射骚扰发射

辐射骚扰发射是基本的实验项目,目的是检验设备在工作时有没有产生意外的过强电磁辐射。 例如发电机,在工作时会产生意外的电磁波辐射,因为电子设备中隐藏了一些天线,这些隐藏的天线在辐射电磁波。 一、两种基本的天线结构 如前面…

智能小家电能否利用亚马逊VC搭上跨境快车?——WAYLI威利跨境助力商家

智能小家电行业在全球化背景下,正迎来前所未有的发展机遇。亚马逊为品牌商和制造商提供的一站式服务平台,为智能小家电企业提供了搭乘跨境快车、拓展国际市场的绝佳机会。 首先,亚马逊VC平台能够帮助智能小家电企业简化与亚马逊的合作流程&am…

Hive3:三种常用的复杂数据类型

一、Array类型 1、数据示例 2、实操 元数据 zhangsan beijing,shanghai,tianjin,hangzhou wangwu changchun,chengdu,wuhan,beijin创建表 CREATE TABLE myhive.test_array(name string, work_locations array<string>) ROW FORMAT DELIMITED FIELDS TERMINATED BY \t…

远程调用-OpenFeign

目录 1.RestTemplate存在问题 2.OpenFeign介绍 一、主要特点 二、应用场景 3.OpenFeign快速上手 3.1引入依赖 3.2添加注解 3.3编写OpenFeign的客户端 3.4远程调用 ​编辑3.5测试 4.OpenFeign参数传递 4.1传递单个参数 4.2传递多个参数 4.3传递对象 4.4传递JSO…

搬瓦工美国西海岸CN2 GIA VPS测评

很多人想知道搬瓦工美国CN2 GIA VPS系列怎么样&#xff1f;实际情况是&#xff1a;搬瓦工在美国西海岸的sanjose和losangeles运作着2.5Gbps-10Gbps CN2GIA带宽的VPS&#xff0c;底层虚拟为KVM&#xff0c;纯SSD阵列&#xff0c;支持在多机房之间切换。由于三网强制走同样的路由…

每日OJ_牛客_QQ2 微信红包

目录 牛客_QQ2 微信红包 解析代码 牛客_QQ2 微信红包 微信红包_牛客题霸_牛客网 解析代码 本题很多思路&#xff0c;第一种排序思路&#xff0c;如果一个数出现次数超过一半了&#xff0c;排序过后&#xff0c;必然排在中间&#xff0c;则最后遍历整个数组查看是否符合即可。…

在java环境下判断某个元素是否存在

1、在做web功能自动化时&#xff0c;有时需要通过判断某个元素是否存在来决定下一步的操作&#xff0c;但如果直接通过如下命令来进行查找时&#xff0c;如果不存在程序会报错&#xff0c;无法达到想要的效果&#xff0c;而java中也没有可以直接调用的工具类&#xff0c;因此就…

【java工具类】计算两个经纬度点之间的距离

计算两个经纬度点之间的距离 1、计算两个经纬度点之间的距离2、代码如下 1、计算两个经纬度点之间的距离 2、代码如下 public class DistanceCalculatorUtils {// 地球半径&#xff0c;单位为米private static final double EARTH_RADIUS 6371000;/*** 计算两个经纬度点之间的…

使用 HTTPS 代理在本地测试 AWS Lambdas

​ 欢迎来到雲闪世界。AWS Lambda 通常是在云中部署和执行代码的最简单方法之一&#xff0c;尤其是在使用sam CLI部署代码时。无服务器资源定义的简单性加上在本地打包资源并确保它们在 AWS 上运行的能力&#xff0c;提供了美妙的开发体验。 但有时&#xff0c;当构建和…

torch.roll()函数使用方法

官方文档在这里&#xff0c;说的比较清楚&#xff0c;但是举的例子不是很直观。我们再详细解释一下&#xff1a; torch.roll(input, shifts, dimsNone) → Tensor input&#xff1a;输入的tensorshifts&#xff1a;滚动的方向和长度&#xff0c;若为正&#xff0c;则向索引大…

Web 服务基础介绍

目录 1.1 互联网发展历程回顾 1.2 Web 服务介绍 1.2.1 Apache 经典的 Web 服务端 1.2.1.1 Apache prefork 模型 1.2.1.2 Apache worker 模型 1.2.1.3 Apache event模型 1.2.2 Nginx-高性能的 Web 服务端 1.2.3 用户访问体验和性能 1.2.3.1 用户访问体验统计 1.2.3.2 …