본문 바로가기
강화학습

[강화학습 27] 모방학습과 역강화학습

by 카이스토 2026. 9. 15.

CH 27 강화학습 · Part 5 보상을 사람에게서 배우다

모방학습과 역강화학습

26장까지 우리는 보상함수가 주어져 있다고 가정했다. 절벽은 −100, 목표는 +1, 한 걸음은 −1. 이제 그 가정을 버린다. "좋은 운전"의 보상함수를 적어 보라고 하면 누구도 적을 수 없고, 속도·안전·승차감의 교환비를 숫자로 박아 넣는 순간 이미 틀린 목표를 최적화하게 된다. 대신 우리가 할 수 있는 일은 보여 주는 것이다. 시연에서 정책을 얻는 세 가지 길 — 행동을 그대로 흉내기(BC), 보상을 거꾸로 추정하기(IRL), 점유분포를 맞추기(GAIL) — 을 끝까지 따라간다. BC 가 왜 O(εT2) 로 무너지는지 숫자로 보고, 보상함수가 원리적으로 하나로 정해지지 않는다는 사실을 퍼텐셜 정형화로 증명한다.

  • 01 직관
  • 02 수식 읽는 법
  • 03 손으로 풀기
  • 04 코드
  • 05 시각화

약어 및 기호 정의

모방학습 imitation learning
보상 대신 전문가의 시연으로 정책을 얻는 문제 전체. 아래 세 계열을 포괄한다
전문가 πE
expert. 시연을 만든 쪽. 사람일 수도, 값비싼 탐색기일 수도, 특권 정보를 쓰는 정책일 수도 있다
시연 𝒟
demonstrations. {(si, ai)} 또는 궤적 {τj}. 보상 라벨은 없다
행동복제 BC
behavior cloning. s ↦ a 를 지도학습으로 맞추는 것. 모방학습의 가장 단순한 답
공변량 이동 covariate shift
학습 때의 입력분포(dE)와 시험 때의 입력분포(dπ)가 다른 현상. BC 의 근본 결함
DAgger
Dataset Aggregation. 내 정책이 가는 곳에서 전문가에게 다시 라벨을 묻고 데이터에 더하는 반복법
역강화학습 IRL
inverse RL. 시연이 최적이었다고 가정하고 보상함수를 역으로 찾는 문제
퍼텐셜 정형화 F
potential-based shaping. F(s,a,s′) = γΦ(s′) − Φ(s) 꼴의 보상 덧붙임. 최적정책을 바꾸지 않는다
특징기대 μ(π)
feature expectation. 𝔼π[∞Σt=0 γt φ(st)]. 선형 보상 r = w·φ 에서 가치는 w·μ 하나로 결정된다
점유분포 ρπ
occupancy measure. (1−γ)𝔼π[Σ γt 𝟙(st=s, at=a)]. 정책이 어디에 얼마나 머무는지의 분포
GAIL
Generative Adversarial Imitation Learning. 보상을 거치지 않고 ρπ 를 ρE 에 맞추는 적대적 학습
판별기 D
discriminator. (s,a) 가 전문가에서 왔을 확률을 내놓는 분류기. 정책의 보상 대용으로 쓰인다
후회 regret
여기서는 전문가 대비 누적 손실 J(πE) − J(π). 2장의 밴딧 후회와 같은 발상이다
STEP 01

직관: 보상함수를 적을 수 없는 문제들

"좋은 운전"의 보상함수를 적어 보자. 빠르면 좋으니 속도에 +1, 사고는 나쁘니 충돌에 −1000, 승객이 불편하면 안 되니 가속도 제곱에 −0.1. 세 줄을 적고 나면 곧 문제가 드러난다. 왜 −1000 인가. −100 이면 난폭해지고 −10000 이면 차가 아예 출발하지 않는다. 급제동 한 번과 2분 지연 중 무엇이 더 나쁜가. 노인을 태웠을 때와 응급환자를 태웠을 때 그 교환비가 같아야 하는가.

1장에서 본 보상가설(reward hypothesis) — 모든 목표는 누적 스칼라 보상의 최대화로 적을 수 있다 — 은 존재에 대한 주장이다. 그런 스칼라가 원리적으로 있다는 말과, 사람이 그것을 손으로 적어 낼 수 있다는 말은 전혀 다르다. 숫자 세 개의 교환비를 정하는 순간 우리는 "무엇이 좋은 운전인가"라는 물음에 답한 셈이 되는데, 우리는 그 답을 모른다. 아는 것은 한 가지뿐이다 — 좋은 운전을 보면 알아본다.

이 구조의 문제가 실은 대부분이다. 로봇이 컵을 자연스럽게 집는 동작, 문장을 읽기 좋게 다듬는 편집, 수술 도구의 부드러운 경로. 어느 것도 보상함수를 적을 수 없지만 어느 것도 시연은 줄 수 있다. 그래서 문제 설정을 바꾼다.

문제를 다시 적는다

주어진 것: MDP 에서 보상함수 R 만 빠진 것 M∖R = (𝒮, 𝒜, P, γ), 그리고 전문가의 시연 𝒟 = {τ1, …, τN}. 각 궤적은 상태와 행동의 나열이고 보상 숫자는 없다.

원하는 것: 전문가만큼 잘하는 정책 π. 경우에 따라서는 정책보다 보상함수 자체를 원한다 — 보상을 얻으면 환경이 달라져도 다시 풀 수 있고, 전문가보다 더 잘할 수도 있다.

여기서 길이 세 갈래로 나뉘는데, 갈리는 지점은 "무엇을 맞출 것인가"다.

1
행동을 맞춘다 (BC). (s, a) 쌍을 모아 지도학습한다. 가장 쉽고, 환경과 상호작용할 필요도 없다. 그런데 시연에서 한 번 벗어나면 본 적 없는 상태에 들어가 무엇을 할지 모른다. 이 결함이 이 장의 중심 계산이다
2
보상을 맞춘다 (IRL). 시연이 최적이었다고 가정하고 그것을 최적으로 만드는 보상 R̂ 를 찾는다. 보상은 상태·행동의 함수이므로 궤적보다 일반화가 넓다. 대신 답이 하나로 정해지지 않는다 — 이것도 이 장에서 증명한다
3
분포를 맞춘다 (GAIL). 보상을 아예 건너뛰고, 내 정책이 만드는 (s,a) 분포를 전문가의 분포와 같게 만든다. 판별기가 둘을 구별하지 못하게 되면 끝난다. 14장~20장의 정책경사를 그대로 쓴다
ch27-d1
도해 1. 이 장의 중심 그림. 굵은 띠가 전문가가 지나간 곳, 즉 BC 의 학습 분포다. 스텝마다 확률 ε 로 엉뚱한 행동을 하면 띠 밖으로 나가고, 밖에서는 학습 데이터가 없으므로 오차가 더 커진다. 지도학습에서는 표본 하나가 틀려도 다음 표본에 영향을 주지 않지만, 순차 결정에서는 내 실수가 내 다음 입력을 만든다.

도해 1 의 핵심은 "내가 데이터를 만든다"는 1장의 세 번째 문제가 여기서 가장 날카롭게 나타난다는 점이다. 지도학습의 독립동일분포(i.i.d.) 가정은 BC 에서 깨진다. 학습 때의 입력분포는 전문가가 방문한 상태들의 분포 dE 인데, 시험 때의 입력분포는 내 정책이 방문하는 dπ 다. 그리고 π 가 πE 와 조금이라도 다르면 두 분포는 시간이 갈수록 벌어진다.

자율주행의 초기 신경망 연구(Pomerleau 의 ALVINN, 1989)부터 이 문제는 알려져 있었고, 당시의 처방은 일부러 비뚤어진 상태를 데이터에 넣는 것이었다. 카메라를 좌우로 비스듬히 달아 "중앙선에서 벗어난 시야 + 돌아오는 조향각"을 합성해 학습시켰다. 이것이 바로 데이터 분포를 내 정책이 갈 곳까지 넓힌다는 DAgger 의 발상을 수작업으로 구현한 것이다.

왜 보상까지 거슬러 올라가려 하는가

BC 를 고치는 가장 곧은 길은 데이터를 넓히는 것(DAgger)이다. 그런데 그 길은 전문가를 계속 부를 수 있을 때만 된다. 그리고 BC 도 DAgger 도 행동만 복사할 뿐이라, 환경이 조금 달라지면(도로가 바뀌면, 로봇 팔 길이가 달라지면) 처음부터 다시다. 보상함수는 다르다. 보상은 "무엇이 좋은가"를 담고 있고 그것은 대체로 환경보다 오래 산다. 그래서 IRL 은 시연에서 정책이 아니라 의도를 추출하려 한다 — Ng 와 Russell 이 IRL 을 정식화한 2000년 논문의 표현대로, 보상함수야말로 과제의 가장 간결하고 이식 가능한 기술이다.

대가도 분명하다. IRL 은 안쪽에 강화학습 문제 전체를 품는다. 후보 보상 R̂ 하나를 시험하려면 그 보상 아래의 최적정책을 풀어야 하고, 바깥 루프가 R̂ 를 갱신할 때마다 그 일을 다시 해야 한다. 게다가 — 다음 단계에서 증명하겠지만 — 답이 하나가 아니다. 시연을 완벽히 설명하는 보상함수는 무한히 많고, 그중에는 R ≡ 0 처럼 쓸모없는 것도 있다.

STEP 02

수식 읽는 법: 복제·이동·비유일성·적대

행동복제는 지도학습 그 자체다

행동복제(behavior cloning, BC)에는 강화학습이 없다. 상태를 입력, 전문가 행동을 정답 라벨로 놓은 분류(또는 회귀) 문제다.

(27.1) minθ   𝔼(s,a) ~ 𝒟 [ − log πθ(a | s) ] 이산 행동이면 교차엔트로피, 연속 행동에서 가우시안 정책을 쓰면 ‖a − μθ(s)‖2 의 상수배가 된다. 감가율도, 가치함수도, 벨만 방정식도 들어오지 않는다. 3장부터 26장까지 쌓은 장치가 전부 사라진 자리다.

식 (27.1) 은 𝒟 아래의 기댓값이라는 점이 전부다. 𝒟 는 전문가가 방문한 상태들, 즉 s ~ dE 에서 뽑힌다. 그런데 우리가 정말 줄이고 싶은 것은 배포했을 때의 손실이다.

학습이 줄이는 것:   𝔼s ~ dE[ 𝟙( π(s) ≠ πE(s) ) ] = ε     vs     실제로 문제인 것:   𝔼s ~ dπ[ ⋯ ]

이 어긋남이 공변량 이동(covariate shift)이다. 지도학습에서도 훈련·시험 분포가 다르면 곤란하지만, 여기서는 시험 분포를 내가 만든다는 점이 다르다. 정책이 나쁘면 나쁜 곳에 가고, 나쁜 곳에 가면 더 나빠진다. 되먹임이 있다.

유도: 스텝당 ε 가 어떻게 εT2 가 되는가

정확한 상수까지 따지려면 조건이 여럿 필요하므로, 가장 투명한 모형으로 차수만 뽑자. 길이 T 의 유한지평, 스텝마다 최대 1 의 손실. 전문가와 다른 행동을 하는 확률이 어느 상태에서든 ε 이하라고 하자.

1
최악의 모형을 세운다. 한 번이라도 전문가와 다른 행동을 하면 그 궤적은 학습 분포 밖으로 나가고, 밖에서는 아무 보장이 없으므로 남은 모든 스텝에서 손실 1 을 받는다고 두자. 도해 1 의 상황을 가장 비관적으로 적은 것이다
2
시각 t 까지 살아남을 확률. 매 스텝 독립적으로 1−ε 로 전문가를 따라가므로 P(t 시점까지 분포 안) = (1−ε)t−1
3
시각 t 의 기대손실 은 이탈해 있을 확률 ℓt = 1 − (1−ε)t−1
4
합친다. J(T) = TΣt=1 [ 1 − (1−ε)t−1 ] = T − 1 − (1−ε)Tε  — 등비급수 한 번으로 닫힌 꼴이 나온다
5
작은 ε 에서 전개한다. (1−ε)t−1 ≈ 1 − (t−1)ε 이므로 ℓt ≈ (t−1)ε. 합은 J(T) ≈ ε·T(T−1)2 = O(εT2)
6
상한 확인. 1 − (1−ε)t−1 ≤ (t−1)ε 는 베르누이 부등식이므로 εT(T−1)/2 는 항상 상한이다. 그리고 εT ≪ 1 인 영역에서는 거의 등호다
(27.2) J(πE) − J(πBC)  =  T − 1 − (1−ε)Tε  ≤  ε T(T−1)2  =  O(ε T2) Ross 와 Bagnell 이 2010년에 보인 BC 의 하한 구성이 정확히 이 형태다 — 어떤 MDP 에서는 O(εT2) 가 실제로 달성되며, 따라서 이것은 분석의 느슨함이 아니라 BC 자체의 성질이다.

차수의 의미를 놓치지 말자. 지도학습이라면 오류율 ε 는 ε 만큼의 손해다. 순차 결정에서는 같은 ε 가 εT2, 즉 지평의 제곱으로 증폭된다. 지평이 10배 길어지면 손해는 100배다. 이것이 "BC 는 짧은 과제에서는 놀랍도록 잘 되고 긴 과제에서는 갑자기 무너진다"는 현장 경험의 정확한 근거다.

DAgger 가 O(εT) 로 낮추는 원리

문제의 원인은 하나였다 — dE 에서 학습하고 dπ 에서 시험한다. 그러면 처방도 하나다. dπ 에서 학습하면 된다.

1
현재 정책 πi 로 환경을 굴려 궤적을 얻는다. 여기서 방문한 상태들이 바로 dπi 의 표본이다
2
그 상태들에 대해 전문가에게 다시 묻는다: "여기서라면 너는 무엇을 하겠는가." 전문가가 행동하는 것이 아니라 라벨만 준다
3
새 (s, πE(s)) 를 누적 데이터셋에 더한다(aggregate). 전체로 다시 지도학습해 πi+1 을 얻는다
4
반복하면 학습 분포가 dE 와 dπ 를 모두 덮는 쪽으로 자란다. 이제 "이탈한 상태"도 데이터 안이 되므로 ℓt 가 t 와 함께 커지지 않는다
5
따라서 손실은 스텝마다 ε 씩 더해지기만 한다: J(πE) − J(πDAgger) = O(εT)
(27.3) BC: O(εT2)    ⟶    DAgger: O(εT)    (비율 ≈ T/2) DAgger 를 온라인 학습의 후회 최소화(2장의 그 발상)로 환원해 증명한다. 각 라운드의 데이터셋이 "전문가에 대한 온라인 볼록 최적화"의 한 라운드가 되고, no-regret 알고리즘이면 평균 정책의 손실이 ε 에 붙는다. 대가는 매 라운드 전문가 질의다.

DAgger 가 요구하는 것이 무엇인지 분명히 하자. 전문가가 임의의 상태에 대해 답할 수 있어야 한다. 시뮬레이터 안의 탐색기나 특권 정보를 쓰는 정책이라면 쉽다. 사람이라면 어렵다 — 화면을 멈추고 "지금 뭘 하시겠어요"를 수천 번 물어야 한다. 그리고 사람은 맥락에서 떼어 낸 한 장면에 답하는 걸 잘 못한다. 이 한계가 28장 RLHF 로 가는 문을 연다: 사람에게 행동을 묻는 대신 두 결과 중 어느 쪽이 나은지를 묻는 것.

IRL: 문제는 답이 너무 많다는 것

역강화학습(inverse RL, IRL)의 정의는 짧다. 시연 𝒟 가 어떤 보상 R 아래 최적이었다고 가정하고, 그런 R 을 찾아라. 3장의 벨만 최적성 조건을 그대로 미지수를 바꿔 읽으면 된다.

(27.4) 찾아라 R   s.t.   Q*R(s, πE(s)) ≥ Q*R(s, a)    ∀s ∈ 𝒮, ∀a ∈ 𝒜 순방향 RL 은 R 을 알고 π 를 찾았다. 역방향은 πE 를 알고 R 을 찾는다. 부등식 |𝒮|·(|𝒜|−1) 개에 미지수 |𝒮||𝒜| 개 — 제약보다 자유도가 많다.

자유도가 많다는 말은 구체적으로 이렇다. R ≡ 0 을 넣어 보라. 모든 정책이 가치 0 으로 동률이므로 πE 도 최적이다. 부등식은 전부 등호로 만족된다. 아무것도 설명하지 못하는 답이 항상 존재하는 것이다. 이것을 비유일성(non-identifiability)이라 하고, IRL 의 모든 방법론은 결국 "이 많은 답 중 어느 것을 고를 것인가"에 대한 답이다.

비유일성의 세 가지 원천을 정확히 적는다. 셋 모두 아래 3단계에서 숫자로 확인한다.

(27.5) R′ = R + c  ·  R′ = kR (k > 0)  ·  R′(s,a,s′) = R(s,a,s′) + γΦ(s′) − Φ(s) 셋 중 앞의 둘은 뻔하고, 셋째가 이 장의 핵심이다. 상태마다 제멋대로인 함수 Φ 를 골라도 최적정책이 그대로다 — 즉 자유도가 |𝒮| 차원 통째로 남는다.

증명 1 — 상수 덧셈과 양수배

1
상수 덧셈. R′ = R + c 이면 임의의 정책 π 에 대해 QπR′(s,a) = 𝔼[Σ γt(rt + c)] = QπR(s,a) + c1−γ
2
더해진 양 c/(1−γ) 는 (s,a) 에도 π 에도 의존하지 않는 상수다. argmaxa 는 상수 덧셈에 불변이므로 최적정책이 같다 ∎
3
양수배. R′ = kR, k > 0 이면 기댓값의 선형성으로 QπR′ = k·QπR. 양수배는 순서를 보존하므로 역시 argmax 가 같다 ∎
4
주의. k < 0 이면 순서가 뒤집혀 최악 정책이 최적이 된다. 그리고 γ < 1 일 때만 1번이 유한하다 — 평균보상 설정에서는 상수 덧셈이 모든 정책의 이득을 c 만큼 올릴 뿐이라 역시 무해하다

증명 2 — 퍼텐셜 정형화 불변성

이것이 Ng·Harada·Russell 의 1999년 정리다. 진술부터 정확히 적는다.

(27.6) F(s, a, s′) = γΦ(s′) − Φ(s)   ⟹   Q*R+F(s,a) = Q*R(s,a) − Φ(s)   ⟹   π*R+F = π*R 임의의 Φ : 𝒮 → ℝ 에 대해 성립한다. Φ 는 아무 함수여도 된다 — 무작위 난수를 넣어도 된다. 가치는 Φ(s) 만큼 평행이동하고 정책은 그대로다.
1
궤적 수준에서 망원합. 궤적 s0, s1, … 에 대해 정형화 항의 감가합을 적는다:
∞Σt=0 γt F(st, at, st+1) = ∞Σt=0 γt [ γΦ(st+1) − Φ(st) ] = ∞Σt=0 [ γt+1Φ(st+1) − γtΦ(st) ]
2
인접 항이 정확히 상쇄된다(망원급수). γ1Φ(s1) 이 t=0 항의 앞부분과 t=1 항의 뒷부분에서 부호 반대로 나타난다. 남는 것은 첫 항뿐:
= limT→∞ γTΦ(sT) − Φ(s0) = −Φ(s0)  (Φ 가 유계이고 γ < 1 이면 첫 극한은 0)
3
기댓값을 취한다. 이 값은 궤적이 무엇이든 −Φ(s0) 로 같다. 그러므로 어떤 정책 π 에 대해서도
VπR+F(s) = VπR(s) − Φ(s)
4
이동량이 정책과 무관하다는 것이 결정적이다. 모든 정책의 가치가 같은 양 만큼 내려가므로 정책 사이의 순서가 보존된다. 따라서 argmaxπ Vπ 도 같다
5
Q 로 옮긴다. QπR+F(s,a) = 𝔼[ R + γΦ(s′) − Φ(s) + γVπR+F(s′) ] = 𝔼[ R + γΦ(s′) − Φ(s) + γ(VπR(s′) − Φ(s′)) ]
6
γΦ(s′) 가 −γΦ(s′) 와 상쇄되어 QπR+F(s,a) = QπR(s,a) − Φ(s). Φ(s) 는 행동 a 에 의존하지 않으므로 행 안의 argmaxa 가 보존된다 ∎

6번 줄이 정리의 심장이다. Φ 를 s 만의 함수로 제한했기 때문에 Q 의 같은 행 전체가 통째로 내려간다. 만약 Φ 가 a 에도 의존했다면 행 안에서 서로 다른 양만큼 움직여 순서가 깨진다. 그래서 정형화 항은 반드시 γΦ(s′) − Φ(s) 꼴 이어야 한다.

역도 성립한다

원논문은 더 강한 것을 증명했다. 모든 MDP 에서 최적정책을 보존하는 정형화 항은 퍼텐셜 기반 형태뿐이다. 즉 (27.6) 은 충분조건일 뿐 아니라 사실상 필요조건이다. "정책을 안 바꾸면서 보상을 만지는 방법"은 이 하나가 전부라는 뜻이다.

실무적 함의도 크다. 순방향 RL 에서 학습을 돕겠다고 보상을 손보는 것(reward shaping)은 위험한 일이지만, γΦ(s′)−Φ(s) 꼴로만 쓰면 목표를 훼손하지 않는다는 보장이 있다. 가장 좋은 Φ 는 Φ = V* 인데, 그걸 알면 문제가 이미 풀린 것이다. 그래서 V* 의 조잡한 근사(예: 목표까지의 직선거리)를 Φ 로 쓴다.

최대엔트로피 IRL: 답을 고르는 원리

답이 무한히 많으면 고르는 원리가 필요하다. Ziebart 의 2008년 최대엔트로피 IRL 은 21장에서 본 것과 정확히 같은 답을 낸다: 시연을 설명하는 분포 중 가장 덜 확신하는(엔트로피가 가장 큰) 것을 골라라.

보상을 특징의 선형결합으로 둔다. r(s) = w · φ(s). 그러면 궤적의 수익은 w · Σt γtφ(st) = w · μ(τ) 로 특징기대 하나에 압축된다. 이제 궤적 위의 분포를 이렇게 둔다.

(27.7) P(τ) = 1Z(w) exp( w · μ(τ) ),    Z(w) = Στ exp( w · μ(τ) ) 21장 소프트 Q러닝의 π ∝ exp(Q/τ) 와 같은 형태다. 거기서는 엔트로피 정규화의 결과였고 여기서는 최대엔트로피 원리의 결과다 — 도착점이 같다. 이 분포 아래에서 전문가는 좋은 궤적을 더 자주, 하지만 결정론적이지 않게 고른다고 모형화된다.

w 는 시연의 로그가능도를 최대화해 정한다. 미분하면 놀랄 만큼 깨끗한 조건이 나온다.

1
ℒ(w) = Στ∈𝒟 log P(τ) = Στ∈𝒟 [ w·μ(τ) ] − N log Z(w)
2
∇w log Z = 1Z Στ exp(w·μ(τ)) μ(τ) = 𝔼Pw[ μ ]  — 로그분배함수의 기울기는 기대 특징이다(지수족의 표준 성질)
3
0 으로 놓으면 𝔼Pw[ μ ] = μ̂𝒟 — 모형의 기대 특징이 시연의 경험적 특징과 같아야 한다
4
이것을 특징 기대 일치(feature expectation matching)라 한다. Abbeel·Ng 의 2004년 도제학습은 여기서 한 걸음 더 간다: ‖μ(π) − μE‖ ≤ ϵ 이면 어떤 w(단 ‖w‖2 ≤ 1)에 대해서도 가치 차이가 ϵ 이하다. 코시-슈바르츠 한 줄이다
5
|w·μ(π) − w·μE| ≤ ‖w‖·‖μ(π) − μE‖ ≤ ϵ. 즉 참 보상이 무엇인지 몰라도 특징기대만 맞추면 전문가만큼 잘한다 ∎

4~5 번 줄이 모방학습 전체의 논리를 바꾼다. 보상을 정확히 알아낼 필요가 없다. 보상이 무엇이든 가치가 특징기대만의 함수라면, 특징기대를 맞추는 것으로 충분하다. 그런데 이 발상을 끝까지 밀면 특징도 필요 없어진다 — 바로 GAIL 이다.

GAIL: 점유분포를 직접 맞춘다

점유분포(occupancy measure) ρπ(s,a) 는 정책이 (s,a) 에 머무는 감가 빈도다. 세 가지 사실이 이 절의 전부다.

(27.8) ρπ(s,a) = (1−γ) ∞Σt=0 γt P(st=s, at=a | π)   ⟹   J(π) = 11−γ 𝔼(s,a)~ρπ[ r(s,a) ] 첫째, 정책과 점유분포는 일대일이다(Syed·Schapire 2008). π(a|s) = ρπ(s,a) / Σa′ρπ(s,a′) 로 되돌릴 수 있다. 둘째, 목적함수가 ρ 의 선형함수다. 셋째, 따라서 ρπ = ρE 이면 어떤 보상에 대해서도 J(π) = J(πE) 다.

셋째가 목표를 정해 준다. 보상을 추정할 이유가 없다. 점유분포를 맞추면 끝이다. 그리고 두 분포를 맞추는 법은 생성모형에서 잘 알려져 있다 — 판별기를 세워 구별하지 못하게 만든다.

(27.9) minπ maxD   𝔼(s,a)~ρπ[ log(1 − D(s,a)) ] + 𝔼(s,a)~ρE[ log D(s,a) ] − λH(π) GAN 의 목적식 그대로다. D 는 전문가에서 왔을 확률을 내놓고, π 는 D 를 속이려 한다. 마지막 항은 21장의 엔트로피 보너스 — 정책이 성급하게 결정론으로 굳는 것을 막는다.
1
π 고정, D 최적화. 각 (s,a) 마다 ρE log D + ρπ log(1−D) 를 D 로 미분해 0: ρED = ρπ1−D
2
풀면 D*(s,a) = ρE(s,a)ρE(s,a) + ρπ(s,a). 전문가만 가는 곳은 1, 정책만 가는 곳은 0, 똑같이 가는 곳은 0.5
3
D* 를 대입하면 목적식이 2·JS(ρπ ‖ ρE) − log 4 가 된다. 최소는 ρπ = ρE 에서 −log 4 ≈ −1.3863
4
π 를 어떻게 갱신하는가. 𝔼ρπ[log(1−D)] 를 최소화하는 것은 r̃(s,a) = −log(1 − D(s,a)) 를 보상으로 삼아 최대화하는 것과 같다
5
이 r̃ 를 들고 17~19장의 TRPO/PPO 를 그대로 돌린다. D 가 "전문가답다"고 판정할수록 큰 보상이다. 보상함수를 사람이 적는 대신 판별기가 매 스텝 새로 적어 준다
(27.10) r̃(s,a) = −log( 1 − D(s,a) ) ∈ [0, ∞)    ( D → 0 ⟹ r̃ → 0,   D → 1 ⟹ r̃ → ∞ ) 부호가 중요하다. r̃ ≥ 0 이므로 오래 사는 것이 이득이다 — 생존이 미덕인 과제(보행)에 맞는다. 반대로 r̃ = log D 를 쓰면 항상 음수라 빨리 끝내는 것이 이득이 되어 도달 과제에 맞는다. 이 선택이 암묵적으로 심는 편향을 생존 편향(survival bias)이라 하며, 과제에 맞춰 골라야 한다.

GAIL 이 IRL 과 다른 점은 보상을 남기지 않는다는 것이다. 학습이 끝나면 D 는 전문가와 정책을 구별하지 못하므로 D ≈ 0.5, 즉 r̃ ≈ log 2 로 평평해진다. 남는 것은 정책뿐이다. 원논문(Ho·Ermon, 2016)이 보고한 바로는 MuJoCo 연속제어 과제들에서 시연 궤적 몇 개만으로 전문가 수준에 도달했고, 같은 조건의 BC 는 훨씬 뒤처졌다. 대가는 환경 상호작용 — GAIL 은 안쪽에 정책경사 루프가 돌기 때문에 BC 보다 훨씬 많은 샘플을 쓴다.

ch27-d2
도해 2. 네 접근의 지도. 왼쪽으로 갈수록 싸고 오른쪽으로 갈수록 이론적 성질이 좋다. 가로축은 "무엇을 맞추는가", 아래 띠는 "무엇을 요구하는가". BC 만 환경 없이 되고, DAgger 만 전문가를 계속 필요로 한다. IRL 과 GAIL 은 요구 조건이 같지만 IRL 은 보상을 남기고 GAIL 은 남기지 않는다.
STEP 03

손으로 풀기: 제곱으로 자라는 손실과, 하나로 정해지지 않는 보상

계산 1 — O(εT2) 를 숫자로

모형을 다시 적는다. 길이 T 의 복도를 걷는다. 매 스텝 확률 ε = 0.01 로 전문가와 다른 행동을 한다. 한 번이라도 다르면 복도 밖으로 떨어져 복구할 수 없고, 그때부터 매 스텝 손실 1 을 받는다(복도 안에서는 손실 0). 유도 4번 줄의 닫힌 꼴을 쓴다.

J(T) = TΣt=1 [ 1 − (0.99)t−1 ] = T − 1 − (0.99)T0.01

T = 10 을 손으로 해 보자. (0.99)10 = 0.9043820751… 이므로 J(10) = 10 − (1 − 0.90438208)/0.01 = 10 − 9.5617924 = 0.4382076. 상한 εT(T−1)/2 = 0.01·10·9/2 = 0.45 와 거의 같다 — εT = 0.1 로 작기 때문이다.

복도 모형의 정확한 누적손실 (ε = 0.01) — 전부 rl27_hand.py 로 검산했다
T (1−ε)T 정확값 J(T) 상한 εT(T−1)/2 DAgger 급 εT J(T) / εT
10 0.904382 0.438208 0.4500 0.10 4.38배
50 0.605006 10.500607 12.2500 0.50 21.00배
200 0.133980 113.397967 199.0000 2.00 56.70배
1000 0.000043 900.004317 4995.0000 10.00 90.00배

표에서 읽어야 할 세 가지

(1) 제곱 성장. T 를 10 → 50 (5배)로 키우면 J 는 0.438 → 10.50 으로 약 24배 늘었다. 선형이면 5배여야 한다. 제곱이면 25배. 실제 24배는 제곱 쪽이다. 50 → 200 (4배)에서는 10.50 → 113.40 으로 10.8배 — 제곱(16배)보다는 작은데, 이 구간부터 (1−ε)T 가 0 에 가까워져 포화가 시작되기 때문이다. 포화 뒤에는 거의 모든 궤적이 이미 이탈해 있어 손실이 T 에 선형으로만 자란다(T=1000 에서 J ≈ T − 1/ε = 900).

(2) 상한의 쓸모. εT ≪ 1 인 T=10 에서는 상한 0.45 가 정확값 0.438 과 3% 차이다. T=200 에서는 199 대 113 으로 크게 벌어진다. 즉 O(εT2) 는 "아직 완전히 망가지기 전" 구간의 성장률을 정확히 잡는다.

(3) DAgger 와의 배수. 마지막 열이 J(T)/(εT), 즉 BC 가 DAgger 급 성능보다 몇 배 나쁜지다. T=10 이면 4.4배지만 T=200 이면 57배다. 근사식으로는 이 비율이 (T−1)/2 로 자란다 — T=10 에서 4.5, T=50 에서 24.5. 표의 4.38 과 21.00 이 그 근처다.

현장 감각으로 옮기면 이렇다. 5초짜리 집기 동작(50 스텝)이면 BC 는 그럭저럭 쓸 만하다. 20초짜리 조립 작업(200 스텝)이면 같은 ε 로도 손실이 100 스텝분을 넘는다 — 사실상 절반 이상을 망친 채로 끝난다는 뜻이다. BC 로 안 되는 과제는 대개 정확도가 부족해서가 아니라 지평이 길어서다.

계산 2 — 3상태 MDP 를 끝까지 푼다

비유일성을 확인하려면 먼저 정답이 있어야 한다. 손으로 풀 수 있는 가장 작은 순환 MDP 를 만든다. 상태 {0, 1, 2}, 행동 {a0, a1}, γ = 0.9, 전이는 결정론이다.

3상태 MDP — 전이 s′ 와 보상 R(s,a)
s a0 → s′ R(s,a0) a1 → s′ R(s,a1)
0 1 0.0 2 0.5
1 0 0.2 2 1.0
2 1 0.0 0 0.3

최적정책을 추측해 보자. 상태 1 에서 a1 은 즉시 1.0 을 주니 좋아 보인다. 상태 2 에서 a1 은 0.3 을 주지만 상태 0 으로 가고, a0 는 0 을 주지만 좋은 상태 1 로 간다. 여기가 갈리는 지점이다. π = (a1, a1, a0) 를 가정하고 벨만 방정식 세 개를 세운다.

1
V(0) = 0.5 + 0.9 V(2)  (상태 0 에서 a1: 보상 0.5, 다음 상태 2)
2
V(1) = 1.0 + 0.9 V(2)  (상태 1 에서 a1: 보상 1.0, 다음 상태 2)
3
V(2) = 0.0 + 0.9 V(1)  (상태 2 에서 a0: 보상 0, 다음 상태 1)
4
2·3 을 연립: V(1) = 1 + 0.9(0.9 V(1)) = 1 + 0.81 V(1) ⟹ V(1) = 10.19 = 10019 = 5.263158…
5
V(2) = 0.9 · 10019 = 9019 = 4.736842…,   V(0) = 0.5 + 0.9·9019 = 9.5 + 8119 = 90.519 = 4.763158…
6
가정을 검증한다. 각 상태에서 다른 행동이 정말 나쁜가. Q(0,a0) = 0 + 0.9V(1) = 4.736842 < 4.763158 = Q(0,a1) ✓   Q(1,a0) = 0.2 + 0.9V(0) = 4.486842 < 5.263158 ✓   Q(2,a1) = 0.3 + 0.9V(0) = 4.586842 < 4.736842 = Q(2,a0) ✓
(27.11) 19 Q* = [ 90.0   90.5 | 85.25   100.0 | 90.0   87.15 ],    π* = (a1, a1, a0) 소수로는 Q* = [[4.736842, 4.763158], [4.486842, 5.263158], [4.736842, 4.586842]]. 행 안의 여유 Q(s,a1) − Q(s,a0) 는 (+0.026316, +0.776316, −0.150000) 이고, 이 세 숫자가 정책을 결정한다. 상태 0 의 여유가 0.0263 으로 아슬아슬한 것에 주목하라 — 보상을 조금만 건드려도 뒤집힐 것 같다.

계산 3 — 퍼텐셜 정형화 불변성 검산

이제 아무렇게나 고른 Φ 를 넣는다. 성질 좋은 함수가 아니라 정말 제멋대로여야 정리의 힘이 보인다. Φ = (3, −2, 5) 로 두자. 부호도 크기도 가치와 아무 관계가 없다. 새 보상은 R′(s,a) = R(s,a) + 0.9·Φ(s′) − Φ(s) 다.

1
R′(0,a0) = 0 + 0.9·Φ(1) − Φ(0) = 0 + 0.9(−2) − 3 = −4.8
2
R′(0,a1) = 0.5 + 0.9·Φ(2) − Φ(0) = 0.5 + 4.5 − 3 = 2.0
3
R′(1,a0) = 0.2 + 0.9·Φ(0) − Φ(1) = 0.2 + 2.7 + 2 = 4.9  ·  R′(1,a1) = 1.0 + 4.5 + 2 = 7.5
4
R′(2,a0) = 0 + 0.9(−2) − 5 = −6.8  ·  R′(2,a1) = 0.3 + 0.9(3) − 5 = −2.0

보상이 완전히 달라졌다. 원래는 전부 [0, 1] 안의 작은 양수였는데 이제 −6.8 부터 +7.5 까지 퍼져 있고 음수가 셋이다. 보상만 보면 전혀 다른 과제다. 그런데 다시 풀면 이렇게 나온다.

정형화 전후 비교 — Φ = (3, −2, 5), γ = 0.9
s Q*(s,a0) Q*(s,a1) Q′*(s,a0) Q′*(s,a1) Q′ − (Q − Φ) 여유 Q(·,a1)−Q(·,a0)
0 4.736842 4.763158 1.736842 1.763158 0.000000 +0.026316 → +0.026316
1 4.486842 5.263158 6.486842 7.263158 0.000000 +0.776316 → +0.776316
2 4.736842 4.586842 −0.263158 −0.413158 0.000000 −0.150000 → −0.150000

표가 말하는 것

Q 는 정확히 Φ(s) 만큼 이동했다. 상태 0 의 행은 3 만큼 내려갔고(Φ(0)=3), 상태 1 의 행은 2 만큼 올라갔고(Φ(1)=−2), 상태 2 의 행은 5 만큼 내려갔다(Φ(2)=5). 여섯째 열 Q′ − (Q − Φ) 이 전부 0 이다 — 식 (27.6) 이 부동소수 오차 범위에서 정확히 성립한다(수치 검산에서 최대 절대오차 1.3 × 10−15).

행 안의 여유는 하나도 변하지 않았다. 마지막 열의 세 숫자가 그대로다. 이동량 Φ(s) 가 행동에 의존하지 않으므로 뺄셈에서 상쇄된다. 그래서 π′* = (a1, a1, a0) = π*.

가치의 절대 크기는 아무 의미가 없다. V* = (4.763, 5.263, 4.737) 이 V′* = (1.763, 7.263, −0.263) 이 되었다. 상태 2 의 가치가 음수가 되었지만 여전히 최적이다. 가치는 Φ 라는 임의의 기준점 위에서만 뜻을 갖는다.

계산 4 — 같은 최적정책을 주는 보상 세 개

식 (27.5) 의 세 변환을 실제로 적용해 서로 전혀 닮지 않은 보상함수 셋을 만든다. 원본까지 넷이다.

네 보상함수 — 값은 다르고 최적정책은 같다
보상 R(0,·) R(1,·) R(2,·) V* π*
R0 원본 0.0   0.5 0.2   1.0 0.0   0.3 (4.7632, 5.2632, 4.7368) (a1, a1, a0)
R1 = R0 + 2 2.0   2.5 2.2   3.0 2.0   2.3 (24.7632, 25.2632, 24.7368) (a1, a1, a0)
R2 = 4 R0 0.0   2.0 0.8   4.0 0.0   1.2 (19.0526, 21.0526, 18.9474) (a1, a1, a0)
R3 = R0 + F −4.8   2.0 4.9   7.5 −6.8   −2.0 (1.7632, 7.2632, −0.2632) (a1, a1, a0)

세 변환의 지문

상수 덧셈은 c/(1−γ) 만큼 평행이동. c = 2, γ = 0.9 이므로 2/0.1 = 20. 검산에서 Q1 − Q0 의 여섯 성분이 전부 정확히 20 이었다. 증명 1 의 1번 줄 그대로다.

양수배는 비례. Q2 / Q0 의 여섯 성분이 전부 정확히 4. 여유도 4배가 되므로 (+0.105, +3.105, −0.600), 부호가 같아 정책이 같다.

정형화는 행마다 다른 이동. 유일하게 상태별로 다른 양만큼 움직이는데도 정책이 보존된다. 앞의 둘은 "자명한" 자유도이고, 이것만이 |𝒮| 차원짜리 진짜 넓은 자유도다.

세 변환을 합치면 자유도는 1(상수) + 1(배율) + |𝒮|(퍼텐셜) 차원이다. 3상태 예에서 미지수는 |𝒮||𝒜| = 6 개인데 자유도가 5 차원이다. 시연에서 보상을 복원한다는 것이 어떤 일인지 보여 주는 숫자다.

덧붙여 R ≡ 0 도 여전히 답이다. 모든 Q 가 0 이라 모든 정책이 동률이고, 따라서 πE 도 최적이다. (27.4) 의 부등식을 등호로 만족시키는 퇴화 해이며, 이것을 배제하는 것이 IRL 알고리즘의 첫 임무다. Ng·Russell 의 원래 처방은 여유의 합을 최대화하는 것 — 전문가 행동과 차선 행동의 Q 격차가 가장 벌어지는 보상을 고른다. 최대엔트로피 IRL 은 다른 처방을 쓴다.

계산 5 — 최대엔트로피 IRL 의 특징 기대 일치

가장 작은 예로 (27.7) 의 조건이 무엇을 뜻하는지 본다. 궤적이 딱 둘뿐인 과제를 상상하자 — 길이 A 와 길이 B. 특징은 2차원 원핫이다.

μ(τA) = (1, 0),    μ(τB) = (0, 1)

전문가의 시연 100 개 중 70 개가 A, 30 개가 B 였다. 경험적 특징기대는 μ̂ = 0.7(1,0) + 0.3(0,1) = (0.7, 0.3) 이다. w = (w1, w2) 를 찾아야 한다.

1
(27.7) 에서 P(A) = ew1ew1 + ew2 — 소프트맥스다
2
특징 기대 일치 𝔼[μ] = μ̂ 는 여기서 P(A) = 0.7 과 같은 말이다
3
풀면 w1 − w2 = log 0.70.3 = log 73 = 0.8472979
4
차이만 정해진다. w = (0.8472979, 0) 도 답이고 w = (2.5472979, 1.7) 도 답이다. 검산에서 둘 다 (P(A), P(B)) = (0.7, 0.3) 을 정확히 재현했다
5
이 남는 자유도가 바로 상수 덧셈 불변성이다. 모든 궤적의 특징합이 1 로 같으므로 w 에 (c, c) 를 더하면 분자·분모가 같은 배수로 커져 상쇄된다

최대엔트로피의 원리적 의미를 이 예로 못 박자. 조건 P(A) = 0.7 을 만족하는 분포는 이 예에서 유일하지만, 궤적이 셋 이상이면 무수히 많다. 그중 엔트로피가 최대인 것을 고르는 것이 (27.7) 의 지수족 형태이고, 이는 "시연이 알려 준 것 이상은 아무것도 가정하지 않는다"는 뜻이다. 20장 최대엔트로피 RL, 21장 소프트 Q러닝과 같은 수학이 여기서는 전문가 모형으로 쓰인다 — 사람은 최적이 아니라 대체로 최적이며, 좋은 선택지를 지수적으로 더 자주 고른다는 모형이다.

계산 6 — GAIL 의 최적 판별기를 손으로

상태·행동이 넷뿐인 세계에서 점유분포를 직접 적는다. 전문가는 앞의 세 칸만 쓰고, 현재 정책은 네 칸에 흩어져 있다.

ρE = (0.5, 0.3, 0.2, 0.0),    ρπ = (0.2, 0.2, 0.2, 0.4)
최적 판별기와 그것이 만들어 내는 보상
칸 ρE ρπ D* = ρE/(ρE+ρπ) 보상 r̃ = −log(1−D*) 정책에 주는 신호
1 0.5 0.2 0.5/0.7 = 0.714286 1.252763 더 오라
2 0.3 0.2 0.3/0.5 = 0.600000 0.916291 조금 더 오라
3 0.2 0.2 0.2/0.4 = 0.500000 0.693147 = log 2 이미 맞다
4 0.0 0.4 0/0.4 = 0.000000 0.000000 가지 마라

3번 칸의 r̃ = log 2 = 0.693147 이 평형값이다. 만약 모든 칸에서 ρπ = ρE 라면 D* ≡ 0.5, 보상은 어디서나 log 2 로 평평해져 정책경사가 0 이 된다. 학습이 끝났다는 신호다. 반대로 4번 칸은 전문가가 한 번도 간 적 없는 곳이라 보상이 0 — 최저값이다. 정책은 여기를 떠나 1·2번 칸으로 질량을 옮긴다.

1
목적식의 값도 확인한다. 𝔼E[log D*] + 𝔼π[log(1−D*)] = −1.032553
2
이론값과 맞춰 본다. 2·JS(ρE‖ρπ) − log 4. 검산에서 JS = 0.176871 이므로 2(0.176871) − 1.386294 = −1.032553 — 소수 12자리까지 일치한다
3
극한을 본다. ρπ = ρE 이면 JS = 0 이고 목적식은 −log 4 = −1.386294. 지금 값 −1.032553 은 이보다 크므로 아직 구별 가능하다 — 판별기가 이기고 있다
4
정책의 목표는 이 값을 −1.386294 까지 끌어내리는 것이다. 미니맥스에서 minπ 쪽이 하는 일이 정확히 이것이고, 그 최소는 JS = 0, 즉 점유분포가 같을 때만 달성된다 ∎

2번 줄이 GAIL 의 정당성이다. 우리가 실제로 돌리는 것은 판별기와 정책의 줄다리기인데, 그것이 사실은 옌센-섀넌 발산의 최소화라는 깨끗한 목적을 풀고 있다. 그리고 (27.8) 에 의해 점유분포가 같으면 어떤 보상 아래에서도 성능이 같다. 보상을 한 번도 추정하지 않고 보상에 무관한 보장을 얻은 것이다.

STEP 04

코드: 절벽 격자에서 BC 가 무너지고 DAgger 가 고친다

4×8 절벽 격자(6장의 그 절벽걷기를 축소한 것)를 쓴다. 시작은 왼쪽 아래 (3,0), 목표는 오른쪽 아래 (3,7), 그 사이 아래줄 여섯 칸이 절벽이다. 전문가는 가치반복으로 얻은 최적정책이고, 실행할 때 확률 0.1 로 무작위 행동이 끼어든다 — 이것이 이탈의 씨앗이다. 절벽이 있으므로 한 번 벗어나면 회복이 아니라 즉시 실패다. 도해 1 의 모형이 그대로 구현된 셈이다.

rl27.pynumpy
import numpy as np
rng = np.random.default_rng(0)
# 4x8 절벽 격자: 시작 (3,0), 목표 (3,7), 아래줄 (3,1..6) 은 절벽(즉시 실패)
H, W, NA = 4, 8, 4                      # 0 위 1 아래 2 왼 3 오른
MOVE = [(-1,0),(1,0),(0,-1),(0,1)]
cliff = {(3,c) for c in range(1,7)}
goal, start = (3,7), (3,0)
S = [(r,c) for r in range(H) for c in range(W)]
idx = {s:i for i,s in enumerate(S)}
def step(s, a):
    r,c = s; dr,dc = MOVE[a]
    s2 = (min(H-1,max(0,r+dr)), min(W-1,max(0,c+dc)))
    if s2 in cliff: return s2, -100.0, True
    if s2 == goal:  return s2, 0.0, True
    return s2, -1.0, False
# 전문가 = 가치반복 최적정책 (gamma=0.99). Q[s,a] = r + gamma*V[s'] 를 수렴까지
gamma, V = 0.99, np.zeros(len(S))
for _ in range(3000):
    Q = np.array([[step(s,a)[1] + gamma*(0 if step(s,a)[2] else V[idx[step(s,a)[0]]])
                   for a in range(NA)] for s in S])
    V = Q.max(1); V[[idx[s] for s in cliff|{goal}]] = 0.0
expert = Q.argmax(1)                     # 상태별 전문가 행동
def rollout(policy, slip=0.1, T=40, s0=start, rng=rng):
    s = s0
    for t in range(T):
        a = policy(s)
        if rng.random() < slip: a = rng.integers(NA)   # 실행 잡음 = 이탈의 씨앗
        s, r, done = step(s, a)
        if s in cliff: return False, t+1, True         # 붕괴
        if s == goal:  return True, t+1, False
    return False, T, False
def demos(n, rng):                        # 무작위 시작점에서 전문가가 보여 준 (s, a)
    D = {}
    for _ in range(n):
        s = S[rng.integers(len(S))]
        while s in cliff or s == goal: s = S[rng.integers(len(S))]
        for _ in range(20):
            a = expert[idx[s]]; D[s] = a
            s, r, done = step(s, a)
            if done: break
    return D
def bc(D, rng):                           # 본 상태는 전문가 행동, 못 본 상태는 무작위
    guess = {s: int(rng.integers(NA)) for s in S}
    return lambda s: D.get(s, guess[s])

BC 를 이렇게 모형화한 이유를 밝혀 둔다. 여기서는 신경망 대신 사전(dict) 을 썼다. 본 상태에서는 전문가 행동을 그대로 내놓고, 못 본 상태에서는 무작위다. 신경망이 일반화를 하긴 하지만, 훈련 분포에서 멀어질수록 그 일반화가 무의미해진다는 사실은 26장에서 본 그대로다. 이 모형은 그 극단을 택해 공변량 이동만 분리해 보여 준다 — 근사 오차나 최적화 오차가 섞이지 않는다.

전문가 정책(성공률, 잡음 0.1) : 0.823
시연수  덮은상태/25   BC성공률   절벽추락률
    1        5.4      0.117       0.581
    2        7.3      0.160       0.600
    5       11.7      0.318       0.515
   10       15.5      0.522       0.388
   20       19.5      0.602       0.334
   40       23.1      0.735       0.243

출력 읽기

천장이 0.823 이다. 전문가조차 실행 잡음 0.1 때문에 82.3% 만 성공한다. 절벽 옆을 지나가야 하므로 무작위 행동 한 번이면 떨어진다. BC 를 평가할 기준선은 1.0 이 아니라 0.823 이다.

덮은 상태 수가 전부를 설명한다. 절벽과 목표를 뺀 자유 상태는 25 개다. 시연 1 개면 평균 5.4 개(22%)만 덮고 성공률은 0.117. 시연 40 개면 23.1 개(92%)를 덮고 성공률 0.735 로 전문가 천장에 다가간다. BC 의 성능은 "얼마나 잘 맞추는가"가 아니라 "얼마나 넓게 덮는가"의 함수다.

실패의 모양이 중요하다. 마지막 열은 절벽 추락률이다. 시연 1 개일 때 58.1% 가 추락한다 — 시간 초과가 아니라 파국이다. BC 는 "조금 덜 잘하는" 방식으로 실패하지 않는다. 데이터 밖 상태에 들어가는 순간 아무 행동이나 하고, 그중 하나가 절벽이다. 도해 1 의 눈덩이가 여기서는 한 번에 굴러떨어진다.

이제 DAgger 를 붙인다. 시연 2 개(성공률 0.16 수준)에서 출발해, 내 정책으로 굴린 뒤 그 상태들을 전문가에게 다시 묻는다.

rl27.py (이어서)DAgger 루프
r2 = np.random.default_rng(8)
D = demos(2, r2); p = bc(D, r2)
for rd in range(3):
    acc = np.mean([rollout(p, rng=r2)[0] for _ in range(400)])
    print(f"  라운드 {rd}  데이터 {len(D):3d}개 상태   성공률 {acc:.3f}")
    new = set()
    for _ in range(20):                       # 내 정책이 실제로 가는 곳을 수집
        s = start
        for t in range(40):
            new.add(s)
            a = p(s)
            if r2.random() < 0.1: a = r2.integers(NA)
            s, r, done = step(s, a)
            if done: break
    for s in new:                              # 전문가에게 라벨만 묻는다
        if s not in cliff and s != goal: D[s] = expert[idx[s]]
    p = bc(D, r2)
DAgger: 내 정책으로 굴리고, 지나간 상태를 전문가에게 다시 물어 데이터에 더한다 (시연 2개에서 출발)
  라운드 0  데이터   7개 상태   성공률 0.010
  라운드 1  데이터  16개 상태   성공률 0.385
  라운드 2  데이터  18개 상태   성공률 0.807
  라운드 3  데이터  20개 상태   성공률 0.828

두 라운드가 만든 차이

출발점은 7 개 상태, 성공률 0.010 이다. 시연 두 개가 하필 시작점 근처를 덮지 못해 거의 전멸이다. 라운드 1 에서 16 개, 라운드 2 에서 18 개, 라운드 3 에서 20 개로 늘고 성공률은 0.010 → 0.385 → 0.807 → 0.828 이 된다. 전문가 천장 0.823 을 이미 넘어섰다(표본 변동 범위 안이다).

결정적인 것은 어떤 상태가 추가되었는가다. 무작위로 13 개를 더 준 것이 아니라, 내 정책이 실제로 헤매던 칸을 준 것이다. 앞의 표에서 BC 가 20 개 시연(19.5 개 상태)으로 겨우 0.602 에 도달한 것과 비교하라. DAgger 는 20 개 상태로 0.828 이다. 같은 크기의 데이터라도 어느 분포에서 뽑았는가가 성능을 가른다.

이것이 (27.3) 의 O(εT2) → O(εT) 가 실제로 뜻하는 바다. BC 는 데이터를 늘려 모든 상태를 미리 덮으려 하고, DAgger 는 내가 갈 상태만 덮는다. 후자가 훨씬 적다.

마지막으로 같은 격자에서 퍼텐셜 정형화 불변성을 확인한다. Φ(s) = −(|행−3| + |열−7|), 즉 목표까지의 맨해튼 거리에 음수 부호를 붙인 것이다. 목표에 가까울수록 큰 값이니 그럴듯한 Φ 다. 단말 상태(절벽·목표)의 Φ 는 0 으로 둔다 — 유도 2번 줄의 γTΦ(sT) 항이 사라지려면 필요한 조건이다.

퍼텐셜 정형화 불변성 (같은 격자, Phi(s) = -|행-3| - |열-7| 로 목표까지 거리)
  정책 일치 상태수 : 25 / 25
  Q' - (Q - Phi) 최대절대오차 : 1.3322676295501878e-15
  V(start) = -7.7255   V'(start) = -0.7255   V-Phi = -0.7255

25 개 자유 상태에서 모두 최적행동이 같고, Q′ = Q − Φ 가 10−15 오차 안에서 성립한다. 시작 상태의 가치는 −7.7255 에서 −0.7255 로 정확히 7 만큼 올라갔는데, Φ(3,0) = −(0 + 7) = −7 이므로 V − Φ = −7.7255 + 7 = −0.7255 다. 값은 크게 달라졌지만 정책은 한 칸도 달라지지 않았다.

이 실험의 함의 — 순방향 RL 에도 쓸모가 있다

V′(start) = −0.7255 는 V(start) = −7.7255 보다 0 에 훨씬 가깝다. 정형화된 보상 아래에서는 목표에 다가가는 매 걸음이 즉시 γΦ(s′) − Φ(s) ≈ +1 의 보너스를 받기 때문이다. 원래 보상에서는 목표에 도달할 때까지 −1 만 계속 받았다. 즉 정형화는 보상을 조밀하게(dense) 만들어 학습을 쉽게 하면서도 최적해는 건드리지 않는다.

이것이 스텝 02 의 정리를 실무에서 쓰는 방식이다. "가까워지면 보너스"는 아무렇게나 주면 위험하다 — 목표 주위를 빙빙 도는 정책이 최적이 되어 버릴 수 있다. γΦ(s′) − Φ(s) 꼴로만 주면 그런 일이 원리적으로 일어나지 않는다.

STEP 05

시각화: 이동하는 가치, 줄다리기하는 두 신경망

도해 1 이 이 장의 문제를, 도해 2 가 답의 지도를 그렸다. 남은 세 그림은 앞의 두 단계에서 계산한 것을 눈으로 확인하는 것이다.

ch27-d3
도해 3. 계산 3 의 결과. 상태마다 두 행동의 Q 값을 원래(왼쪽 쌍)와 정형화 후(오른쪽 쌍)로 나란히 놓았다. 각 상태의 두 막대가 함께 −Φ(s) 만큼 움직인다 — 상태 0 은 3 내려가고, 상태 1 은 2 올라가고, 상태 2 는 5 내려가 음수가 된다. 가치의 절대 크기는 완전히 달라졌지만 어느 막대가 더 높은가는 세 상태 모두 그대로다. 그래서 최적정책이 보존된다.

도해 3 을 IRL 의 관점에서 다시 읽자. 우리에게 주어진 것은 정책, 즉 "각 상태에서 어느 막대가 더 높은가"뿐이다. 그 정보로는 막대의 절대 높이를 알 수 없다. Φ 를 바꿔 가며 세 쌍을 위아래로 마음대로 밀어도 시연은 똑같이 설명된다. 비유일성은 IRL 알고리즘의 결함이 아니라 문제 자체의 성질이다.

ch27-d4
도해 4. GAIL 의 미니맥스. 판별기는 두 출처를 구별하려 하고(maxw), 정책은 판별기를 속이려 한다(minθ). 판별기의 출력이 그대로 정책의 보상이 되므로, 사람이 적어야 했던 보상함수를 매 반복마다 판별기가 새로 적어 준다. 평형은 ρπ = ρE, 즉 D ≡ 0.5 이고 그때 보상은 어디서나 log 2 로 평평해진다 — 계산 6 의 3번 칸이 그 상태다.

도해 4 에서 위험 요소도 읽어야 한다. 보상이 학습 중에 계속 바뀐다. 지금까지 22장 동안 보상은 환경의 고정된 부품이었는데, 여기서는 상대 선수가 매 라운드 판을 다시 짠다. 정책이 개선되면 판별기가 더 예민해지고, 판별기가 너무 세지면 보상이 거의 전부 0 이 되어 경사가 사라진다. GAN 이 겪는 불안정이 그대로 온다. 그래서 실무에서는 판별기의 갱신을 일부러 약하게(작은 학습률, 적은 스텝) 가져가고 정책 쪽에는 신뢰영역(17장)을 씌운다.

ch27-d5
도해 5. 두 방법이 덮는 상태 분포. 왼쪽에서 실선 타원은 학습 데이터(dE), 점선 타원은 실제로 마주치는 분포(dπ)다. 겹치지 않는 초승달이 BC 가 무너지는 곳이다. 오른쪽에서는 라운드마다 dπ 의 표본에 전문가 라벨을 붙여 학습 분포를 넓히므로 초승달이 사라진다. 코드 실험에서 BC 는 상태 19.5 개로 성공률 0.602, DAgger 는 20 개로 0.828 이었다 — 같은 크기, 다른 분포다.

5부로 가는 다리

이 장은 5부의 문지방이다. 지금까지 보상은 환경이 주는 것이었고, 여기서 처음으로 보상을 우리가 마련해야 하는 문제를 만났다. 세 가지 답 모두 한 가지를 전제한다 — 전문가가 시연을 줄 수 있다. 그런데 대형 언어모형에서는 그것조차 어렵다. "가장 좋은 답변"을 사람이 써 줄 수는 있지만(그것이 지도 미세조정, SFT 다), 그것은 BC 이고 따라서 이 장의 모든 한계를 물려받는다. 사람은 자기가 쓸 수 있는 것보다 알아볼 수 있는 것이 훨씬 많다. 그러면 물음을 바꾸면 된다 — "무엇을 하겠는가" 대신 "이 둘 중 어느 쪽이 더 낫습니까".

비교 판단에서 보상함수를 세우는 것 — 그것이 28장 RLHF 의 첫 단계다. 그리고 그때 이 장의 두 결과가 곧바로 되살아난다. 첫째, 선호에서 얻은 보상도 상수 덧셈과 양수배가 결정되지 않는다(브래들리-테리 모형은 차이만 정한다). 둘째, 그 보상으로 정책을 최적화할 때 정책이 학습 분포 밖으로 나가면 보상모형이 헛소리를 하기 시작한다 — 26장의 외삽 오차와 이 장의 공변량 이동이 같은 자리에서 만난다. 29장의 KL 벌점이 그 처방이다.

이것만 기억하자

  1. BC 의 손실은 지평의 제곱으로 자란다. 스텝당 오류율 ε 가 누적 후회 O(εT2) 가 된다. ε=0.01 복도에서 T=200 이면 정확값 113.4 로, DAgger 급 εT = 2 의 56.7배다. 원인은 하나 — 학습 분포와 시험 분포가 다르고, 시험 분포를 내가 만든다.
  2. 시연은 보상함수를 결정하지 못한다. R + c, kR (k>0), 그리고 임의의 Φ 에 대한 γΦ(s′) − Φ(s) 가 모두 같은 최적정책을 준다. Q 는 Φ(s) 만큼 행 단위로 평행이동할 뿐이라 행 안의 순서가 보존되기 때문이다. R ≡ 0 도 항상 답이다.
  3. 점유분포를 맞추면 보상을 몰라도 된다. J(π) 가 ρπ 의 선형함수이므로 ρπ = ρE 이면 어떤 보상에서도 성능이 같다. GAIL 은 이것을 판별기로 푼다 — 최적 판별기는 ρE/(ρE+ρπ) 이고 목적식은 2·JS − log4 다.

흔한 오해

  1. "BC 는 데이터를 더 모으면 해결된다" — 부분적으로만 맞다. 실험에서 시연을 40배로 늘려도 성공률은 0.117 에서 0.735 로만 올랐고 전문가 천장 0.823 에 못 미쳤다. 더 근본적인 문제는 어느 데이터를 모으는가다. DAgger 는 상태 20 개로 0.828 에 도달했다 — BC 가 19.5 개로 얻은 0.602 와 같은 크기, 다른 분포다.
  2. "IRL 이 참 보상을 복원한다" — 복원할 수 없다. 자유도가 1 + 1 + |𝒮| 차원 남으며 이는 알고리즘의 한계가 아니라 정보의 한계다. IRL 이 실제로 하는 일은 "시연과 양립하는 보상들 중 어떤 기준(최대 여유, 최대 엔트로피)으로 하나를 고르는 것"이다.
  3. "보상 정형화는 편법이다" — γΦ(s′) − Φ(s) 꼴이라면 편법이 아니라 정리로 보장된 변환이다. 격자 실험에서 25/25 상태의 정책이 그대로였고 V(start) 만 −7.7255 → −0.7255 로 올라갔다. 위험한 것은 이 꼴을 벗어난 정형화다 — 그때는 목표 주위를 도는 정책이 최적이 될 수 있다.
  4. "GAIL 이 배운 판별기가 보상함수다" — 아니다. 판별기는 현재 정책과 전문가의 차이에 대한 함수라 정책이 바뀌면 의미가 바뀌고, 학습이 끝나면 D ≈ 0.5 로 평평해져 정보가 남지 않는다. 보상을 남기고 싶다면 AIRL 처럼 판별기를 f(s,a) = g(s) + γh(s′) − h(s) 로 퍼텐셜 형태를 명시적으로 분리해 설계해야 한다 — (27.6) 이 여기서 설계 원리로 다시 쓰인다.

댓글