CARD(Channel Aligned Robust Blend Transformer)는 시계열 예측을 위한 특별한 transformer 모델
CI (Channel-Independent) 방식 Transforemer의 주요 단점 해결하고자 설계 (new robust loss function 중요)
Multi-Channel 즉, Multivariate Time series task에 적용시킨다면 매우 유용할 것으로 보여짐
Channel-Dependent (CD) 방식으로 다변량 시계열 예측에서 서로 다른 변수 간의 상호 의존성을 고려하여 예측 성능을 높이지만, 최근 연구에서 일반적으로 CI이 CD보다 성능이 더 좋다는 것을 입증함. (시계열 데이터 특성상, 변수 간의 의존성이 복잡하기에 노이즈가 많으므로, 오히려 CD 모델에서 overfitting 가능성이 매우 높음.)
CARD 모델은 채널 간의 의존성을 활용하면서, 과적합 문제를 줄이는 새로운 Transformer 모델
The architecture of CARD

Input
time-series data
Tokenize
시계열 데이터 작은 patch 단위로 나눠서 이를 토큰으로 처리
이 때, 각 채널별로 독립적으로 처리
여기서 토큰화된 데이터는 "패치된 토큰 텐서"라는 형태로 표현
이 텐서는 여러 채널(Channels), 즉 여러 변수에 대한 시계열 정보 포함
채널 수 (C)
다변량 시계열 데이터의 변수 개수를 의미합니다. 각 변수는 독립적인 시계열 데이터를 나타냅니다 (예: 온도, 습도, 압력).
패치 길이 (P)
각 토큰이 포함하는 시계열 데이터 포인트의 개수를 의미합니다. 예를 들어, 패치 길이가 16이면 각 토큰은 16개의 연속적인 데이터 포인트를 포함합니다.
스트라이드 (S)
토큰을 생성할 때, 각 토큰이 이전 토큰에서 얼마나 이동하는지를 나타냅니다. 스트라이드가 작을수록 토큰 간에 겹치는 부분이 많아집니다.
입력 시퀀스 길이 (L)
모델에 입력되는 전체 시계열 데이터의 길이를 의미합니다. 예를 들어, 96시간 동안의 데이터를 입력으로 사용한다면 입력 시퀀스 길이는 96이 됩니다.
히든 차원 (d)
토큰이 dense MLP layer를 거쳐 최종적으로 갖게 되는 차원입니다.
Attention

3.1 Attention over Channel Dimension
def dynamic_projection(self,src,mlp):
src_dp = mlp(src)
src_dp = F.softmax(src_dp,dim = -1)
src_dp = torch.einsum(’bnhef,bnhec -> bnhcf’,src,src_dp)3.2 Attention over Token Dimension
토큰 간의 temporal dependency 파악하고 이를 모델링에 활용
시계열 데이터, 시간적 의존성 파악하는 것 매우 중요
Process
데이터 준비
Q, K, V 생성
Exponential Moving Average (EMA)
는 smoothing factor로 0~1 사이의 값, 값이 클수록 최근 값에 더 큰 가중치 부여
→ 현재 시점에서의 정보 뿐만 아니라 과거의 정보까지 포함 (즉, 더 넓은 시간 범위의 정보를 “기억”)
→ 이는 Q, K attention score 연산 시, 각 query 토큰은 더 많은 key 토큰들과 유사한 패턴 공유하게 됨.
→ 결국 두 토큰이 유사한 패턴을 가진다면, 더 높은 attention score를 가지게 됨.
→ 이는 각 query 토큰은 자신과 관련된 정보를 더 많이 활용할 수 있게 됨.
→ EMA는 최근 값에 더 큰 weight를 주기 때문에 과거의 이상치가 현재 attention score에 미치는 영향이 크지 않음.
→ 이는 anomaly에 robust한 예측 가능하게 함.
attention score 계산
softmax 함수 적용

Value와 weighted sum 진행
outout - 토큰 차원에서의 어텐션 결과는 각 채널별로 시간적 의존성이 고려된 새로운 텐서가 됨

CARD 모델은 3.1 채널 차원에서의 어텐션 연산과 3.2 토큰 차원에서의 어텐션 연산 번갈아가면서 수행

def forward(self, src, *args,**kwargs):
# construct Q,K,V
B,nvars, H, C, = src.shape
qkv = self.qkv(src).reshape(B,nvars, H, 3, self.n_heads, C // self.n_heads).permute(3,
0, 1,4, 2, 5)
q, k, v = qkv[0], qkv[1], qkv[2]
if not self.over_channel:
attn_score_along_token = torch.einsum(’bnhed,bnhfd->bnhef’, self.ema(q), self.ema(k
))/ self.head_dim ** -0.5
attn_along_token = self.attn_dropout(F.softmax(attn_score_along_token, dim=-1) )
output_along_token = torch.einsum(’bnhef,bnhfd->bnhed’, attn_along_token, v)
else:
# dynamic project V and K
v_dp,k_dp = self.dynamic_projection(v,self.dp_v) , self.dynamic_projection(k,self.
dp_k)
attn_score_along_token = torch.einsum(’bnhed,bnhfd->bnhef’, self.ema(q), self.ema(
k_dp))/ self.head_dim ** -0.5
attn_along_token = self.attn_dropout(F.softmax(attn_score_along_token, dim=-1) )
output_along_token = torch.einsum(’bnhef,bnhfd->bnhed’, attn_along_token, v_dp)
# attention over hidden dimensions
attn_score_along_hidden = torch.einsum(’bnhae,bnhaf->bnhef’, q,k)/ q.shape[-2] ** -0.5
attn_along_hidden = self.attn_dropout(F.softmax(attn_score_along_hidden, dim=-1) )
output_along_hidden = torch.einsum(’bnhef,bnhaf->bnhae’, attn_along_hidden, v)
# token blend
output1 = rearrange(output_along_token.reshape(B*nvars,-1,self.head_dim),
’bn (hl1 hl2 hl3) d -> bn hl2 (hl3 hl1) d’,
hl1 = self.n_heads//self.merge_size, hl2 = output_along_token.shape[-2]
,hl3 = self.merge_size
).reshape(B*nvars,-1,self.head_dim*self.n_heads)
output2 = rearrange(output_along_hidden.reshape(B*nvars,-1,self.head_dim),
’bn (hl1 hl2 hl3) d -> bn hl2 (hl3 hl1) d’,
hl1 = self.n_heads//self.merge_size, hl2 = output_along_token.shape[-2]
,hl3 = self.merge_size
).reshape(B*nvars,-1,self.head_dim*self.n_heads)
# post_norm
output1 = self.norm_post1(output1).reshape(B,nvars, -1, self.n_heads * self.head_dim)
output2 = self.norm_post2(output2).reshape(B,nvars, -1, self.n_heads * self.head_dim)
# add & norm
src2 = self.ff_1(output1)+self.ff_2(output2)
src = src + src2
src = src.reshape(B*nvars, -1, self.n_heads * self.head_dim)
src = self.norm_attn(src)
src = src.reshape(B,nvars, -1, self.n_heads * self.head_dim)
return src
overall objective loss
기본적인 MSE 손실 활용 (l2 norm의 제곱) —> 모든 예측 시점에 대한 오차를 동일하게 취급 . 하지만, 실제로는 먼 미래의 예측은 불확실성이 더 크기 때문에 이 점을 고려한 loss식 필요


초기 loss 함수 (Negative Log-likelihood estimation)

1번 식에 markov process 가정 및 분산 추정 적용 (1차 Markov Process 따른다고 가정) 이는 예측 시점이 멀어질수록 불확실성이 커진다는 것을 의미 은 noise의 분산 는 identity matrix 활용

기존 SOTA 모델 혹은 baseline 모델들 대비 특히 일부 데이터셋에서 높은 성능을 보임.

특정 데이터셋에서는 TimesNet 혹은 PatchTST 모델이 높은 성능을 보였지만, 전체 평균 Avg에 대한 성능 결과는 CARD가 압도적이다.

Signal Decay-Based Loss Function의 효과

기존의 long term forecasting 트랜스포머 모델들은 긴 입력 시퀀스를 효과적으로 활용 x
input length가 길어짐에 따라 성능 저하되는 문제점 보임
→ 하지만 CARD는 이런 단점 본질적인 문제 x / input sequence가 더 길고, 노이즈가 많은 과거 시퀀스 입에서도 robust한 성능 유지 설명
일반적으로 token blend가 1에 가까울수록 즉, 표준 token blend일 경우 loss가 높게 나오는 경향 보임
→ 따라서 token blend size를 키울수록 성능 향상에 도움이 됨
새로운 Transformer 모델 (CARD): 이 논문에서는 시계열 예측을 위한 새로운 Transformer 모델인 CARD를 소개
채널 의존적 (Channel-dependent) 모델: CARD는 채널 의존적인 모델로, 다양한 변수와 숨겨진 차원 (hidden dimensions) 간의 정보를 효과적으로 정렬
Attention 메커니즘 개선: CARD는 토큰과 채널 모두에 attention을 적용하여 기존 Transformer를 개선
Attention 메커니즘 설계: 새로운 attention 메커니즘 설계는 각 토큰 내의 로컬 정보를 탐색하여 시계열 예측에 더 효과적
토큰 블렌드 모듈 제안: 시계열 데이터에서 다중 스케일 정보 지식 (multi-scale information knowledge) 활용을 위한 토큰 블렌드 모듈을 제안
Robust 손실 함수 도입: 시계열 분석의 중요한 문제인 과적합 (overfitting) 문제를 완화하기 위해 robust 손실 함수를 도입
우수한 성능: 다양한 수치 벤치마크를 통해 제안된 모델이 최첨단 모델보다 성능이 우수함을 입증