赞
踩
ICML 2017.
原文地址:State-Frequency Memory Recurrent Neural Networks。
代码地址:https://github.com/hhkunming/State-Frequency-Memory-Recurrent-Neural-Networks。
时间序列建模在许多现代应用中都起着重要的作用,并且在机器学习领域也受到了越来越多的关注。在许多领域上,使用LSTM来进行时间序列的建模取得了巨大的成功。虽然LSTM能够在时域上有效地捕获长期依赖关系(long-range dependency),但是LSTM不能显式地对出现在频域中的模式(patterns)进行建模,而这些在频域中显现出来的模式对于在不同时间周期下的预测是很有帮助的。
在这篇文章中,我们提出了多频率状态记忆(State-Frequency Memory,SFM),这是一种新颖的循环结构,能够分别对不同的频率组件之间的影响进行动态建模。通过动态地将记忆分解为多个状态频率组件,SFM就能够捕获到时域上的模式之间的和频域上的模式之间的相互依赖关系,从而能够对时间序列进行更加细粒度的分析。
由于时间序列建模在许多应用上面都起着重要的作用,所以如何对时间序列进行动态地建模的研究有着很长的一段历史,并且时至今日都还是热门研究方向。近些年来,循环神经网络RNN的成功以及训练数据和计算资源的急速增长都极大的推动了该领域的发展。尽管一些复杂的RNN模型(例如LSTM)在许多时间序列建模任务上表现都十分出色,但是在有一些场景,如高频交易中预测短期投资策略等表现不佳。(Mittelman, 2015)
出现这种情况的一个可能的原因是,RNN只能建模出现在时域上的模式,而当我们想要对某一时间序列的不同频率的组件分别进行建模时,RNN就难以实现了。 例如,在音素分类任务中,一些音素比如“p”和“t”是由短时、高频信号产生,而一些因素比如“iy”和“ey”是由长时、低频信号产生。因此,在音素分类分类任务中,如果能对频域中的模式进行建模会有很大的帮助。类似地,音乐片段通常由跨越不同频带的音符序列组成。自动生成音乐需要正确地以和声的方式混合短音符和长音符。这些例子表明,许多时间序列中都存在丰富的频率分量,正确地捕获频域中的信息并对其进行建模在许多预测和生成任务中都起着重要作用。
因此,我们希望在模型捕获时间序列的时间上下文信息时,能够同时具有多频率分析和捕获长期依赖的能力。以此为出发点,我们提出了State-Frequency Memory(SFM),一种新颖的RNN结构,能够将某一时间序列的细胞状态分解成一系列不同的频率组件。这样,序列的信息就可以表示成不同状态频率(state-frequency)的组合。对于预测和生成任务,可以动态的学习到一系列的状态频率,并将这些信息保存在记忆门(memory gates)中,方便后续预测或生成目标输出。例如,对于短期预测,高频信息更有用;低频信息更有助于长期趋势的预测。 另外,频域的阈值还能够随着时间动态适应。自适应SFM能够随着时间序列的动态演变选择合适的傅里叶基函数从而能够更准确第地建模状态频率组件。
首先,我们通过在不同的具有丰富周期性信号的波形上进行预测证明了我们提出的SFM模型的有效性。另外,我们也在几个不同类型的时间序列数据集上进行了实验,证明SFM同样适用于非周期性时间序列建模。实验结果表明,SFM可以达到SOTA效果。
本文其余章节的内容安排如下:第二节对基于RNN架构及其应用的相关文献进行回顾;第三节对SFM进行介绍并给出其形式化的定义和数学分析;第四节展示在不同评估任务上的实验结果;最后,在第五节进行总结。
最早由Elman于1990提出的循环神经网络RNNs(Elman, 1990; Jordan, 1997),扩展了标准的前馈多层感知器网络,允许它们接受序列作为输入和输出,而不是单独一个观测值。在许多序列建模任务中,比如视频的帧,语音片段,文本片段等,都和时间具有很大的关系,因此RNNs在捕获时间依赖关系方面是不可或缺的手段。不幸的是,研究(Bengio et al., 1994)指出,由于在训练RNNs时反向传播出现梯度消失或梯度爆炸,导致RNNs难以捕获长期的时间依赖关系,这也使得基于梯度的优化方法陷入困局。
为了克服以上困难,一部分学者致力于提出更好的学习算法(Bengio et al., 2013;Pascanu et al., 2013;Martens & Sutskever, 2011),而一部分学者则专注于设计更加复杂的网络结构。1997,Hochreiter和Schmidhuber提出了长短时记忆(Long Short-Term Memory,LSTM)单元。与传统的RNN相比,LSTM通过引入门控机制从而具有了捕获长期依赖关系的能力。在实际应用中,LSTM在语音识别和手写体字符识别任务中表现都很出色(Graves et al., 2005; Graves & Schmidhuber, 2009; Sak et al., 2014)。2014,Cho等人提出了GRU(Gated Recurrent Unit),LSTM的一个变体。GRU用一个更新门替代了LSTM中的遗忘门和输入门,并且合并了细胞状态和隐藏状态省去了输出门,从而在性能没有明显减弱的情况下实现了一种更简单的网络结构。
除了LSTM及其变体GRU以外,还有许多其他的方法可以提升RNNs的序列建模能力。比如,分层RNN(El Hihi & Bengio, 1995)通过多层RNN网络层来建模序列的多种时间尺度的信息。随后,Schuster和Paliwal在1997年提出了双向RNN,Graves和Schmidhuber在2005年提出了双向LSTM。双向传播的结构使得输出层不仅能够捕获历史的信息,还能捕获到未来的信息。Clockwork RNN(Koutnik et al., 2014)和Phased LSTM(Neil et al., 2016)都提出了一种新的状态更新模式,允许隐藏层状态以不同的频率进行更新。
除了提出新的网络结构以外,也有许多研究者专注于将现有的RNN模型运用到不同的实际应用中。比如,RNN的编码解码框架被应用到了机器翻译中(Bahdanauet al., 2014;Sutskever et al., 2014);hierarchical Connectionist Temporal Classification (CTC)被应用到了语音识别任务中(Fern´andez et al., 2007)。后来,有研究(Boulanger-lewandowski et al., 2012)表明RNN在复调音乐建模与转录上具有更出色的表现。
假设已知一条具有 T T T个观测值的序列 X 1 : T = [ x 1 , x 2 , ⋯ , x T ] \mathbf X_{1:T}=[\mathbf x_1, \mathbf x_2, \cdots, \mathbf x_T] X1:T=[x1,x2,⋯,xT],其中每一个观测值都是一个 N N N维向量,即 x t ∈ R N ( t = 1 , ⋯ , T ) \mathbf x_t\in\mathbb R^N(t=1, \cdots,T) xt∈RN(t=1,⋯,T)。然后使用序列长度同为 T T T的记忆细胞序列来建模输入序列的动态变化。
与传统的LSTM类似,SFM中各个时间步的记忆细胞包含了 D D D维的记忆状态,不同的是,我们将这些记忆状态分解成了 K K K个的频率组件,各频率组件的频率记为 { ω 1 , ⋯ , ω K } \{\omega_1, \cdots,\omega_K\} {ω1,⋯,ωK}。这样就能通过捕获不同的状态信息和不同的频率信息来建模输入序列的时间上下文。例如,在分析、预测社会活动时,捕获不同周期或频率的特征模式。
t t t时刻的状态-频率记忆矩阵表示为 S t ∈ C D × K \mathbf S_t\in\mathbb C^{D\times K} St∈CD×K,矩阵的一列表示 D D D维状态,一行表示 K K K个频率。这样,对细胞状态分解成多个频率组件之后,就能够其进行细粒度的多频率分析,实现对输入序列的频域依赖模式进行建模。
与LSTM类似,状态-频率记忆矩阵的细胞状态也是通过融合上一时间步的记忆和当前最新的输入两者的信息来获得,另外还要将细胞状态分解成
K
K
K个频率组件。状态-频率记忆矩阵的更新公式如下:
其中
∘
\circ
∘表示按元素相乘,
j
=
−
1
j=\sqrt{-1}
j=−1
,
cos
ω
1
t
+
j
sin
ω
1
t
,
⋯
,
cos
ω
K
t
+
j
sin
ω
K
t
\cos \omega_1t+j\sin\omega_1t,\cdots,\cos \omega_Kt+j\sin\omega_Kt
cosω1t+jsinω1t,⋯,cosωKt+jsinωKt是
K
K
K个频率组件的傅里叶基函数;
f
t
∈
R
D
×
K
\mathbf f_t\in\mathbb R^{D\times K}
ft∈RD×K是遗忘门,负责过滤历史信息中的无用信息;
g
t
∈
R
D
\mathbf g_t\in\mathbb R^D
gt∈RD是输入门,负责提取当前信息中的有用信息;
i
t
∈
R
D
\mathbf i_t\in\mathbb R^D
it∈RD是输入调制,负责构造当前的候选信息(类似于LSTM里面的候选记忆细胞)。
状态-频率记忆矩阵 S t \mathbf S_t St的更新公式也可以分解成实部和虚部两个部分的更新:
S
t
\mathbf S_t
St的振幅计算公式:
其中
(
⋅
)
2
(\cdot)^2
(⋅)2表示按元素平方(按位平方)。
我们提出了两种遗忘门来决定历史状态-频率记忆细胞中的哪些状态信息和频率信息能够保留下来。
状态遗忘门:
频率遗忘门:
其中
σ
(
⋅
)
\sigma(\cdot)
σ(⋅)是一个按位sigmoid函数;
z
t
\mathbf z_t
zt是输出向量(在下文中会介绍);
W
∗
\mathbf W^*
W∗和
V
∗
\mathbf V^*
V∗都是权重矩阵;
b
∗
\mathbf b^*
b∗是偏置向量。
因此,联合状态-频率遗忘门可以定义为状态遗忘门和频率遗忘门的外积
⊗
\otimes
⊗:
输入门控制有多少的新信息能够保留并用于更新状态-频率记忆矩阵:
输入调制负责融合当前观测值
x
t
\mathbf x_t
xt 和上一时间步的输出
z
t
\mathbf z_t
zt 的信息。
为了求出SFM各时间步的输出,首先计算出每一个频率组件的输出,然后再将他们聚合起来得到一个输出。
已求得在
t
t
t时刻状态-频率记忆矩阵
S
t
\mathbf S_t
St的振幅为
A
t
\mathbf A_t
At,第
k
k
k个频率组件的输出向量
z
t
k
∈
R
M
\mathbf z_t^k\in\mathbb R^M
ztk∈RM可通过以下公式算得:
其中
A
t
k
∈
R
D
\mathbf A_t^k\in\mathbb R^D
Atk∈RD是
A
t
\mathbf A_t
At中的第
k
k
k列,对应着第
k
k
k个频率组件;
f
o
(
⋅
)
f_o(\cdot)
fo(⋅)是输出的激活函数;
o
t
k
o_t^k
otk是输出门,控制第
k
k
k个频率组件的信息是否能够输出。
其中
U
o
k
\mathbf U_o^k
Uok是系数矩阵。对
K
K
K个频率组件的输出
{
z
t
k
}
\{\mathbf z_t^k\}
{ztk}进行融合就能得到聚合的输出向量:
其中,
{
o
t
k
∣
k
=
1
,
⋯
,
K
}
\{\mathbf o_t^k|k=1,\cdots,K\}
{otk∣k=1,⋯,K}可以看作是调制器,控制着如何融合多频率信息来得到当前输出。
频率集合 { ω 1 , ⋯ , ω K } \{\omega_1,\cdots,\omega_K\} {ω1,⋯,ωK}可以简单地设置为 ω k = 2 π k K ( k = 0 , ⋯ , K − 1 ) \omega_k=\frac{2\pi k}{K}(k=0,\cdots,K-1) ωk=K2πk(k=0,⋯,K−1), K K K个均匀分布在 [ 0 , 2 π ] [0,2\pi] [0,2π]的离散的频率。 在这种设定下,公式14就相当于经典的离散时间傅里叶变换(Discrete-Time Fourier Transform,DTFT)。
或者,我们可以不事先设定离散频率的各个值
ω
=
[
ω
1
,
⋯
,
ω
K
]
T
\boldsymbol \omega=[\omega_1,\cdots,\omega_K]^T
ω=[ω1,⋯,ωK]T,而是把它们看作是变量,让它们在模型训练的过程中动态地调整以更好地反映潜在序列的上下文信息。也就是说,
ω
\boldsymbol \omega
ω不再是一个静态的频率向量,而是会随着时间推移或者输入序列发生相应的变化,以更好地反映记忆状态中的频率模式的变化。自适应的
ω
\boldsymbol \omega
ω计算公式如下:
这样,SFM就能够更加灵活地捕获到动态变化的频率模式,我们将其称为自适应SFM(A-SFM)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。