在autoformer中对Q和K进行快速傅里叶变换(FFT)有以下几个关键原因:
1. 频域表示提高计算效率
在时域进行卷积计算(如自相关计算)通常是计算复杂且耗时的,尤其是对于长时间序列数据。通过对Q和K进行FFT变换,转换到频域后,可以将复杂的卷积计算转换为简单的点乘操作,从而大幅提高计算效率。具体来说:
- 卷积定理:在时域中的卷积运算可以转换为频域中的点乘运算。对于两个信号f(t)和g(t)来说,它们在时域的卷积相当于它们在频域的乘积:
F { f ∗ g } = F { f } ⋅ F { g } \mathcal{F}\{f * g\} = \mathcal{F}\{f\} \cdot \mathcal{F}\{g\} F{f∗g}=F{f}⋅F{g}
其中 F \mathcal{F} F表示傅里叶变换, ∗ * ∗表示卷积运算, ⋅ \cdot ⋅表示点乘。
2. 捕捉周期性特征
时间序列数据中往往包含显著的周期性成分。通过傅里叶变换,可以将时间序列中的周期性特征更明显地呈现在频域中。这对于捕捉和分析时间序列的周期性行为非常重要,尤其是对于预测模型来说:
- 频域分析:傅里叶变换将时间序列分解为不同频率成分的叠加,使得周期性特征(如季节性波动)在频域中更加突出,从而更容易识别和处理这些特征。
3. 提高模型性能
通过在频域进行操作,可以更有效地捕捉时间序列中的长程依赖关系和周期性模式,进而提高模型的预测性能。具体来说:
- 长程依赖:频域表示可以更容易地捕捉长时间范围内的依赖关系,因为频域中的低频成分对应的是时间序列中的长期趋势和周期性。
- 降噪:傅里叶变换后,可以更容易识别并过滤掉高频噪声成分,从而提升信号的质量和模型的稳定性。
具体操作
结合图中的过程,可以详细描述如下:
-
输入处理 (Q, K, V):
- 输入时间序列数据通过线性层处理生成查询(Query, Q)、键(Key, K)和值(Value, V)。
-
FFT变换 (FFT):
- 对Q和K分别进行快速傅里叶变换,得到它们的频域表示。假设输入时间序列长度为L,变换后的结果为频域中的L个频率分量。
-
频域点乘 (Conjugate):
- 在频域中,Q和K的共轭相乘操作相当于在时域中进行自相关计算。这一步得到频域中的相关性。
-
逆FFT (Inverse FFT):
- 将频域相关性结果进行逆FFT变换,回到时域,得到时域的时间延迟聚合结果。
通过这些步骤,Autoformer能够高效地捕捉和处理时间序列数据中的周期性和趋势性特征,从而提高预测的准确性和稳定性。
数据举例
假设我们有一个简单的温度时间序列数据,记录了过去10天的每日温度(单位:摄氏度):
[
30
,
32
,
31
,
29
,
30
,
33
,
34
,
35
,
36
,
38
]
[30, 32, 31, 29, 30, 33, 34, 35, 36, 38]
[30,32,31,29,30,33,34,35,36,38]
-
生成Q和K:
- 通过线性变换生成Q和K,例如:
Q = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] Q = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] Q=[1,2,3,4,5,6,7,8,9,10]
K = [ 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ] K = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] K=[10,9,8,7,6,5,4,3,2,1]
- 通过线性变换生成Q和K,例如:
-
FFT变换:
- 对Q和K进行FFT变换,假设结果为:
F ( Q ) = [ 55 , − 5.5 + 15.3 i , − 5.5 + 6.7 i , − 5.5 + 2.7 i , − 5.5 + 0.8 i , − 5.5 , − 5.5 − 0.8 i , − 5.5 − 2.7 i , − 5.5 − 6.7 i , − 5.5 − 15.3 i ] \mathcal{F}(Q) = [55, -5.5 + 15.3i, -5.5 + 6.7i, -5.5 + 2.7i, -5.5 + 0.8i, -5.5, -5.5 - 0.8i, -5.5 - 2.7i, -5.5 - 6.7i, -5.5 - 15.3i] F(Q)=[55,−5.5+15.3i,−5.5+6.7i,−5.5+2.7i,−5.5+0.8i,−5.5,−5.5−0.8i,−5.5−2.7i,−5.5−6.7i,−5.5−15.3i]
F ( K ) = [ 55 , 5.5 + 15.3 i , 5.5 + 6.7 i , 5.5 + 2.7 i , 5.5 + 0.8 i , 5.5 , 5.5 − 0.8 i , 5.5 − 2.7 i , 5.5 − 6.7 i , 5.5 − 15.3 i ] \mathcal{F}(K) = [55, 5.5 + 15.3i, 5.5 + 6.7i, 5.5 + 2.7i, 5.5 + 0.8i, 5.5, 5.5 - 0.8i, 5.5 - 2.7i, 5.5 - 6.7i, 5.5 - 15.3i] F(K)=[55,5.5+15.3i,5.5+6.7i,5.5+2.7i,5.5+0.8i,5.5,5.5−0.8i,5.5−2.7i,5.5−6.7i,5.5−15.3i]
- 对Q和K进行FFT变换,假设结果为:
-
频域点乘:
- 在频域中进行共轭点乘:
F ( Q ) ⋅ F ( K ) ∗ = [ 3025 , − 91 + 0 i , − 37 + 0 i , − 15 + 0 i , − 5 + 0 i , 0 , − 5 + 0 i , − 15 + 0 i , − 37 + 0 i , − 91 + 0 i ] \mathcal{F}(Q) \cdot \mathcal{F}(K)^* = [3025, -91 + 0i, -37 + 0i, -15 + 0i, -5 + 0i, 0, -5 + 0i, -15 + 0i, -37 + 0i, -91 + 0i] F(Q)⋅F(K)∗=[3025,−91+0i,−37+0i,−15+0i,−5+0i,0,−5+0i,−15+0i,−37+0i,−91+0i]
- 在频域中进行共轭点乘:
-
逆FFT变换:
- 对频域结果进行逆FFT变换,得到时域的相关性结果:
Inverse FFT ( [ 3025 , − 91 + 0 i , − 37 + 0 i , − 15 + 0 i , − 5 + 0 i , 0 , − 5 + 0 i , − 15 + 0 i , − 37 + 0 i , − 91 + 0 i ] ) = [ 10 , 9 , 8 , 7 , 6 , 5 , 4 , 3 , 2 , 1 ] \text{Inverse FFT}([3025, -91 + 0i, -37 + 0i, -15 + 0i, -5 + 0i, 0, -5 + 0i, -15 + 0i, -37 + 0i, -91 + 0i]) = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] Inverse FFT([3025,−91+0i,−37+0i,−15+0i,−5+0i,0,−5+0i,−15+0i,−37+0i,−91+0i])=[10,9,8,7,6,5,4,3,2,1]
- 对频域结果进行逆FFT变换,得到时域的相关性结果:
这样,通过在频域进行计算,Autoformer能够高效地捕捉时间序列数据中的周期性和趋势性特征,最终提升预测性能。