soft 가치: 보상에 엔트로피를 더하면
평균 에너지를 지키면서 엔트로피를 가장 크게 하면 그 승수가 역온도였다. 강화학습에서는 거꾸로 보상을 키우되 정책의 엔트로피에도 점수를 얹어 주는 경우가 있다. 좋은 행동을 찾되 한 행동으로 성급히 좁히지 않게 하려는 것이다. 그때 가장 좋은 정책은 어떤 모양이고, 엔트로피에 붙인 계수는 무슨 역할을 할까?
행동 셋 가운데 하나 고르기
게임 캐릭터가 갈림길에서 왼쪽, 가운데, 오른쪽 가운데 하나로 가야 한다고 하자. 강화학습에서는 행동을 고르는 쪽이 지금 처한 상황을 상태(state)라 하고, 상태마다 어떤 행동을 얼마의 확률로 고를지 정한 분포를 정책(policy)이라 한다. 지금까지의 경험으로 각 행동을 골랐을 때 앞으로 받을 보상을 어림한 값, 곧 행동 가치가 (1, 0.6, 0)이라고 하자. 행동 가치의 평균에 정책 엔트로피의 0.5배를 더한 점수로 세 정책을 견주어 보면 다음과 같다.
| 정책 | 행동 가치의 평균 | 엔트로피 (nat) | 점수 = 평균 + 0.5 × 엔트로피 |
|---|---|---|---|
| 늘 왼쪽 (1, 0, 0) | 1.000 | 0 | 1.000 |
| 고르게 (1/3, 1/3, 1/3) | 0.533 | 1.099 | 1.083 |
| (0.631, 0.284, 0.085) | 0.801 | 0.858 | 1.230 |
셋째 정책은 행동 가치를 0.5로 나눈 (2, 1.2, 0)에 softmax를 씌운 것이고, 어떤 정책을 넣어 보아도 이 점수는 1.230을 넘지 못한다. 가장 좋은 행동만 고집하지도, 아무렇게나 고르지도 않는 중간에 답이 있다.
한 상태에서 가장 좋은 정책
SAC(soft actor-critic, Haarnoja 외 2018)는 매 상태에서 보상과 함께 정책의 엔트로피를 α배 해서 더한 합을 최대화하는 강화학습 알고리즘이다. 상태 하나만 떼어 보면, 행동 가치가 Q(s, a)인 상태 s에서 ⟨Q⟩_π + αH(π)를 가장 크게 하는 정책을 찾는 문제다(정책은 흔히 π로 적는다. 원주율과 글자만 같다). 에너지를 −Q, 온도를 α로 두면 이것은 자유에너지를 가장 작게 하는 문제와 같고, 답은 볼츠만 분포이며 최댓값은 logsumexp다. 위 표의 1.230이 0.5 × ln(e² + e^1.2 + 1)이다.
soft 가치 (온도를 넣어 부드럽게 만든 가치, soft value)라 불리는 V(s)는 에너지 −Q, 온도 α인 계의 자유에너지에 마이너스를 붙인 것이다. α → 0이면 logsumexp가 max로 줄어들어 보통의 가치 max_a Q(s, a)가 되고, 온도가 있으면 똑같이 좋은 행동이 k개일 때 가치가 α ln k만큼 더 붙는다.
역사: 온도를 손으로 고르던 SAC
2018년 초에 나온 첫 SAC 논문은 α를 따로 두지 않고 보상에 곱하는 크기를 손잡이로 썼다. 보상을 몇 배 하는 것은 α를 그만큼 나누는 것과 같기 때문이다. 논문은 이 크기가 너무 크면 정책이 거의 한 행동에 몰려 탐색이 모자라고, 너무 작으면 정책이 고르게 퍼져 보상을 제대로 쓰지 못한다고 보고했다. 그래서 알맞은 크기를 환경마다 따로 골라야 했다. 같은 해 말 같은 연구진은 후속 논문 「Soft Actor-Critic Algorithms and Applications」에서 이 번거로움의 뿌리를 짚었다. 보상의 크기는 과제마다 다를 뿐 아니라, 같은 과제에서도 학습이 진행되어 정책이 나아지면 달라진다. 알맞은 온도도 따라서 바뀌므로 처음에 고른 값 하나로는 끝까지 맞출 수 없다. 그렇다고 상태마다 엔트로피를 한 값에 묶어 버리면, 좋고 나쁜 행동이 뚜렷한 상태에서도 억지로 이것저것 해 보게 된다.
ML에서: 온도를 제약의 승수로 두기
후속 논문은 문제를 거꾸로 세웠다. 상태마다가 아니라 평균으로 따진 정책의 엔트로피가 목표값 H̄(논문의 기호. 여기서 위줄은 평균이 아니라 목표라는 표시다) 이상이어야 한다는 제약 아래 보상을 최대화하고, 그 제약의 라그랑주 승수를 α로 삼는다. 논문은 α를 「온도의 역할을 하는 쌍대 변수(dual variable)」라고 부르고(쌍대 변수는 제약에 붙은 라그랑주 승수의 다른 이름이다), J(α) = ⟨−α ln π − αH̄⟩를 경사하강해 α를 정한다. 이렇게 하면 사람이 온도를 고르는 대신 목표 엔트로피 하나만 정하면 된다. 이 손잡이가 실제로 어느 쪽으로 움직이는지는 아래 문제에서 따져 본다.
문제 10. 온도를 스스로 맞추는 SAC
한 상태에서 행동 세 개의 가치가 Q = (2, 1, 0)이다. (가) 정책 π ∝ e^(Q/α)의 엔트로피가 목표값 H̄ = 0.8 nat이 되는 α와 그때의 정책, soft 가치 V를 구하라. (나) α = 0.2에서 시작해 J(α) = α(H(π) − H̄)를 경사하강하면 α는 오르는가, 내리는가? (다) 목표를 H̄ = 1.2 nat으로 두면 어떻게 되는가? (풀어 본 뒤 위젯 3의 「문제 10 불러오기」로 확인해 보자.)

α = 1이면 정책이 (0.665, 0.245, 0.090)이고 엔트로피가 0.832예요. 목표 0.8보다 크니까 엔트로피를 줄이려면… α를 올리면 되겠죠. 온도가 올라가면 더 차분해지니까요.

α = 2에서 엔트로피를 계산해 볼래요?

(0.506, 0.307, 0.186)이고 엔트로피가 1.020이에요. 어? 0.832보다 커졌어요.

α가 커지면 Q/α끼리의 차이가 줄어드니까 정책이 고르게 퍼지는 거야. 엔트로피를 0.8로 낮추려면 α를 1보다 조금 내려야 해.

아, 차분해지는 건 온도를 낮출 때였죠. 다시 풀면 α = 0.929에서 엔트로피가 정확히 0.8이고, 정책은 (0.686, 0.234, 0.080), soft 가치는 0.929 × ln Σe^(Q/0.929) = 2.350이에요. 이 정책으로 얻는 가치의 평균은 1.606으로 가장 좋은 행동의 2보다 낮지만, 엔트로피 0.8에 온도 0.929를 곱한 0.743이 더해져서 2보다 커졌어요.

이제 답을 모른다고 치고, α = 0.2에서 시작해 경사하강에 맡기면 α는 어느 쪽으로 움직일까요?

α = 0.2면 정책이 (0.993, 0.007, 0.000)으로 거의 한 행동에 몰려서 엔트로피가 0.041이에요. J를 α로 미분하면 H − H̄ = 0.041 − 0.8로 음수니까, 경사하강으로 빼면 α가 올라가요. log α에서 매번 (H − H̄)를 빼 갔더니 α가 0.2, 0.427, 0.675를 거쳐 스무 걸음 안에 0.929에 멈췄어요. 엔트로피가 모자라면 온도를 올리고 넘치면 내리는 거니까, 진짜 온도 조절기네요.

평균 에너지를 묶었을 때는 승수가 역온도였는데, 엔트로피를 묶으니까 승수가 온도예요. 무엇을 제약으로 두고 무엇을 최적화하느냐만 바뀐 같은 문제네요. (다)는… 행동이 세 개면 엔트로피가 ln 3 = 1.099를 넘을 수 없어요. 1.2는 어떤 정책으로도 못 맞춰요.

그럼 α는 어떻게 되죠?

엔트로피가 늘 목표보다 작으니까 기울기가 늘 음수고, α가 끝없이 올라가요. 제약을 지킬 수 없으면 승수가 무한대로 달아나는 거네요. 주사위 평균을 6.2로 잡았을 때 승수가 끝없이 커지던 것과 같아요.

그래서 목표 엔트로피는 도달할 수 있는 값으로 골라야 해요. SAC 논문은 연속 행동에서 목표를 행동 차원 수에 마이너스를 붙인 값으로 둬요. 연속 분포의 엔트로피는 음수도 될 수 있어서 그 정도는 넉넉히 도달할 수 있거든요.