딥 강화학습으로 아타리 게임하기 (DQN)
픽셀만 보고 아타리 게임을 배운 첫 딥 강화학습 모델 — Q-네트워크와 경험 재생
먼저 알아야 할 것
다루는 내용
합성곱 신경망으로 행동 가치 함수 Q를 근사하고 Q-러닝으로 학습한 DQN을 제안합니다. 연속 프레임의 상관과 데이터 분포 변화로 생기는 불안정을 경험 재생(지난 경험을 무작위로 다시 뽑아 학습)으로 줄였습니다. 아타리 2600 게임 7개에 같은 구조와 하이퍼파라미터로 적용해 6개에서 기존 방법을 앞서고 3개에서 사람 전문가를 넘었습니다.
초록
강화학습을 이용해 고차원 감각 입력에서 바로 제어 정책을 성공적으로 학습한 첫 딥러닝 모델을 소개합니다. 이 모델은 Q-러닝의 변형으로 학습한 합성곱 신경망으로, 입력은 원시 픽셀이고 출력은 앞으로 받을 보상을 추정하는 가치 함수입니다. 이 방법을 아케이드 학습 환경(Arcade Learning Environment)의 아타리 2600 게임 7개에 구조나 학습 알고리즘을 전혀 바꾸지 않고 적용했습니다. 그 결과 6개 게임에서 기존의 모든 방법을 앞섰고, 3개 게임에서는 사람 전문가를 넘어섰습니다.
해설
딥 강화학습으로 아타리 게임하기 (DQN)
화면 픽셀만 보고 게임 조작법을 스스로 익힌 첫 딥러닝 강화학습 모델입니다. 합성곱 신경망에 Q-러닝과 경험 재생을 붙여, 게임마다 구조를 바꾸지 않고 아타리 게임 7개를 배웠습니다. '딥 강화학습'이라는 분야를 연 논문입니다.
| 항목 | 내용 |
|---|---|
| 원제 | Playing Atari with Deep Reinforcement Learning |
| 저자 | Volodymyr Mnih 외 6명 (DeepMind Technologies) |
| 발표 | 2013 · NIPS Deep Learning Workshop 발표본 · arXiv 1312.5602 |
| 트랙 · 수준 | 강화학습 · 중급 |
| 먼저 알면 좋은 것 | Q-러닝 · 벨만 방정식, 합성곱 신경망(CNN), 확률적 경사 하강법, 탐색과 활용(ε-탐욕) |
들어가기 전에
이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.
- Hugging Face 딥 강화학습 강좌 — 몬테카를로 · TD · Q-러닝 · SARSA를 손계산하고 DQN의 리플레이 버퍼 · 타깃 네트워크까지 잇는 수업
- 스탠퍼드 CS231n 강의 노트(합성곱 신경망) — 합성곱 한 칸 · 출력 크기 · 파라미터 수 · 풀링 · 수용 영역을 손계산으로 익히는 CNN 수업
- 함수 근사: 표에서 신경망으로 — 가치 함수를 신경망으로 근사할 때 생기는 불안정(치명적 삼중주)과 그 대응을 먼저 정리합니다
한눈에 보기
- 행동 가치 함수 를 신경망으로 근사하는 'Q-네트워크'가 무엇이고 어떻게 학습하는지 알게 됩니다.
- 강화학습 데이터를 그대로 신경망에 넣으면 왜 불안정한지, 경험 재생(experience replay) 이 그 문제를 어떻게 푸는지 이해합니다.
- 화면 4장을 쌓아 입력으로 쓰고, 행동마다 출력 칸을 두는 DQN 구조의 설계 이유를 압니다.
- 보상 자르기 · 프레임 건너뛰기 같은 실전 요령과, 실험에서 사람보다 잘한 게임 · 못한 게임이 무엇인지 압니다.
초록 (번역)
강화학습을 이용해 고차원 감각 입력에서 바로 제어 정책을 성공적으로 학습한 첫 딥러닝 모델을 소개합니다. 이 모델은 Q-러닝의 변형으로 학습한 합성곱 신경망으로, 입력은 원시 픽셀이고 출력은 앞으로 받을 보상을 추정하는 가치 함수입니다. 이 방법을 아케이드 학습 환경(Arcade Learning Environment)의 아타리 2600 게임 7개에 구조나 학습 알고리즘을 전혀 바꾸지 않고 적용했습니다. 그 결과 6개 게임에서 기존의 모든 방법을 앞섰고, 3개 게임에서는 사람 전문가를 넘어섰습니다.
무엇을 풀었나
화면이나 음성 같은 고차원 감각 입력에서 바로 행동을 배우는 것은 강화학습의 오랜 숙제였습니다. 그때까지 성공 사례 대부분은 사람이 손으로 설계한 특징(feature)에 선형 가치 함수를 얹는 방식이어서, 성능이 특징을 얼마나 잘 만들었는가에 크게 좌우됐습니다.
딥러닝은 이미 이미지 · 음성 인식에서 원시 데이터로부터 특징을 스스로 뽑아냈습니다. 그런데 강화학습에 그대로 가져오면 네 가지가 걸립니다.
- 정답 라벨이 없습니다. 보상이라는 숫자 하나만 있고, 그마저 드물고 잡음이 많으며 늦게 옵니다. 행동과 보상 사이가 수천 단계 떨어지기도 합니다.
- 데이터가 서로 독립이 아닙니다. 게임 화면은 연속 프레임이라 앞뒤가 거의 같습니다. 딥러닝은 보통 표본이 독립이라고 가정합니다.
- 데이터 분포가 계속 바뀝니다. 에이전트가 새 행동을 배우면 보는 화면도 달라집니다.
- 발산 위험이 있습니다. Q-러닝 같은 모델 없는(model-free) 방법을 비선형 함수 근사기(신경망)와 묶으면 발산할 수 있다는 결과가 있어서, 그동안 연구는 수렴이 보장되는 선형 근사에 머물렀습니다.
가장 비슷한 선행 연구는 신경 적합 Q-반복(NFQ)이었지만, 데이터 전체를 한 번에 쓰는 배치 갱신이라 반복마다 비용이 데이터 크기에 비례했습니다. 이 논문은 반복당 비용이 일정한 확률적 경사 하강으로, 원시 화면에서 끝까지(end-to-end) 학습합니다.
핵심 아이디어
flowchart LR
A[게임 화면 210×160 컬러] --> B[전처리: 흑백 · 84×84 자르기]
B --> C[최근 4프레임 쌓기 84×84×4]
C --> D[CNN: 합성곱 2층 + 완전연결 256]
D --> E[행동별 Q값 4~18개]
E --> F{ε-탐욕 선택}
F --> G[에뮬레이터 실행 · 보상 r]
G --> H[(재생 메모리 D)]
H -->|무작위 미니배치 32| I[Q-러닝 손실로 경사 하강]
I --> D1. 행동 가치 함수와 벨만 방정식
직관: 체스 고수는 "이 수를 두면 결국 얼마나 유리해질까"를 수마다 점수로 매깁니다. 그 점수표가 입니다. 점수표만 정확하면 매번 가장 점수가 높은 수를 두면 됩니다.
단계:
- 지금 상태 에서 행동 를 합니다.
- 보상 을 받고 다음 상태 로 갑니다.
- 에서는 다시 가장 좋은 행동을 한다고 가정합니다.
- 그러면 "의 가치 = 받은 보상 + 다음 상태 최고 가치의 할인값"이 됩니다.
| 기호 | 뜻 |
|---|---|
| 상태(여기서는 화면 · 행동의 이력) 에서 행동 를 하고 이후 최선으로 행동할 때 기대되는 할인 보상 합 | |
| 환경(아타리 에뮬레이터). 확률적일 수 있습니다 | |
| 이번 단계 보상(점수 변화) | |
| 할인율. 먼 미래 보상의 비중 | |
| 다음 상태에서 고를 수 있는 행동 중 가장 큰 값 |
왜 '이력'을 상태로 쓰나: 화면 한 장으로는 공이 위로 가는지 아래로 가는지 알 수 없습니다(부분 관측). 그래서 논문은 지금까지의 화면 · 행동 열 전체를 상태로 보고, 실제 입력으로는 최근 4프레임을 씁니다.
2. Q-네트워크와 움직이는 목표
직관: 상태가 너무 많아 표에 다 적을 수 없으니, 점수표를 신경망 하나로 '압축'합니다. 비슷한 화면에는 비슷한 점수를 주도록 일반화됩니다.
단계:
- 가중치 인 신경망으로 를 만듭니다.
- 벨만 방정식의 오른쪽을 '목표값' 로 계산합니다. 이때 이전 가중치 을 고정해 씁니다.
- 예측과 목표값의 차이 제곱을 줄이도록 경사 하강합니다.
| 기호 | 뜻 |
|---|---|
| 번째 반복의 신경망 가중치 | |
| 목표값. 지도학습의 정답 역할이지만 신경망 자신이 만듭니다 | |
| 행동 분포(behaviour distribution). 학습 데이터가 어떤 상태 · 행동에서 나왔는지 |
왜 특이한가: 지도학습의 정답은 학습 전에 정해져 있지만, 여기서는 목표값 가 가중치에 따라 바뀝니다. 그래서 불안정해지기 쉽고, 다음 절의 경험 재생이 필요합니다.
이 방법은 모델 없는 방법(환경을 따로 추정하지 않음)이고 오프폴리시 방법(탐욕 정책을 배우면서 실제로는 탐색하는 정책으로 데이터를 모음)입니다. 탐색은 확률 으로 무작위 행동, 나머지는 가 가장 큰 행동을 고르는 ε-탐욕으로 합니다.
숫자로 해 보기(해설용 예, 논문 수치 아님): 행동이 3개, 다음 화면에서 고정 가중치 신경망이 낸 값이 , 받은 보상 , 라 합시다. 목표값은 입니다. 지금 신경망이 실제로 한 행동에 대해 을 냈다면 오차는 , 손실은 입니다. 경사 하강은 이 행동의 출력을 3.25 쪽으로 조금 올립니다. 다른 두 행동의 출력은 이번 갱신의 손실에 들어가지 않습니다.
3. 경험 재생: 기억을 섞어서 다시 보기
직관: 시험공부를 오늘 푼 문제만 반복하면 편식이 됩니다. 지난 문제를 상자에 모아 두고 무작위로 뽑아 다시 풀면 고르게 실력이 늡니다.
단계:
- 매 단계 경험 를 재생 메모리 에 저장합니다.
- 메모리가 꽉 차면 가장 오래된 것부터 덮어씁니다(최근 개만 보관).
- 학습할 때는 메모리에서 미니배치를 균등 무작위로 뽑아 Q-러닝 갱신을 합니다.
- 그다음 ε-탐욕으로 행동하고 다시 저장합니다.
논문이 든 장점은 세 가지입니다.
- 데이터 효율: 한 경험이 여러 번의 가중치 갱신에 쓰입니다.
- 상관 깨기: 연속 프레임의 강한 상관을 무작위 추출로 끊어 갱신의 분산을 줄입니다.
- 되먹임 고리 막기: 온폴리시로 바로 배우면 "왼쪽이 좋다 → 왼쪽 화면만 모임 → 더 왼쪽"처럼 데이터가 한쪽으로 쏠려 나쁜 지점에 갇히거나 발산할 수 있습니다. 재생은 과거 여러 행동의 분포를 평균해 이를 누그러뜨립니다.
왜 Q-러닝인가: 메모리에 든 경험은 예전 가중치가 만든 것이라, 지금 정책과 다른 정책의 데이터로 배워야 합니다. 그래서 오프폴리시인 Q-러닝을 골랐습니다.
한계(논문 스스로 지적): 메모리는 중요한 경험을 가리지 않고 최근 것으로 덮어쓰며, 모든 경험을 같은 확률로 뽑습니다. 배울 게 많은 경험을 더 자주 뽑는 방식이 나을 수 있다고 적었는데, 이것이 뒤의 우선순위 경험 재생으로 이어집니다.
4. 전처리와 신경망 구조
직관: 사람도 게임할 때 색보다 모양과 움직임을 봅니다. 화면을 작고 흑백으로 줄이고, 몇 장을 겹쳐 움직임을 보이게 합니다.
단계(논문 설정):
- 원본 화면은 210×160 픽셀, 128색 팔레트입니다.
- 흑백으로 바꾸고 110×84로 줄인 뒤, 경기 영역을 대략 담는 84×84를 잘라 냅니다(사용한 GPU 합성곱 구현이 정사각형 입력을 요구했기 때문).
- 최근 4프레임을 쌓아 84×84×4 입력을 만듭니다.
- 1층: 8×8 필터 16개, 보폭 4, ReLU → 2층: 4×4 필터 32개, 보폭 2, ReLU → 완전연결 256 유닛(ReLU) → 출력: 행동마다 하나씩(게임에 따라 4~18개).
왜 행동마다 출력 칸을 두나: 이전 방식은 (상태, 행동)을 함께 넣고 Q값 하나를 받았습니다. 그러면 행동 수만큼 신경망을 돌려야 합니다. DQN은 상태만 넣고 모든 행동의 Q값을 한 번의 순전파로 얻습니다. 계산이 싸집니다.
5. 학습 요령
- 보상 자르기: 게임마다 점수 크기가 크게 달라서, 학습 중에만 양의 보상은 1, 음의 보상은 −1, 0은 그대로 두었습니다. 오차 기울기의 크기를 제한해 모든 게임에 같은 학습률을 쓸 수 있습니다. 대신 큰 보상과 작은 보상을 구별하지 못합니다.
- 옵티마이저 · 배치: RMSProp, 미니배치 32.
- 탐색: 을 처음 100만 프레임 동안 1에서 0.1로 선형으로 줄이고 이후 0.1로 고정.
- 분량: 총 1,000만 프레임 학습, 재생 메모리는 최근 100만 프레임.
- 프레임 건너뛰기: 번째 프레임마다 행동을 고르고 사이에는 같은 행동을 반복합니다. , 다만 스페이스 인베이더는 레이저가 깜빡이는 주기 때문에 에서 보이지 않아 을 썼습니다. 게임 사이 하이퍼파라미터 차이는 이것 하나뿐입니다.
결과
실험한 게임: 빔 라이더 · 브레이크아웃 · 엔듀로 · 퐁 · 큐버트 · 시퀘스트 · 스페이스 인베이더. 학습한 방법은 ε=0.05 탐욕 정책으로 정해진 단계만큼 돌린 평균 점수입니다. 사람 점수는 게임마다 약 2시간 플레이한 뒤의 중앙값입니다.
| 게임 | 무작위 | Sarsa | Contingency | DQN | 사람 |
|---|---|---|---|---|---|
| 빔 라이더 | 354 | 996 | 1743 | 4092 | 7456 |
| 브레이크아웃 | 1.2 | 5.2 | 6 | 168 | 31 |
| 엔듀로 | 0 | 129 | 159 | 470 | 368 |
| 퐁 | −20.4 | −19 | −17 | 20 | −3 |
| 큐버트 | 157 | 614 | 960 | 1952 | 18900 |
| 시퀘스트 | 110 | 665 | 723 | 1705 | 28010 |
| 스페이스 인베이더 | 179 | 271 | 268 | 581 | 3690 |
(논문 표 1의 위쪽 표를 요약해 옮겨 적은 표입니다.)
- 학습 방법 비교: Sarsa · Contingency는 배경 제거, 128색을 각각 채널로 쓰기 같은 사전 지식을 넣었지만, DQN은 원시 RGB 화면만 받고도 7개 게임 모두에서 크게 앞섰습니다.
- 사람과 비교: 브레이크아웃 · 엔듀로 · 퐁에서 사람 전문가보다 높았고, 빔 라이더는 사람에 가까웠습니다. 큐버트 · 시퀘스트 · 스페이스 인베이더는 긴 시간에 걸친 전략이 필요해 사람과 거리가 멀었습니다.
- 진화 탐색(HyperNEAT)과 비교: 최고 에피소드 점수 기준으로도 스페이스 인베이더를 뺀 모든 게임에서 DQN이 나았습니다. HNeat는 결정론적 정책이라 같은 점수를 반복하지만, DQN은 ε-탐욕으로 무작위성이 있는 상태에서 평가했습니다.
- 안정성: 에피소드 평균 보상은 학습 중 잡음이 커서 진전이 안 보였지만, 미리 모아 둔 고정 상태 집합에서의 평균 최대 Q값은 매끄럽게 올랐습니다. 실험 중 발산은 한 번도 없었다고 보고합니다. 그래프의 한 에포크는 미니배치 갱신 5만 번, 약 30분 학습입니다.
- 가치 함수 시각화: 시퀘스트에서 적이 나타나면 예측 가치가 뛰고, 어뢰가 적에 닿기 직전 최고가 되며, 적이 사라지면 원래 수준으로 돌아왔습니다.
왜 중요한가 · 이후 영향
- 딥 강화학습의 출발점: "원시 픽셀 → 신경망 → 행동"을 한 번에 학습할 수 있음을 처음 보였습니다. 이후 2015년 Nature 판(딥 강화학습으로 사람 수준의 제어)에서 목표 네트워크를 더하고 49개 게임으로 넓혔습니다.
- 개선 연구의 뿌리: 과대평가를 줄인 Double DQN, 가치와 어드밴티지를 나눈 Dueling DQN, 경험을 골라 뽑는 우선순위 경험 재생, 이들을 합친 Rainbow가 모두 이 논문의 틀 위에 있습니다.
- 경험 재생의 보편화: 재생 버퍼는 DDPG · TD3 · SAC 같은 연속 제어 알고리즘에서도 기본 부품이 됐습니다.
- 개발자 관점: "학습 데이터를 버퍼에 모아 무작위로 섞어 쓴다", "목표값을 고정한다"는 생각은 오늘날 LLM 강화학습 파이프라인에서도 흔히 보는 안정화 요령입니다.
한계 · 주의할 점
- 이론적 수렴 보장이 없습니다. 논문도 실험에서 발산이 없었다는 경험적 관찰을 근거로 듭니다.
- 목표 네트워크가 없습니다. 이 판은 반복마다 직전 가중치를 목표로 씁니다. 별도의 목표 네트워크를 일정 간격으로 갱신하는 방식은 Nature 판에서 도입됩니다.
- 긴 시간 전략에 약합니다. 큐버트 · 시퀘스트 · 스페이스 인베이더에서 사람과 차이가 컸습니다.
- 보상 자르기의 부작용: 큰 보상과 작은 보상을 구별하지 못해 성능에 영향을 줄 수 있다고 저자들이 직접 밝힙니다.
- 실험 규모가 작습니다. 게임 7개입니다. 결과 표의 사람 점수는 기존 문헌(Bellemare 외)보다 훨씬 높게 잡혀 있어 다른 논문 수치와 바로 비교하면 안 됩니다.
- 데이터가 많이 듭니다. 게임마다 1,000만 프레임을 학습했습니다.
이어서 읽을 것
- 앞: 강화학습 입문 (Sutton · Barto) 6장 Q-러닝
- 확장판: 딥 강화학습으로 사람 수준의 제어 (DQN, Nature 판)
- 개선: Double DQN · Dueling DQN · 우선순위 경험 재생 · Rainbow
- 다른 갈래: A3C (비동기 딥 강화학습) · DDPG (연속 제어)
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| Q-러닝(Q-learning) | 상태-행동 점수표 를 벨만 방정식으로 조금씩 고쳐 가는 강화학습 방법 |
| Q-네트워크 | 점수표 를 대신하는 신경망 |
| 경험 재생(experience replay) | 지난 경험을 메모리에 쌓아 두고 무작위로 뽑아 다시 학습하는 방법 |
| ε-탐욕(ε-greedy) | 확률 ε로는 무작위 행동, 나머지는 가장 좋아 보이는 행동을 하는 탐색 규칙 |
| 모델 없는(model-free) | 환경의 규칙을 따로 배우지 않고 경험에서 바로 가치를 배움 |
| 오프폴리시(off-policy) | 지금 배우는 정책과 다른 정책이 모은 데이터로도 배울 수 있음 |
| 부분 관측(partially observed) | 지금 화면만으로는 상황을 다 알 수 없는 상태 |
| 프레임 건너뛰기(frame skipping) | 몇 프레임마다 한 번만 행동을 고르고 그사이에는 같은 행동을 반복 |
| 보상 자르기(reward clipping) | 보상을 −1, 0, 1로 바꿔 크기를 맞추는 것 |
스스로 점검
- 경험 재생 없이 매 순간의 경험으로 바로 학습하면 어떤 문제가 생기나?
연속 프레임끼리 상관이 커서 갱신의 분산이 커지고, 현재 정책이 모으는 데이터가 한쪽으로 쏠려 되먹임 고리가 생깁니다. 그 결과 나쁜 지점에 갇히거나 발산할 수 있습니다.
- DQN이 (상태, 행동)을 입력으로 받지 않고 행동마다 출력 칸을 둔 이유는?
모든 행동의 Q값을 한 번의 순전파로 얻기 위해서입니다. 행동 수만큼 신경망을 반복해서 돌릴 필요가 없습니다.
- 목표값 가 지도학습의 정답과 다른 점은?
지도학습 정답은 고정돼 있지만, 는 신경망 자신의 출력으로 만들어져 학습이 진행되면 함께 움직입니다. 이 때문에 학습이 불안정해지기 쉽습니다.
다음에 볼 것
이 글을 이해했다면 이어서 보면 좋은 항목입니다.
- 딥 강화학습으로 사람 수준의 제어 (DQN, Nature 판) — 목표 네트워크를 더한 DQN으로 아타리 49개 게임에서 사람 수준에 다가선 Nature 논문
- 이중 Q-러닝 딥 강화학습 (Double DQN) — DQN의 과대평가를 고르기 · 값 매기기 분리로 줄인 Double DQN — 식 한 줄로 큰 개선
출처
- 원문: arxiv.org/abs/1312.5602 (2013 · Volodymyr Mnih 외)
AI 원리부터 이해하기 · 강화학습 모듈
강화학습 모듈 학습
이 글은 강화학습 모듈의 학습 자료입니다. 전체 31개 자료 중 10번째입니다.
출처·원문
원문 보기요약만