Connect AI LAB · 강화학습 인문학 실습 ① 호기심

몬테주마의 열쇠

이 신전의 보상은 보물 단 한 번뿐입니다. 열쇠를 찾아 문을 열기 전까지 인공지능의 통장은 진짜로 비어 있습니다. 보상이 늦는 세계에서 에이전트가 어떻게 배우는지, 호기심을 켜고 꺼보면서 직접 확인하세요.

원작 실측 — 1984년 아타리 몬테주마의 복수

지금 보시는 것이 OpenAI Gym(현 Gymnasium)으로 실행한 원작 게임의 실제 화면입니다. 학습되지 않은 에이전트가 5,000스텝 동안 얻은 점수는 0.0점. 같은 에이전트가 보상이 촘촘한 벽돌깨기에서는 34점을 땄습니다. 실력이 아니라 보상 밀도의 문제입니다. 아래 실험실은 이 게임의 보상 구조를 축약한 원리 모형이고, 원작을 직접 여는 코드는 페이지 하단에 있습니다.

보상만 에피소드 0 총 스텝 0 🗝 열쇠 없음 💎 보물 0
에이전트가 학습을 시작했습니다. 지금은 외부 보상만 보고 움직입니다.

호기심 (내적 보상)

지금은 보물에서만 보상을 받습니다. 몬테주마의 복수에서 최강 AI가 0점을 받던 조건입니다.

기록 비교 — 첫 보물까지

첫 보물(스텝)보물 수
보상만—0
+ 호기심—0

조절

80
0.95

왜 방황하는가

지연된 보상

이 미로의 외부 보상은 보물 +10 하나뿐입니다. 그 전까지 어떤 행동도 점수를 받지 못합니다. 아타리 게임 몬테주마의 복수가 그랬고, 수십 개 게임을 정복한 딥마인드의 AI가 이 게임에서 0점을 받은 이유입니다. 보상이 늦는 것과 없는 것은 다르지만, 에이전트는 아직 그걸 모릅니다. 이 실험실은 진짜 아타리 게임이 아니라 그 게임의 보상 구조(열쇠 → 문 → 보물, 보상 한 번)를 축약한 교육용 환경입니다. 진짜는 아래에서 직접 열 수 있습니다.

0점을 깬 방법

호기심 = 내적 보상

호기심을 켜면 에이전트는 처음 보는 칸에 도착할 때마다 스스로에게 점수를 줍니다. 외부 보상을 기다리지 않고 안에서 만드는 거죠. OpenAI의 RND(2018)가 이 아이디어로 몬테주마에서 처음으로 사람 평균 점수를 넘었습니다. 사람도 같습니다. 보상이 늦을 때 버티는 사람은 기록하고, 쪼개고, 과정에서 스스로 보상을 만듭니다.

가치 지도를 켜보세요

가치는 뒤로 번진다

보물을 몇 번 찾고 나면, 금빛 가치가 보물방에서 입구 쪽으로 번져오는 것이 보입니다. 보상에서 가장 먼 칸, 즉 제일 초기의 노력이 제일 늦게 인정받습니다. 지금 아무 일도 일어나지 않는 것 같아도 가치 함수는 자라는 중입니다.

원작을 지금 플레이 — 1984년 카트리지 그대로

인터넷 아카이브가 보존한 원작을 브라우저에서 바로 플레이할 수 있습니다. 방향키로 움직이고 스페이스로 점프합니다. 미션 하나 드립니다. 첫 보상(열쇠)을 잡을 때까지 몇 번 죽는지 세어보세요. 그 횟수가 여러분이 몸으로 겪는 지연된 보상입니다.

클릭해서 시작 · 방향키 이동 · 스페이스 점프 · 잘 안 뜨면 아카이브에서 직접 열기

진짜로 해보기 — OpenAI Gym(현 Gymnasium)의 몬테주마

1984년 아타리 원작을 내 컴퓨터에서 열고, 학습 안 된 에이전트가 정말 0점인지 확인하는 실습입니다. 아래를 통째로 복사해 안티그래비티(또는 터미널)에 붙여넣으세요. 검증 결과, 같은 랜덤 에이전트가 5,000스텝 동안 보상이 촘촘한 벽돌깨기에서는 34점, 몬테주마에서는 0.0점이었습니다. 실력 차이가 아니라 보상 밀도의 차이입니다.

uv venv rlenv --python 3.11
VIRTUAL_ENV=$PWD/rlenv uv pip install "gymnasium[atari]" ale-py pygame
./rlenv/bin/python -c "
import gymnasium as gym, ale_py
gym.register_envs(ale_py)
env = gym.make('ALE/MontezumaRevenge-v5', render_mode='human')
env.reset()
total = 0
for _ in range(3000):
    obs, r, term, trunc, info = env.step(env.action_space.sample())
    total += r
    if term or trunc: env.reset()
print('총 점수:', total)
"

위 코드로 몬테주마의 복수 게임 환경을 설치하고 실행해줘.

게임 창에서 주인공이 허우적대다 죽기를 반복하는 것을 보게 됩니다. 그게 보상이 늦는 세계의 첫날입니다. 해법은 위 실험실의 금색 버튼에 있습니다.