[Day10] 以深度学习进行时间序列预测 — 概论

介绍完机器学习预测时间序列,接着连续几篇要进入到深度学习的范畴。

我们会提到在时间序列预测的命题上,深度学习和机器学习的不同、优化的逻辑,
并且整理有哪些神经网络常用於时间序列预测,从比较单纯的模型架构,到结合不同类型神经网络的方法。

今日大纲

  • 时间序列预测:深度学习 v.s. 机器学习
  • 常用於序列训练的神经网络
  • 多神经网络的组合

时间序列预测:深度学习 v.s. 机器学习

最大的差别在於,深度学习神经网络能够捕捉序列特徵,机器学习则只能以聚合特徵或生成其他时间特徵,来代表一段时间序列中的资讯。

做法差异

  • 机器学习
    将一段时间序列的特徵聚合或取统计指标计算(例如自回归特徵、差分特徵等),再建模做监督式学习回归预测

  • 神经网络
    保留原始时间序列的颗粒度,针对原始序列结构设计神经网络输入层架构,後续再根据模型表现优化、调整模型架构、超参数,例如加入 Dropout Layer、接上不同特性的神经网络等

常用於序列训练的神经网络

最能够利用序列特性的神经网络架构,非递归神经网络莫属;且序列数据不仅限於时间序列,如语音、文本等。
递归神经网络的概念是,透过记住前面出现的特征推断结果,并且网络结构不断循环。

递归神经网络家族有几个经典款:(包含 RNN 的变形)

  • RNN(Recurrent Neural Network,递归神经网络本人)
  • LSTM(Long Short-Term Memory,长短期记忆模型)
    • 因应 RNN 会有梯度消失问题,无法在长时间序列上有好的记忆性表现,因此通过 3 种闸门(Gate)控制,结合短期记忆与长期记忆,分别是 input gate, forget gate, output gate
  • GRU(Gated Recurrent Unit)
    • 2014 年根据 LSTM 架构再改良,将 forget gate 和 output gate 整合成一个 "update gate"
    • 成效和 LSTM 相近,但因为减少一个 gate,所以参数比 LSTM 少,因此也减少了运算量、加快训练速度

*那 Transformer 适用於时间序列预测吗?

Self-Attention 机制、预训练模型在语言序列上的良好表现,如出现 BERT 这样的高适用度模型;那 Transformer 的表现有比 LSTM/GRU 来得好吗?

Transformer 的 Encoder-Decoder 框架虽然有 position embedding 来捕捉位置顺序资讯,但 LSTM/GRU 这种递归捕捉时序关系的特性,Transformer 不一定能够替代得了;因此在大宗相关论坛也都讨论到,在数据量大、或能够使用 pre-train model 的情况下(例如众多 NLP 任务,像是文本分类、情感分析、问答、语意推论、文本生成等),使用 Transformer 架构表现是更好的,但遇到具有更明显时序关系(例如季节性循环等)的资料时, LSTM/GRU 还是有不可取代的地位。

不同的 LSTM 架构

  • Vanilla LSTM
    单一层 LSTM
  • Stacked LSTM
    叠两层以上的 LSTM,要将第一层的参数 return_sequence 设为 True
  • Bidirectional LSTM
    使序列同时以顺向和反向输入模型。例如:学习上下文语意(这个在预测时间序列的未来时间点,稍微比较难

多神经网络的组合

  • Timedistributed CNN+LSTM
    基本概念是取两种模型的优势加在一起:
    • CNN:擅长对各个时间序列截面进行特徵萃取
    • LSTM:学习不同时间点的相关性
  • Convolutional LSTM
    将 CNN 的 Convolution 应用至 LSTM,常用於影像序列(多张图片或影片)资料(有点超出时间序列范畴,不过目的是希望将 LSTM 相关的模型架构组合可以列得完整一点)

本篇【以深度学习进行时间序列预测:概论】就到这边,下一篇我们会从 RNN、LSTM 开始介绍,然後一篇一篇带到上面列出的模型。


<<:  TypeScript 能手养成之旅 Day 8 物件型别-扩充型别-元组(Tuple)

>>:  【领域展开 10 式】真的需要看教学文,正式启用布景主题 Soledad 与网站做绑定

如何快速上手第三方套件

在现在这种讲求快速开发的开发模式,我们通常不太会自己将所有功能都自己硬刻出来,而是会去使用第三方的套...

新新新手阅读 Angular 文件 - Day07

学习目标 本文章将会是阅读官方文件Add navigation with routing 内容所做的...

R语言-5-套件 & 解题去

看起来很废话但是很实际 使用套件前,要先安装套件 安装完成之後要使用套件要先载入套件 library...

用 Python 畅玩 Line bot - 30:Line Notify(三)

在上篇中,我们是需要到 Line Notify 登入後的个人介面发行 token,但总不能叫每一个加...