본문 바로가기
Domain Knowledge/Reinforcement Learning

[6] TD Control : SARSA, Q-Learning (On-Policy, Off-Policy)

by hleej 2026. 4. 6.

[강화학습] 수업 요약
created: 2026-04-06
last modified: 2026-04-06

지난 시간에는 ExplorationExploitation의 차이에 대해 알아보고,

Monte Carlo Control 알고리즘인 GLIE $\epsilon$-greedy Control에 대해서 알아보았다. 

 

이번에는 Temporal DifferenceControl을 적용한 기법인,

SARSAQ-Learning에 대해 알아본다.

그리고 둘의 차이인 On-PolicyOff-Policy Learning에 대해서도 알아본다.

 

그리고, 마지막으로 여태까지 했던 것들을 요약하려고 한다.

 

 

1. Temporal Difference + Control

Control의 정의는 Policy를 통해 Action을 하고, 해당 Action에 의해 Environment 위에서 Status가 변화하는 것과 동시에, Reward를 받아, 다시 Policy를 update를 하는 것. 이라고 했다.

하지만 자세히 생각해 보면, Policy를 update하는 데 쓰던 기존의 State Value $v(S_t)$는 필요가 없다. 

[2]번 글에서 다뤘던 아래의 그림을 다시 보면, Policy를 update하는 데에 Policy보다 앞에 있는 State Value는 필요가 없다는 걸 알 수 있다.

우리는 Action Value $Q(S_t, A_t)$만 필요할 뿐이다.

 

 

따라서 [4]에서 살펴봤던 Temporal Difference

$\displaystyle V(S_t) \leftarrow V(S_t) + \alpha (R_{t+1} + \gamma V(S_{t+1}) - V(S_t) )$

에서 State Value $V(S_t)$ 대신에,

t번째 State $S_t$에서 Action $A_t$를 할 때의 Value인  Action Value $Q(S_t, A_t)$로 바꾼 식은

아래의 SARSA와 같다.

 

1.1. SARSA

$\displaystyle Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - V(S_t, A_t) )$

이 식에서 한 번 $Q$를 update할 때 필요한 Transition은 

$\{S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1}\}$이다. 이게 SARSA인 것이다.

 

기본 TD 식에서 value를 Action Value $Q(S_t, A_t)$로 바꿨으니,

아래처럼 TD의 변형들에도 Q를 적용할 수 있을 것이다.

1.1.1. n-step SARSA

기존의 n-step TD 식

$G_t^{(n)} = R_{t+1} + \gamma R_{t+2} + ... + \gamma^{n-1}R_{t+n}+\gamma^{n} V(S_{t+n})$

$\displaystyle V(S_t) \leftarrow V(S_t) + \alpha (G_t^{(n)} - V(S_t) )$

 

이를 아래와 같이 바꿀 수 있다. n-step Return $G_t^{(n)}$ 대신에 n-step Q-Return $q_t^{(n)}$ 로 나타낸다.

$q_t^{(n)} = R_{t+1} + \gamma R_{t+2} + ... + \gamma^{n-1}R_{t+n}+\gamma^{n} Q(s_{t+n})_t$
$\displaystyle Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (q_t^{(n)} - Q(S_t, A_t) )$

 

1.1.2. Backward-view SARSA(λ)

Forward-view SARSA(λ) 를 먼저 알아본다.

마찬가지로 기존의 λ-return TD

$\displaystyle G_t^\lambda = (1-\lambda)\sum_{n=1}^\infty \lambda^{n-1}G_t^{(n)}$

$\displaystyle V(S_t) \leftarrow V(S_t) + \alpha (G_t^{\lambda} - V(S_t) )$

 

이를 아래와 같이 바꿀 수 있다.

$\displaystyle G_t^\lambda = (1-\lambda)\sum_{n=1}^\infty \lambda^{n-1}q_t^{(n)}$

$\displaystyle Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (q_t^{\lambda} - Q(S_t, A_t) )$

하지만 Forward-view TD(λ)와 마찬가지로 잘 쓰지 않는다.

 

 

Backward-view SARSA(λ)

1. 모든 Eligibility Trace $E(S_t, A_t)$에 대해

$E(S_t, A_t) \leftarrow \gamma\lambda E(S_t, A_t)$ (과거 방문 내역을 조금 잊음)

2. 현재의 $(S_t, A_t)$에 대해

$E(S_t, A_t) \leftarrow E(S_t, A_t) +1$ (현재 방문 횟수를 추가함)

3. TD Error를 계산한다.

$\delta_t = R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t)$

4. Action Value를 Update한다.

$\displaystyle Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \delta_t E(S_t, A_t)$

 

아래와 같이 Action Value $Q(S_t, A_t)$, Eligibility Trace $E(S_t, A_t)$를 모두 2차원 배열로 관리하게 된다.

1.2. Q-Learning

On-Policy 알고리즘인 SARSA Off-Policy 버전 알고리즘이 바로 Q-Learning이다.

별로 어렵지 않다.

 

아래의 2. On-Policy & Off-Policy Learning 에서 나타난 식

$\displaystyle Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (R_{t+1} + \gamma Q(S_{t+1}, \mu{(S_t)}) - V(S_t, \pi{(S_t)}) )$

여기서 일반적으로 Target Policy $\mu$는 Greedy한  Policy를 쓰고, (Exploitation ↑)

Behavior Policy $\pi$는 덜 Greedy한 Policy를 쓴다. (Exploration ↑)

 

그 이유를 설명하자면,

$Q(S_t, A_t)$를 update할 때 $S_{t+1}$의 Value $Q(S_{t+1}, A_{t+1})$을 가져다 씀으로써 그 방향으로 update를 한다는 것은, $Q(S_{t+1}, A_{t+1})$가 더 학습 성능을 높이는 데 가까운, 더 좋은 Value라는 의미인데,

따라서 더 좋은 Value에는 Exploration 대신 Exploitation이 더 어울리기 때문이다.

 

그렇기 때문에 Target Policy에는 가장 Greedy한 max Q를 쓰는 경우가 많다.

$\displaystyle Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (R_{t+1} + \gamma \max_{a'}{(Q(S_{t+1}, a')} - V(S_t, \pi{(S_t)}) )$

 

2. On-Policy & Off-Policy Learning

결론부터 말해서,

Target Policy와 Behavior Policy가 같으면 On-Policy, ( μ = π )

Target Policy와 Behavior Policy가 다르면 Off-Policy이다. ( μ ≠ π )

 

Target Policy     $\pi_{target} = \mu$

학습에서 update할 Target이 되는, State $S_{t+1}$에서 하는 Action을 할 Policy.

Behavior Policy     $\pi_{behavior} = \pi$

학습에서 update할 지금의 State $S_t$에서 하는 Action을 할 Policy.

 

따라서 본래의 Temporal Difference Control

$\displaystyle Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - V(S_t, A_t) )$

에서 $A_{t+1}, A_t$ 를 각각  $\mu{(S_t)}, \pi{(S_t)}$ 라고 바꾸어 쓸 수 있다.

$\displaystyle Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha (R_{t+1} + \gamma Q(S_{t+1}, \mu{(S_t)}) - V(S_t, \pi{(S_t)}) )$

 

 

 


3. 여태까지 배웠던 것들의 요약

여태까지 배웠던, Markov Decision Process 위에서 학습(Value를 업데이트)하는 방법들을 모두 정리했다.

Q-Learning의 변종들은 안 나왔었지만, 일단 넣었다.

여담으로 Q(λ)는 학습이 잘 안 된다고 한다.