연봉 이야기는 느낌이니, 정책이 행동 a를 확률 π(a)로 고르고 보상 r(a)를 받는 구조로 따져 보자. 평균 보상을 올리고 싶으면 평균 보상의 그래디언트가 필요하고, 그 그래디언트는 행동마다 ∇π(a) · r(a)를 모두 더한 값이다. 그런데 모든 행동을 다 해 볼 수는 없고, 손에 있는 것은 정책이 실제로 고른 행동 몇 개뿐이다. 그 샘플의 평균으로 합을 추정하려면, 각 항을 그 행동이 뽑힐 확률로 나눠 두어야 한다. 드물게 뽑히는 행동은 드물게 나오는 만큼 크게 쳐 주어야 합이 맞기 때문이다.
가운데 식에서 π를 곱하고 나눈 것은 합을 "π에서 뽑은 샘플의 평균"으로 바꾸기 위해서다. 남은 ∇π/π가 바로 ∇log π다. 로그는 편하려고 붙인 것이 아니라, 샘플로 그래디언트를 추정하려면 반드시 붙는다. 희귀한 행동의 신호가 커지는 것은 그 결과다.
ML에서: 정책 그래디언트와 기준값
스코어 함수 ∇_θ log p(x|θ)는 "파라미터를 살짝 바꿨을 때, 이 데이터가 나올 확률이 비율적으로 얼마나 변하는가"를 잰다. 정책 그래디언트 ∇_θ log π(a|s)에서는, π(a|s) = 0.001인 희귀 행동이 큰 보상을 줬을 때 ∇π로는 신호가 묻히지만 ∇log π = ∇π / π 에서는 작은 π로 나눠지면서 신호가 증폭된다. “희귀하지만 좋았던 행동을 놓치지 않는 장치.”
강화학습은 흔히 보상을 그대로 쓰지 않고, 평균 보상 같은 상수(기준값)를 뺀 뒤 그래디언트를 추정한다. 보상을 바꾸면 그래디언트도 바뀌지 않을까, 그런데도 왜 기준값을 빼는 걸까? 빼도 되는지와 빼서 무엇을 얻는지는 아래 문제 12에서 직접 셈해 본다.
파이썬
행동이 둘인 밴딧(한 번 고르고 보상을 받는 가장 단순한 강화학습 문제)에서 softmax 정책의 한 로짓 z만 움직인다. 희귀한 행동일수록 ∇π는 사라지고 ∇log π는 1 근처에 남는다.
π가 작아질수록 ∂π/∂z는 π와 함께 0으로 사라지지만, ∂log π/∂z는 1 근처에 남는다. 두 곡선의 세로 간격이 곧 1/π배다.
정보기하학과의 연결
이 장에서 우리는 ∇log p의 분산이 피셔 정보임을 보았다. 피셔 정보 행렬 = E[∇log p · ∇log pᵀ]. “∇log p가 재료라면, 그 재료로 만든 분산이 파라미터 공간의 계량이 된다.” 그리고 피셔 계량으로 잰 같은 크기의 스텝 가운데 손실을 가장 많이 줄이는 방향으로 가는 것이 자연 그래디언트(natural gradient)다.
이 절의 결론
“확률의 그래디언트에 log가 붙는 것은, 정책이 뽑은 샘플로 모든 행동에 대한 합을 추정하려면 뽑힐 확률로 나눠야 하기 때문이다. ∇log π = ∇π/π가 그 나눗셈이고, 희귀한 행동의 신호가 커지는 것은 그 결과다. ∇log p의 분산이 피셔 정보이고, 피셔 정보가 이 장의 계량이다.”
문제 11. 같은 0.01%p, 다른 뉴스
두 뉴스가 있다. 어느 희귀병에 걸릴 확률이 0.10%에서 0.11%로 올랐고, 감기에 걸릴 확률이 30.00%에서 30.01%로 올랐다. (가) 두 경우 모두 확률은 0.01%p 올랐다. 인구 100만 명인 도시에서 환자는 각각 몇 명 늘어나는가? (나) 길에서 그 병에 걸린 사람 한 명을 만났다. 이 한 사람은 "확률이 올랐다"는 쪽을 "그대로다"는 쪽보다 몇 배 더 지지하는가(두 확률의 비)? (나)에서 구한 두 확률의 비의 자연로그는 얼마인가? (다) (나)의 로그 값을 확률의 변화 0.0001로 나누고, 1/(원래 확률)과 비교하라.
희귀병과 감기에 걸릴 확률이 같은 0.01%p만큼 오른 두 뉴스
함께 풀기
김민준
(가)는 100만 × 0.0001 = 100명씩이에요. 늘어난 환자 수가 똑같으니 같은 크기의 뉴스죠.
로그 확률의 변화를 확률의 변화로 나눈 거니까… d log p/dp를 근사한 거예요. 그게 1/p고요.
김민준
그럼 희귀병만 953으로 조금 어긋난 건?
이서연
0.0001이 원래 확률의 10%라서, 아주 작은 변화라고 보기 어려워서야.
선생님
그래요. 확률의 그래디언트에 1/p를 곱하면, 드문 일에서 생긴 작은 변화가 크게 드러나요. ∇log π가 하는 일이 이거예요.
김민준
10점 받던 친구가 11점을 받은 것과 90점 받던 친구가 91점을 받은 걸 똑같이 "1점 올랐다"고 보고서에 쓰면 안 되는 거랑 같네요.
문제 12. 기준값을 빼도 되는가
행동이 둘인 밴딧에서 정책이 행동 1을 확률 π₁ = 0.2로, 행동 2를 0.8로 고른다(행동 1의 로짓 z 하나로 정해지는 softmax 정책). 행동 1의 보상은 3, 행동 2의 보상은 1이고, 행동을 하나 뽑아 g = (r − b) × ∂log π/∂z로 그래디언트를 추정한다. 여기서 ∂log π₁/∂z = 1 − π₁, ∂log π₂/∂z = −π₁이다. (가) b = 0일 때 두 행동에서 g는 각각 얼마이고, g의 평균과 분산은 얼마인가? 평균이 평균 보상 3π₁ + 1 × (1 − π₁)을 z로 미분한 참 그래디언트와 같은지 확인하라. (나) b = 1.4(평균 보상)일 때 같은 것을 구하라. (다) b = 10이면 어떻게 되는가? b는 어떻게 고르는 것이 좋은가?