Atari Pong에서 매 프레임 VLM을 호출하면 수십만~수백만 step이 필요한 강화학습을 현실적으로 수행하기 어렵다. 이 소스는 VLM이 읽을 공·패들 정보를 동일한 수치 벡터로 바꾸고, 빠른 DQN 학습에 사용한다.
화면에서 10차원 상태로
`Pong-vlm.py`의 `InterceptAssist` 추적기를 재사용한다. 공의 위치와 예측 y, 패들 y, 이전 프레임 대비 속도, 움직임 합계, 공을 놓친 기간, 관측 가능 여부와 coast 상태를 정규화한다. 이미지 전체 대신 10개 값만 정책망에 들어간다.
state = [ball_x, ball_y, vx, vy, paddle_y,
delta_y, motion, ghost, visible, coast]이 방식의 핵심은 VLM 경로와 DQN 경로가 서로 다른 문제를 풀지 않게 하는 것이다. VLM 텍스트 모드가 설명하는 정보와 DQN 상태가 대응하므로, 나중에 상태 설명 JSONL을 지도학습 데이터로 재사용할 수 있다.
DQN 구성
정책망과 target network는 각각 64 유닛 은닉층 두 개를 사용한다. replay memory에서 mini-batch를 뽑고 `reward + gamma × max Q(next)`를 목표값으로 학습한다. epsilon은 1.0에서 점차 줄되 최소 탐험률을 남긴다.
관찰해야 할 실패
공 검출이 끊긴 프레임을 실제 중앙 위치로 오해하면 잘못된 정책이 강화된다. 그래서 `visible`, `ghost`, `coast`가 상태에 포함된다. 학습 점수뿐 아니라 추적 실패율과 상태 로그도 함께 봐야 한다.
관련 소스
- `Pong-vlm-dqn.py`: 상태 변환, DQN, replay 학습
- `Pong-vlm.py`: 프레임 차 기반 추적기와 VLM 경로
댓글
0개아직 댓글이 없습니다.