AI 기상 예측 모델의 multi-step rollout 학습 전략 — BPTT, Replay Buffer, Online Replay Buffer
Published:
1. 왜 multi-step 학습이 필요한가
데이터 기반 기상·기후 모델은 대부분 autoregressive(AR) 구조다. 모델 $f_\theta$ 는 한 시점의 상태 $x_t$ 를 받아 다음 시점 $x_{t+1}$ 을 예측하고, 예측을 다시 입력으로 넣어 미래로 굴러간다.
\[\hat{x}*{t+k} = \underbrace{f*\theta \circ f_\theta \circ \cdots \circ f_\theta}_{k\ \text{회}}(x_t)\]문제는 학습과 추론의 불일치다. 가장 단순한 학습 방식인 single-step teacher forcing은 항상 정답 상태 $x_t^{\text{true}}$ 를 입력으로 받아 one-step loss만 최소화한다.
\[\mathcal{L}*{\text{1-step}} = \big| f*\theta(x_t^{\text{true}}) - x_{t+1}^{\text{true}} \big|\]하지만 추론 시에는 모델이 자기 자신의 (조금씩 틀린) 출력을 입력으로 받는다. 모델은 한 번도 본 적 없는 분포의 입력을 마주하게 되고, 그 위에서 다시 예측하면서 오차가 누적된다. 결과적으로 스펙트럼이 뭉개지거나(blurring), 며칠 뒤 롤아웃이 발산하는 현상이 나타난다. 이 distribution shift가 AR 모델 불안정성의 핵심이다.
Multi-step rollout 학습의 목표는 한 문장으로 요약된다.
학습 중에 모델이 자기 자신의 출력 분포를 미리 경험하게 만들어, 추론 시 분포와 학습 시 분포를 맞춘다.
이 목표를 어떻게 구현하느냐에 따라 전략이 갈린다. 핵심 축은 세 가지다.
- Gradient horizon — gradient가 롤아웃을 얼마나 거슬러 올라가 보는가
- On-policy vs off-policy — 모델이 보는 입력 상태가 현재 파라미터로 만든 것인가, 과거 파라미터로 만든 것인가
- 메모리·연산 비용 — 그래프에 몇 step을 올리고, 별도 저장공간을 얼마나 쓰는가
이제 세 전략을 이 축들 위에서 비교해 보자.
2. BPTT (Backpropagation Through Time)
아이디어
가장 직관적인 방법이다. 모델을 $K$ step 펼쳐서(unroll) 전체 롤아웃을 하나의 계산 그래프로 만들고, 각 step의 loss를 합한 뒤 전체 그래프를 거슬러 backprop한다.
x = x0
loss = 0.0
for k in range(1, K + 1):
x = f_theta(x) # 그래프에 그대로 유지
loss += criterion(x, target[k])
loss.backward() # K step 전체를 거슬러 미분
특징
gradient가 롤아웃 전체를 본다는 게 결정적 장점이다. 모델은 “지금 이 예측이 몇 step 뒤 loss에 어떤 영향을 주는가”까지 고려해서 파라미터를 갱신한다. 즉, 미래까지 안정적으로 굴러가는 표현을 직접 학습한다. multi-step 신호의 품질 면에서는 사실상 gold standard다.
대신 대가가 크다.
- 메모리가 $K$ 에 선형 비례한다. backprop을 위해 모든 중간 step의 activation을 들고 있어야 한다. 고해상도 전지구 필드에서는 $K$ 를 키우는 순간 GPU 메모리가 터진다. → gradient checkpointing으로 일부 activation을 버리고 backward에서 재계산하는 방식이 거의 필수다(메모리↓, 연산↑ 트레이드오프).
- Gradient pathology. 긴 체인을 거치면 vanishing/exploding gradient가 생기고 loss 표면이 거칠어진다. 그래서 보통 작은 $K$(2~12 step 수준)에 머문다.
- 연산 비용도 update당 $K$ 회 forward + backward로 비싸다.
실제 사례
GraphCast는 처음부터 긴 롤아웃으로 학습하지 않는다. curriculum 방식으로, 1 step부터 시작해 롤아웃 길이를 점진적으로 늘려 가며(최종적으로 12 step 수준까지) 짧은 fine-tuning 단계를 거친다. BPTT의 메모리·안정성 한계를 curriculum과 checkpointing으로 우회한 전형적인 예다.
요약: gradient 신호는 가장 풍부하지만 메모리 $O(K)$ 와 gradient 불안정 때문에 긴 horizon으로 확장하기 어렵다.
3. Replay Buffer
아이디어
BPTT의 메모리 문제는 “전체 롤아웃을 그래프에 올린다”는 데서 온다. Replay buffer는 발상을 뒤집는다.
그래프에는 딱 한 step만 올린다. 대신, 입력 상태 자체를 모델이 이미 여러 번 굴려 만든 예측으로 채워서 distribution shift를 흉내 낸다.
이는 Brandstetter et al.(2022)의 pushforward trick과 강화학습의 replay buffer 개념을 결합한 형태다. 버퍼에는 다양한 롤아웃 깊이(depth)의 예측 상태들이 쌓여 있다. 매 iteration마다 버퍼에서 상태 하나를 뽑아 한 step만 전진시키고, 그 한 step에 대해서만 backprop한 뒤(입력에는 stop-gradient), 새로 만든 예측을 다시 버퍼에 밀어넣는다.
buffer.init_from_data() # depth 0 상태들로 초기화
for it in range(num_iters):
x, depth = buffer.sample() # 과거에 만들어진 예측 상태
x_next = f_theta(x) # 단 1 step만 그래프에 올림
loss = criterion(x_next, target[depth + 1])
loss.backward() # 1-step gradient (x는 detach 상태)
if depth + 1 < max_depth:
buffer.push(x_next.detach(), depth + 1) # 한 step 더 깊은 상태로 재투입
else:
buffer.push(sample_fresh_data(), 0) # 깊이 한계 도달 시 리셋
버퍼에 한 번 들어간 상태는 다음에 뽑힐 때 또 한 step 깊어지므로, 시간이 지나면 임의의 깊이까지 도달한다. 매 update의 메모리는 항상 1 step 수준으로 일정하다.
특징
- Update당 메모리가 상수다. 그래프에 1 step만 올리니 $K$ 와 무관하게 깊은 롤아웃 경험을 줄 수 있다. BPTT가 못 가는 horizon을 메모리 부담 없이 커버한다.
- 다양한 깊이의 분포를 자연스럽게 섞어 모델에 노출시킨다.
하지만 두 가지 본질적 약점이 있다.
- Off-policy / staleness. 버퍼의 상태는 과거 버전의 파라미터 $\theta_{\text{old}}$ 로 만들어진 것이다. 학습이 진행될수록 현재 모델 $\theta$ 와 버퍼 상태를 만든 모델 사이의 괴리가 커진다. 모델이 실제로 추론 시 만들 분포와, 버퍼가 담고 있는 분포가 어긋나는 것이다. RL의 off-policy 문제와 정확히 같은 구조다.
- 저장 비용과 부기(bookkeeping). 고해상도 필드 상태를 다수 보관해야 하므로 CPU/GPU 메모리를 따로 먹는다. 또 깊이 분포가 버퍼 동역학에 의해 암묵적으로 결정되어, “롤아웃 깊이 분포를 이렇게 하고 싶다”고 직접 지정하기 어렵다.
요약: 메모리 상수로 깊은 horizon을 커버하지만, 버퍼 상태가 stale(off-policy)하고 저장공간·깊이 제어가 까다롭다.
4. Online Replay Buffer
아이디어
Replay buffer의 가장 큰 흠은 staleness였다. 그렇다면 버퍼를 영구히 들고 가지 말고, 매번 현재 파라미터로 즉석에서 롤아웃을 만들면 되지 않을까? 이것이 online replay buffer의 발상이다.
매 iteration마다 정답 상태에서 출발해 현재 모델로 $k-1$ step을 no_grad로 굴리고(그래프에 안 올림), 마지막 한 step만 그래프에 올려 backprop한다.
for it in range(num_iters):
x = sample_fresh_data()
k = sample_rollout_depth() # 예: 1..K 중 랜덤
with torch.no_grad(): # 현재 가중치, 그래프 X
for _ in range(k - 1):
x = f_theta(x)
x_next = f_theta(x) # 마지막 1 step만 그래프에 올림
loss = criterion(x_next, target[k])
loss.backward() # 1-step gradient
여기서 “버퍼”는 영구 저장소가 아니라 매 step 새로 생성되고 버려지는 임시적 개념이다. 사실상 pushforward trick을 임의 깊이 $k$ 로 일반화한 형태로 볼 수 있다.
특징
- On-policy. $k-1$ step의 사전 롤아웃을 현재 $\theta$ 로 만들기 때문에, 모델이 보는 입력 분포가 실제 추론 시 분포와 일치한다. classic replay buffer의 staleness가 사라진다.
- 메모리는 여전히 1 step.
no_grad구간은 activation을 저장하지 않으니, 그래프 메모리는 BPTT와 달리 $k$ 와 무관하게 작다. - 별도 저장공간이 없다. 버퍼를 들고 다니지 않으므로 RB의 CPU/GPU 저장 부담이 없다.
- 깊이 $k$ 를 명시적으로 샘플링할 수 있어, 롤아웃 깊이 분포를 직접 통제하기 쉽다.
대신 trade-off는 연산이다. 매 iteration마다 $k-1$ 번의 forward(비록 no_grad라 가볍지만)를 새로 돌려야 한다. 깊은 $k$ 를 자주 뽑으면 RB처럼 한 번 만든 상태를 재사용하지 못하고 매번 다시 굴리는 비용이 든다.
요약: 매 step 현재 모델로 롤아웃을 즉석 생성 → on-policy + 저장공간 0 + 깊이 직접 제어. 대가는 매 iteration의 추가 forward 연산.
실제 사례: COAF
이 전략이 단순한 학습 트릭을 넘어 결합(coupled) Earth system 모델의 안정성에 직접 기여한 사례가 COAF(Coupled Ocean-Atmosphere Framework, Chen et al., 2025)다. COAF는 사전학습된 대기·해양 모델을 spectral transformation 기반 coupler로 동적으로 결합하는 구조인데, 두 가지 핵심 기여 중 하나로 바로 online replay buffer 메커니즘을 내세운다.
결합 모델에서 대기와 해양은 시간 스케일이 크게 다르고, 두 컴포넌트가 서로의 (틀린) 예측을 주고받으며 굴러가기 때문에 long-range 롤아웃에서 오차가 더 쉽게 증폭된다. COAF는 online replay buffer로 모델이 자기 자신의 결합 롤아웃 분포를 on-policy로 경험하게 하여 장기 안정성을 끌어올리고, 10일 이상 예측에서 Z500·T2m의 latitude-weighted RMSE를 약 10% 낮췄다고 보고한다. single-step teacher forcing만으로는 결합 시스템의 누적 오차를 잡기 어렵다는 점을 보여주는, 본 글의 §4 전략에 대한 구체적 응용 예다.
참고: COAF는 ICLR 2026에 제출되었다가 철회된(withdrawn) 원고다. 공개 게시 시에는 정식 게재 논문이 아니라 OpenReview preprint(withdrawn submission)로 인용하는 것이 정확하다.
5. 한눈에 비교
| 기준 | BPTT | Replay Buffer | Online Replay Buffer |
|---|---|---|---|
| Gradient horizon | $K$ step 전체 | 1 step | 1 step |
| On/off-policy | on-policy | off-policy (stale) | on-policy |
| 그래프 메모리 | $O(K)$ (높음) | $O(1)$ | $O(1)$ |
| 별도 저장공간 | 없음 | 버퍼 저장 필요 | 없음 |
| Update당 연산 | $K$× fwd+bwd | 1× fwd+bwd | $k$× fwd ($k{-}1$은 no_grad) + 1× bwd |
| 깊이 분포 제어 | 명시적(but 짧음) | 암묵적 | 명시적 |
| 핵심 한계 | 메모리·gradient 불안정 | staleness·저장비용 | 깊은 $k$ 의 재계산 비용 |
직관적으로 정리하면 이렇다.
- BPTT는 “gradient가 미래를 본다”는 품질을 위해 메모리를 지불한다.
- Replay Buffer는 깊은 롤아웃을 싸게 재사용하지만 그 대가로 입력이 낡는다(off-policy).
- Online Replay Buffer는 낡음을 없애는 대신 매번 다시 굴리는 연산을 지불한다.
세 전략 모두 single-step teacher forcing보다 AR 안정성을 크게 개선하지만, 어느 것도 “공짜 점심”은 아니다. 각자 메모리 ↔ 연산 ↔ on-policy성 ↔ 깊이 제어 사이의 다른 지점에 서 있을 뿐이다.
참고 문헌
- Brandstetter, J., Worrall, D., & Welling, M. (2022). Message Passing Neural PDE Solvers. ICLR. — pushforward trick
- Chen, K., Ling, F., Fei, B., Han, T., Wang, S., Liu, L., Li, B., & Bai, L. (2025). Bridging Oceans and Atmosphere: A More Comprehensive Weather Model (COAF). OpenReview, ICLR 2026 withdrawn submission. https://openreview.net/forum?id=ybLoYEO9PF — online replay buffer 기반 결합 모델
- Lam, R. et al. (2023). Learning skillful medium-range global weather forecasting (GraphCast). Science. — autoregressive fine-tuning curriculum
- McCabe, M. et al. (2023). Towards Stability of Autoregressive Neural Operators. — AR 안정성 분석