在autoformer中为什么要对QK 进行傅里叶变换

在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{fg}=F{f}F{g}
    其中 F \mathcal{F} F表示傅里叶变换, ∗ * 表示卷积运算, ⋅ \cdot 表示点乘。

2. 捕捉周期性特征

时间序列数据中往往包含显著的周期性成分。通过傅里叶变换,可以将时间序列中的周期性特征更明显地呈现在频域中。这对于捕捉和分析时间序列的周期性行为非常重要,尤其是对于预测模型来说:

  • 频域分析:傅里叶变换将时间序列分解为不同频率成分的叠加,使得周期性特征(如季节性波动)在频域中更加突出,从而更容易识别和处理这些特征。

3. 提高模型性能

通过在频域进行操作,可以更有效地捕捉时间序列中的长程依赖关系和周期性模式,进而提高模型的预测性能。具体来说:

  • 长程依赖:频域表示可以更容易地捕捉长时间范围内的依赖关系,因为频域中的低频成分对应的是时间序列中的长期趋势和周期性。
  • 降噪:傅里叶变换后,可以更容易识别并过滤掉高频噪声成分,从而提升信号的质量和模型的稳定性。

具体操作

结合图中的过程,可以详细描述如下:

  1. 输入处理 (Q, K, V)

    • 输入时间序列数据通过线性层处理生成查询(Query, Q)、键(Key, K)和值(Value, V)。
  2. FFT变换 (FFT)

    • 对Q和K分别进行快速傅里叶变换,得到它们的频域表示。假设输入时间序列长度为L,变换后的结果为频域中的L个频率分量。
  3. 频域点乘 (Conjugate)

    • 在频域中,Q和K的共轭相乘操作相当于在时域中进行自相关计算。这一步得到频域中的相关性。
  4. 逆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]

  1. 生成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]
  2. 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.50.8i,5.52.7i,5.56.7i,5.515.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.50.8i,5.52.7i,5.56.7i,5.515.3i]
  3. 频域点乘

    • 在频域中进行共轭点乘:
      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]
  4. 逆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]

这样,通过在频域进行计算,Autoformer能够高效地捕捉时间序列数据中的周期性和趋势性特征,最终提升预测性能。

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值