TimeSeries) Transformer 기반 Time Series Forecast 논문 알아보기

2023. 7. 5. 01:00ML(머신러닝)/Time Series

2023.07.05 - [ML(머신러닝)/Time Series] - Transformer 기반 Time Series Forecast 논문 알아보기

2023.07.06 - [ML(머신러닝)/Time Series] - TimeSeries Forecast) Transformer보다 좋다는 LSTF-Linear 알아보기

2023.07.12 - [ML(머신러닝)/Time Series] - TimeSeries) PatchTST 논문과 코드 살펴보기

2023.10.13 - [분류 전체보기] - TimeSeries) TSMixer 논문 및 구현 살펴보기

 

일단 시작 전에 많은 Transformer 기반의 Time Series Forecast를 하는 논문들이 나오고 있다.

 

1. Informer (AAAI 2021)
2. Autoformer (Neurips 2021)
3. Pyraformer (ICLR 2022)
4. Fedformer (ICML 2022)
5. EarthFormer (Neurips 2022)
6. Non-Stationary Transformer (Neurips 2022). 

 

실제로 아이디어는 넘치지만, 이런 방식에 대한 의문이 있고 성능과 직결되지는 않는다고 한다.

 

Informer

Beyond Efficient Transformer for Long Sequence Time-Series Forecasting

Transformer를 기반으로 long sequence의 시계열 예측을 수행하는 새로운 모델을 제안

dynamic decoding 방식 

순차적인 구조가 아닌 한 번에 뽑는 방식으로 구현함.

(재밌는 부분이 많을 것 같아 다음에 다시...)

 

 

 

Autoformer

Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting

Autoformer 모델의 아키텍처(Neurips 2021). 

이 모델은 시간 데이터의 계절 및 순환 표현을 만드는 것을 목표로 하는 계절 분해 메커니즘을 특징으로 합니다. 디코더는 세 가지 항목을 수집합니다. 디코더는 예측에 함께 추가되는 계절 부분과 추세 부분을 출력합니다. Autoformer 논문 2페이지의 그림.

Autoformer는 Informer 모델의 성능을 확장하고 향상시킵니다. 

Autoformer는 모델이 standard 어텐션보다 시간 종속성(temporal dependencies)을 더 잘 학습할 수 있도록 하는 자동 상관 메커니즘(auto-correlation)을 특징으로 합니다.

시간 데이터의 추세(trned) 및 계절적 구성 요소(seasonal component)를 정확하게 분해하는 것을 목표로 합니다. 

(재밌는 부분이 많을 것 같아 다음에 다시...)

Pyraformer

Low-complexity Pyramidal Attention for Long-range Time Series Modeling and Forecasting

 

본 논문에서 저자들은 "규모 간 트리 구조가 서로 다른 해상도의 특징을 요약하고 규모 내 이웃 연결이 서로 다른 범위의 시간적 의존성을 모델링하는 피라미드형 주의 모듈(PAM)"을 소개합니다

Fedformer

Frequency Enhanced Decomposed Transformer for Long-term Series Forecasting

이 모형은 시계열 데이터에서 글로벌 추세를 포착하는 데 중점을 둡니다.

저자들은 시계열의 글로벌 특성을 포착하는 것을 목표로 하는 계절적 추세 분해 모듈을 제안합니다.

Earthformer

아마도 이 논문들 중 가장 독특한 것으로, 지구 형성자는 특히 날씨, 기후 및 농업과 같은 지구 시스템을 예측하는 데 중점을 둡니다. 이 논문은 새로운 지구 입방체 주의 메커니즘(new earth cuboid attention mechanism)을 특징으로 합니다.

 

 

Non-Stationary Transformer

Exploring the Stationarity in Time Series Forecasting

 

예측 논문을 위한 변압기 그룹 중 가장 최근의 출판물입니다.

저자들은 비정상 시계열을 처리하기 위해 변압기를 더 잘 적응시키는 것을 목표로 합니다. 그들은 de-stationary attention와 a series stationarization mechanism이라는 두 가지 메커니즘을 사용합니다.

이러한 메커니즘은 기존의 모든 변압기 모델에 연결할 수 있으며 저자는 Informer, Autoformer 및 Vanilla Transformer에 연결하여 성능을 향상시키는 테스트를 수행합니다.

저자들의 방식을 추가로 적용하게 되면, 성능이 올라가는 것을 보여주는 예시입니다.

Trnasformer 기준으로 De-stationary 코드는 다음과 같다.

비정상적인 시계열 데이터에서 원래의 어텐션을 복구하기 위해, 사라진 비정상 정보를 다시 계산에 반영하려고 합니다. 식 5에 기반하여, 주요한 것은 양의 스케일링 스칼라인 τ = σ²ₓ ∈ R⁺과 이동 벡터인 ∆ = KµQ ∈ Rᵀ×¹를 비정상 해소 요소로 근사화하는 것입니다. 깊은 모델에서 엄격한 선형성이 거의 성립하지 않기 때문에, 실제 요소를 추정하고 활용하는 대신 비정상화되지 않은 x, Q 및 K의 통계량으로부터 비정상 해소 요소를 직접 학습하는 간단하고 효과적인 다층 퍼셉트론 레이어를 사용합니다. 현재 Q₀, K₀에서는 제한적인 비정상 정보만을 발견할 수 있기 때문에 비정상성을 보상하기 위한 독특하고 합리적인 소스는 정규화되지 않은 원래 x입니다. 따라서 식 5의 직접적인 딥러닝 구현으로서, 비정상화 요소 τ, ∆를 비정상화되지 않은 x의 통계 µₓ, σₓ에서 개별적으로 학습하기 위해 다층 퍼셉트론을 프로젝터로 적용합니다. 그리고 비정상 해소 어텐션은 다음과 같이 계산됩니다.

class DSAttention(nn.Module):
    '''De-stationary Attention'''
    def __init__(self, mask_flag=True, factor=5, scale=None, attention_dropout=0.1, output_attention=False):
        super(DSAttention, self).__init__()
        self.scale = scale
        self.mask_flag = mask_flag
        self.output_attention = output_attention
        self.dropout = nn.Dropout(attention_dropout)

    def forward(self, queries, keys, values, attn_mask, tau=None, delta=None):
        B, L, H, E = queries.shape
        _, S, _, D = values.shape
        scale = self.scale or 1. / sqrt(E)

        tau = 1.0 if tau is None else tau.unsqueeze(1).unsqueeze(1)  # B x 1 x 1 x 1
        delta = 0.0 if delta is None else delta.unsqueeze(1).unsqueeze(1)  # B x 1 x 1 x S
        
        # De-stationary Attention, rescaling pre-softmax score with learned de-stationary factors
        scores = torch.einsum("blhe,bshe->bhls", queries, keys) * tau + delta

        if self.mask_flag:
            if attn_mask is None:
                attn_mask = TriangularCausalMask(B, L, device=queries.device)

            scores.masked_fill_(attn_mask.mask, -np.inf)

        A = self.dropout(torch.softmax(scale * scores, dim=-1))
        V = torch.einsum("bhls,bshd->blhd", A, values)

        if self.output_attention:
            return (V.contiguous(), A)
        else:
            return (V.contiguous(), None)

https://github.com/thuml/Nonstationary_Transformers/blob/76d6c809260a89aa52f76ad413ee890c3d71034d/ns_layers/SelfAttention_Family.py#L8

아래와 같이 비정상 요소를 찾기 위해 평균과 편차를 구하는 것을 구하는 것을 볼 수 있다. 

# axis = 1 은 보통 time step이기 때문에 time series에 대한 임베딩 갑스이 평균과 편차를 구하는 것이다.

x_raw = x_enc.clone().detach()

# Normalization
mean_enc = x_enc.mean(1, keepdim=True).detach() # B x 1 x E
x_enc = x_enc - mean_enc
std_enc = torch.sqrt(torch.var(x_enc, dim=1, keepdim=True, unbiased=False) + 1e-5).detach() # B x 1 x E
x_enc = x_enc / std_enc
x_dec_new = torch.cat([x_enc[:, -self.label_len: , :], torch.zeros_like(x_dec[:, -self.pred_len:, :])], dim=1).to(x_enc.device).clone()

tau = self.tau_learner(x_raw, std_enc).exp()     # B x S x E, B x 1 x E -> B x 1, positive scalar    
delta = self.delta_learner(x_raw, mean_enc)      # B x S x E, B x 1 x E -> B x S

(재밌는 부분이 많을 것 같아 다음에 다시... / 의구심도 들기도 하고...)

 

 

 

의견

요즘 세상은 다 Transformer면 최고다라고 생각하고 있고, 나 역시 해당 구조를 이용하면 잘 나올 것으로 기대하지만,

실제로 잘 나오지 않는 경우가 상당히 빈번하다.

다양한 연구자들이 long-term time series forecasting (LTSF) 분야를 Transformer로 풀려고 하고 있고, 기존 구조에서는 시계열적인 특징이 잘 반영이 안 되니, 과거 시계열적인 부분을 모델링에 넣는 것 같다.

LTSF 분야를 풀기 위해 이런 식으로 가는 것은 맞다고는 생각이 든다.

그러나 이러한 것을 까는 논문도 나왔는데, 바로 Are Transformers Effective for Time Series Forecasting? 이다.

나중에 자세히 살펴보겠지만, 이 논문이 주장하는 것은 굳이 Transformer 안 쓰고 데이터를 trend과 remainder를 잘 분해하고 Linear 모델로도 충분하다는 것이 주장이다.

모델링하기 전에 잘 읽어봐야겠다.

참고

http://dsba.korea.ac.kr/seminar/?mod=document&uid=2613 

 

[Paper Review] Multivariate Time-Series Forecasting with MLP structure

1-1. 논문 제목 Are Transformers Effective for Time Series Forecasting?, A Zeng et al., AAAI 2023 링크: 바로가기 1-2. 논문 Overview Input time-series를 Trend와 Remainder로 Decomposition. Decomposition 한 데이터들에 대하여 1-Layer lin

dsba.korea.ac.kr

http://dsba.korea.ac.kr/seminar/?mod=document&uid=1823 

 

[Paper Review] Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting

1. Topic 이 논문은 올해 발표된 논문으로, AAAI 학회에서 Outstanding paper award를 수상한 논문입니다. 이 논문에서는 Transformer를 기반으로 long sequence의 시계열 예측을 수행하는 모델을 제안하는데, 특

dsba.korea.ac.kr

https://github.com/thuml/Autoformer

 

GitHub - thuml/Autoformer: About Code release for "Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Se

About Code release for "Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting" (NeurIPS 2021), https://arxiv.org/abs/2106.13008 - GitHub - thuml/Au...

github.com

http://dsba.korea.ac.kr/seminar/?mod=document&uid=1930 

 

[Paper Review] Autoformer: Decomposition transformers with auto-correlation for long-term series forecasting

1. 논문 제목: Autoformer: Decomposition transformers with auto-correlation for long-term series forecasting (Xu et al., NeurIPS'21) 링크: https://proceedings.neurips.cc/paper/2021/file/bcc0d400288793e8bdcd7c19a8ac0c2b-Paper.pdf 2. 논문 Overview  

dsba.korea.ac.kr

https://towardsdatascience.com/advances-in-deep-learning-for-time-series-forecasting-and-classification-winter-2023-edition-6617c203c1d1

 

Advances in Deep Learning for Time Series Forecasting and Classification: Winter 2023 Edition

The downfall of transformers for time series forecasting and the rise of time series embedding methods. Plus advances in anomaly detection…

towardsdatascience.com

https://github.com/AIStream-Peelout/flow-forecast

 

GitHub - AIStream-Peelout/flow-forecast: Deep learning PyTorch library for time series forecasting, classification, and anomaly

Deep learning PyTorch library for time series forecasting, classification, and anomaly detection (originally for flood forecasting). - GitHub - AIStream-Peelout/flow-forecast: Deep learning PyTorch...

github.com

https://github.com/ant-research/Pyraformer

 

GitHub - ant-research/Pyraformer

Contribute to ant-research/Pyraformer development by creating an account on GitHub.

github.com

https://arxiv.org/pdf/2201.12740.pdf

https://arxiv.org/pdf/2207.05833.pdf

https://arxiv.org/pdf/2205.14415.pdf

https://github.com/thuml/Nonstationary_Transformers

 

 

728x90