【动手学深度学习】--序列模型

news2025/1/22 15:56:50

文章目录

  • 序列模型
    • 1.序列数据
    • 2.统计工具
    • 3.自回归模型
      • 3.1马尔科夫假设
      • 3.2潜变量模型
    • 4.训练
    • 5.预测

序列模型

学习视频:序列模型【动手学深度学习v2】
官方笔记:序列模型

1.序列数据

想象一下有人正在看网飞(Netflix,一个国外的视频网站)上的电影。 一名忠实的用户会对每一部电影都给出评价, 毕竟一部好电影需要更多的支持和认可。 然而事实证明,事情并不那么简单。 随着时间的推移,人们对电影的看法会发生很大的变化。 事实上,心理学家甚至对这些现象起了名字:

  • 锚定(anchoring)效应:基于其他人的意见做出评价。 例如,奥斯卡颁奖后,受到关注的电影的评分会上升,尽管它还是原来那部电影。 这种影响将持续几个月,直到人们忘记了这部电影曾经获得的奖项。结果表明,这种效应会使评分提高半个百分点以上
  • 享乐适应(hedonic adaption):人们迅速接受并且适应一种更好或者更坏的情况 作为新的常态。 例如,在看了很多好电影之后,人们会强烈期望下部电影会更好。 因此,在许多精彩的电影被看过之后,即使是一部普通的也可能被认为是糟糕的。
  • 季节性(seasonality):少有观众喜欢在八月看圣诞老人的电影。
  • 有时,电影会由于导演或演员在制作中的不当行为变得不受欢迎。
  • 有些电影因为其极度糟糕只能成为小众电影。Plan9from Outer SpaceTroll2就因为这个原因而臭名昭著的。

简而言之,电影评分决不是固定不变的。 因此,使用时间动力学可以得到更准确的电影推荐,当然,序列数据不仅仅是关于电影评分的。 下面给出了更多的场景。

  • 在使用程序时,许多用户都有很强的特定习惯。 例如,在学生放学后社交媒体应用更受欢迎。在市场开放时股市交易软件更常用。
  • 预测明天的股价要比过去的股价更困难,尽管两者都只是估计一个数字。 毕竟,先见之明比事后诸葛亮难得多。 在统计学中,前者(对超出已知观测范围进行预测)称为外推法(extrapolation), 而后者(在现有观测值之间进行估计)称为内插法(interpolation)。
  • 在本质上,音乐、语音、文本和视频都是连续的。 如果它们的序列被我们重排,那么就会失去原有的意义。 比如,一个文本标题“狗咬人”远没有“人咬狗”那么令人惊讶,尽管组成两句话的字完全相同。
  • 地震具有很强的相关性,即大地震发生后,很可能会有几次小余震, 这些余震的强度比非大地震后的余震要大得多。 事实上,地震是时空相关的,即余震通常发生在很短的时间跨度和很近的距离内。
  • 人类之间的互动也是连续的,这可以从微博上的争吵和辩论中看出。

2.统计工具

image-20230908085830800

对p(x)进行展开

image-20230908090107390

3.自回归模型

image-20230908090215108

image-20230908090955020

image-20230908091212875

3.1马尔科夫假设

image-20230908090502001

image-20230908091305230

3.2潜变量模型

RNN属于潜变量模型

image-20230908090649068

总结:

  • 时序模型中,当前数据跟之前观察到的数据相关
  • 自回归模型使用自身过去数据预测未来
  • 马尔科夫模型假设当前只跟最近少数数据相关,从而简化模型
  • 潜变量模型使用潜变量来概括历史信息

4.训练

在了解了上述统计工具后,让我们在实践中尝试一下! 首先,我们生成一些数据:使用正弦函数和一些可加性噪声来生成序列数据, 时间步为1,2,…1000

image-20230908092638491

image-20230908092759475

tau = 4
features = torch.zeros((T - tau,tau))
for i in range(tau):
    '''
    features[:,0]=x[0:996]
    features[:,1]=x[1:997]
    features[:,2]=x[2:998]
    features[:,3]=x[3:999]
    '''
    features[:,i] = x[i:T - tau + i]
labels = x[tau:].reshape((-1,1))

batch_size,n_train = 16,600
# 只有前n_train个样本用于训练
train_iter = d2l.load_array((features[:n_train],labels[:n_train]),
                            batch_size,is_train=True)

在这里,我们使用一个相当简单的架构训练模型: 一个拥有两个全连接层的多层感知机,ReLU激活函数和平方损失。

# 初始化网络权重的函数
def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.xavier_uniform_(m.weight)

# 一个简单的多层感知机
def get_net():
    net = nn.Sequential(nn.Linear(4, 10),
                        nn.ReLU(),
                        nn.Linear(10, 1))
    net.apply(init_weights)
    return net

# 平方损失。注意:MSELoss计算平方误差时不带系数1/2
loss = nn.MSELoss(reduction='none')

准备训练模型

def train(net, train_iter, loss, epochs, lr):
    trainer = torch.optim.Adam(net.parameters(), lr)
    for epoch in range(epochs):
        for X, y in train_iter:
            trainer.zero_grad()
            l = loss(net(X), y)
            l.sum().backward()
            trainer.step()
        print(f'epoch {epoch + 1}, '
              f'loss: {d2l.evaluate_loss(net, train_iter, loss):f}')

net = get_net()
train(net, train_iter, loss, 5, 0.01)

image-20230908100149831

5.预测

由于训练损失很小,因此我们期望模型能有很好的工作效果。 让我们看看这在实践中意味着什么。 首先是检查模型预测下一个时间步的能力, 也就是单步预测(one-step-ahead prediction)。

onestep_preds = net(features)
d2l.plot([time, time[tau:]],
         [x.detach().numpy(), onestep_preds.detach().numpy()], 'time',
         'x', legend=['data', '1-step preds'], xlim=[1, 1000],
         figsize=(6, 3))

image-20230908100236344

image-20230908100253264

multistep_preds = torch.zeros(T)
multistep_preds[: n_train + tau] = x[: n_train + tau]
for i in range(n_train + tau, T):
    multistep_preds[i] = net(
        multistep_preds[i - tau:i].reshape((1, -1)))

d2l.plot([time, time[tau:], time[n_train + tau:]],
         [x.detach().numpy(), onestep_preds.detach().numpy(),
          multistep_preds[n_train + tau:].detach().numpy()], 'time',
         'x', legend=['data', '1-step preds', 'multistep preds'],
         xlim=[1, 1000], figsize=(6, 3))

image-20230908100411169

image-20230908100419087

max_steps = 64

features = torch.zeros((T - tau - max_steps + 1, tau + max_steps))
# 列i(i<tau)是来自x的观测,其时间步从(i)到(i+T-tau-max_steps+1)
for i in range(tau):
    features[:, i] = x[i: i + T - tau - max_steps + 1]

# 列i(i>=tau)是来自(i-tau+1)步的预测,其时间步从(i)到(i+T-tau-max_steps+1)
for i in range(tau, tau + max_steps):
    features[:, i] = net(features[:, i - tau:i]).reshape(-1)

steps = (1, 4, 16, 64)
d2l.plot([time[tau + i - 1: T - max_steps + i] for i in steps],
         [features[:, (tau + i - 1)].detach().numpy() for i in steps], 'time', 'x',
         legend=[f'{i}-step preds' for i in steps], xlim=[5, 1000],
         figsize=(6, 3))

image-20230908100454997

以上例子清楚地说明了当我们试图预测更远的未来时,预测的质量是如何变化的。 虽然“4步预测”看起来仍然不错,但超过这个跨度的任何预测几乎都是无用的。

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

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

相关文章

基于Docker从零到一实操MySql的主从复制

文章目录 一、在Docker上安装&#xff0c;启动MySQL查看docker是否安装成功安装mysql查看mysql镜像进入mysql后台操作docker Volume&#xff08;卷&#xff09;入门 MySql的主从复制1. 创建MySQL主从复制的网络2. 创建MySQL主服务器3. 创建MySQL从服务器4. 配置主从同步5.测试主…

js函数变量提升理解

var n 10function fn() {// var n 20function f() {// 没用var声明&#xff0c;去外层寻找n,直到找到windows为止&#xff0c;找到的话用的就是哟个全局变量&#xff0c;会改变原始全局变量的值n;console.log(n)}var nn 20f()console.log(n);return f}var x fn()// 会在上一…

【C++从0到王者】第二十八站:二叉搜索树的应用

文章目录 前言一、Key模型二、Key/Value模型总结 前言 二叉搜索树的在现实世界的应用很广泛&#xff0c;比如Key模型&#xff0c;Key-Value模型就是常见的两种的模型 一、Key模型 K模型&#xff1a;K模型即只有key作为关键码&#xff0c;结构中只需要存储Key即可&#xff0c…

PaddleOCR学习笔记2-初步识别服务

今天初步实现了网页&#xff0c;上传图片&#xff0c;识别显示结果到页面的服务。后续再完善。 采用flask paddleocr bootstrap快速搭建OCR识别服务。 代码结构如下&#xff1a; 模板页面代码文件如下&#xff1a; upload.html : <!DOCTYPE html> <html> <…

Activiti7工作流引擎:在线流程编辑器Activiti Modoler5.x

一&#xff1a;简介 有的时候我们的流程图需要业务人员自己绘制&#xff0c;然后使用自己绘制的流程图&#xff0c;此时就需要一个在线流程图编辑器需要集成到我们的web系统中。Activiti Modoler是Activiti官方推出的在线流程编辑器。 二&#xff1a;pom.xml <dependency…

tomcat安装、部署JSPGOU项目、Tomcat多实例

安装 官网找包 Apache Tomcat - Welcome! tomcat 8 准备运行环境 安装tomcat catalina.sh 服务脚本管理文件 server.xml 主配置文件 修改8009&#xff08;删除注释&#xff09; 启动tomcat 访问 为了避免每次进入绝对路径启动tomcat 法二&#xff1a; 三&#xff1a;部署…

SpringMvc增删改查

SpringMvc增删改查 一、前期准备二、逆向生成增删改查2.2.aspect切面层2.3.Mybatis generator逆向生成2.4.根据生成代码编写Biz层与实现类 三、controller层代码编写四、前台代码与分页代码五、案例测试 一、前期准备 1.2.导入pom.xml依赖 <?xml version"1.0" …

搭建自己的OCR服务,第三步:PPOCRLabel标注工具安装

一、安装说明 安装好了PaddleOCR后&#xff0c;还需要安装PPOCRLabel这个标注工具&#xff0c;想要自己训练模型的话&#xff0c;有个标注工具会起很大作用。 尤其是PPOCRLabel就是跟PaddleOCR配套的标注工具&#xff0c;同样是开源的。 在下载 PaddleOCR 整个源码中&#x…

Apache DolphinScheduler - 快速扩展 TaskPlugin 从入门到放弃

目前在大数据生态中&#xff0c;调度系统是不可或缺的一个重要组件。Apache DolphinScheduler 作为一个顶级的 Apache 项目&#xff0c;其稳定性和易用性也可以说是名列前茅的。而对于一个调度系统来说&#xff0c;能够支持的可调度的任务类型同样是一个非常重要的因素&#xf…

如何去除eclipse中default package

选择default package ,然后选择后面的 选择FILTER 选择 Empty开头的几个 点击ok&#xff0c;就可以去掉空的default package

sql:SQL优化知识点记录(十三)

&#xff08;1&#xff09;行锁理论 &#xff08;2&#xff09;CAP理论 二 、 C、 A、P的含义 借用一下维基百科CAP理论一文中关于C、A、P三者的定义。 &#xff08;3&#xff09;行锁案例讲解 MySql5.5以后数据库默认都是InnoDB存储引擎&#xff0c;事物的操作默认给你提交了…

Unity之3D物理导航系统

一 介绍 Unity自带寻路(导航)系统是unity官方自带的一种寻路系统。我们可以通过它来制作简单的寻路&#xff0c;比如可以制作点击某个位置&#xff0c;让角色自动的绕开障碍走到目标点的效果&#xff0c;比如可以制作敌人AI&#xff0c;让它可以通过NavMesh绕开障碍追击我方单…

l8-d9 UDP通信实现

一、函数接口扩展与UDP通信实现流程 1.write/read到send/recv 函数原型&#xff1a; ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t recv(int sockfd, void *buf, size_t len, int flags); 前三个参数同read/write一样&#xff1b; ssize_t rea…

景联文科技可为多模态语音翻译模型提供数据采集支持

8月22日Facebook的母公司Meta Platforms发布了一种能够翻译和转录数十种语言的人工智能模型——SeamlessM4T&#xff0c;可以在日常生活中或者商务交流中为用户提供更便捷的翻译和转录服务。 相较于传统的文本翻译&#xff0c;这项技术的最大区别在于它可以实现端到端的语音翻译…

对象的构造和析构

目录 构造函数和析构函数 构造函数的分类和调用 c默认构造的函数 浅拷贝和深拷贝 多个对象的构造和析构 初始化列表 类对象作为成员 构造函数和析构函数 对象的初始化和清理是两个非常重要的安全问题&#xff0c;一个对象或者变量没有初始时&#xff0c;对其使用后果是未…

Ae 效果:CC Star Burst

模拟/CC Star Burst Simulation/CC Star Burst CC Star Burst&#xff08;CC 星爆&#xff09;可以模拟星际穿越的效果&#xff0c;也可以像 CC Ball Action 效果模拟球体的扩散运动。 CC Star Burst 效果的原理是将图层网格化&#xff0c;然后基于每个网格里的图层内容取平均颜…

【东软实训Day2】用Java实现客户端与服务器交互

一、客户端-服务器编程模型 1个应用 1个服务器进程 1…N个客户端进程&#xff0c;其中服务器管理资源&#xff0c;并通过操作这种资源为客户端服务。 客户端-服务器模型中的基本操作是事务&#xff08;transaction&#xff09;&#xff08;注&#xff1a;不同于数据库中的t…

软考-高级-信息系统项目管理第四版(完整24章全笔记)

《信息系统项目管理师教程》&#xff08;第4版&#xff09;是由全国计算机专业技术资格考试办公室组织编写的考试用书&#xff0c;根据2022年审定通过的《信息系统项目管理师考试大纲》编写&#xff0c;对信息系统项目管理师岗位所要求的主要知识及应用技术进行了阐述。 《信息…

ubuntu 20.04 通过 samba 共享文件夹到 windows

前言 ubuntu 与 windows 共享&#xff0c;有两条路&#xff0c;一是 windows 的目录共享给 ubuntu&#xff0c;比如使用 VM Ware 虚拟机&#xff0c;直接通过 VMWare 虚拟机共享文件夹的方式&#xff0c;windows 上的目录就共享给了 ubuntu ubuntu 如何把目录共享给 windows 呢…

zemax坐标断点实现光束偏移

简单来说就是将前面的坐标打断&#xff0c;实现新的坐标设置 基础设置&#xff1a; 对表面进行旋转&#xff1a; 系统自动插入坐标断点面 此时设置的旋转角度为0&#xff0c;我们将这个设置为变量&#xff1a; 在评价函数编辑器中选择REAY&#xff0c;控制光线高度 执行优化&a…