ai theory

강화학습 기초 (4) - 지금 이 상태는 얼마나 좋은가?

Junyoung Park · 2024-04-05 · 7 min

들어가며...

세 번째 글에서 MDP를 강화학습의 문제지라고 불렀다. State, Action, Transition probability, Reward, Discount factor를 적으면 Agent가 어떤 세계에서 어떤 선택을 해야 하는지 표현할 수 있었다.

그런데 문제지를 적었다고 답이 바로 나오지는 않는다. DESK, CAFE, HOME 중 어디가 좋은 State인지, DESK에서 STUDY와 LEAVE 중 어떤 Action이 나은지 판단할 숫자가 필요하다.

당장의 Reward만 보면 간단해 보인다. Reward가 가장 큰 State나 Action을 고르면 될 것 같다. 하지만 첫 글에서 살펴봤듯이 강화학습의 목표는 한 번의 Reward가 아니라 미래 Reward를 합한 Return을 크게 만드는 것이다.

예를 들어 지금 한 칸 움직일 때 1-1을 받더라도 그 길 끝에 +10+10인 출구가 있을 수 있다. 반대로 지금 +3+3을 받는 길이 몇 Step 뒤의 20-20으로 이어질 수도 있다. 현재의 좋고 나쁨은 바로 다음 Reward만으로 결정되지 않는다.

그래서 강화학습은 Value function을 사용한다. 이번 글에서는 Value를 계산하기 전에 다음 세 단어부터 정확히 분리해보려고 한다.

  • Reward: 방금 받은 한 번의 숫자
  • Return: 한 경로에서 실제로 쌓인 미래 Reward의 합
  • Value: 같은 상황을 여러 번 겪었을 때 기대하는 Return의 평균

Reward, Return, Value를 영수증으로 구분하기

Reward Rt+1R_{t+1}은 시간 tt에 Action을 한 뒤 Environment가 돌려준 한 Step의 숫자다.

Rt+1=+2R_{t+1}=+2

Return GtG_t는 시간 tt부터 실제로 받은 Reward를 Discount해서 모두 더한 값이다.

Gt=Rt+1+γRt+2+γ2Rt+3+G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \cdots

앞으로 받은 Reward가 +2+2, 00, +5+5이고 γ=0.9\gamma=0.9라면,

Gt=2+0.9×0+0.92×5=6.05G_t = 2 + 0.9 \times 0 + 0.9^2 \times 5 = 6.05

여기까지는 한 번 실제로 지나간 경로의 결과다. 그런데 같은 State에서 시작해도 Policy가 다른 Action을 고르거나 Environment가 다른 Next State를 만들 수 있다. 어떤 Episode에서는 Return이 6.056.05, 다른 Episode에서는 2-2, 또 다른 Episode에서는 1010일 수 있다.

Value는 이 여러 가능한 Return을 평균적으로 얼마나 기대하는지 나타낸다.

Reward는 한 번의 결제, Return은 한 경로의 합계, Value는 가능한 여러 합계에 대한 기대값이다.

한 번의 영수증이 유난히 비쌌다고 그 가게의 평균 가격이 항상 비싼 것은 아니다. Value도 마찬가지다. 한 Episode에서 높은 Return을 얻었다고 그 State의 Value를 바로 높은 숫자로 확정할 수 없다. 여러 경로가 얼마나 자주 나타나는지까지 함께 고려해야 한다.

Expectation은 아직 보지 못한 미래의 평균이다

State value function은 다음과 같이 정의한다.

vπ(s)=Eπ[GtSt=s]v_\pi(s) = \mathbb{E}_\pi \left[ G_t \mid S_t=s \right]

기호를 한 번에 읽으려고 하면 막막해지므로 안쪽부터 살펴보자.

  • St=sS_t=s: 지금 State가 ss라는 조건
  • GtG_t: 지금부터 쌓일 Discounted return
  • Eπ\mathbb{E}_\pi: Policy π\pi를 따랐을 때 가능한 결과의 평균
  • vπ(s)v_\pi(s): 그 평균을 State ss에 붙인 값

문장으로 바꾸면 다음과 같다.

State ss에서 시작해 Policy π\pi를 계속 따를 때, 앞으로 받을 Return의 기대값.

Expectation은 단순히 Reward 숫자를 더한 뒤 Episode 개수로 나누는 계산만을 뜻하지 않는다. Policy가 어떤 Action을 고를지에 대한 불확실성과 Environment가 어떤 Next State를 만들지에 대한 불확실성을 모두 평균낸다.

예를 들어 State ss에서 다음 두 경로만 가능하다고 하자.

  • 확률 0.70.7로 Return 55
  • 확률 0.30.3으로 Return 1-1

그러면 Value는 다음과 같다.

vπ(s)=0.7×5+0.3×(1)=3.2\begin{aligned} v_\pi(s) &= 0.7 \times 5 + 0.3 \times (-1) \\ &= 3.2 \end{aligned}

Value가 3.23.2라고 해서 실제 Episode에서 3.23.2라는 Return을 반드시 받는 것은 아니다. 실제 결과는 55 또는 1-1이다. 3.23.2는 같은 상황을 여러 번 반복했을 때 평균적으로 기대하는 값이다.

아래첨자 π는 장식이 아니다

vπ(s)v_\pi(s)에서 π\pi를 빼고 v(s)v(s)라고 적는 경우도 많다. 문맥에서 Policy가 이미 정해져 있으면 간단히 생략하는 것이다. 하지만 Value가 Policy에 따라 달라진다는 사실은 잊으면 안 된다.

DESK State에서 다음 두 Action이 있다고 하자.

  • STUDY: 장기적으로 기대하는 Return이 66
  • LEAVE: 장기적으로 기대하는 Return이 22

항상 STUDY를 고르는 Policy 아래에서는 DESK의 Value가 66에 가깝다. 두 Action을 절반씩 고르는 Policy라면 Value는 대략 44가 된다.

0.5×6+0.5×2=40.5 \times 6 + 0.5 \times 2 = 4

State가 그대로여도 Policy가 바뀌면 미래에 지나갈 경로가 달라지고, 따라서 Value도 바뀐다.

State value는 State 혼자의 점수가 아니라, 그 State에서 앞으로 어떤 Policy를 따를지까지 포함한 점수다.

이 때문에 Policy를 비교할 때 Value function이 유용하다. 같은 MDP에서 Policy A의 vA(s)v_A(s)와 Policy B의 vB(s)v_B(s)를 비교하면 어느 Policy가 그 State 이후의 미래를 더 잘 만드는지 판단할 수 있다.

Action value: 이 행동부터 시작하면 얼마나 좋을까?

State value가 “이 State에 있는 것이 얼마나 좋은가?”에 답한다면, Action value는 질문을 한 단계 더 구체적으로 만든다.

qπ(s,a)=Eπ[GtSt=s,At=a]q_\pi(s,a) = \mathbb{E}_\pi \left[ G_t \mid S_t=s, A_t=a \right]

문장으로 읽으면 다음과 같다.

State ss에서 Action aa를 먼저 한 뒤, 그다음부터 Policy π\pi를 따를 때 기대하는 Return.

vπ(s)v_\pi(s)는 현재 State에서 Policy가 고를 여러 Action까지 평균낸 값이다. 반면 qπ(s,a)q_\pi(s,a)는 첫 Action을 aa로 고정하고 그 이후의 미래를 평균낸다.

예를 들어 DESK에서 Policy가 STUDY를 0.70.7, LEAVE를 0.30.3의 확률로 고르고,

qπ(DESK,STUDY)=6q_\pi(\text{DESK},\text{STUDY})=6 qπ(DESK,LEAVE)=2q_\pi(\text{DESK},\text{LEAVE})=2

라면 State value는 Action value를 Policy의 확률로 평균낸 값이다.

vπ(DESK)=0.7×6+0.3×2=4.8\begin{aligned} v_\pi(\text{DESK}) &= 0.7 \times 6 + 0.3 \times 2 \\ &= 4.8 \end{aligned}

일반적으로는 다음과 같이 쓴다.

vπ(s)=aAπ(as)qπ(s,a)v_\pi(s) = \sum_{a \in \mathcal{A}} \pi(a \mid s) q_\pi(s,a)

수식의 오른쪽은 각 Action의 qπ(s,a)q_\pi(s,a)에 Policy가 그 Action을 선택할 확률을 곱해 모두 더한 것이다.

Gridworld에서 Value를 읽는 방법

Gridworld의 각 칸을 State라고 하자. 오른쪽 위의 출구는 +10+10, 오른쪽 아래의 구덩이는 10-10이고 Agent는 상하좌우로 움직인다.

State value는 칸 전체에 붙은 기대값이고, Action value는 그 칸에서 고를 방향마다 따로 붙는 기대값이다.

출구 바로 옆 State는 당장 Reward가 00이어도 높은 Value를 가질 수 있다. 다음 Action으로 출구에 도착할 가능성이 크기 때문이다. 구덩이 가까이에 있는 State는 현재 아무 벌점이 없어도 Value가 낮을 수 있다.

그림 오른쪽처럼 한 State에서 방향별 Action value가 다음과 같다고 하자.

  • 위쪽: qπ(s,)=7.2q_\pi(s,\uparrow)=7.2
  • 오른쪽: qπ(s,)=6.1q_\pi(s,\rightarrow)=6.1
  • 왼쪽: qπ(s,)=2.8q_\pi(s,\leftarrow)=2.8
  • 아래쪽: qπ(s,)=1.3q_\pi(s,\downarrow)=1.3

Value만 보면 현재 칸이 평균적으로 얼마나 좋은지 알 수 있다. Q값까지 보면 어느 방향이 그 좋은 미래로 이어지는지 알 수 있다.

Environment model을 알고 있다면 vπ(s)v_\pi(s)와 Transition probability를 이용해 각 Action을 한 Step 미리 계산할 수 있다. 하지만 Model을 모르는 상황에서는 어떤 Action을 했는지 함께 기록한 qπ(s,a)q_\pi(s,a)를 경험으로 직접 학습하는 편이 훨씬 편하다. 뒤에서 SARSA와 Q-Learning이 State value가 아니라 Action value를 업데이트하는 이유다.

Optimal value는 가능한 Policy 중 가장 좋은 미래다

지금까지의 Value에는 특정 Policy π\pi가 붙어 있었다. 가능한 모든 Policy 중 가장 높은 Value를 만드는 경우를 Optimal value라고 한다.

v(s)=maxπvπ(s)v_*(s) = \max_\pi v_\pi(s) q(s,a)=maxπqπ(s,a)q_*(s,a) = \max_\pi q_\pi(s,a)

q(s,a)q_*(s,a)를 정확히 알고 있다면 State ss에서 가장 큰 Q값을 가진 Action을 고르면 된다.

π(s)=argmaxaq(s,a)\pi_*(s) = \arg\max_a q_*(s,a)

max\max는 가장 큰 값 자체를 가져오고, argmax\arg\max는 그 가장 큰 값을 만든 Action을 가져온다.

예를 들어 Q값이 STUDY 66, LEAVE 22, WORK OUT 44라면,

maxaq(s,a)=6\max_a q_*(s,a)=6

이고,

argmaxaq(s,a)=STUDY\arg\max_a q_*(s,a)=\text{STUDY}

다. 값과 행동을 구분하기 위한 작은 표기 차이지만 뒤에서 계속 등장한다.

Value는 Reward가 아니다

처음에는 Reward와 Value가 모두 State 옆에 적힌 숫자라서 자주 섞인다. 다음 세 가지를 다시 확인해두면 좋다.

Reward가 높아도 Value는 낮을 수 있다

지금 +5+5를 받지만 이후 매 Step 10-10으로 이어지는 State라면 장기 Value는 낮다.

현재 Reward가 없어도 Value는 높을 수 있다

출구 한 칸 전 State는 지금 Reward가 00이어도 곧 +10+10을 받을 가능성이 높다.

Value는 관측된 한 번의 결과가 아니다

Return은 한 Episode에서 실제로 얻은 결과고, Value는 가능한 여러 Return의 기대값이다.

결국 Reward는 Environment가 돌려준 Data고, Value는 Agent가 미래를 판단하기 위해 알고 싶거나 추정해야 하는 값이다.

이번 글에서 기억할 것

이번 글의 내용을 한 문장으로 줄이면 다음과 같다.

Value는 특정 State 또는 State-Action에서 시작해 Policy를 따랐을 때 받을 Return의 기대값이다.

조금 더 나누면 다음과 같다.

  1. Reward는 한 Step의 숫자다.
  2. Return은 한 경로에서 실제로 쌓인 Discounted reward의 합이다.
  3. vπ(s)v_\pi(s)는 State ss에서 Policy π\pi를 따를 때 기대하는 Return이다.
  4. qπ(s,a)q_\pi(s,a)는 State ss에서 Action aa를 먼저 한 뒤 기대하는 Return이다.
  5. 같은 State도 Policy가 달라지면 Value가 달라진다.
  6. max\max는 가장 큰 값, argmax\arg\max는 그 값을 만드는 Action을 뜻한다.

Value의 정의는 알게 됐지만 아직 계산이 남았다. 미래가 열 Step, 백 Step 이어진다면 가능한 모든 Return을 매번 끝까지 펼쳐야 할까?

다음 글에서는 긴 미래를 “바로 다음 Reward와 Next State 이후의 Value”로 접는 Bellman Equation을 살펴본다. 이 한 줄이 Policy Evaluation, Policy Iteration, Value Iteration으로 어떻게 이어지는지도 함께 정리할 예정이다.

참고 자료