8. DQN: 표를 신경망으로 바꾸면 무엇이 흔들리나

DQN과 그 뒤: 아타리에서 레인보까지

경험 리플레이와 타깃 네트워크를 합성곱 신경망에 얹으면 DQN이 된다. 이 조합은 게임 화면에서 실제로 무엇을 해냈고 무엇을 남겼으며, 남은 것을 메우려고 어떤 고침이 이어졌을까?

역사: 일곱 게임에서 마흔아홉 게임으로

2013년 12월 딥마인드의 볼로디미르 므니(Volodymyr Mnih)와 동료들은 arXiv에 「Playing Atari with Deep Reinforcement Learning」을 올렸다(그해 NIPS 딥러닝 워크숍). 게임마다 손으로 만든 특징 없이, 화면 픽셀만 받는 합성곱 신경망 하나를 Q-러닝 변형으로 학습시켰다. 일곱 게임에 신경망 구조와 학습 설정을 하나로 맞춰 썼고, 여섯 게임에서 앞선 방법들을 넘었으며, Breakout·Enduro·Pong 세 게임에서는 사람 전문가의 점수도 넘었다. 이때는 리플레이만 있었고 타깃 네트워크는 없었다.

2015년 2월 『네이처』에 실린 「Human-level control through deep reinforcement learning」은 타깃 네트워크를 더해 49게임으로 넓혔다. 에이전트가 받은 것은 화면 픽셀과 점수뿐이었고, 모든 게임에 같은 알고리즘, 같은 신경망, 같은 설정을 썼다. 논문에 따르면 49게임 가운데 43게임에서 그때까지 가장 좋던 강화학습 방법들을 넘었고, 절반이 넘는 29게임에서 전문 게임 테스터 점수의 75% 넘게 받았다. Breakout에서는 벽 한쪽을 뚫어 공을 벽돌 뒤로 보내는 전략까지 스스로 찾았다. 그래도 오래 앞을 내다봐야 하는 게임은 남았다. 논문은 Montezuma’s Revenge를 DQN을 포함한 모든 에이전트에게 큰 숙제라고 적었다.

화면에서 행동마다 하나의 Q까지

DQN의 신경망은 최근 화면 네 장을 쌓은 입력을 받아, 고를 수 있는 행동마다 Q를 하나씩 내놓는다. 화면은 회색조로 바꿔 84 × 84로 줄이고, 화면 하나로는 공이 어느 쪽으로 움직이는지 알 수 없으므로 네 장을 겹친다. 그 뒤로 합성곱 층 셋과 512칸짜리 층 하나를 지나, 마지막 층이 행동 수(게임에 따라 4~18개)만큼의 숫자를 낸다.

화면 4장 84 × 84 × 4 합성곱 1 8×8, 32개 스트라이드 4 합성곱 2 4×4, 64개 스트라이드 2 합성곱 3 3×3, 64개 스트라이드 1 512칸 Q(s, 가만히) Q(s, 발사) Q(s, 오른쪽) ⋮ Q(s, 왼쪽) 행동마다 하나 (4~18개) 한 번 계산으로 모든 행동의 Q Mnih 외 2015 「Methods」의 구조를 다시 그림

행동마다 출력을 하나씩 두는 것도 고른 설계다. 앞선 몇몇 방법은 상태와 행동을 함께 입력으로 넣어 Q 하나를 냈는데, 그러면 행동마다 신경망을 한 번씩 돌려야 해서 계산이 행동 수에 비례해 늘었다. 행동마다 출력을 두면 한 번 계산으로 모든 행동의 Q가 나오고, 목표의 max도 그 출력들 가운데 가장 큰 것을 고르면 끝난다.

DQN 뒤의 고침들

DQN 뒤의 고침은 대개 DQN의 한 부분이 무엇을 모자라게 했는지에서 출발했다. 게임마다 점수 크기가 다르므로, 여러 게임의 결과는 「사람 기준 점수」로 맞춰 견준다. 무작위로 누른 점수를 0%, 사람의 점수를 100%로 두고 100 × (에이전트 − 무작위)/(사람 − 무작위)로 매긴다.

이름 (발표) DQN의 무엇이 모자랐나 고친 것
더블 DQN (판하설트·궤즈·실버, AAAI 2016) 목표의 max는 추정이 부풀어 있는 행동을 고르기 쉽다. 여럿 가운데 가장 커 보이는 값은 부풀어 있다는 최대화 편향이 신경망에서도 실제로 크게 생겼다 다음 행동을 고르는 일은 지금 신경망이, 그 행동의 값을 매기는 일은 타깃 네트워크가 맡는다
듀얼링 네트워크 (왕 외, ICML 2016) 행동이 무엇이든 값이 비슷한 상태가 많은데, 행동마다 Q를 따로 배운다 상태의 가치 V와 행동마다의 어드밴티지(그 행동이 평균보다 얼마나 나은지)를 두 출력 머리로 따로 내고 합쳐 Q를 만든다
우선순위 리플레이 (샤울 외, ICLR 2016) 버퍼에서 고르게 꺼내면 배울 것이 많은 경험과 이미 맞힌 경험을 같은 빈도로 쓴다 TD 오차가 큰 경험을 더 자주 꺼낸다. 49게임 가운데 41게임에서 고르게 꺼낸 DQN을 넘었다
레인보 (헤셀 외, AAAI 2018) 고침들이 서로 다른 부분을 고치는데 따로따로 시험됐다 여섯 고침(더블, 우선순위 리플레이, 듀얼링, n스텝 리턴, 리턴의 분포를 배우는 분포 DQN, 탐색을 신경망의 노이즈로 하는 노이즈 넷)을 한 에이전트에 합쳤다

레인보 논문은 57게임에서 각 방법의 사람 기준 점수 중앙값을 견줬는데, 하나하나도 DQN보다 나았고 합친 레인보는 223%였다.

DQN 79% 더블 DQN 117% 노이즈 DQN 118% 우선순위 + 더블 140% 듀얼링 + 더블 151% 분포 DQN 164% 레인보 223% 사람 = 100% Hessel 외 2018 표 2의 보고값을 다시 그림

레인보 논문은 고침을 하나씩 빼 보는 실험도 했는데, 빼면 중앙값이 가장 크게 떨어진 것은 우선순위 리플레이와 n스텝 리턴이었다. 우선순위 리플레이는 경험 리플레이에서 경험을 꺼내는 방식을, n스텝 리턴은 부트스트랩으로 만드는 목표를 손본 것이다.

ML에서: 행동마다 하나의 출력

화면 하나를 넣으면 행동마다 숫자 하나가 나오는 DQN의 머리는 언어 모델의 마지막 층과 모양이 같다. 언어 모델도 지금까지의 문맥을 넣으면 어휘의 토큰마다 숫자(로짓) 하나를 낸다. 다른 것은 행동의 수로, 아타리의 행동은 많아야 18개인데 GPT-2의 어휘는 50,257개다. 출력의 모양이 같은 것은 그저 우연일까, 로짓도 어떤 행동 가치로 읽을 수 있을까?

문제 9. 쉬운 시험과 어려운 시험

5지선다 100문항짜리 국어와 수학 모의고사에서, 모두 찍으면 기대 점수가 20점이다. 국어는 학원 강사가 92점을 받았고 민준은 74점, 수학은 시험이 어려워 강사가 60점을 받았고 민준은 50점이다. (가) 「100 × (내 점수 − 찍기 점수)/(강사 점수 − 찍기 점수)」로 두 과목을 환산하라. (나) 원점수로 견줄 때와 무엇이 다른가?

선생님 (평상)
선생님
민준 학생, 원점수로는 국어가 24점 높죠. 국어를 더 잘 본 걸까요?
김민준 (평상)
김민준
74 대 50 이니까 국어요.
선생님 (질문)
선생님
수학은 강사도 60점이었어요. 찍어도 20점이고요. 환산하면요?
김민준 (아하)
김민준
국어 100 × (74 − 20)/(92 − 20) = 75.0%, 수학 100 × (50 − 20)/(60 − 20) = 75.0%. 똑같네요. 원점수 차이는 시험 난이도 차이였어요.
이서연 (평상)
이서연
0%가 「아무것도 모르고 찍은 것」, 100%가 「잘하는 사람」이 되게 눈금을 맞춘 거네. 100%를 넘으면 강사보다 잘한 거고.
김민준 (평상)
김민준
학점도 과목마다 평균이 달라서 표준점수로 바꿔 보는 거랑 같네요.

정리 (가) 국어 75.0%, 수학 75.0%. (나) 과목마다 다른 눈금(찍기 점수, 기준 점수)을 걷어 내면 같은 실력이 같은 숫자로 나온다. 아타리의 사람 기준 점수도 게임마다 무작위 점수를 0%, 사람 점수를 100%로 맞춘 눈금이다.

문제 10. 일곱 게임의 중앙값

2013년 DQN 논문의 표 1에 실린 평균 점수(DQN / 무작위 / 사람)는 다음과 같다. Beam Rider 4092 / 354 / 7456, Breakout 168 / 1.2 / 31, Enduro 470 / 0 / 368, Pong 20 / −20.4 / −3, Q*bert 1952 / 157 / 18900, Seaquest 1705 / 110 / 28010, Space Invaders 581 / 179 / 3690. (가) 게임마다 사람 기준 점수를 구하고, (나) 일곱 게임의 평균과 중앙값을 구하라. (다) 여러 게임의 성적을 하나로 말할 때 평균과 중앙값 가운데 무엇이 나은가?

선생님 (평상)
선생님
서연 학생, 계산부터 해 볼까요.
이서연 (평상)
이서연
Beam Rider 52.6%, Breakout 559.7%, Enduro 127.7%, Pong 232.2%, Q*bert 9.6%, Seaquest 5.7%, Space Invaders 11.4% 예요. Pong은 점수가 음수라 조심했어요. 100 × (20 + 20.4)/(−3 + 20.4) 이에요.
김민준 (평상)
김민준
평균은 142.7% 니까, 2013년 DQN이 평균적으로 사람보다 1.4배 잘했네요.
선생님 (질문)
선생님
일곱 게임 가운데 사람보다 잘한 게임은 몇 개죠?
김민준 (난처함)
김민준
셋이요. 넷은 사람의 절반도 안 되는데요. 평균이 Breakout 559.7% 하나에 끌려 올라간 거예요. Breakout을 빼면 평균이 73.2% 로 뚝 떨어져요.
이서연 (평상)
이서연
중앙값은 줄 세워서 가운데니까 52.6%, Beam Rider야. 한 게임이 아무리 커도 중앙값은 안 움직여.
선생님 (평상)
선생님
그래서 레인보 논문도 57게임의 중앙값으로 견줬어요.
이서연 (평상)
이서연
통계에서 꼬리가 긴 분포는 평균보다 중앙값이 대푯값으로 낫다는 거랑 같네요.

정리 (가) 52.6, 559.7, 127.7, 232.2, 9.6, 5.7, 11.4%. (나) 평균 142.7%, 중앙값 52.6%. (다) 중앙값이 낫다. 평균은 한 게임의 큰 값에 끌려가서, 사람보다 잘한 게임이 일곱 가운데 셋뿐인데도 사람의 1.4배로 보인다.

문제 11. 듀얼링의 덧셈은 왜 평균을 빼나

듀얼링 네트워크는 상태 가치 V\textcolor{#00897b}{V}와 행동마다의 어드밴티지 A\textcolor{#8e44ad}{A}를 따로 내고 Q(s,a)=V(s)+A(s,a)−1∣A∣∑a′A(s,a′)\textcolor{#00897b}{Q}(\textcolor{#0093b8}{s}, \textcolor{#1c9c60}{a}) = \textcolor{#00897b}{V}(\textcolor{#0093b8}{s}) + \textcolor{#8e44ad}{A}(\textcolor{#0093b8}{s}, \textcolor{#1c9c60}{a}) - \frac{1}{|\mathcal{A}|}\sum_{\textcolor{#1c9c60}{a'}} \textcolor{#8e44ad}{A}(\textcolor{#0093b8}{s}, \textcolor{#1c9c60}{a'})로 합친다(∣A∣|\mathcal{A}|는 행동 수). 한 상태에서 세 행동의 Q\textcolor{#00897b}{Q}가 (2.0, 2.5, 1.0)이다. (가) 평균을 빼지 않고 Q=V+A\textcolor{#00897b}{Q} = \textcolor{#00897b}{V} + \textcolor{#8e44ad}{A}로만 합친다면, 같은 Q\textcolor{#00897b}{Q}를 내는 (V\textcolor{#00897b}{V}, A\textcolor{#8e44ad}{A})를 두 가지 적어라. (나) 평균을 빼면 V\textcolor{#00897b}{V}와 A\textcolor{#8e44ad}{A}는 얼마로 정해지는가? (다) 첫째 행동의 기록만 들어와 그 Q\textcolor{#00897b}{Q}를 0.3 올려야 할 때, 보통의 Q 머리와 듀얼링은 무엇이 다를 수 있는가?

선생님 (평상)
선생님
민준 학생, (가)는요?
김민준 (평상)
김민준
V\textcolor{#00897b}{V} = 0 이고 A\textcolor{#8e44ad}{A} = (2.0, 2.5, 1.0) 이면 되고, V\textcolor{#00897b}{V} = 1 이고 A\textcolor{#8e44ad}{A} = (1.0, 1.5, 0.0) 이어도 돼요. 둘 다 더하면 (2.0, 2.5, 1.0).
선생님 (질문)
선생님
그럼 신경망이 배운 V\textcolor{#00897b}{V}를 「이 상태의 가치」라고 읽을 수 있나요?
이서연 (생각)
이서연
아니요. V\textcolor{#00897b}{V}에 아무 수를 더하고 A\textcolor{#8e44ad}{A}에서 그만큼 빼도 Q가 같으니까, V\textcolor{#00897b}{V}가 얼마로 학습될지 정해지지 않아요.
선생님 (질문)
선생님
(나)처럼 평균을 빼면 무엇이 묶이죠?
이서연 (평상)
이서연
A\textcolor{#8e44ad}{A}에서 자기 평균을 뺐으니까… A\textcolor{#8e44ad}{A}의 합이 0이 돼요. 그러면 V\textcolor{#00897b}{V}는 Q의 평균이어야 하네요.
김민준 (평상)
김민준
평균은 1.8333 이니까 A\textcolor{#8e44ad}{A} = (0.1667, 0.6667, −0.8333) 이에요.
선생님 (평상)
선생님
(다)는요?
김민준 (평상)
김민준
보통 Q 머리면 첫째 칸만 2.3 으로 바뀌어요. 듀얼링에서 그 기록이 V\textcolor{#00897b}{V}를 0.3 올리는 쪽으로 가면 세 행동이 모두 (2.3, 2.8, 1.3) 으로 올라가요.
이서연 (아하)
이서연
행동이 무엇이든 비슷하게 좋은 상태라면, 한 행동의 기록으로 나머지 행동의 값까지 같이 배우는 거네요. 논문이 「비슷한 값의 행동이 많을 때」 더 잘한다고 한 까닭이 그거고요.
김민준 (평상)
김민준
팀 프로젝트 점수를 「팀 평균 + 각자의 기여도」로 나누면, 팀 점수가 오른 소식 하나로 모두의 점수를 함께 고칠 수 있는 거랑 같네요. 기여도 합은 0으로 맞춰야 팀 평균이 하나로 정해지고요.

정리 (가) (V\textcolor{#00897b}{V} = 0, A\textcolor{#8e44ad}{A} = (2.0, 2.5, 1.0)), (V\textcolor{#00897b}{V} = 1, A\textcolor{#8e44ad}{A} = (1.0, 1.5, 0.0)) 등 끝없이 많다. (나) V\textcolor{#00897b}{V} = 1.8333, A\textcolor{#8e44ad}{A} = (0.1667, 0.6667, −0.8333). (다) 보통 머리는 (2.3, 2.5, 1.0)처럼 한 칸만, 듀얼링은 V\textcolor{#00897b}{V}를 거쳐 (2.3, 2.8, 1.3)처럼 모든 행동이 함께 움직일 수 있다. 평균을 빼는 것은 V\textcolor{#00897b}{V}와 A\textcolor{#8e44ad}{A}를 하나로 정하려는 묶음이다.