스킬캠퍼스

오늘 끝나면

Deep Q-Network

  • Deep Q-Network의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 Deep이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

2013 딥마인드, Atari를 정복한 혁명 (Flappy Bird DQN) 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

AI · Day 14 / 강화학습

픽셀만 보고
게임을 깨다

화면 픽셀과 점수만 받아 Atari 49종을 사람 수준으로 플레이하는 에이전트 하나. 2013년, 7페이지 논문 한 편이 구글이 DeepMind를 약 6억 달러에 사게 만들었다. 오늘은 그 논문을 손으로 복원한다.

P.01AI · Day 14

6억 달러짜리 7페이지

게임 규칙도 공략법도 가르치지 않는다. 오직 화면 픽셀과 점수만 준다.

Breakout에서 200에피소드쯤 지나자, 에이전트가 벽 뒤로 공을 빼서 점수를 자동으로 긁는 터널 전략을 스스로 찾아냈다. 아무도 가르치지 않았고, 보상 최대화 명령 하나로 창발한 전략이다.

2013년 NIPS 워크숍 논문 한 편으로 시작된 일이다. 구글의 DeepMind 인수, AlphaGo, AlphaFold, 2024년 하사비스 노벨 화학상. 논문 한 편이 10년에 걸쳐 한 산업을 만들었다.

2013 → 노벨상
2013NIPS, DQN 논문 7p2014구글 DeepMind 인수2015Nature 표지 · Atari 49종2016AlphaGo, 이세돌 4:12020AlphaFold 22024하사비스 노벨 화학상

논문 한 편이 회사 하나와 분야 하나와 노벨상을 만들었다

P.02AI · Day 14

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×416가능
틱택토약 5,478가능
체스약 10^45불가
바둑 19×19약 10^170불가
Atari 화면256^100,800불가

Atari 상태 수는 우주 원자 수(10^80)를 3,000번 곱해도 모자란다

P.03AI · Day 14

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으로 만든다. 이걸 빼먹으면 학습이 무한히 발산한다.
CNN Q-NETWORK
입력 84×84×44프레임 스택Conv 8×8 /4 + ReLU→ 20×20×32Conv 4×4 /2 + ReLU→ 9×9×64Conv 3×3 /1 + ReLU→ 7×7×64Flatten → Linear 512+ ReLULinear(n_actions)Q 벡터

2015 Nature 아키텍처. 출력은 모든 액션의 Q값 벡터다

P.04AI · Day 14

안정화 트릭 두 개

여기까지가 절반이다. "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())
REPLAY + TARGET
움직이는 과녁 놀이터 · Q를 타깃 y = r + γ·Q_target 로 끌어당긴다
참값 r/(1-γ) = 10.00Q값 추이 (최근 120스텝)
Target Network
켬, 과녁을 얼린다
step 0
현재 Q
0.00
참값
10.00
오차
10.00
타깃이 얼어 있어 과녁이 멈춰 있다. 안정적으로 참값으로 끌려간다.
P.05AI · Day 14

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로 참조점을 잠깐 얼리면 이 루프가 끊긴다.
DQN 진화 계보
Standard DQNDouble DQNDuelingPrioritized ReplayMulti-step (n=3)Distributional C51Noisy NetsRainbow223%사람=100% 기준 median

일곱 개선을 합친 Rainbow. Atari 57종에서 사람의 2배를 넘는다

3줄 요약

  1. 12013 딥마인드, Atari를 정복한 혁명 (Flappy Bird DQN)
  2. 2Deep Q-Network은 준비운동 → 지도학습 → 시퀀스 → 생성모델 → 실무 적용 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

Deep

2013 딥마인드, Atari를 정복한 혁명 (Flappy Bird DQN)

모델

입력을 받아 예측이나 출력을 만드는 계산 규칙

손실

예측이 정답에서 얼마나 빗나갔는지 재는 숫자