월드 모델 (World Models): 에이전트가 학습된 시뮬레이터 내부에서 꿈을 꾸며 롤아웃 (rollouts)을 수행하게 하되, 누적되는
요약
월드 모델(World Models)을 활용하여 에이전트가 실제 환경 대신 학습된 시뮬레이터 내부에서 '꿈을 꾸듯' 롤아웃을 수행하며 학습하는 원리를 설명합니다. 모델의 예측 오차가 자기회귀적 과정에서 어떻게 누적되고 증폭되는지 수학적 데모를 통해 분석합니다.
핵심 포인트
- 월드 모델은 환경의 역학을 포착하여 다음 상태를 예측하는 학습된 함수임
- 모델 내부의 롤아웃을 통해 실제 환경의 비용과 위험을 줄이며 학습 가능
- 자기회귀적 피드백 방식은 모델의 이전 예측값을 다음 입력으로 사용함
- 모델의 미세한 매개변수 오차는 반복적인 롤아웃 과정에서 누적 및 증폭됨
실제로 행동하며 배우기만 하는 에이전트는 비용이 많이 듭니다. 모든 시도는 시간, 비용, 마모를 발생시키며 때로는 안전 문제까지 초래합니다. 또한 강화학습 (Reinforcement Learning)은 수백만 번의 단계가 필요한, 샘플을 매우 많이 필요로 하는 (sample-hungry) 것으로 유명합니다. **월드 모델 (World Model)**은 탈출구 역할을 합니다. 이는 환경의 역학 (dynamics)을 포착하는 학습된 함수로, 상태 (state)와 행동 (action)이 주어지면 다음 상태를 예측합니다. 에이전트가 머릿속에 빠르고 독립적인 세상의 복사본을 소유하게 되면, 현실에서 행동하는 비용을 지불하는 대신 모델 내부에서 수천 번의 롤아웃 (rollouts)을 계획하고 "꿈꿀" 수 있습니다. 이는 저렴하고, 빠르며, 안전합니다. 저는 그 강력함과 함정을 모두 보여주기 위해 실제 상태 전이 (state-transition) 수학과 실제 표류 (drift) 지표를 사용한 데모를 제작했습니다. 여기 그 결과가 있습니다.
세상은 단지 (state, action) → next state 일 뿐이다
데모의 환경은 중력 하에서 상자 안을 튀어 오르는 공이며, 행동에 의해 자극을 받습니다. 이 환경의 실제 역학은 직접 코드로 작성된 물리 단계 (physics step)입니다. 즉, 행동, 중력, 항력 (drag)을 적용하고, 적분 (integrate)하며, 반발 계수 (restitution)를 가지고 벽에 반사시키는 과정입니다. 이것이 느리고 비용이 많이 드는 실제 세상입니다.
function physStep(s, a, p){ // 하나의 매개변수화된 물리 단계
let {x,y,vx,vy} = s; const {ax,ay} = ACT(a);
vx += ax*p.imp; vy += ay*p.imp; // 행동 = 속도 충격량 (velocity impulse)
...
학습된 모델은 동일한 형태를 가지지만, 불완전한 매개변수를 갖는다
학습된 월드 모델은 실제 물리 법칙을 정확하게 복구하지 못합니다. 중력, 탄성, 항력, 그리고 행동이 미치는 영향에 대해 약간 잘못된 개념을 가지고 있습니다. 저는 이를 정직하게 모델링했습니다. 동일한 physStep을 사용하되, err 노브에 의해 오프셋된 매개변수를 적용합니다. err = 0일 때 모델은 실제 환경과 동일하며, 이 값을 높이면 모델은 확신에 찬 오답을 내놓습니다.
function modelParams(err){ // err 범위 [0,1]
return {
g: TRUE.g * (1 + 0.45*err), // 중력이 더 강하다고 생각함
...
꿈을 꾸는 것은 자기회귀적 롤아웃 (autoregressive rollout)이다
꿈을 꾸기 위해서는 동일한 시작 상태와 동일한 행동 시퀀스를 모두 제공합니다. trueStep을 사용하여 실제 환경 (true env)을 진행시키고, modelStep을 사용하여 모델을 진행시킵니다. 여기서 결정적으로, 모델에 실제 상태 (true state)를 절대 제공하지 말고 모델 자신의 이전 예측값 (si)을 입력으로 전달해야 합니다. 이러한 자기회귀적 피드백 (autoregressive feedback)이야말로 에이전트가 아직 경험하지 않은 미래를 상상하는 정확한 방식입니다.
function rollout(s0, actions, err, N){
const trueT=[s0], imagT=[s0], errs=[0];
let st=s0, si=s0; // st = 현실, si = 상상
...
함정: 오차는 누적되며, 튕김 현상이 이를 증폭시킨다
각 예측이 다음 단계의 _입력 (input)_이 되기 때문에, 1단계에서의 아주 작은 오차는 2단계의 입력을 변화시키고, 그 오차는 다시 3단계를 변화시킵니다. 오차는 작게 유지되지 않고 대략 기하급수적으로 누적됩니다. 설상가상으로, 벽 근처에서는 아주 작은 위치 오차만으로도 공이 이미 튕겼는지 여부가 뒤바뀔 수 있으며, 그 이후 두 궤적은 서로 반대 방향으로 향하게 됩니다. 데모를 보면 모델 오차 (model error)와 롤아웃 (rollout) 길이를 조절함에 따라 점선(꿈)이 실선(실제)에서 벗어나는 것을 볼 수 있습니다. 이때 튕김 (bounce) 현상이 발생하면 그 간격은 급격히 벌어집니다.
정직한 지표는 단계당 표류 (drift per step)이며, 이를 통해 저는 신뢰할 수 있는 지평 (reliable horizon) — 즉, 꿈이 허용 오차 (tolerance)를 벗어나기 직전의 마지막 단계 — 을 읽어냅니다. 이 지평이야말로 "얼마나 많은 단계까지 계획을 세울 수 있는가?"라는 질문에 대한 실제적인 해답입니다.
function metrics(errs, tol=0.06){
let horizon = errs.length - 1;
for (let k=1;k<errs.length;k++) if (errs[k] > tol){ horizon = k-1; break; }
...
이것이 지금 중요한 이유
하나의 학습된 역학 함수 (dynamics function)로 두 가지 용도: 꿈을 꾸며 계획을 세우고, 비용이 많이 드는 실제 단계 (real steps) 대신 상상된 경험 (imagined experience)을 통해 컨트롤러 (controller)를 학습시키는 것입니다 (Ha & Schmidhuber의 Vision-Memory-Controller; Dreamer; MuZero 스타일의 잠재 계획 (latent planning)). 이는 샘플 효율성 (sample efficiency)이 매우 높지만, 오직 예측 지평 (horizon) 내에서만 유효합니다. 실제 시스템은 불확실성 (uncertainty)과 앙상블 (ensembles), 실제 데이터에 대한 주기적인 재접지 (re-grounding), 그리고 가공되지 않은 픽셀 (raw pixels) 대신 압축된 잠재 공간 (latent space)에서의 롤아웃 (rollouts)을 통해 표류 (drift) 문제와 싸웁니다. 그리고 이것이 Sora와 같은 대규모 비디오 생성 모델들이 점점 더 암시적 (implicit) 월드 모델로 해석되는 이유입니다. 이들은 단지 다음 프레임을 예측하기 위해 직관적인 물리 법칙 (intuitive physics)과 객체 영속성 (object permanence)을 학습했습니다. 월드 모델의 기술적 핵심은 현실과 상상이 갈라지기 전까지 최대한 많은 신뢰할 수 있는 상상된 단계 (imagined steps)를 확보하는 것입니다.
롤아웃을 꿈꾸고 그것이 표류하는 것을 지켜보세요:
https://dev48v.infy.uk/ai/days/day42-world-models.html
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기