1.序列数据:

①现实生活中有很多数据是有时序结构,比如电影的评分随时间的变化而变化。

②统计学中,超出已知观测范围进行预测是外推法,在现有的观测值之间进行估计是内插法

2.统计工具:处理序列数据选用统计工具和新的深度神经网络架构

①在时间t观察到xt,那么得到T个不独立的随机变量

x1xT)~p(x)

②使用条件概率展开

p(a,b)=p(a)p(b|a)=p(b)p(a|b)

注:

①p(b|a)是a发生前提下b发生概率,即如果已知a发生了,则b发生的概率

②不独立的随机变量:变量之间存在某种关联

表示从x1一直到xT的方向,想要知道时序序列T时刻发生的事情:T时刻之前所有时刻发生的事情

表示先计算xT在依次计算到x1,反序。已知未来T时刻发生的事情,反推过去时刻发生的事情,物理上不一定可行。

3.序列模型

①对条件概率建模

对见过的数据建模,也称自回归模型:有一些数据,预测数据的时候,使用的是本数据样本而不是其他数据。

可以对t时刻之前的数据进行建模,使用自回归模型(给定一些数据,预测数据的时候使用的是本数据样本,而不是其他数据),表示成一个函数,可以看作是机器学习模型,在t时刻之前的数据上进行训练,然后取预测t时刻的数据。

4.各个方案

方案A—马尔科夫假设

①假设当前的数据只跟τ个过去数据点相关

假设τ=2,只跟前面2个数据相关,第3个是预测的值。所以每预测一个新数据,只需要看过去τ个数据就可以。τ越小模型简单,τ的值是固定的,不会随着时间的增大而增大(过去预测的时间越长,关联程度小)

例如在过去数据上训练一个MLP模型

方案B-潜变量模型

①引入潜变量ht来表示过去信息ht=f(x1,…, xt-1)  这样xt=p(xt|ht)

引入了潜变量h,h是不断更新的。h和前一个时刻的h和x相关。等价于两个模型:一个模型是根据前一个时刻的潜变量h和x,重新计算h1。第二个模型是根据潜变量h1,和x计算x1。拆分成两个模型,每个模型和1个或2个相关,计算容易。

【总结】

①时序模型中,当前数据跟之前观察到的数据相关

②自回归模型使用本身过去的数据去预测未来

③马尔科夫模型假设当前只跟最近少数数据相关,从而简化模型

④潜变量模型使用潜变量来概括历史信息。

【代码实现】

1.# 使用正弦函数和一些可加性噪声来生产序列数据,时间步为1,2,...1000

import torch
from torch import nn
from d2l import torch as d2l# 使用正弦函数和一些可加性噪声来生产序列数据,时间步为1,2,...1000
T = 1000
time = torch.arange(1, T + 1, dtype=torch.float32)  # time:1~1000
x = torch.sin(0.01 * time) + torch.normal(0, 0.2, (T,))
d2l.plot(time, [x], 'time', 'x', xlim=[1, 1000], figsize=(6, 3))

2.

# 马尔可夫假设 将数据映射为数据对yt=xt  feature-label对
# 从第五个时刻开始,每个时刻的label是该时刻的x值。该时刻的输入是前4个时刻的整体向量,训练数据996个4维数据
# 以4为长度并且滑动,每4个为特征,第5个是标签
tau = 4
features = torch.zeros((T - tau, tau))  # 996*4个训练数据
# 每4个为特征,第5个是标签
for i in range(tau):  # i取值0-3features[:, i] = x[i:T - tau + i]
labels = x[tau:].reshape((-1, 1))batch_size, n_train = 16, 600  # 使用600个特征-标签对进行训练
train_iter = d2l.load_array((features[:n_train], labels[:n_train]),batch_size, is_train=True)

3.使用一个简单的结构:拥有两个全连接层的多层感知机

# 初始化网络权重函数
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 netloss = nn.MSELoss()

4.训练

# 训练
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.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)

5.单步预测,检查模型预测下一个时间步的能力

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))

6.多步预测

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))

7.K步预测

max_steps = 64features = 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))

深度学习——序列模型(笔记)相关推荐

  1. 吴恩达 深度学习 序列模型 第一周 编程作业二 字符级别语言模型项目 总结

    Assignment 2 : Character level language model - Dinosaurus land 这个作业,是个小项目,很有意思,利用作业一中我们自己构建的RNN,来建立 ...

  2. 谷歌、阿里们的杀手锏:三大领域,十大深度学习CTR模型演化图谱

    作者 | 王喆 来源 | 转载自知乎专栏王喆的机器学习笔记 今天我们一起回顾一下近3年来的所有主流深度学习CTR模型,也是我工作之余的知识总结,希望能帮大家梳理推荐系统.计算广告领域在深度学习方面的前 ...

  3. (d2l-ai/d2l-zh)《动手学深度学习》pytorch 笔记(2)前言(介绍各种机器学习问题)以及数据操作预备知识Ⅰ

    开源项目地址:d2l-ai/d2l-zh 教材官网:https://zh.d2l.ai/ 书介绍:https://zh-v2.d2l.ai/ 笔记基于2021年7月26日发布的版本,书及代码下载地址在 ...

  4. 完结撒花!吴恩达DeepLearning.ai《深度学习》课程笔记目录总集

    作者: 大树先生 博客: http://blog.csdn.net/koala_tree 知乎:https://www.zhihu.com/people/dashuxiansheng GitHub:h ...

  5. 纽约大学深度学习PyTorch课程笔记(自用)Week3

    纽约大学深度学习PyTorch课程笔记Week3 Week 3 3.1 神经网络参数变换可视化及卷积的基本概念 3.1.1 神经网络的可视化 3.1.2 参数变换 一个简单的参数变换:权重共享 超网络 ...

  6. 吴恩达深度学习教程——中文笔记网上资料整理

    吴恩达深度学习笔记整理 内容为网上博主博文整理,如有侵权,请私信联系. 课程内容: Coursera:官方课程安排(英文字幕).付费用户在课程作业中可以获得作业评分,每门课程修完可获得结课证书:不付费 ...

  7. 纽约大学深度学习PyTorch课程笔记(自用)Week6

    纽约大学深度学习PyTorch课程笔记Week6 Week 6 6.1 卷积网络的应用 6.1.1 邮政编码识别器 使用CNN进行识别 6.1.2 人脸检测 一个多尺度人脸检测系统 6.1.3 语义分 ...

  8. 谷歌、阿里们的杀手锏:3大领域,10大深度学习CTR模型演化图谱(附论文)

    来源:知乎 作者:王喆 本文约4000字,建议阅读8分钟. 本文为你介绍近3年来的所有主流深度学习CTR模型. 今天我们一起回顾一下近3年来的所有主流深度学习CTR模型,也是我工作之余的知识总结,希望 ...

  9. 吴恩达《神经网络与深度学习》精炼笔记(5)-- 深层神经网络

    上节课我们主要介绍了浅层神经网络.首先介绍神经网络的基本结构,包括输入层,隐藏层和输出层.然后以简单的2 layer NN为例,详细推导了其正向传播过程和反向传播过程,使用梯度下降的方法优化神经网络参 ...

最新文章

  1. WCF中服务继承多个契约的使用
  2. 将整型字符串转成整数值
  3. Python 中的 os 模块常见方法?
  4. ASP.NET MVC ActionMethodSelectorAttribute 以及HttpGet等Action特性
  5. 数据库以及表的基本操作
  6. 软件测试(一)-黑盒测试 随机测试技巧
  7. 数据库MySQL驱动5.1.22下载_mysql-connector-java-5.1.22下载
  8. ASP.NET 页面对象模型
  9. LeCun:深度学习在信号理解中的强大和局限(视频+PPT)
  10. js向html文档添加空格,javascript – 如何在HTML中的行之间找到空格?
  11. F - Substrings(一些函数的运用)
  12. NumPy的详细教程(官网手册翻译)
  13. 对于利用blender获取谷歌地图3D模型的补充
  14. windows异常捕获生成minidump windows
  15. 为什么从移动携号转网到了联通,来电显示是中国移动?
  16. 智能家居系列之智能家居平台设计
  17. Mybatis一发入魂
  18. 微服务架构 API 的开发与治理
  19. 免费的数据恢复软件哪个好?教您找回丢失数据!
  20. lisp调用天正命令参数修改_在lisp中模拟运行CAD的command命令函数

热门文章

  1. 0xffff0000颜色表示
  2. 前端页面调用微信扫一扫功能
  3. PID闭环底盘调试记录
  4. 计算机高级职称论文写什么题目,高级职称论文格式的要求
  5. 关于SaaS平台中应对多租户模式的设计
  6. cad安装日志文件发生错误_CAD 2012 安装出错,错误log文件如下,该怎么修复 在线等。...
  7. Wrong JPEG library version: library is 80, caller expects 62 解决办法
  8. wxpython配合MySQL数据库完成用户登录页面的设计
  9. mysql修改database名_MySQL中修改database的名字
  10. linux下常用vi操作命令