※ 논문을 읽고 개인적으로 정리한 것으로 틀린 해석이 있을 수 있습니다 ※
[Background]
● 연구 의도
GNN이나 CNN과 같은 방법을 사용하여 시계열 예측을 수행한 이전 연구들은 시간에 대한 의존성뿐만 아니라 공간에 대한 의존성도 고려하여 시계열 예측을 수행하였다. 예를 들면, 온도를 예측하고자 할 때, 과거의 온도도 예측에 중요하지만 과거의 바람 세기도 예측에 도움이 된다. 트랜스포머 기반의 모델들은 시간에 대한 의존성을 잘 파악하지만 공간에 대한 의존성을 고려하지 않은 방법들이어서 해당 논문을 통해 공간 의존성을 고려한 시계열 예측 과업을 수행하고자 하였다.
[Summary]
본 논문에서는 시간 의존성 뿐 아니라 공간 의존성을 고려하기 위해 트랜스포머 구조를 변형한다.
● DSW(Dimension Segment-wise Embedding)
먼저, 다변량 시계열 데이터를 각각의 특성별로 차원을 나누어 임베딩 한다. 각 특성에 대해 시간적 의존성을 학습하는 과정에서 각 특성 별로 임베딩을 분리하여 처리한다. 이를 통해 각각의 특성들이 시간에 따라 어떻게 변화하는지 독립적으로 모델링할 수 있다.
또한 각 특성별로 시간에 따라 일정 길이의 세그먼트를 생성하고 이를 개별 벡터로 임베딩한다. 각 세그먼트는 Linear projection을 통해 고차원 벡터로 변환되고 위치 임베딩을 추가한다. 결과적으로 각 세그먼트는 2D 벡터 배열의 형태로 표현된다. 한 축은 시간을 나타내고 다른 축을 차원을 나타낸다.
이전 Patch로 나누는 과정과 헷갈려서 패치와 세그먼트의 차이점에 대해 좀 더 알아보았다.
Patch 방식
다변량 시계열 데이터를 각 특성을 독립적인 단변량 시계열로 분리한다. 분리한 시계열 데이터를 시간 축에 따라 일정한 길이의 패치로 나눈다. 결과적으로 패치는 단순히 1D 벡터의 연속된 배열로 표현된다.
Segment 방식
다변량 시계열 데이터를 각 특성을 차원으로 하여 독립적으로 분리한 후 시간 축에 따라 일정한 길이의 세그먼트로 나눈다. 결과적으로 데이터를 시간 축과 차원 축으로 구성된 2D 벡터 배열로 표현한다.
Patch 방식은 특성 간의 관계보다 시간 의존성을 중점으로 해석한다. 반면 Segment 방식은 특성 간의 관계도 고려하기 위해 2D 배열의 형식을 사용한다. 당연하게도 Segment 방식은 수행 시간이 오래 걸릴 것으로 보인다. 해당 논문에서는 이러한 점을 해결하기 위해 다양한 방법론을 제시한다.
● Two-Stage Attention Layer
이 단계는 시간적 의존성과 차원 간 의존성을 효율적으로 학습하기 위해 두 단계로 나누어 데이터의 2D 배열에 어텐션 연산을 수행한다. 먼저 시간 의존성 학습 부분이다.
▶ Cross-Time Stage
특정 변수에 대한 시간 축을 따라 각 세그먼트 간의 의존성을 학습한다. 각 차원 별로 독립적인 Multi-head Self attention을 적용하여 특정 변수의 시간적 패턴을 캡처한다.
1. Input
입력 데이터 $Z$는 $L\times D \times d_{model}$ 크기의 2D 벡터 배열이다. 여기서 3차원 배열이 아니냐는 의문이 들 수 있는데 시간 의존성에 대해서 판단할 때는 각 특성별로 수행하기 때문에 하나하나는 $L\times d_{model}$이므로 2D 벡터 배열이다.
$L$ : 시간 축을 따라 분할된 세그먼트의 개수
$D$ : 특성의 개수
$d_{model}$ : 각 세그먼트를 표현하는 임베딩 벡터의 차원
2. Multi-Head Self-Attention
특정 차원 $d$에 대해 시간 축 $L$의 벡터 $Z_{:,d}$를 멀티 헤드 어텐션 연산을 수행한다. 여기서 $Z_{:,d}$는 해당 d 차원의 모든 세그먼트를 의미한다.
3. Residual Connection, Layer Normalization
어텐션 결과를 기존 입력과 합산하고 Layer Normalization을 적용하여 학습을 안정화한다.
$$ \hat{Z}^{time}_{:,d} = LayerNorm(Z_{:,d} + MSA_{time}( Z_{:,d}, Z_{:,d}, Z_{:,d}))$$
4. FeedForward Network
학습을 안정화한 후 Multi Layer Perceptron을 적용하여 복잡한 비선형 관계를 추가 학습한다.
$$ Z^{time} = LayerNorm( \hat{Z}^{time} + MLP( \hat{Z}^{time}))$$
★ Cross-Time Stage 진행 순서 정리
- 특정 차원 d에 대해 시간 축의 벡터 $Z_{:,d}$를 추출
- Multi-Head Self Attention을 사용하여 시간 축에서 각 세그먼트 간의 의존성을 학습
- Residual Connection과 Layer Normalization으로 안정화
- MLP를 적용하여 비선형 변환을 추가하고 Layer Normalization으로 안정화
- 최종적으로 시간 축 의존성을 반영한 $Z^{time}$를 출력
수식으로 정리하면 아래와 같다.
$$\hat{Z}^{time}_{:,d} = LayerNorm(Z_{:,d} + MSA_{time}( Z_{:,d}, Z_{:,d}, Z_{:,d}))$$
$$Z^{time} = LayerNorm( \hat{Z}^{time} + MLP( \hat{Z}^{time}))$$
이러한 과정을 통해 원래 2D 벡터 배열을 self-attention을 수행하면 $O(D^{2}\frac{T^{2}}{L^{2}_{seg}})$의 시간복잡도를 $O(DL^{2})$로 줄였다.
▶ Cross-Dimension Stage
동일한 시간 내에서 서로 다른 변수들 간의 의존성을 학습한다.
1. Input
Cross-Time Stage의 출력 $Z^{time}$ 을 입력으로 받는다.
2. Router Mechanism
고려할 특성의 개수가 많아질수록 직접적으로 모든 특성 간의 의존성을 학습하려면 계산 비용이 $O(D^{2})$로 증가한다. 이를 해결하고자 Router Mechanism을 도입하여, 소수의 Router 벡터를 사용해 정보를 집계하고 분배한다.

★ Cross-Dimension Stage 진행 순서 정리
- 각 시간 세그먼트 i에 대해 c개의 Router 벡터 $R_{i,:}$를 정의한다.
$R_{i,:}$ : $c \times d_{model}$ 크기의 학습 가능한 벡터
$c$ : Router 벡터의 개수 ($c<<D$) - Router 벡터를 쿼리로 사용하고, 특성 데이터를 키와 값으로 사용하여 Multi-Head Self-Attention을 수행한다.
$$ B_{i,:} = MSA^{dim}_{1}(R_{i,:}, Z^{time}_{i,:}, Z^{time}_{i,:}), 1\leq i \leq L$$
$B_{i,:}$ : Router에 저장된 정보 - Router에 저장된 정보를 다시 차원별 데이터로 분배한다.
$$\overline{Z}^{dim}_{i,:} = MSA^{dim}_{2}(Z^{time}_{i,:}, B_{i,:}, B_{i,:}), 1\leq i \leq L$$
$ \overline{Z}^{dim}_{i,:}$ : 특성 간 상호작용이 반영된 출력 - 학습의 안정성을 높이기 위해 Residual Connection과 Layer Normalization을 적용한다.
$$\hat{Z}^{dim} = LayerNorm(Z^{time} + \overline{Z}^{dim})$$ - Multi Layer Perceptron 적용 후 Residual Connection과 Layer Normalization을 적용한다.
$$Z^{dim} = LayerNorm(\hat{Z}^{dim} + MLP(\hat{Z}^{dim}))$$
수식으로 정리하면 아래와 같다.
$$ B_{i,:} = MSA^{dim}_{1}(R_{i,:}, Z^{time}_{i,:}, Z^{time}_{i,:}), 1\leq i \leq L $$
$$ \overline{Z}^{dim}_{i,:} = MSA^{dim}_{2}(Z^{time}_{i,:}, B_{i,:}, B_{i,:}), 1\leq i \leq L $$
$$ \hat{Z}^{dim} = LayerNorm(Z^{time} + \overline{Z}^{dim}) $$
$$ Z^{dim} = LayerNorm(\hat{Z}^{dim} + MLP(\hat{Z}^{dim})) $$
2D 벡터 배열을 그대로 어텐션 연산을 수행했다면 시간 복잡도는 $O(D^{2})$가 되지만 Router Mechanism을 적용하면 시간 복잡도는 $O(2cD) = O(D)$로 줄어든다.
결국 TSA Layer에서는 Cross-Time Stage와 Cross-Dimension Stage를 통해 2D 벡터 배열 연산의 시간 복잡도를 $O(DL^{2} + DL) = O(DL^{2})$으로 줄여 효과적으로 어텐션 연산을 수행할 수 있다.
● Hierarchical Encoder-Decoder
이 방법은 데이터의 다양한 시간 스케일에서 정보를 수집하고 이를 결합하여 예측 성능을 극대화하기 위해 Encoder와 Decoder를 계층적으로 구성하는 방법이다.
Encoder : 입력 데이터를 여러 계층으로 처리하며, 각 계층에서 점진적으로 시간적 스케일을 확장하여 세부적인 패턴과 넓은 스케일의 패턴을 모두 학습하고자 한다.
Decoder : Encoder의 각 계층에서 생성된 정보를 사용하여 다양한 스케일에서 예측을 수행하고, 이를 합산하여 최종 예측값을 생성한다.
▶ Encoder
1. Input
입력 데이터 $X$는 Dimension Segment-wise Embedding을 거쳐 $\hat{Z}^{enc,1}$로 변환된다. 또한 이전 계층의 출력값이 다음 계층의 입력으로 사용된다. $ Z^{enc,l} = Encoder(Z^{enc,l-1})$
2. Hierarchical Encoder
두 개의 인접한 시간 세그먼트를 병합하여, 다음 계층에서 더 긴 시간 스케일을 학습할 수 있도록 한다.
수식으로 나타내면 다음과 같다.

첫 입력($l = 1$)은 그대로 수행하고 그 다음 계층부터는 입력 세그먼트의 크기를 병합하고 Two-Stage Attention을 수행하여 시간 및 차원 간의 의존성을 학습한다.

각 계층의 출력 $Z_{enc,l}은 점점 더 긴 시간 스케일의 정보를 포함하게 되고 모든 계층의 출력을 저장하여 Decoder에서 사용한다.
총 계층의 개수가 N개라고 하면 인코더의 출력은 N+1개이다.
▶ Decoder
1. Input
예측을 위해 N+1개의 계층을 가지고 Encoder에서 학습된 다중 스케일 정보를 사용한다. 또한 이전 계층의 Decoder 출력값과 해당 계층의 Encoder 출력 값으로 해당 계층의 Decoder 출력 값을 구한다. $Z^{dec,l} = Decoder(Z^{dec, l-1}, Z^{enc, l})$
2. Hierarchical Decoder
Encoder의 해당 계층 출력과 Decoder 계층 간의 상호작용을 학습한다. 첫번째 Decoder 계층은 학습 가능한 포지션 임베딩을 입력으로 하여 Two-Stage Attention을 수행하고 그 외의 계층은 이전 Decoder 출력값을 입력으로 사용한다. Two-Stage Attention을 수행한 후에 해당 계층의 Encoder 출력을 키와 값으로 사용하여 Multi-Head Self-Attention을 수행하고 수행한 값과 Two-Stage Attention을 수행한 값을 Residual Connection과 Layer Normalization을 수행한다. MLP를 적용하여 비선형 변환을 추가하고 Layer Normalization을 적용하여 안정화하여 해당 계층의 Decoder 출력을 도출한다.

수식에서 $1 \leq d \leq D$의 표현이 d의 개수를 지정한다고 오해할 수 있는데 d는 해당 특성의 인덱스를 말한다.
Decoder도 마찬가지로 인코더처럼 계층의 개수가 N개라고 가정하면 출력은 N+1개이다.
각각의 계층 출력에 각 세그먼트별, 특성 별로 Linear projection을 적용하여 중요도를 나타내고 이를 병합하여 해당 계층의 예측 값으로 나타낸다. 최종 예측은 계층 별 예측값을 합쳐 예측한다.

[Results]
실험은 데이터셋 ETTh1, ETTm1, WTH, ECL, ILI, Traffic을 실험에 사용하였고 Baseline model로는 MTS 예측 기반 모델들(LSTMa, LSTnet, MTGNN)과 트랜스포머 기반 모델들(Transformer, Informer, Autoformer, Pyraformer, FEDformer)을 사용했다.

실험 결과를 보면 상당히 많은 부분에서 좋은 성능을 보인다는 것을 알 수 있다. 저자는 MTGNN이 특성 간의 의존성을 고려하여 활용한 이유로 많은 트랜스포머 모델들을 능가하는 성능을 보여준다고 한다. FEDformer와 Crossformer가 가장 좋은 성능을 보였다. ILI 데이터셋에서 성능이 좋지 않은 이유로 데이터셋의 크기가 작으면 학습이 어려운 점을 꼽았다.
또한 하이퍼파라미터의 설정을 달리하며 실험을 진행했다. 두 개의 하이퍼 파라미터를 설정했는데 하나는 segment의 길이, 하나는 router 벡터의 개수이다.
세그먼트 길이는 short-term forecasting에서는 짧은 것이 예측에 약간의 더 좋은 성능을 보여줬고 long-term forecasting에서는 꼭 긴 segment가 좋은 성능을 보이진 않았다고 한다. segment 길이가 24인 것이 48인 것보다 더 좋은 결과가 나왔는데 가능한 이유로 24시간이 하루의 길이와 완전히 맞기에 길이가 48일 때보다 더 잘 예측한 것이라고 한다.
router 벡터의 개수는 예측 길이가 336 이하일 경우에 c 값에 상관 없이 좋은 성능을 보였지만 예측 길이가 720일 경우에 c값이 3일 때 MSE 값이 커졌지만 5이상인 경우에는 다시 감소하고 안정적이었다고 한다. 그래서 저자들은 c를 10으로 고정하여 사용하였다.
[Conclusion]
해당 논문은 시간에 대한 의존성 뿐만 아니라 차원, 변수에 대한 의존성까지 고려하는 구조를 만들기 위해 연구하였다. 일반적으로 2차원 배열을 어텐션에 사용하려면 제곱의 시간복잡도가 필요하지만 해당 논문에서는 Dimension-Segment-wise Embedding과 Two-Stage Attention 방법을 적용하여 시간 복잡도를 낮추었다. 또한 Hierarchical Encoder-Decoder를 통해 다양한 스케일의 정보를 수집하여 예측하고자 하였다.
해당 논문은 Time-LLM을 읽은 후 궁금증이 남아 더 찾아보다가 읽게 되었다. Time-LLM은 다변량 데이터를 단변량 데이터로 나누어 따로 예측을 수행하는 데 이 방법은 다변량 예측의 의미가 사라진다고 생각하였다. 각각의 변수들의 변화가 예측하고자 하는 타겟 변수의 변화에 영향을 줄텐데 이를 따로 예측하는 건 결국 각각의 Single-Variate를 예측하는 것과 다름이 없기 때문이다.
2차원의 데이터를 어텐션 연산 처리가 가능하는 것을 해당 논문을 통해 알 수 있었다. 아무래도 GNN이 다변량 예측에 있어서 가장 많이 거론되는 방법인 것 같은데 다음에는 GNN과 관련된 논문을 읽어봐야겠다.