Policy Gradient — 이기는 수의 확률을 높이기
강화학습의 핵심 알고리즘 — Policy Gradient.
📖 Policy Gradient 직관
한 게임에서:
- 흑이 둔 수들: a₁, a₂, ..., a_n
- 각 수에서 신경망이 출력한 확률: π(a₁|s₁), π(a₂|s₂), ...
- 게임 결과: R = +1 (이김) 또는 -1 (짐)
학습 신호:
- R = +1 (이김): 모든 수 a₁, ..., a_n의 확률을 ↑ (다음에도 그렇게 둬라)
- R = -1 (짐): 모든 수의 확률을 ↓ (다음에는 다르게 둬라)
📖 Policy Gradient 공식 (REINFORCE)
∇θ J(θ) = R · Σ ∇θ log π(aᵢ|sᵢ; θ)
"보상 R × 둔 수의 로그 확률 그래디언트의 합". 가중치 θ를 이 방향으로 갱신.
구현은 cross entropy loss의 변형:
- 이긴 게임: 둔 수를 정답으로 cross entropy minimize
- 진 게임: 둔 수를 정답으로 cross entropy maximize (음수 부호)
💡 직관적 비유 — 동물 훈련
강아지에게 트릭 가르치기:
- 잘 했으면 → 간식 (+) → 다음에 그 행동 더 자주
- 못 했으면 → 무시 (-) → 다음에 그 행동 덜 자주
Policy Gradient는 똑같은 메커니즘. 보상이 "간식"이고 그래디언트가 "다음에 더 자주" 신호.
차이: 동물은 한 번에 한 행동, 알파고는 한 게임에서 250 행동을 동시에 강화.
⚠️ Credit Assignment 문제
한 게임 250수에서 어떤 수가 진짜 승리 기여했는지 모름. 그냥 "다 같이 +1 또는 -1" 라벨.
이게 RL의 근본 문제 — "좋은 행동이 분명히 좋은데도 가끔 진 게임에서는 -로 학습됨". 통계적으로 평균만 맞으면 OK지만 노이즈가 큼.
해결: baseline 빼기. R 대신 (R - 평균 보상)을 사용 → 노이즈 ↓. AlphaGo Zero에서 value network를 baseline으로.