오늘 끝나면
Deep Q-Network
- ✓Deep Q-Network의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 Deep이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
2013 딥마인드, Atari를 정복한 혁명 (Flappy Bird DQN) 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
AI · Day 14 / 강화학습
픽셀만 보고
게임을 깨다
화면 픽셀과 점수만 받아 Atari 49종을 사람 수준으로 플레이하는 에이전트 하나. 2013년, 7페이지 논문 한 편이 구글이 DeepMind를 약 6억 달러에 사게 만들었다. 오늘은 그 논문을 손으로 복원한다.
6억 달러짜리 7페이지
게임 규칙도 공략법도 가르치지 않는다. 오직 화면 픽셀과 점수만 준다.
Breakout에서 200에피소드쯤 지나자, 에이전트가 벽 뒤로 공을 빼서 점수를 자동으로 긁는 터널 전략을 스스로 찾아냈다. 아무도 가르치지 않았고, 보상 최대화 명령 하나로 창발한 전략이다.
2013년 NIPS 워크숍 논문 한 편으로 시작된 일이다. 구글의 DeepMind 인수, AlphaGo, AlphaFold, 2024년 하사비스 노벨 화학상. 논문 한 편이 10년에 걸쳐 한 산업을 만들었다.
논문 한 편이 회사 하나와 분야 하나와 노벨상을 만들었다
Q-table은 왜 무너지나
Day 13에선 Q(s, a) 테이블로 FrozenLake를 풀었다. 상태 16개 × 액션 4개 = 64칸짜리 엑셀 시트. 귀여운 수준이었다.
근데 Atari 화면은 210×160 픽셀, 3채널, 8비트다. 가능한 상태 수는 256^100,800, 대략 10^242,800이다. 우주 원자 수 10^80을 3,000번 곱해도 모자란다. 모든 상태를 저장한다는 발상 자체가 물리적으로 불가능하다.
그래서 DQN은 모든 값을 저장하는 대신 값을 계산하는 함수를 학습한다. MNIST에서 손글씨를 DB에 다 넣는 대신 신경망이 숫자를 계산하게 한 것과 같은 전환이다.
| 환경 | 상태 수 | 테이블? |
|---|---|---|
| FrozenLake 4×4 | 16 | 가능 |
| 틱택토 | 약 5,478 | 가능 |
| 체스 | 약 10^45 | 불가 |
| 바둑 19×19 | 약 10^170 | 불가 |
| Atari 화면 | 256^100,800 | 불가 |
Atari 상태 수는 우주 원자 수(10^80)를 3,000번 곱해도 모자란다
Q-table을 신경망으로
핵심은 한 줄이다. Q(s, a)를 lookup하지 말고 CNN이 계산하게 한다.
입력에 트릭이 하나 있다. 한 프레임만 보면 공이 올라가는지 내려가는지 모른다. 속도 정보가 없기 때문이다. 그래서 최근 4프레임을 채널로 쌓아 84×84×4 텐서를 만든다. 이제 CNN이 속도와 가속도를 암묵적으로 읽는다.
출력도 영리하다. Q값 하나가 아니라 모든 액션의 Q값 벡터를 한 번에 내보낸다. forward 한 번에 argmax만 하면 최선의 액션이 바로 나와서 빠르다.
Q. terminal 상태일 때 타깃 y는 어떻게 될까?
미래 보상이 없으니 y = r이다. 구현할 땐 (1 - done)을 곱해 γ·max Q 항을 0으로 만든다. 이걸 빼먹으면 학습이 무한히 발산한다.2015 Nature 아키텍처. 출력은 모든 액션의 Q값 벡터다
안정화 트릭 두 개
여기까지가 절반이다. "CNN + Q-Learning"만으로는 학습이 그냥 터진다. DQN의 진짜 혁신은 이 두 트릭이다.
첫째, Experience Replay. 연속된 경험은 서로 너무 닮아서(상관성) 신경망의 i.i.d 가정을 깬다. 그래서 경험을 100만 개짜리 버퍼에 쌓아두고 무작위로 꺼내 학습한다. 시간적 상관이 깨지고, 한 경험을 여러 번 재사용해 표본 효율도 오른다.
둘째, Target Network. 타깃 y를 학습 중인 네트워크로 계산하면 화살 쏘는 순간 과녁이 움직인다. 그래서 과거 복사본을 따로 얼려두고 N=10,000 스텝마다 한 번씩만 동기화한다. 과녁이 멈추니 학습이 안정된다.
파이썬 코드 보기
# 두 트릭의 핵심
batch = random.sample(buffer, 32) # Replay: 무작위
with torch.no_grad():
q_next = target_net(s_next).max(1)[0] # 얼린 과녁
y = r + gamma * q_next * (1 - done) # terminal이면 r만
loss = smooth_l1_loss(q_net(s).gather(1, a), y) # Huber
if step % 10000 == 0:
target_net.load_state_dict(q_net.state_dict())켬, 과녁을 얼린다
Rainbow와 비즈니스
DQN은 출발점이다. 이후 개선이 줄줄이 나왔다. Double DQN은 과대평가를 한 줄로 잡고, Dueling은 가치와 이점을 분리하고, Prioritized Replay는 어려운 경험을 더 공부한다.
2017년, Rainbow가 이 일곱 가지를 전부 합쳤다. Atari 57종에서 사람 대비 median 223%를 기록했다. 하나씩 떼봤을 때 가장 아쉬운 건 Prioritized Replay와 Multi-step이었다.
그럼 비즈니스에서는 어디에 쓰나. 순차 의사결정과 장기 보상과 시뮬레이터, 이 삼박자가 맞으면 DQN 후보가 된다. 생산 라인 스케줄링, 데이터센터 냉각(구글 DC 에너지 40% 절감), 개인화 랭킹이 대표 사례다. 시뮬레이터가 없으면 Offline RL을 먼저 봐야 한다.
Q. Target Network가 없으면 Q값이 왜 발산할까?
양의 피드백 루프 때문이다. Q가 조금 커지면 타깃 y도 커지고, 그 그래디언트가 Q를 더 키운다. Target Network로 참조점을 잠깐 얼리면 이 루프가 끊긴다.일곱 개선을 합친 Rainbow. Atari 57종에서 사람의 2배를 넘는다