여섯 차시 동안 우리는 정답이 적힌 열을 향해 데이터를 모으고 다듬었습니다.
그런데 자전거 타기에는 정답표가 없습니다. 넘어졌다는 사실만 있을 뿐이지요.
오늘은 질문 하나로 학습을 세 갈래로 가르고, 정답표 없이 상벌만으로 배우는 기계를 직접 돌려 봅니다.
성취기준 12인기02-03
지도학습비지도학습강화학습상태·행동·보상·정책탐험과 활용보상 해킹
🎯 학습 목표
지도학습·비지도학습·강화학습을 하나의 질문으로 가르고,
주어진 문제가 어느 갈래인지 손에 든 데이터의 모양을 근거로 판정할 수 있다.
강화학습의 부품 넷(상태·행동·보상·정책)을 실제 문제에 대응시키고,
탐험과 활용이 왜 서로를 깎아먹는지 숫자로 설명할 수 있다.
보상 값을 바꿔 가며 기계가 배우는 길이 뒤집히는 문턱을 스스로 찾아내고,
그 문턱을 손으로 검산해 보상 설계가 곧 목표 설계임을 말할 수 있다.
🤔
여는 장면 — 아무도 정답을 몰랐다
자전거를 처음 배우던 날을 떠올려 봅시다. 옆에서 잡아 주던 사람이 이렇게 말했나요?
📖 아무도 이렇게 말해 주지 않았다
“지금 몸이 오른쪽으로 4.2도 기울었으니 핸들을 왼쪽으로 3.7도 꺾어라.
다음 0.3초 뒤에는 오른쪽으로 1.9도 되돌려라.”
아무도 그렇게 말하지 않았습니다. 대신 이런 것만 있었지요. 넘어졌다.
또 넘어졌다. 이번엔 세 바퀴쯤 갔다가 넘어졌다. 그러다 어느 순간 안 넘어졌다.
정답을 알려 준 사람은 아무도 없는데, 여러분은 자전거를 탑니다.
지난 여섯 차시를 돌아봅시다. 1차시의 학교 메일함에는 메일마다
스팸/정상 표시가 붙어 있었습니다. 2차시의 급식 잔반 기록에는 날마다
실제로 몇 kg 남았는지가 적혀 있었고요. 3차시의 강아지 사진 400장에는
품종 정답이, 6차시에서 특성을 고를 때는 시험 점수가 답 열로 놓여 있었습니다.
4차시에서 빈칸을 메우고 5차시에서 단위를 맞춘 일에는 답 열이 나오지 않았지만,
그 손질도 결국 답 열을 잘 맞히려고 한 준비였지요.
우리는 늘 답이 적힌 열을 목표로 두고 일했습니다.
그런데 자전거에는 그런 열이 없습니다. 바둑에도 없습니다 — 지금 이 수가 좋은 수인지는
200수 뒤에 이기고 나서야 알 수 있으니까요. 로봇이 걷는 것도, 게임 AI가 점수를 올리는 것도
마찬가지입니다. 정답을 아는 사람이 세상에 한 명도 없는 문제가 있습니다.
💭 오늘의 물음
정답을 아무도 모르는 문제를,
기계는 대체 무엇을 근거로 배우는가?
답은 여러분이 자전거를 배운 방식과 똑같습니다. 해 보고, 상과 벌을 받고, 고친다.
오늘 15분 동안 여러분은 24칸짜리 격자 위에서 로봇 하나를 그렇게 가르칠 것입니다.
정답 경로는 아무도 알려 주지 않습니다. 로봇은 열네 판을 헤맨 뒤에야 7걸음짜리 길을 찾아내고,
500판을 도는 동안 구덩이에 117번 빠집니다. 그리고 여러분이 상벌 값을 조금만 바꾸면
로봇은 도착 지점 대신 구덩이로 뛰어들기 시작합니다. 그것도 오늘 직접 보게 됩니다.
1
정답표가 있는가 — 세 갈래를 가르는 한 질문
기계학습을 세 갈래로 나눈다는 말은 여러 번 들어 봤을 것입니다. 그런데 그 셋을
무엇으로 나누는지는 잘 안 적혀 있습니다. 기준은 놀랄 만큼 단순합니다.
질문 하나면 됩니다.
🔑 세 갈래를 가르는 질문
지금 내 손에
정답이 적힌 열이 들려 있는가?
이 질문에 대한 답이 셋이라서 갈래가 셋입니다.
✅
지도학습 (supervised learning)
있다. 데이터마다 이름표가
붙어 있다.
[특성들] → 이름표
기계가 할 일 : 특성에서 이름표로 가는 길을 찾아, 이름표가 없는 새 데이터에 답을 붙인다.
❓
비지도학습 (unsupervised learning)
없다. 특성만 잔뜩 있고 답 열이 아예 없다.
[특성들]
기계가 할 일 : 답을 맞히는 게 아니라 숨은 구조를 찾는다.
비슷한 것끼리 묶거나, 복잡한 것을 간추리거나, 함께 나타나는 것을 캐낸다.
🎯
강화학습 (reinforcement learning)
없다. 대신 해 본 뒤에 점수가 온다. 데이터를 받는 게 아니라
스스로 만든다.
행동 → 상(+) 또는 벌(−)
기계가 할 일 : 여러 번 해 보면서, 점수를 많이 받는 행동 방식을 찾는다.
여기서 가장 중요한 것은 손에 든 데이터의 모양 자체가 다르다는 점입니다.
말로만 다른 게 아니라 파일을 열어 보면 눈으로 구별됩니다.
세 갈래의 차이는 알고리즘이 아니라 손에 든 데이터의 모양에서 시작한다.
왜 하필 ‘정답표’인가
정답표가 있으면 기계는 자기 답과 정답을 뺄 수 있습니다.
그 차이가 곧 고칠 방향입니다. 2차시에서 잔반량을 예측할 때 우리는 예측값과 실제값의 차이를
평균절대오차(MAE)로 쟀지요. 그 차이가 있으니까 “이만큼 틀렸다”를 알고, 다음에 덜 틀리게 고칠 수 있었습니다.
정답표가 없으면 뺄 것이 없습니다. 그러면 기계는 “틀렸다”를 알 방법이 없습니다.
그래서 목표를 바꿉니다 — 맞히는 대신 구조를 찾습니다.
“이 데이터에는 세 덩어리가 있다”는 결론에는 정답이 필요 없습니다.
강화학습은 이 둘 사이에 있습니다. 매 순간의 정답은 없지만, 한참 뒤에 점수가 옵니다.
바둑에서 152번째 수가 좋은 수였는지는 아무도 안 알려 줍니다. 다만 250수쯤 뒤에
이겼다 / 졌다가 옵니다. 이렇게 한참 뒤에야 오는 점수를
지연 보상이라 하고,
그 점수를 앞선 수들에게 어떻게 나눠 줄지가 강화학습의 핵심 문제입니다.
⚠️ 흔한 오해 — “강화학습이 제일 발전한 방법이다”
셋은 수준의 순서가 아니라 상황의 종류입니다.
정답표가 있는데 굳이 강화학습을 쓰면 훨씬 느리고 훨씬 나쁩니다.
스팸 필터에 강화학습을 쓴다고 생각해 보세요. 메일마다 이미 정답이 붙어 있는데,
기계가 “이 메일을 스팸으로 분류” → “맞았음 +1” 을 수십만 번 반복하며 배워야 합니다.
정답표를 그냥 쓰면 한 번에 끝날 일을요.
유형은 문제가 아니라 데이터가 정한다
가장 자주 틀리는 지점이 여기입니다. “영화 추천은 무슨 학습인가?”라는 물음에는
답이 하나가 아닙니다. 같은 문제라도 데이터를 어떻게 모았느냐에 따라 갈래가 바뀝니다.
같은 문제 : 다음 영상 추천하기
손에 든 것
갈래
“이 사람이 눌렀다/안 눌렀다” 기록이 있다
특성 + 이름표(눌렀나)
지도
시청 기록만 있고 아무 표시가 없다
특성만
비지도
추천해 보고 얼마나 오래 봤는지를 점수로 받는다
행동 → 보상
강화
실제 서비스는 셋을 한꺼번에 씁니다. 잠시 뒤 14문항 판별 게임의 12번이 바로 이 문제입니다.
그러니 문제를 보고 “이건 지도학습”이라고 반사적으로 답하지 마세요.
먼저 물어야 할 것은 “그래서 지금 손에 뭐가 있는데?” 입니다.
2
지도학습의 두 갈래, 비지도학습의 세 갈래
큰 갈래를 셋으로 나눴으니, 이제 그 안을 들여다봅시다. 다음 세 차시가
여기서 하나씩 이어집니다.
지도학습 — 답이 범주냐 수냐로 갈린다
이름표가 있다는 점은 같습니다. 그런데 그 이름표가 몇 개 중 하나를 고르는 것이면
분류(classification),
연속된 수면 회귀(regression)입니다.
🏷️ 분류 — 답이 범주
이 메일은 스팸인가 정상인가 (1차시)
이 씨앗은 품종 A인가 B인가 (8차시)
이 X선 사진은 폐렴인가 아닌가
이 손글씨는 0~9 중 무엇인가
잘했나 못했나는 몇 개나 맞혔나로 잰다.
VS
📈 회귀 — 답이 수
오늘 잔반이 몇 kg 남을까 (2차시)
이 학생의 시험 점수는 몇 점일까 (9차시)
이 집은 얼마에 팔릴까
내일 최고 기온은 몇 도일까
잘했나 못했나는 얼마나 빗나갔나로 잰다.
둘의 경계가 흐릿해 보일 수 있습니다. “잔반이 많을까 적을까”는 분류이고
“잔반이 몇 kg일까”는 회귀입니다. 같은 데이터로 둘 다 할 수 있습니다.
2차시의 급식 기록이 정확히 그랬지요 — 잔반량(kg)을 그대로 쓰면 회귀,
기준선을 정해 많음/적음으로 접으면 분류가 됩니다. 무엇을 하고 싶은지가 갈래를 정합니다.
비지도학습 — 구조를 찾는 세 가지 방식
방식
무엇을 찾나
예
군집 (clustering)
비슷한 것끼리 묶는다
공부 시간·스마트폰 시간으로 학생 무리 나누기 (10차시)
차원 축소
많은 열을 몇 개로 간추린다
센서 200개의 값을 2개로 줄여 종이에 그림으로 그리기
연관 규칙
함께 나타나는 것을 캐낸다
영수증에서 “이걸 산 사람은 저것도 산다”
여기에 하나 더 있습니다. 이상 탐지입니다.
대다수와 동떨어진 것을 찾는 일인데, “무엇이 이상인지”를 아무도 표시해 두지 않았으니 비지도학습입니다.
4차시에서 키가 1750.0으로 잘못 적힌 17번 학생을 IQR로 찾아냈던 것 —
그것이 이상 탐지의 가장 단순한 형태였습니다.
ℹ️ 다음 세 차시의 지도
오늘 그은 세 갈래를 다음 세 차시가 하나씩 맡습니다.
8차시 — 분류 : 5차시의 거리 계산으로 가까운 이웃에게 물어보는 k-NN
9차시 — 회귀 : 손실을 줄이는 방향으로 조금씩 내려가는 경사하강법
10차시 — 군집 : 이름표 없이 학생 72명을 세 무리로 나누는 k-평균
그리고 강화학습은 오늘이 처음이자, 이 단원에서 유일한 자리입니다.
그래서 오늘은 갈래를 나누는 데서 멈추지 않고, 강화학습이 실제로 어떻게 도는지까지 봅니다.
💻
손으로 ① — 이건 어떤 학습일까 (14문항)
말로 배운 기준은 문제 앞에서 흔들립니다. 열넷을 직접 판정해 봅시다.
아래 코드의 MY_ANSWER 열네 칸에 "지도" · "비지도" · "강화"
중 하나를 적고 실행하면, 채점표와 근거가 함께 나옵니다.
💡 먼저 읽을 것
????? 를 그대로 두고 한 번 실행해 보세요.
0 / 14 가 나오지만 열네 문항의 근거는 전부 나옵니다. 그 근거를 읽고 채우면 됩니다.
이 채점표는 선생님에게 전송되지 않습니다.
틀린 답을 그대로 두고 근거를 읽는 편이 오히려 남습니다.
⚠️ 12·13·14번은 답이 하나가 아니다
열넷 중 세 문항은 여러 답이 인정됩니다.
코드가 그렇게 만들어져 있습니다 — 이 셋은 조에서 근거를 대고 다투라고 넣은 것입니다.
12번 동영상 추천 — 지도·비지도·강화 셋 다 인정
13번 바둑 AI — 지도 또는 강화 (기보를 따라 배우는 앞 절반과
자기 자신과 두는 뒤 절반이 서로 다른 방식이다. 알파고가 정확히 이 구조였다)
14번 언어 모델 — 지도 또는 비지도
(사람이 이름표를 붙인 적은 없지만, 원문에 이미 적혀 있는 ‘다음 낱말’이 곧 정답이다.
이런 것을 따로 자기지도학습이라 부른다 — 17차시에서 다시 만난다)
✏️ 해 볼 것
????? 를 그대로 두고 실행해 근거 열넷을 읽는다.
열네 칸을 채우고 다시 실행해 몇 / 14 를 공책에 적는다.
12·13·14번에 대해 조에서 각자 다른 답을 고르고 근거를 한 문장씩 적어 본다.
셋 다 인정되는 문항에서 “왜 그 답도 되는가”를 말할 수 있으면 오늘의 기준을 이해한 것이다.
아래 표를 채운다 — 오답이 난 문항이 있다면 내가 무엇을 근거로 삼았는지를 적는다.
기록
값
기록
값
내 점수
틀린 문항 번호
12번에 내가 고른 답
그 근거 한 줄
13번에 내가 고른 답
그 근거 한 줄
3
강화학습의 부품 넷 — 상태·행동·보상·정책
지도학습에는 부품이 둘뿐이었습니다. 특성과 이름표. 강화학습은 넷입니다.
이 넷만 정확히 잡으면 나머지는 계산일 뿐입니다.
강화학습의 고리 — 로봇(Agent)이 미로(Environment)에 행동(Action)을 보내면,
눈으로 그린 해석기(Interpreter)가 달라진 환경을 읽어 보상(Reward)과
새 상태(State)로 돌려준다. 화살표가 한 바퀴 도는 이 그림에는 ‘정답’이 들어올 자리가 없다.
그것이 지도학습 그림과의 결정적 차이다.
출처: Megajuice, Wikimedia Commons (CC0)
부품
뜻
자전거 배우기
오늘의 격자
상태 (state)
지금 어떤 상황인가
몸이 기운 각도, 속도, 핸들 방향
지금 몇 행 몇 열 칸에 있나 (24칸 중 하나)
행동 (action)
지금 할 수 있는 것
핸들을 꺾는다 · 페달을 밟는다 · 발을 내린다
위·오른·아래·왼 네 가지
보상 (reward)
행동 뒤에 오는 점수
넘어지면 아프다(−) · 앞으로 나아가면 신난다(+)
도착 +10 · 구덩이 −10 · 한 걸음 −0.1
정책 (policy)
상태마다 어떤 행동을 고를지의 규칙
“오른쪽으로 기울면 오른쪽으로 꺾는다”
칸마다 “여기서는 이쪽” — 화면의 화살표
강화학습의 결과물은 예측값이 아니라 정책입니다. “어떤 상황에서 무엇을 할까”의 규칙표지요.
가치 — 칸마다 매기는 숫자 하나
정책을 어떻게 찾을까요? 가장 널리 쓰이는 방법은 칸마다 숫자를 하나씩 매기는 것입니다.
그 숫자를 가치(value)라 부릅니다.
가치는 “지금 여기서 받는 점수”가 아니라 “여기서 출발하면 결국 몇 점을 받게 될까”입니다.
이것이 왜 중요한지 격자로 보면 즉시 이해됩니다. 도착 칸 바로 옆 칸은
당장 받는 점수가 −0.1(걸음 값)뿐입니다. 하지만 한 걸음만 더 가면 +10이지요.
그러니 그 칸의 가치는 10 − 0.1 = 9.9입니다. 그 옆 칸은 9.8,
또 그 옆은 9.7… 이렇게 도착 지점에서 물결처럼 번져 나옵니다.
가치가 다 매겨지면 정책은 저절로 나옵니다. 이웃 칸 중 가치가 가장 큰 쪽으로 가면 됩니다.1단원 6·7차시의 A*에서 f가 가장 작은 칸을 먼저 꺼냈던 것과 방향만 반대일 뿐 구조가 같습니다.
다만 결정적인 차이가 하나 있습니다 —
⚠️ 1단원의 A*와 오늘의 강화학습, 결정적 차이
1단원의 A*는 미로 지도를 통째로 받고 시작했습니다.
어디가 벽인지, 목표가 어디인지 처음부터 알고 있었지요. 그래서 한 번도 걸어 보지 않고 길을 계산할 수 있었습니다.
오늘의 로봇은 아무것도 모릅니다. 구덩이가 어디 있는지도,
도착 칸이 어디인지도 모릅니다. 오직 가 보고 점수를 받아야만 압니다.
그래서 500판을 도는 동안 구덩이에 117번 빠집니다. 지도를 받지 못한 대가입니다.
로보컵 2013(네덜란드 에인트호번) 중형 로봇 리그 결승전 — 초록 필드 위의 작은 검은 로봇들은
사람이 조종하지 않고 스스로 공을 쫓는다(필드 가운데 선 사람은 심판이다).
“지금 바퀴를 어느 쪽으로 얼마나” 같은 정답표는 없고, 골을 넣었는가·먹었는가라는 결과만 한참 뒤에 온다 —
상태·행동·보상·정책 넷으로 나눠 볼 수 있는 문제의 대표적인 예다.
출처: Bart van Overbeeke Fotografie, Wikimedia Commons (CC BY-SA 2.0)
💻
손으로 ② — 상벌로 배우는 격자
이제 로봇 하나를 직접 가르쳐 봅시다. 격자는 4행 6열, 모두 24칸입니다.
왼쪽 아래가 출발, 오른쪽 아래가 도착이고, 그 사이 아래 줄 네 칸은 구덩이입니다.
구덩이에 빠지면 그 판은 거기서 끝납니다.
우리 눈에는 7걸음짜리 길이 바로 보입니다. 로봇에게는 보이지 않습니다.
규칙은 이렇습니다. 로봇은 매 걸음 네 방향 중 하나를 고릅니다.
격자 밖으로 나가려 하면 제자리에 머물지만 걸음 값은 그대로 냅니다.
도착 칸을 밟으면 +10, 구덩이를 밟으면 −10, 그 밖의 모든 걸음은 −0.1.
한 판은 도착·구덩이·100걸음 중 먼저 오는 것에서 끝납니다.
💡 칸에 적히는 숫자를 손으로 검산할 수 있다
이 격자에서는 미래 점수를 깎지 않습니다.
그래서 칸의 가치가 정확히 이렇게 됩니다.
가치 = 10 − 0.1 × (거기서 도착까지 남은 걸음 수)
출발 칸은 도착까지 7걸음이니 10 − 0.7 = 9.3이어야 합니다.
도착 바로 위 칸은 1걸음이니 9.9여야 하고요.
학습이 끝난 뒤 이 값과 화면의 숫자를 맞춰 보는 것이 오늘의 검산입니다.
🤖 상벌로 배우는 격자INTERACTIVE
칸에 적힌 숫자는 그 칸의 가치(여기서 출발하면 결국 받을 점수의 추정),
화살표는 지금 배운 정책입니다. 처음에는 전부 0입니다 — 로봇은 아무것도 모릅니다.
[한 판]·[백 판]으로 학습을 진행하고, 칸을 누르면 그 칸의 네 방향 값이 아래 기록창에 글자로 나옵니다.
슬라이더를 움직이면 배운 것을 모두 지우고 처음부터 다시 배웁니다.
가치가 높은 칸 낮은 칸 구덩이 도착 출발🟡 로봇 · ➜ 배운 정책
씨앗이 같으면 몇 번을 돌려도 같은 결과가 나옵니다.
판 수0
출발 칸의 가치0.00
배운 길아직 없음
학습 중 도착0
학습 중 구덩이0
모두 걸은 걸음0
[안내] 로봇은 아무것도 모르는 상태입니다. 모든 칸의 가치가 0입니다. [한 판]을 눌러 첫 판을 보세요.
✏️ 과제 ① — 표를 채운다 (씨앗 7 · 기본 보상 그대로)
[한 판]을 한 번 누른다. 출발 칸의 가치와 배운 길을 적는다.
[한 판]을 아홉 번 더 눌러 10판을 만든다. 다시 적는다.
[백 판]을 눌러 110판… 이 아니라, [🔄 초기화] 뒤 [백 판] 한 번으로 정확히 100판을 만든다. 적는다.
[백 판]을 네 번 더 눌러 500판을 만든다. 적는다.
판 수
출발 칸의 가치
배운 길
학습 중 구덩이
1판
10판
100판
500판
씨앗 7로 돌리면 반의 모든 조가 같은 값을 얻습니다. 조끼리 다르면 어딘가 다르게 누른 것입니다.
✏️ 과제 ② — 문턱을 찾는다
[🔄 초기화] 뒤 한 걸음 값 슬라이더만 0.01씩 내리면서
[백 판]을 다섯 번 눌러 500판을 채웁니다. 그때마다 배운 길을 봅니다.
슬라이더를 한 번 누른 뒤 방향키 ←를 누르면 정확히 0.01씩 내려갑니다.
옆에 뜨는 숫자(👣 한 걸음 값)를 보며 맞추세요.
어느 값에서 ‘도착’이 ‘구덩이’로 뒤집히나요?
찾아낸 값을 적고, 그 값이 왜 하필 거기인지 아래 손계산으로 확인해 보세요.
🧮 손으로 검산하기 — 문턱은 계산으로 나온다
한 걸음 값을 c라 합시다. 출발 칸에서 로봇이 고를 수 있는 길은 사실상 둘입니다.
도착까지 간다 → 7걸음 + 도착 보상 = 10 + 7c
바로 옆 구덩이로 한 걸음 → c + (−10)
구덩이가 더 좋아지는 조건은 −10 + c > 10 + 7c,
정리하면 −20 > 6c, 즉 c < −10/3 = −3.333… 입니다.
슬라이더 눈금이 0.01인 이유가 여기 있습니다. 직접 확인해 보세요 —
−3.33에서는 도착, −3.34에서는 구덩이가 나옵니다.
기계가 배운 것과 여러분이 종이에 쓴 부등식이 소수 둘째 자리에서 만납니다.
✏️ 과제 ③ — 반례를 만든다
구덩이 벌점을 +10으로 올려라(구덩이도 상을 준다). 500판 뒤 로봇은 어디로 가는가?
학습 중 구덩이에 몇 번 빠졌는가? 이것이 오늘 마지막 절에서 다룰 보상 해킹의 축소판이다.
한 걸음 값을 0으로 두어라(걸어도 아무 손해가 없다). 500판을 돌린 뒤
학습 중 도착 횟수를 보라. 왜 그런 일이 생겼는지 조에서 설명해 보라.
탐험 비율을 0으로 두어라. 로봇이 길을 찾는가, 못 찾는가? 예상과 맞았는가?
같은 계산을 파이썬으로 — 화면과 숫자가 맞는지 확인한다
화면의 시뮬레이터와 아래 코드는 같은 알고리즘·같은 난수·같은 씨앗을 씁니다.
그래서 두 결과가 마지막 자리까지 같아야 합니다. 다르면 둘 중 하나가 틀린 것이지요.
실행하고 위 표와 맞춰 보세요.
💡 왜 random 을 안 쓰나
파이썬의 random 모듈은 자바스크립트에 없습니다.
화면과 코드가 같은 수열을 써야 대조가 되므로,
아래 코드는 난수기를 s ← (s × 48271) % 2147483647 한 줄로 직접 만듭니다.
곱셈 결과가 자바스크립트의 정확한 정수 범위 안에 들어가도록 고른 수입니다.
학습 도중 구덩이에 117번 빠지고 383번 도착하며 모두 4,111걸음을 걷습니다.
그 대가로 얻은 것이 9.30이라는 숫자 하나와, 칸마다 찍힌 화살표입니다.
틀린 게 아닙니다. 로봇이 거기를 거의 안 밟아 봤기 때문입니다.
2행으로 가는 길을 일찍 찾아낸 로봇은 굳이 맨 윗줄까지 올라갈 이유가 없었지요.
강화학습은 가 본 곳만 압니다. 이 한 줄이 오늘 배운 것 중 가장 중요할지도 모릅니다 —
기계가 내놓은 숫자를 볼 때는 늘 “이 값이 몇 번의 경험에서 나왔나”를 함께 물어야 합니다.
4
탐험과 활용 — 저울의 두 쪽
격자 시뮬레이터의 슬라이더 중에 탐험 비율 ε이라는 것이 있었습니다.
그 값이 무엇이었는지 이제 제대로 봅시다. 강화학습에만 있는, 지도학습에는 아예 없는 갈등입니다.
📖 학교 앞 분식집 문제
학교 앞에 분식집이 여덟 곳 있습니다. 여러분은 그중 한 곳의 떡볶이가
꽤 맛있다는 것을 압니다. 남은 등교일은 100일. 매일 점심을 어디서 먹을까요?
아는 집으로 100일을 다 갈까요? 그러면 더 맛있는 집을 영영 못 찾습니다.
매일 새 집을 갈까요? 그러면 맛없는 집을 계속 먹게 됩니다.
이것이 탐험(exploration)과
활용(exploitation)의 갈등입니다.
둘은 같은 100일을 나눠 씁니다. 한쪽에 더 주면 다른 쪽이 줄어듭니다. 저울이지요.
가장 단순한 해결책이 ε-탐욕(epsilon-greedy) 정책입니다.
동전을 던져서, ε의 확률로는 아무거나 고르고(탐험), 나머지 확률로는 지금까지 최고인 것을 고릅니다(활용).
ε = 0.1이면 열 번 중 한 번은 새로운 것을 시험합니다.
ε-탐욕 정책 — 강화학습에서 가장 많이 쓰이는 저울추. ε 하나로 두 쪽의 비율을 정한다.
탐험에는 값이 매겨져 있다
탐험은 공짜가 아닙니다. ε의 비율만큼은 일부러 나쁜 선택도 해 본다는 뜻이니까요.
기계가 정답을 이미 다 안다고 해도, ε-탐욕을 쓰는 한 최선을 고를 수 있는 비율에 천장이 생깁니다.
선택지가 셋일 때 그 천장은 이렇습니다.
최선을 고르는 비율의 천장 = 1 − ε × 2/3
탐험할 때도 3분의 1의 확률로는 최선이 걸리기 때문에 ε이 아니라 ε × 2/3만큼 손해입니다.
ε = 0.1이면 천장이 93.3%, ε = 0.3이면 80.0%로 떨어집니다.
천장만 보면 ε은 작을수록 좋습니다.
그런데 정말 그럴까요? ε을 0으로 두면 천장은 100%가 됩니다.
다만 그 100%가 무엇에 대한 100%인지가 문제입니다.
최선이 무엇인지 영영 못 찾은 채로 100%를 지킬 수도 있으니까요.
이 모순을 다음 실습에서 숫자로 확인합니다.
💻
손으로 ③ — 슬롯머신 세 대
격자보다 더 단순한 강화학습 문제가 있습니다. 상태가 아예 없는 문제입니다.
슬롯머신 세 대가 있고, 당길 때마다 당첨(1) 또는 꽝(0)이 나옵니다.
당첨 확률은 기계마다 다른데 기계는 그 확률을 모릅니다. 500번 안에 최대한 많이 따야 합니다.
기계
진짜 당첨 확률
기계가 아는 것
1번
0.2
아무것도. 당겨 봐야만 안다.
2번
0.5
3번
0.75
이 표는 우리가 문제를 만들었으니 아는 것입니다. 코드 속 기계는 이 줄을 끝까지 못 봅니다.
코드에 빈칸 두 개가 있습니다. ε-탐욕의 심장에 해당하는 두 줄입니다.
빈칸 ① — 활용은 무엇을 고르는가? value 안에서 가장 큰 값이
몇 번째 자리에 있는지를 찾으면 됩니다.
빈칸 ② — 새 결과를 보고 추정을 어떻게 고칠까?
(이번에 받은 것 − 지금 믿는 값)을 당긴 횟수로 나눠 더하면,
지금까지 받은 보상의 평균이 저절로 유지됩니다.
⚠️ 빈칸을 채우기 전에는 실행되지 않는다
????? 는 파이썬 문법이 아니므로 SyntaxError가 납니다.
그건 고장이 아니라 예정된 일입니다. 두 줄을 채운 뒤 실행하세요.
✏️ 과제 — 세 판을 돌리고 표를 채운다
빈칸 둘을 채워 실행한다. 【2】의 총 보상과 기계별 당긴 횟수를 적는다.
3번 기계를 몇 번 당겼는가? 추정한 가치가 진짜 확률에 얼마나 가까운가?
EPS = 0으로 바꿔 실행한다. 총 보상이 얼마인가? 기계별 당긴 횟수를 보라.
무슨 일이 일어났는지 한 문장으로 적어라.
EPS = 1로 바꿔 실행한다. 총 보상은? “아무거나 골랐다면 기대 보상”과 견주어 보라.
【3】과 【4】 두 표가 서로 다른 답을 가리킨다. 어느 쪽을 믿어야 하는지 조에서 정하고
까닭을 적어라.
실제로 EPS = 0.01로 20판을 돌리면 8판은 3번 기계를 끝내 못 찾습니다.
한 판만 보면 317점으로 멀쩡해 보이는데, 20판을 모으면 최저 106점짜리 판이 섞여 있습니다.
한 판의 성적으로 좋은 설정을 고르면 안 된다는 뜻이지요 —
3차시에서 밝은 털 사진만으로 성적을 재면 안 됐던 것과 같은 종류의 잘못입니다.
⚠️ “ε = 0은 언제나 나쁘다”고 외우면 틀린다
슬롯머신에서 ε = 0이 103점으로 처참했던 이유는 운이 아닙니다.
셋 다 추정이 0.0으로 같을 때 “가장 큰 값의 첫 자리”는 언제나 1번이므로,
첫 당김이 무조건 1번이고 그 뒤로 다른 기계를 시도할 계기가 영영 없습니다.
하필 그 1번이 가장 나쁜 기계(0.2)였을 뿐입니다.
확률을 뒤집어 보면 드러납니다. 1번을 0.75, 3번을 0.2로 바꾸면
ε = 0이 373점으로 ε = 0.1(362점)을 이깁니다.
격자에서도 같은 일이 있었지요. 탐험을 0으로 두어도 로봇은 7걸음 길을 찾아냈고,
학습 중 구덩이에 빠진 횟수는 오히려 5번으로 가장 적었습니다(ε = 0.2일 때는 117번).
문제의 생김새마다 답이 다릅니다. 외우지 말고 재세요.
5
보상을 설계한다는 것은 목표를 설계한다는 것
오늘 여러분은 슬라이더를 몇 번 움직여서 로봇의 성격을 통째로 바꿨습니다.
알고리즘은 한 줄도 안 고쳤는데 말이지요. 그 사실을 다시 봅시다.
바꾼 것
로봇이 배운 길
학습 중 구덩이
학습 중 도착
기본 (도착 +10 · 구덩이 −10 · 걸음 −0.1)
도착 7걸음
117
383
구덩이도 상으로 (+10)
구덩이로 1걸음
499
1
한 걸음 값을 0으로
벽에 막혀 제자리
38
0
한 걸음 값 −3.33
도착 7걸음
404
96
한 걸음 값 −3.34
구덩이로 1걸음
467
33
500판 · 씨앗 7. 학습 알고리즘은 다섯 줄 모두 똑같습니다. 바뀐 것은 보상 숫자뿐입니다.
세 번째 줄을 다시 보세요. 한 걸음 값을 0으로 두자 로봇은 500판을 돌고도
도착 칸을 한 번도 못 밟았습니다. 서두를 이유가 사라지자 100걸음 상한에 걸릴 때까지 헤매기만 했고,
헤매기만 하니 도착이 무엇인지 배울 기회도 없었습니다.
벌이 없으면 배울 것도 없다는 말이 그대로 숫자로 나온 셈입니다.
두 번째 줄은 더 노골적입니다. 구덩이에 상을 주자 로봇은 한 걸음 만에 구덩이로 뛰어들었습니다.
500판 중 499판이 그랬습니다. 로봇을 나무랄 수 있을까요? 우리가 시킨 대로 한 것뿐입니다.
📖 보트 경주 AI가 찾아낸 구멍
2016년, 한 연구진이 보트 경주 게임에 강화학습 AI를 붙였습니다.
보상은 게임 점수로 정했습니다. 사람이 보기에 당연한 선택이지요 —
잘 달리면 점수가 오르니까요.
AI는 결승선에 들어오지 않았습니다. 대신 경로 중간의 한 구석에서
점수 아이템 세 개가 계속 되살아나는 자리를 찾아냈고, 그 위를 뱅뱅 돌며 점수만 쌓았습니다.
불이 붙고 벽에 부딪히고 거꾸로 달리면서도요.
그렇게 얻은 점수는 정상적으로 완주한 사람의 점수보다 높았습니다.
AI는 고장 나지 않았습니다. 우리가 시킨 것을 완벽하게 해냈습니다.
문제는 우리가 원한 것(경주에서 이기기)과 우리가 시킨 것(점수 올리기)이 달랐다는 데 있습니다.
이렇게 보상의 빈틈을 파고들어 목표와 상관없는 방법으로 점수만 올리는 현상을
보상 해킹(reward hacking)이라 합니다.
오늘 여러분이 구덩이 벌점을 +10으로 올렸을 때 본 것이 바로 그 축소판입니다.
⚠️ 똑똑할수록 더 잘 찾아낸다
보상 해킹은 AI가 덜 똑똑해서 생기는 문제가 아닙니다.
정확히 반대입니다. 점수를 올리는 방법을 잘 찾는 기계일수록 우리가 못 본 지름길도 잘 찾아냅니다.
성능이 올라갈수록 보상 설계의 허점이 더 위험해진다는 뜻이지요.
그러면 보상을 어떻게 설계해야 하나
대리 지표를 목표로 착각하지 않는다. ‘게임 점수’는 ‘경주에서 이기기’의 대리 지표였을 뿐입니다.
정말 원하는 것이 완주라면 완주에 보상을 주어야 합니다.
목표와 상관없는 행동에는 값을 매긴다. 격자에서 걸음마다 −0.1을 준 것이 그것입니다.
그 −0.1이 없으면 로봇은 서두르지 않고, 서두르지 않으면 아무것도 못 배웠습니다.
이상한 방법으로 점수를 올릴 수 있는지 먼저 찾아본다.
설계자가 스스로 “이 보상으로 반칙할 방법이 있나?”를 묻는 것이 가장 값싼 안전장치입니다.
배운 결과를 반드시 눈으로 본다. 오늘 우리가 [🎯 배운 길로 가 보기]를 누른 것처럼요.
총점만 보면 구덩이로 뛰어드는 로봇도 “학습에 성공했다”고 보고됩니다.
이 이야기는 오늘로 끝나지 않습니다. 3단원에서 인공지능의 사회적 영향을 다룰 때,
“무엇을 점수로 삼을 것인가”라는 오늘의 질문이 훨씬 무거운 모습으로 다시 나옵니다.
추천 알고리즘이 ‘머문 시간’을 보상으로 삼으면 무슨 일이 벌어질지 —
그건 게임 속 보트가 뱅뱅 도는 것과 같은 구조입니다.
그래서 강화학습은 어디까지 왔나
이세돌 9단(2016) — 알파고와 다섯 판을 두어 한 판을 이겼다.
출처: LG Electronics, Wikimedia Commons (CC BY 2.0)제4국의 기보 도면 — 이세돌이 백을 잡고 이긴, 다섯 판 중 유일한 판이다.
도면 가운데 L11 자리의 백 78수가 판을 뒤집은 수로 꼽힌다. 기계가 배운 정책에도 구멍이 있었다.
출처: Wesalius, Wikimedia Commons (CC BY-SA 4.0)
알파고는 오늘 배운 두 갈래를 이어 붙인 시스템이었습니다.
먼저 사람의 기보를 따라 배웠고(지도학습 — 기보의 다음 수가 정답표입니다),
그다음 자기 자신과 두면서 이기면 +1, 지면 −1로 다듬었습니다(강화학습).
14문항 게임의 13번이 바로 이 구조를 물은 것이었지요.
ℹ️ 우리가 만든 것과 알파고 사이의 거리
오늘의 격자는 24칸이고 행동은 네 가지였습니다.
칸마다 네 방향 값을 하나씩, 모두 24 × 4 = 96개의 숫자만 기억하면 됩니다.
바둑판은 361칸이고, 매 수마다 놓을 수 있는 자리가 그만큼 있습니다.
가능한 판을 전부 표로 적는 것은 우주의 원자 수보다 많아 원리적으로 불가능합니다.
그래서 알파고는 값을 표에 적는 대신 신경망에게 값을 어림하게 했습니다.
13~15차시에서 그 신경망을 우리 손으로 만들 것입니다.
오늘 배운 고리(상태 → 행동 → 보상 → 고침)는 그대로이고, 값을 기억하는 방식만 바뀝니다.
원리는 같고 규모가 다릅니다.
📖
정리 — 오늘 손에 남은 것
세 갈래를 가르는 질문은 하나다 — “지금 손에 정답이 적힌 열이 들려 있는가?”
있으면 지도학습, 없으면 비지도학습, 없지만 행동 뒤에 점수가 오면 강화학습.
문제의 성질이 아니라 데이터의 모양이 갈래를 정한다.
지도학습은 답이 범주냐 수냐로 갈린다 — 분류와 회귀.
비지도학습은 군집·차원 축소·연관 규칙으로 구조를 찾는다. 8·9·10차시가 이 셋을 하나씩 맡는다.
강화학습의 부품은 넷이다 — 상태·행동·보상·정책.
결과물은 예측값이 아니라 상황마다 무엇을 할지의 규칙이다.
가치는 도착점에서 물결처럼 번진다 — 격자의 칸 값은
10 − 0.1 × 남은 걸음이었고, 500판을 돌린 로봇의 출발 칸 값은 정확히 9.30이었다.
다만 안 가 본 0행은 참값과 어긋났다. 강화학습은 가 본 곳만 안다.
탐험과 활용은 같은 판을 나눠 쓴다 — ε을 키우면 최선을 빨리 찾지만 손해도 커지고,
줄이면 손해는 적지만 최선을 못 찾을 수 있다. 천장 표와 20판 평균 표가 서로 반대를 가리키는 까닭이다.
보상을 설계하는 일이 곧 목표를 설계하는 일이다 — 한 걸음 값을 −3.33에서 −3.34로
0.01만 내리자 로봇은 도착 대신 구덩이를 골랐다. 그 문턱은 손으로 푼 부등식과 정확히 맞았다.
💡 오늘 나온 숫자 한눈에 (씨앗 7)
격자 500판 : 출발 칸 9.30 · 배운 길 7걸음 ·
학습 중 도착 383번 · 구덩이 117번 · 모두 4,111걸음.
문턱은 −3.33 / −3.34.
슬롯머신 500번(ε = 0.1) : 총 보상 368 · 기계별 [21, 17, 462] ·
추정 가치 [0.43, 0.47, 0.76] · 아무거나 골랐다면 242.
✅
확인 문제
✍️ 문제마다 답을 쓰고 제출하기를 누르세요. 제출하면 모범 답안이 열리고, 제출한 답은 선생님께 전달됩니다.
1. 지도학습·비지도학습·강화학습을 가르는 하나의 질문을 쓰고,
세 경우에 각각 손에 든 데이터가 어떻게 생겼는지를 한 줄씩 설명하시오.
📖 모범 답안
질문 : “지금 내 손에 정답이 적힌 열(이름표)이 들려 있는가?”
지도학습 — 표에 특성 열들과 이름표 열이 함께 있다.
줄마다 “이 값들일 때 답은 이것”이 적혀 있으므로, 기계가 자기 예측과 정답의 차이를 뺄 수 있다.
그 차이가 곧 고칠 방향이 된다.
비지도학습 — 특성 열만 있고 이름표 열이 통째로 없다.
뺄 정답이 없으니 “맞히기”가 아니라 “구조 찾기”로 목표를 바꾼다(묶기·간추리기·함께 나타나는 것 캐기).
강화학습 — 표 자체가 없다. 데이터를 받는 것이 아니라 행동해서 스스로 만든다.
매 순간의 정답은 없고, 행동 뒤에 상(+) 또는 벌(−)이라는 점수만 돌아온다.
그 점수를 앞선 행동들에게 나눠 주는 것이 학습이다.
2. 다음 다섯을 세 유형으로 나누고 근거를 한 줄씩 대시오.
㉠ 스팸/정상 표시가 붙은 메일로 스팸 필터 만들기 ㉡ 구매 기록만으로 고객 묶기
㉢ 로봇이 넘어지며 걷기 익히기 ㉣ 과거 거래가로 집값 예측하기 ㉤ 게임 AI가 점수를 높이며 플레이 익히기.
덧붙여, 실습의 12번(동영상 추천)은 왜 답이 하나로 정해지지 않는지 설명하시오.
📖 모범 답안
㉠ 지도(분류) — 메일마다 ‘스팸이다/아니다’라는 정답표가 이미 붙어 있고, 답이 범주다. ㉡ 비지도(군집) — 어느 고객이 어느 무리인지 아무도 미리 적어 두지 않았다. 묶은 뒤 이름은 사람이 붙인다. ㉢ 강화 — ‘이 순간 무릎을 몇 도로 굽혀라’라는 정답표가 없고, 움직인 뒤 넘어짐(−)·전진(+)만 돌아온다. ㉣ 지도(회귀) — 거래된 집마다 실제 가격이라는 정답표가 있고, 답이 연속된 수다. ㉤ 강화 — ‘이 장면에서는 이 버튼’이라는 정답표가 없고 점수(보상)만 있다.
12번이 셋 다 되는 까닭 — 유형은 문제가 아니라 손에 든 데이터가 정하기 때문이다.
‘눌렀다/안 눌렀다’ 기록을 이름표로 쓰면 지도, 시청 기록만으로 비슷한 사람을 묶으면 비지도,
‘추천했더니 얼마나 오래 봤나’를 보상으로 삼으면 강화가 된다.
실제 추천 서비스는 셋을 한꺼번에 쓴다.
3.오늘 격자 시뮬레이터에서 잰 값을 보고 답하시오.
500판을 돌린 뒤 출발 칸의 가치는 얼마였는가? 그 값이 왜 하필 그 수인지
10 − 0.1 × (남은 걸음)으로 설명하고, 0행의 값들이 참값과 어긋난 까닭을 쓰시오.
📖 모범 답안
출발 칸의 가치 = 9.30. 출발 칸 (3,0)에서 도착까지 최단은 7걸음이다
(위로 한 칸 올라가 2행으로 피한 뒤 오른쪽으로 다섯 칸, 마지막에 아래로 한 칸).
걸음마다 −0.1을 내므로 10 − 0.1 × 7 = 9.3. 학습된 값이 정확히 9.30으로 맞았다.
2행도 왼쪽부터 9.40 · 9.50 · 9.60 · 9.70 · 9.80 · 9.90 으로 참값과 일치했다.
0행이 어긋난 까닭 — 500판 뒤 0행은 7.97 · 6.33 · 9.27 · 9.50 · −0.08 · −0.10 이었다.
참값(9.20 · 9.30 · 9.40 · 9.50 · 9.60 · 9.70)과 다르다.
로봇이 2행을 지나는 길을 일찍 찾아낸 뒤로는 맨 윗줄까지 올라갈 이유가 없어져
그 칸들을 거의 밟지 않았기 때문이다.
강화학습이 아는 것은 ‘가 본 곳’뿐이다. 안 가 본 칸의 값은 아직 추측일 뿐이며,
기계가 내놓은 숫자를 볼 때는 “이 값이 몇 번의 경험에서 나왔나”를 함께 물어야 한다.
4.오늘 슬롯머신 실습에서 잰 값을 보고 답하시오.EPS = 0으로 두었을 때 총 보상과 기계별 당긴 횟수는 얼마였는가?
그 현상을 ‘탐험과 활용’이라는 말로 설명하고, “ε = 0은 언제나 나쁘다”가 왜 틀린 말인지
오늘 본 근거 하나를 들어 반박하시오.
📖 모범 답안
총 보상 103, 기계별 [500, 0, 0]. 1번 기계만 500번 당겼고 나머지 둘은 한 번도 안 당겼다.
(ε = 0.1일 때는 368점, [21, 17, 462] 였다.)
탐험과 활용으로 설명 — ε = 0은 탐험이 0이라는 뜻이다.
추정이 셋 다 0.0으로 같은 처음에 “가장 큰 값의 첫 자리”는 1번이므로 첫 당김이 1번이 되고,
활용만 하므로 그 뒤로 다른 기계를 시도할 계기가 영영 생기지 않는다.
활용만 하면 배울 수가 없다.
“ε = 0은 언제나 나쁘다”가 틀린 까닭 — 근거는 둘 중 아무거나 들면 된다.
① 진짜 확률을 [0.75, 0.5, 0.2]로 뒤집으면 ε = 0이 373점으로 ε = 0.1(362점)을 이긴다.
ε = 0이 나빴던 것은 원리 때문이 아니라 1번 자리에 하필 가장 나쁜 기계가 앉아 있었기 때문이다.
② 격자에서는 탐험을 0으로 두어도 7걸음 길을 찾아냈고, 학습 중 구덩이에 빠진 횟수는
오히려 5번(ε = 0.2일 때 117번)으로 가장 적었다.
5. 격자에서 한 걸음 값을 −3.33에서 −3.34로 0.01만 내리면
로봇이 도착 대신 구덩이를 고릅니다. 그 문턱이 왜 하필 거기인지 부등식으로 보이시오.
그리고 이 현상과 보상 해킹이 어떤 점에서 같은 이야기인지 설명하시오.
📖 모범 답안
부등식 — 한 걸음 값을 c라 하면
출발 칸에서 도착까지 가는 길의 총점은 10 + 7c(7걸음 + 도착 보상 10),
바로 옆 구덩이로 한 걸음 뛰어드는 길의 총점은 c − 10이다.
구덩이가 더 좋아지는 조건은 c − 10 > 10 + 7c → −20 > 6c →
c < −10/3 = −3.333…
그래서 −3.33에서는 도착, −3.34에서는 구덩이가 나온다. 실제로 그렇게 나왔다.
보상 해킹과 같은 이야기인 까닭 — 두 경우 모두 기계는 고장 나지 않았다.
우리가 준 점수표에서 총점을 최대로 만드는 행동을 정확히 골랐을 뿐이다.
우리가 원한 것(도착하기 / 경주에서 이기기)과 우리가 시킨 것(총점 올리기)이 어긋났기 때문에
생긴 일이다. 보상을 설계하는 일이 곧 목표를 설계하는 일이라는 뜻이며,
성능이 좋은 기계일수록 그 어긋난 틈을 더 정확히 찾아낸다.
6. 강화학습의 부품 넷(상태·행동·보상·정책)을
‘학교 급식 배식 줄 관리’ 문제에 각각 대응시켜 설계하시오.
그다음, 여러분이 정한 보상으로 기계가 반칙할 수 있는 방법을 하나 찾아내고 보상을 고쳐 보시오.
📖 모범 답안
정답이 하나가 아니다. 아래는 한 예다.
상태 — 지금 시각, 줄에 선 인원, 배식대 세 곳 각각의 대기 인원, 남은 메뉴 종류. 행동 — 다음 학급을 어느 배식대로 보낼지(1·2·3번 중 하나), 또는 잠시 대기시키기. 보상 — 한 학생이 1분 기다릴 때마다 −0.1, 급식이 끝나면 +10. 정책 — “줄이 가장 짧은 배식대로 보낸다” 같은, 상태마다 행동을 정하는 규칙.
이 규칙을 사람이 적어 주는 것이 아니라 기계가 여러 날 돌려 보며 찾아낸다.
반칙할 방법 — ‘대기 시간’만 벌점으로 삼으면, 기계는 학생을 아예 줄에 못 서게 하는 것이
가장 좋은 방법이 된다. 줄에 아무도 없으면 대기 시간이 0이기 때문이다.
보트 경주 AI가 결승선에 안 들어온 것과 같은 구조다.
보상 고치기 — “모든 학생이 배식을 받았을 때만 +10을 준다”처럼
진짜 원하는 결과 자체에 보상을 붙이고, 배식받지 못한 학생 한 명당 큰 벌점을 더한다.
그리고 학습이 끝난 뒤 총점만 보지 말고 기계가 실제로 어떤 정책을 배웠는지 눈으로 확인한다.
🔁 되돌아보기
오늘 우리는 정답표가 있는가라는 질문 하나로 학습을 세 갈래로 갈랐고,
정답표 없이 상벌만으로 배우는 로봇을 24칸 격자에서 직접 길렀다.
로봇은 117번 구덩이에 빠진 뒤에야 7걸음 길을 찾았고, 우리가 한 걸음 값을 0.01만 내리자
곧바로 구덩이로 뛰어들었다. 다음 시간에는 세 갈래 중 첫째, 지도학습의 분류로 간다.
5차시에서 만든 거리 계산으로 가까운 이웃에게 물어보는 k-NN이다.
🔎
더 알아보기
오늘 돌린 격자와 슬롯머신이 한 줄의 코드 안에서, 그리고 교실 밖에서 어떻게 이어지나
원리 더 깊이
Q-학습의 한 줄 — 칸의 값은 한 번에 정해지지 않는다
격자 코드에서 실제로 학습을 하는 줄은 하나뿐이었습니다. Q[s][a] += ALPHA * (target - Q[s][a]).
풀어 말하면 “지금 믿는 값을 이번에 본 값 쪽으로 ALPHA만큼 끌어당긴다”입니다.
도착 바로 위 칸 (2,5)에서 ↓를 고르면 매번 −0.1 + 10 = 9.9를 받으니 목표값은 늘 9.9입니다.
값 0에서 출발하면 4.95 → 7.43 → 8.66 → 9.28 → 9.59로, 그림처럼 남은 틈이 올 때마다 절반씩 줄어듭니다.
ALPHA를 1로 두면 새 소식으로 옛 값을 통째로 덮어쓰고, 작게 두면 천천히 움직이는 대신 한두 번의 우연에 덜 흔들립니다.
슬롯머신의 빈칸 ② (reward - value[a]) / count[a]도 같은 모양이에요 —
끌어당기는 비율이 1 ÷ 당긴 횟수라서, 결과적으로 지금까지 받은 보상의 평균이 됩니다.
이 규칙은 크리스토퍼 왓킨스(Christopher Watkins)가 1989년 박사학위 논문에서 제안했고,
1992년 피터 다얀(Peter Dayan)과 함께 모든 칸의 모든 행동을 끝없이 다시 시도하고 학습률을 알맞게 줄여 가면
참값에 다다른다는 것을 증명했습니다. 조건을 눈여겨보세요. 오늘 0행의 값이 참값과 어긋난 것은
알고리즘이 틀려서가 아니라 바로 이 조건 — 충분히 가 보기 — 이 채워지지 않았기 때문입니다.
역사
TD-Gammon — 알파고보다 20여 년 앞서 자기 자신과 둔 기계
사진은 게임을 시작하는 배치로 말을 늘어놓은 백개먼 판입니다.
주사위 두 개를 굴려 나온 눈만큼 말을 옮겨, 자기 말 열다섯 개를 먼저 판 밖으로 빼내면 이기는 놀이지요.
1992년 IBM의 제럴드 테사우로(Gerald Tesauro)는 이 놀이를 두는 신경망을 사람의 기보 없이
자기 자신과 수십만 판을 두게 하여 길렀습니다. 이름은 TD-Gammon입니다.
보상은 오늘 격자처럼 판이 끝날 때 한 번, 이겼는가 졌는가뿐이었습니다.
그 점수를 앞선 수들에게 나눠 준 방법이 시간차 학습(TD, temporal difference)입니다 —
“지금 판의 값”을 “한 수 뒤 판의 값” 쪽으로 조금씩 끌어당기는 것으로,
격자 코드의 target = rew + GAMMA * max(Q[ns])와 같은 발상이에요.
다른 점은 판의 가짓수가 24칸처럼 적지 않아서, 표 대신 신경망이 값을 어림했다는 것입니다.
TD-Gammon은 세계 정상급 선수들과 견줄 만한 수준에 이르렀고, 몇몇 첫수에서는 전문가들이 오래 써 온 방식보다
기계가 고른 수가 낫다는 것이 알려져 사람이 두는 법까지 바꾸었습니다.
주사위가 매 판을 다르게 흔들어 준 덕분에 따로 애쓰지 않아도 온갖 판을 겪게 되었다는 —
탐험이 저절로 이루어졌다는 — 해석도 있습니다.
사진: 시작 배치로 놓인 백개먼 판과 주사위 · 출처: Ptkfgs, Wikimedia Commons (Public domain)
현장
‘외팔이 강도’ 문제 — 슬롯머신 세 대가 웹사이트 실험이 되기까지
사진은 1페니를 넣고 오른쪽 손잡이를 한 번 당기는 옛 슬롯머신입니다(앞면에 ‘ONE PENNY – ONE PULL’이라 적혀 있어요).
팔 하나로 돈을 가져간다고 해서 영어로는 외팔이 강도(one-armed bandit)라는 별명이 붙었고,
그래서 오늘 실습처럼 여러 대 가운데 어느 것을 당길지 고르는 문제를
멀티암드 밴딧(multi-armed bandit) 문제라고 부릅니다.
1950년대 초 통계학자 허버트 로빈스(Herbert Robbins)가 ‘실험을 차례차례 설계하는 문제’로 정식화했습니다.
이 문제는 도박장보다 웹사이트에서 더 자주 풀립니다. 첫 화면 디자인 두 가지 중 어느 쪽이 더 많이 눌리는지 알고 싶을 때,
방문자를 끝까지 반반 나누면 나쁜 쪽을 본 절반은 그대로 손해입니다.
밴딧 방식은 결과가 쌓이는 대로 더 나아 보이는 쪽에 방문자를 더 많이 보내면서 다른 쪽도 조금씩은 계속 보여 줍니다.
오늘 ε = 0.1로 맞춘 저울이 바로 그것이지요. 뉴스 제목이나 광고를 고르는 일에도 같은 틀이 쓰입니다.
탐험의 값이 사람일 때는 이야기가 무거워집니다. 새 치료법을 시험하는 임상시험에서 ‘탐험’ 한 번은 환자 한 사람입니다.
그래서 결과가 쌓이는 대로 더 나아 보이는 치료 쪽으로 배정 비율을 옮겨 가는 적응형 설계가 연구되지만,
우연에 속아 너무 일찍 쏠리지 않도록 규칙을 미리 엄격하게 정해 둡니다 —
【4】에서 한 판의 성적만 믿으면 안 됐던 것과 같은 까닭입니다.
사진: 영국 와이트섬 벤트너의 옛 세가 벨(Sega Bell) 슬롯머신 · 출처: Ronald Saunders from Warrington, UK, Wikimedia Commons (CC BY-SA 4.0)