欢迎光临散文网 会员登陆 & 注册

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

2022-04-09 11:52 作者:如果我是泡橘子  | 我要投稿

序列模型


序列数据


  • 现实生活中很多数据都是有时序结构的,比如电影的评分(既不是固定的也不是随机的,会随着时间的变化而变化)
  • 在统计学中,对超出已知观测范围进行预测称为外推法(extrapolation),在现有的观测值之间进行估计称为内插法(interpolation)





统计工具


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


  • 不独立的随机变量:变量之间存在某种关联(在此之前都是假设独立的随机变量,变量之间是没有关联的)


  • 黄色表示从 x1 一直到 xT 的方向(xi 的概率依赖于 x1,...,x(i-1) 的概率,i >= 2 ),也就是说如果想要知道一个时序序列 T 时刻发生的事情,则需要知道在 T 时刻之前所有时刻发生的事情
  • 红色表示先计算 xT 再依次算到 x1(也就是黄色的反方向,xi 的概率依赖于 x(i+1),...,xT 的概率,i <= T ),即反序,也就是已知未来 T 时刻发生的事情,反推出过去所有时刻所发生的事情(这种情况在某些时候是成立的,但是在物理上不一定可行,对于真实的事件,无法从未来的事件反推过去的事件,因为未来所发生的事件是根据过去所发生的事件所产生的)



自回归模型


  • 为了实现对 t 时刻的 x 值的预测,可以使用回归模型


问题:输入数据的数量,输入 x(t-1) , ... , x1 本身因 t 而异,输入数据的数量会随着数据量的增加而增加


针对上述问题提出了两种策略:

1、自回归模型(autoregressive models)

  • 假设在现实情况下相当长的序列 x(t-1) , ... , x1 可能是不必要的,因此只需要考虑满足某个长度为 τ 的时间跨度即可,即使用观测序列 x(t-1) , ... , x(t-τ)
  • 这样做的好处是保证了在 t > τ 时,参数的数量是固定
  • 之所以叫做自回归模型是因为该模型是对自己执行回归



2、隐变量自回归模型(latent autoregressive models)

  • 隐变量自回归模型中保留了对过去观测的总结 ht ,并且同时更新预测 xt_hat 和总结 ht
  • xt_hat = P( xt_hat | ht )
  • ht = g( h(t - 1) , x(t - 1) )
  • 因为 ht 从未被观测到,所以这类模型也被称为隐变量自回归模型



以上两种情况都存在一个问题:如何生成训练数据?

经典方法:使用历史观测预测下一个未来观测

  • 但是时间并不是停滞不前的,总会有未来的观测所对应的时间变成历史时刻

常用假设:虽然特定值 xt 可能会改变,但是序列本身的动力学不会改变

  • 新的动力学一定受新的数据影响,不可能用目前所掌握的数据来预测新的动力学(统计学家成不变的动力学为静止的( stationary ))
  • 整个序列的估计值计算如下
  • 注意处理的对象是离散对象,对于离散的对象,需要使用分类器来估计 P( xt | x(t-1) , ... , x1 )



马尔可夫模型


在自回归模型的近似法中,使用 x(t-1) , ... , x(t-τ),而不是 x(t-1) , ... , x1 来估计 xt ,如果这种假设是成立的,也就是近似是精确的,可以称为满足马尔科夫条件( Markov condition )


特殊情况下,如果 τ = 1 就能得到一个一阶马尔可夫模型( first-order Markov model ), P(x) 计算公式如下


假设 xt 作为离散值的时候,可以使用动态规划沿着马尔科夫链计算结果



因果关系


原则上,将 P( x1 , ... , xT )倒序展开也没有什么问题,基于条件概率,所以可以得出

基于马尔科夫模型,可以得到一个反向的条件概率分布。然而在许多情况下,数据存在一个自然的方向,即在时间上是前进的。显然,未来的事件不能影响过去,因此如果改变 xt ,可能会影响未来发生的事件 x(t+1) ,但是在改变 xt 之后,基于 t 时刻之前发生的事件所得到的分布是不会发生改变的





前向算法举例(根据过去的事件推测未来的事件)

给定 t 时刻之前的数据 x1,x2,...,x(t-1) ,然后求 p(xt)

  • 可以对 t 时刻之前的数据进行建模(自回归模型,给定一些数据,预测数据的时候不是使用的另外一组数据,而是使用的给定数据中的一部分),表示成一个函数(可以认为是一个机器学习模型,在 t 时刻之前的数据上进行训练,然后取预测 t 时刻的数据)



核心思想:

  • 如何计算 f(x1,x2...x(t-1))
  • 如何计算 p(xt|f(x1,x2...x(t-1)))



方案 A -马尔科夫假设

  • 假设当前数据只跟 τ 个过去数据点相关(每一次预测一个新的数据,只需要看过去 τ 个数据就可以了,τ 可以自由选择,τ 越小模型越简单,τ 越大模型越复杂),这样假设的好处是 τ 的值是固定的,不会随着时间的增大而增大(这样做也比较符合现实的逻辑,过去事件距离预测事件的时间越长,他们之间的关联程度就越小)
  • 可以在过去数据上训练一个 MLP 模型就可以了:假设 x 是一个标量,f 的作用就是每次给定一个 τ 层的特征(这个特征是一个向量),然后再去预测一个标量
  • 给定 τ ,使得数据由变长数据变成了定长数据


方案 B -潜变量模型

  • 引入一个潜变量 ht 表示过去信息 ht = f( x1 , x2 , ... , x(t-1) ),这样的话, xt = p( xt | ht )
  • 一旦引入了潜变量 h ,h 是可以不断更新的,h 与前一个时刻的潜变量和前一个时刻的 x 相关,等价于建立了两个模型:一个模型是根据前一个时刻的潜变量 h 和 x,计算新的潜变量 h' ;第二个模型是根据新的潜变量 h' 和前一个时刻的 x ,计算新的 x。这样就拆分成了两个新的模型,每个模型只和 1 个 或者 2 个模型相关,使得计算更加容易






如果将一个序列转换为模型的“特征-标签”(feature-label)对,如果将时间跨度固定为 τ ,将数据映射为数据对 yt = xt 和 xt = [ x(t-τ) , ... , x(t-1) ],这时候会发现原有的数据样本少了 τ 个(因为按照这种映射关系,序列中的前 τ 个样本并没有足够的历史数据作为 xt 中的元素),一般所采用的办法有两种:

1、在序列足够长的情况下,可以直接将前面的 τ 项丢弃(这里的丢弃指的是不再作为 yt ,也就是说 t > τ;这些项还是可以作为 xt 中的元素)

2、用零填充序列




总结


  • 时序模型中,当前数据跟之前观察到的数据相关
  • 自回归模型使用自身过去数据来预测未来
  • 马尔科夫模型假设当前只跟当前少数数据相关,每次都使用固定长度的过去信息来预测现在,从而简化模型
  • 潜变量模型使用潜变量来概括历史信息,使得模型拆分成两块:一块是根据现在观测到的数据来更新潜变量;另一块是根据更新后的潜变量和过去的数据来更新将来要观测到的数据
  • 内插法(在现有观测值之间进行估计)和外推法(对超出已知观测范围进行预测)在实践的难度上差别很大。因此对于已有的序列数据,在训练时始终要尊重其时间顺序,最好不要基于未来的数据进行训练
  • 序列模型的估计需要专门的统计工具,两种比较流行的是自回归模型隐变量自回归模型
  • 对于时间是向前推进的因果模型,正向估计通常比反向估计更容易
  • 对于直到时间步 t 的观测,其在时间步 t+k 的预测输出是“ k 步预测”。随着时间 k 值的增加,会造成误差的快速累积和预测质量的急速下降





Q&A


  • 1、这里的图和公式是不是不一致,公式的 x 只和 h 相关,而图里 x 和 h 以及 x(t-1) 相关
    
    QA P3 - 00:00
    


  • 2、老师,潜变量是不是直接影响了 RNN 的创造,或者说 RNN 的隐单元也是一个潜变量单元
    
    QA P3 - 01:07
    


  • 3、在常规范围内 τ 是不是越大越好,刚才例子 τ = 5 是不是比4好?
    
    QA P3 - 03:35
    


  • 4、潜变量模型和隐马尔科夫模型有什么区别?
    
    QA P3 - 04:39
    


  • 5、老师,若预测一个月,τ = 30;若预测 7 天,τ = 7,是否有这样的关系,还是有其它的约定规则?
    
    QA P3 - 05:21
    


  • 6、图上看这里当前环境的影响只能从过去来吗?感觉还可以加一个当前环境因素
    
    QA P3 - 06:59
    


  • 7、在预测未来方面,现在的 SOTA 模型能做到多好?
    
    QA P3 - 10:06
    


QA P3 - 08:40


  • 8、可不可以认为是 MLP 记住了过去数据的模式?然后去用这个模式去画出未来的趋势?
    
    QA P3 - 11:17
    


  • 9、请问老师这里输入特征和输出关系是具体如何应对的?输入 feature.shape(T-tau,tau),但是每一列时间都错开一个时间。输出 label 是从 tau:T.这里每一列的 feature 和我们的 label 的对应关系都在改变
    
    QA P3 - 13:06
    


  • 10、τ 能够随着 xt 的变化而变化吗?这样感觉更符合实际情况,比如 xt 与前 5 个变量相关,x(t+1) 与前 6 个变量相关
    
    QA P3 - 14:21
    


  • 11、发动机或者电动车电池上面有很多参数传感器,在预测这些参数未来变化趋势时,采用马尔科夫模型进行单步预测还可以,但是长步预测结果极差。请问有其他的好办法吗?
    
    QA P3 - 15:38
    


  • 12、模型能学习多个连续输入,比如 a 、 b 、 c ,以及他们之间的联系吗?
    
    QA P3 - 19:18
    


  • 13、李沐老师好!时间序列函数,有一个很著名的例子,第谷观测的太阳系行星位置观测数据。这个数据集是否是整理公开过?用这个数据集进行时间序列模型预测是否有团队尝试过?
    
    QA P3 - 20:04
    


  • 14、有个想法,对时序数据分类,可以看作一幅图,然后使用 CNN 去做图像分类吗?
    
    QA P3 - 21:04
    





----end----

其他参考

1、《动手学深度学习》,课程安排,https://courses.d2l.ai/zh-v2/assets/pdfs/part-3_1.pdf

2、《动手学深度学习》,https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/sequence.html

51 序列模型【动手学深度学习v2】的评论 (共 条)

分享到微博请遵守国家法律