[강화학습] 수업 요약
created: 2026-05-21
last modified: 2026-05-21
기존 Actor Critic에, Entropy의 개념과 +α를 추가한 알고리즘이다.
26년 현재 아래(↓)와 같이 가장 대표적인 Model Free RL방법 중 하나로 평가받는다.
| 분야 | 알고리즘 | 장점 | 단점 | |
| Model -free |
On-policy | PPO | 어느 분야에서나 안정적으로 학습된다. 학습이 쉽다. |
sample 효율성이 나빠서(On-Policy) 많이 돌려야 한다. |
| Off-policy | SAC | 특히 Continuous한 환경에서 쓰며, Exploration이 잘 된다. (local optima에 덜 빠진다=global optima를 잘 찾는다.=최고의 성능을 얻을 수 있다.) | discrete 환경에서는 잘 안어울림 | |
| Off-policy | TD3 | Deterministic Policy이기 때문에 매우 정밀한 action에 어울린다. | exploration이 약함. |
0. Entropy
엔트로피에 대한 얘기를 먼저 하면, 한글로는 '불확실성'을 의미한다.

다양한 확률 분포를 나타낸 그래프이다.
초록색 그래프가 빨간 그래프보다 Entropy(불확실성)이 높다.
빨간색은 거의 확실하게 1번으로 뽑일 거고, 초록색은 {1,2, 3, 4} 중 뭐가 뽑힐 지 '불확실'하기 때문이다.
각 확률이 $p_i$이고, $\sum_{i}{p_i=1}$ 일 때, Entropy H는 아래와 같이 계산한다.
$\displaystyle \mathcal{H}(p_i) = -\sum_{i}{p_i \log p_i}$
1. SAC (Soft Actor Critic)
- Stochastic Policy
- Off-policy (Replay Buffer)
- Entropy Regularation -> 덕분에 안정적이고 exploration을 더 많이 한다.
1.1. Actor Loss ★
우선, 기존 Actor Critic의 Actor(Policy Network)의 Objective Function(Q Function)은 아래와 같았다.
$J(\theta) = \mathbb{E}[Q^\pi(s, a)]$
$\nabla_\theta J(\theta)=\mathbb{E}[\nabla_\theta \log \pi(a|s) \cdot Q^\pi(s, a)]$
위의 식은 Q Value $Q$를 최대화하는 것만이 목적이었다면, SAC는 여기에 Policy의 Entropy까지 최대화하고자 한다. hyperparameter $\alpha$로 연결한다.
$J(\theta)=\mathbb{E}\left[Q^\pi(s,a)+\alpha\mathcal{H}(\pi(\cdot|s))\right]=$ $\mathbb{E}\left[Q^\pi(s,a)-\alpha\log\pi_\theta(a|s)\right]$ $\left(\mathcal{H}(\pi)=-\sum\pi\log\pi=\mathbb{E} [\log\pi]\right)$이기 때문.
어떤 논문에서는 $J(\theta)=-L(\theta)$라고 최소화 문제로 접근하여, 위의 식에 부호를 뒤집기도 한다.
위를 미분하는 것은 아래의 1.1.1. 에서 계산해볼 것이다. 해보면 놀랍게도 Q Value의 Softmax가 된다.
위에서 $J(\theta)$를 $\mathbb{E}[Q]$ → $\mathbb{E}[Q-\alpha\log\pi]$ 로 바꿨는데, 사실 원래 이는 Value를 최대화하려는 것 ($V=\mathbb{E}[Q]$) 이었다. 따라서 SAC는 Value가 'Q-Value의 합 + Q-value확률의 Entropy'를 나타내게 된다.

결론적으로 SAC는 Policy의 Entropy도 같이 최대화하므로, Exploration을 더 많이 한다고 볼 수 있다.

위의 그림에서, 회색 그래프는 최적의 Policy의 Ground Truth이다.
왼쪽(red)은 Actor Critic인데, 가장 Q-Value가 큰 Policy만 주구장창 하는 Policy를 보이는데, 반대로 오른쪽(녹색)은 좀 더 고르게 해서 Ground Truth에 더 가까운 모습이다.
결론적으로, SAC의 Actor Network의 output은 Policy의 확률 $\pi$이고(stochastic policy),
Q value의 softmax로 weight를 update한다. (아래 1.1.1.에서 증명한다.)
1.1.1. Gradient of Actor Loss
이제 이 식의 최댓값을 구하기 위해, 미분해보자.
실제로 코드에 적용될 때는 이런 미분 없이, pytorch가 sampling으로 자동미분하므로, 그냥 수학적인 관찰이긴 하다.
$J(\theta)=\mathbb{E}\left[Q^\pi(s,a)-\alpha\log\pi_\theta(a|s)\right]$
계산의 편의를 위해 괄호는 잠시 모두 생략하겠다.
Expectation을 풀면 다시 확률 $\pi$가 나오므로 아래와 같이 전개 가능하다. 확률의 합은 1임을 잊지 말자.
$\displaystyle \sum_a \pi Q - \alpha \sum_a \pi log \pi$ subject to $\displaystyle \sum_a \pi=1$
제약조건이 있는 식을 그냥 최적화하기는 불편하므로, Lagrangian form으로 변환한다.
$\displaystyle \mathcal{L}=\sum_a \pi Q - \alpha \sum_a \pi log \pi -\lambda\left(\sum_a \pi-1\right)$
$J$를 최대화하는 $\pi$를 찾고싶으므로, $\pi$로 편미분한 뒤 0으로 둔다.
$\displaystyle \frac{\partial\mathcal{L}}{\partial\pi}=Q-\alpha(\log \pi + 1) - \lambda = 0$
위의 식을 $\pi$에 대해 정리한다.
$\displaystyle \pi=\exp\left(\frac{Q}{\alpha}\right)\cdot \exp\left(-1-\frac{\lambda}{\alpha}\right)$
여기서 $\exp\left(-1-\frac{\lambda}{\alpha}\right)$는 상수인데, 이를 처리하기 위해 $\sum\pi=1$이었던 조건을 다시 활용하자.
$\exp\left(-1-\frac{\lambda}{\alpha}\right)=C$ 로 두면,
$\displaystyle \sum_a\pi = \sum_a\left[ \exp\left(\frac{Q}{\alpha}\right)\cdot C\right]=1$,
$\displaystyle C=\frac{1}{\sum_a \exp(\frac{Q}{\alpha})}$
따라서 C를 원래 식에 적용하면, $\pi$가 아래의 값을 가질 때 $J$는 최대화된다.
$\pi(a|s) = \frac{\exp(\frac{Q(s, a)}{\alpha})}{\sum_{a'} \exp(\frac{Q(s, a')}{\alpha})}$
그런데 정말 놀라운 점은, 위의 식은 softmax와 같다! 사실 continous action space이기 때문에 ∑ 대신에 integral ( ∫)을 쓰는 게 더 맞다.
Policy가 Q의 softmax일 때가 최적이라니, 수학적으로 정말 아름다운 것 같다.
논문에서는 여기서 수학적으로 더 증명하기 위해 KL Divergence를 적용하여 policy π를 위의 식에 근사함으로써 update한다는 이야기를 한다.
$D_{KL}\left(\pi(\cdot | s) \left|\right| \frac{\exp(\frac{Q(s, a)}{\alpha})}{\sum_{a'} \exp(\frac{Q(s, a')}{\alpha})} \right)=D_{KL}\left(\pi(\cdot | s) \left|\right| \pi'(\cdot | s) \right)$
결론적으로는 다시 원래 Objective Function $J=\mathbb{E}\left[Q^\pi(s,a)-\alpha\log\pi_\theta(a|s)\right]$을 maximize한다는 얘기가 나오게 되는데, 이 부분은 생략한다.
1.1.2. Reparameterized Trick
기존의 Actor Critic을 비롯한 여러 stochastic policy 방법들에서,
Actor의 출력은 Policy(어떤 action을 할 지에 대한 '확률') $\pi$ 였고, 그 $\pi$로부터 Action a를 무작위 sampling해서 사용했었다.
$a \sim \pi_\theta(a|s)$
하지만 여기서 'random sampling' $sample(\mu_\theta, \sigma_\theta)$은 미분이 불가능한 계산이었다. 그 때문에 $J=\mathbb{E}[Q(s, a)]$ 를 직접 미분하지 못해 $\nabla_\theta J=\mathbb{E}[Q(s, a)\nabla_\theta\log\pi_\theta]$ 와 같이 log trick을 써서 $\pi$의 gradient를 구하는 간접적/우회적인 방법을 썼었다.
이렇게 직접적으로 구하지 못했기에, variance가 크다는 문제점이 항상 존재했었다.
SAC는 Reparameterized Trick을 통해 random sampling을 미분 가능하게 만들었다. 그 덕에 variance를 크게 줄일 수 있었다.
$a_t = f_\theta(\epsilon_t, s_t)=\mu(s_t) + \epsilon_t \sigma(s_t)$
gaussian인 확률 분포를 단지 mean에 std를 random하게 더한 것으로 생각하겠다는 뜻이다. 여기서 $\epsilon$은 0~1의 범위에서 무작위로 선택되는 값이다. 비록 여전히 $\epsilon$은 미분 불가능하긴 하지만, policy인 $\mu, \sigma$에 대해서는 미분이 가능해졌다.
따라서 Actor의 Loss에서 action a에 Reparameterize Trick을 적용함으로써, Q까지도 chain rule을 적용해 직접 미분할 수 있게 된다.
$J(\theta)=\mathbb{E}_\epsilon [Q(s, f_\theta(s, \epsilon)) - \alpha \log \pi( f_\theta(s, \epsilon)|s)]$
사실 Reparameterized Trick은 VAE(Variational Auto-Ecoder)같은 곳에서 쓰이는 방법이었는데, 간단하게 설명한다.

VAE도 Actor Critic 시리즈처럼 2개의 Network으로 구성되며, Encoder Network의 출력에서 random 연산을 거친 뒤, Decoder의 입력으로 들어간다. 여기서도 그냥 random operation을 적용하면 미분이 불가능하지만, Reparameterized Trick을 통해 μ와 σ 방향으로 gradient가 전달될 수 있다.
1.2. Critic Loss
위에서 $V=\mathbb{E}[Q-\alpha\log\pi]$ 라고 했으므로, Actor Critic에 있었던 다른 식들도 V를 모조리 이거에 맞게 바꿔줘야 한다. 다시 말하면 바꿔주기만 하면 되니 어렵지 않다.
Actor Critic에서 Critic의 Objective Function은 Q와 target Q'의 차이(MSE)를 최소화하려는 것이었다.
$\displaystyle L(\phi) = \frac{1}{2}\mathbb{E_\phi}\left[(Q_\phi(s_t, a_t)- Q_\phi(s_{t+1}, a_{t+1}) )^2\right]$
그런데 여기서 사실 Q'는 $Q_\phi(s_{t+1}, a_{t+1})=r_t+\gamma V_{\bar{\phi}}(s_{t+1})$와 같았다.. 맙소사!! V를 발견했다.
이제 SAC에서는 아래와 같이 식을 나타낼 수 있다.
$\displaystyle L(\phi)=\frac{1}{2}\mathbb{E}\left[\left(Q_\phi(s_t,a_t)-\left(r_t+\gamma\left(Q_{\bar{\phi}}(s_{t+1},a_{t+1})-\alpha\log\pi(a_{t+1}|s_{t+1})\right)\right)\right)^2\right]$
여기서 $\phi, \bar{\phi}$가 둘다 나오므로 Off-Policy이다. $Q_{\bar{\phi}}$를 가져오기 위해 Replay Buffer를 이용할 것이다.
거기에 SAC는 TD3의 핵심 아이디어 중 하나였던 Clipped TD Target 개념을 가져와 적용한다. Critic Network을 2개를 둔 뒤, 더 작은 Q Value를 골라서 update함으로써, Q value의 overestimation bias를 줄이는 역할이었다.
TD Target : $\hat{y} = r+\gamma \mathbb{E}\left[ \min_{i=1, 2}Q_{\bar{\theta}_i}(s_{t+1}, a) - \alpha \log(\pi(a|s_{t+1})) \right]$
Target Loss : $J(\theta)=\mathbb{E} [(Q_{\theta_1}(s_t, a_t)-y_t)^2+(Q_{\theta_2}(s_t, a_t)-y_t)^2]$
1.3. 결론
결론적으로 SAC는 아래와 같은 Network 구조를 가진다.

Pseudo Code는 아래와 같다.
1.4. SAC in discrete action space
추후 나온 논문에서는 Discrete Action Space에서 쓸 수 있게 개량된 SAC가 나왔다.
Network의 출력 형태가 조금 바뀌었으며, 그 외에도 몇몇 변화가 있긴 하지만 생략하겠다.

'Domain Knowledge > Reinforcement Learning' 카테고리의 다른 글
| [11] TRPO, PPO, GRPO (0) | 2026.05.07 |
|---|---|
| [10] DQN의 변종들 (Value Based) : DDQN / Dueling DQN / PER (0) | 2026.05.02 |
| [9] Actor Critic / A2C, A3C (0) | 2026.05.01 |
| [8] DQN (Deep Q Network) (0) | 2026.04.23 |
| [7] Policy gradient : REINFORCE (0) | 2026.04.14 |