[ 트렌드] [World Model 시리즈 #3] V, M, C 각각의 역할과 입출력 쉽게 이해하기

관리자 Lv.1
03-01 07:34 · 조회 17 · 추천 0

V, M, C 각각의 역할과 입출력 쉽게 이해하기

World Model 시리즈 세 번째 글입니다. Ha & Schmidhuber(2018)의 World Models 아키텍처를 운전에 비유하여 풀어봅니다.


V, M, C를 사람에 비유하면

이 세 모듈은 한 사람이 운전하는 과정과 똑같습니다.

도로 풍경(눈에 보이는 것)
     │
     ▼
  👁️ 눈 (V) ── "앞에 커브가 있고, 차선은 여기고..."
     │
     ▼
  🧠 뇌 (M) ── "이 속도면 3초 후에 커브에 도착하겠네"
     │
     ▼
  🖐️ 손 (C) ── "핸들을 왼쪽으로 꺾자"

V (Vision) — 눈

한마디로: 세상을 보고 핵심만 메모하는 모듈

입력:  게임 화면 원본 (64×64 픽셀 이미지)
       → 수천 개의 숫자 (각 픽셀의 RGB 값)

출력:  z 벡터 (딱 32개의 숫자)

원본 이미지에는 정보가 너무 많습니다. 하늘색, 도로 질감, 그림자 등 대부분은 운전에 필요 없는 정보예요. V는 이걸 32개 숫자로 압축합니다. "커브 각도", "차선 위치", "속도감" 같은 핵심 정보만 남기는 거죠.

비유하면 이렇습니다. 친구에게 풍경 사진을 보여주면서 "이거 설명해봐"라고 하면, 친구가 "산이 있고, 호수가 있고, 날씨는 맑아"라고 핵심만 말하잖아요. 사진 전체를 외우는 게 아니라요. V가 바로 그 역할입니다.

사용하는 기술: VAE (Variational Autoencoder)

  • 이미지를 압축(인코딩)하고 다시 복원(디코딩)하는 훈련을 반복
  • 잘 복원되려면 z 32개 숫자에 핵심 정보가 담겨야 함
  • 복원 자체가 목적이 아니라, 좋은 z를 만드는 게 목적

M (Memory) — 뇌의 상상력

한마디로: "다음에 뭐가 일어날까?"를 상상하는 모듈

입력:  ① z_t      (지금 V가 본 것, 32개 숫자)
       ② a_t      (지금 내가 한 행동, 예: "핸들 왼쪽")
       ③ h_(t-1)  (이전까지의 기억)

출력:  ① h_t      (업데이트된 기억, 256개 숫자)
       ② P(z_(t+1))  (다음 장면의 확률 분포)

여기서 핵심은 M이 하나의 답이 아니라 여러 가능성을 내놓는다는 점입니다.

예를 들어 VizDoom 게임에서 몬스터 앞에 서 있다면:

M의 예측:
  가능성 1 (60%): 몬스터가 화염구를 쏜다 → z_next = [0.3, -0.7, ...]
  가능성 2 (40%): 몬스터가 가만히 있는다 → z_next = [0.1, 0.2, ...]

왜 이렇게 하냐면, 세상은 확정적이지 않기 때문이에요. "앞차가 갑자기 멈출 수도 있고 안 멈출 수도 있다" — 이런 불확실성을 표현해야 합니다.

그리고 중요한 포인트 하나. C(Controller)는 M의 예측 결과(z_next)를 직접 받지 않습니다. 대신 h(은닉 상태)를 받아요. h에는 "한 발 앞"이 아니라 "여러 발 앞까지의 정보"가 압축되어 있거든요. 마치 운전할 때 "바로 앞 커브"만 보는 게 아니라 "저 멀리 신호등도 이미 의식하고 있는" 것처럼요.

사용하는 기술: MDN-RNN (LSTM + Mixture Density Network)

  • LSTM이 시간 흐름을 기억하고
  • MDN이 "여러 가능성의 확률 분포"를 출력

C (Controller) — 행동 결정

한마디로: V와 M이 준 정보를 보고 "뭘 할지" 결정하는 모듈

입력:  ① z_t  (지금 V가 본 것, 32개 숫자)
       ② h_t  (M의 기억+예측, 256개 숫자)
       → 합치면 288개 숫자

출력:  a_t   (행동, 예: 핸들 각도, 가속, 브레이크)

수식으로 보면 이게 전부입니다:

a = W × [z, h] + b

행렬 곱셈 한 번. 정말 이게 끝이에요. 파라미터가 몇 백 개밖에 안 됩니다.

왜 이렇게 단순하게 만들었을까?

이게 이 논문의 핵심 철학입니다. "세상을 이해하는 것"은 어렵지만, "이해한 걸 바탕으로 결정하는 것"은 상대적으로 단순하다는 거예요.

운전으로 비유하면, 도로 상황을 파악하고 미래를 예측하는 건 복잡한 일이지만(V+M), 그걸 다 알고 나면 "핸들을 왼쪽으로 꺾는다"는 결정 자체는 간단하잖아요.

복잡한 일 → V + M이 담당 (수만~수십만 파라미터)
단순한 일 → C가 담당 (수백 파라미터)

전체 흐름을 한 번에 보면

시간 t에서 일어나는 일:

① 게임 화면 (64×64 이미지)
        │
        ▼
   V (VAE 인코더)
        │
        ▼
   z_t (32개 숫자) ──────────────┐
        │                        │
        ▼                        │
   M (MDN-RNN)                   │
   입력: z_t + a_(t-1) + h_(t-1) │
        │                        │
        ▼                        │
   h_t (256개 숫자) ─────────────┤
                                 │
                        [z_t + h_t = 288개 숫자]
                                 │
                                 ▼
                            C (선형 모델)
                                 │
                                 ▼
                            a_t (행동)
                                 │
                          게임에 전달 → 다음 화면 → 반복

핵심 정리

모듈 비유 입력 출력 기술
V 64×64 이미지 z (32개 숫자) VAE
M 뇌(상상력) z + 행동 + 이전 기억 h (256개 숫자) + 다음 z 예측 MDN-RNN
C 손(판단) z + h (288개 숫자) 행동 a 선형 모델

설계 철학: 복잡성은 V+M에 집중, C는 의도적으로 단순하게.


다음 글에서는 이 구조의 가장 흥미로운 부분인 "Dream 학습 — 꿈 속에서 훈련하기"를 자세히 다룹니다.

💬 0 로그인 후 댓글 작성
첫 댓글을 남겨보세요!