本文链接:个人站 | 简书 | CSDN
版权声明:除特别声明外,本博客文章均采用 BY-NC-SA 许可协议。转载请注明出处。
最近打算分享一些基于深度学习的时间序列预测方法。这是第三篇。
前面介绍的 DeepAR 和 DeepState 都是基于 RNN 的模型。RNN 是序列建模的经典方法,它通过递归来获得序列的全局信息,代价是无法并行。CNN 也可以用来建模序列,但由于卷积捕捉的是局部信息,CNN 模型往往需要通过叠加很多层才能获得较大的感受野。后续我可能会~~(意思就是未必会)~~介绍基于 CNN 的时间序列预测方法。Google 在 2017 年发表的大作 Attention Is All You Need 为序列建模提供了另一种思路,即单纯依靠注意力机制(Attention Mechanism),一步到位获得全局信息。Google 将这个模型称为 Transformer。Transformer 在自然语言处理、图像处理等领域都取得了很好的效果。Transformer 的结构如下图所示(误
今次要介绍的是一篇 NIPS 2019 的文章 Enhancing the Locality and Breaking the Memory Bottleneck of Transformer on Time Series Forecasting,该文章将 Transformer 模型应用到时间序列预测中1,并提出了一些改进方向。
我们首先介绍注意力机制,然后简单介绍一下模型,最后给出一个 demo。
Attention
根据 Google 的方案,Attention 定义为
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K ⊤ d k ) V \mathrm{Attention}(Q, K, V) = \mathrm{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dkQK⊤)V
其中 Q ∈ R n × d k Q\in\mathbb R^{n\times d_k} Q∈Rn×dk, K ∈ R m × d k K\in\mathbb R^{m\times d_k} K∈Rm×dk, V ∈ R m × d v V\in\mathbb R^{m\times d_v} V∈Rm×dv。从矩阵的维度信息来看,可以认为 Attention 把一个 n × d k n\times d_k n×dk 的序列 Q Q Q 编码成一个 n × d v n\times d_v n×dv 的新序列。记 Q = [ q 1 , q 2 , ⋯ , q n ] ⊤ Q = [q_1, q_2, \cdots, q_n]^\top Q=[q1,q2,⋯,qn]⊤, K = [ k 1 , k 2 , ⋯ , k m ] ⊤ K = [k_1, k_2, \cdots, k_m]^\top K=[k1,k2,⋯,km]⊤, V = [ v 1 , v 2 , ⋯ , v m ] ⊤ V = [v_1, v_2, \cdots, v_m]^\top V=[v1,v2,⋯,vm