뭘 만들었나

에이전트가 게임 화면만 보고 세계가 어떻게 움직이는지를 머릿속에 짓는다. 그 머릿속 모형만으로 다음에 뭐가 보일지 상상하고, 상상 안에서 행동을 고른다. 실제로 움직여 보지 않고.

핵심은 화면 세 개다. 왼쪽은 실제 게임, 가운데는 모델이 지금 보고 있다고 믿는 장면, 오른쪽은 여섯 갈래로 15스텝 앞까지 상상한 장면. 셋을 나란히 두면 모델의 머릿속이 언제 현실과 갈라지는지 눈으로 보인다.

왜

강화학습은 보통 실패를 통해 배운다. 수백만 번 죽어야 한다. 월드모델은 그걸 뒤집는다 — 세계의 규칙을 먼저 배우고, 그다음부터는 상상 안에서 연습한다. 죽는 연습을 머릿속에서 하니까 실제 경험이 훨씬 적게 든다.

내가 보고 싶었던 건 성능 숫자가 아니라 그 머릿속이 실제로 어떻게 생겼는가였다. 그래서 상상을 그림으로 펴서 띄우는 창을 따로 만들었다.

어떻게

한 프레임마다 이 순서로 돈다.

게임 화면64x64 축소인코더머릿속 상태여섯 갈래 상상640×4800~1 정규화벡터15스텝

막혔던 데. 창마다 세계를 따로 만들고 있었다. 에러는 안 나고 화면만 조용히 달라져서 찾는 데 오래 걸렸다. 시나리오·버튼·해상도를 한 파일(world.py)에서만 읽게 묶어서 끝냈다. 세계를 규정하는 값이 바뀌면 지문(fingerprint)이 달라지고, 체크포인트에 그 지문을 같이 넣어서 다른 세계의 가중치를 잘못 올리면 바로 알 수 있게 했다.

받기

.pt 는 agent_state_dict 와 optims_state_dict 를 담은 PyTorch 체크포인트다. 자유탐색 쪽에는 world_fingerprint 가 같이 들어 있어서, 올릴 때 지금 환경과 맞는지 확인할 수 있다.

DreamerV3 본체는 남의 코드이고, 내가 쓴 건 세계 정의·세 창·상상 전개 쪽 1,047줄이다.