아카이브/강화학습(2019)

강화학습 공부 - (4) Model Free Control

Johnny Yoon 2019. 9. 4. 20:08
728x90
반응형

 

Model Free Control

Model Free Control 다음과 같은 문제들을 풀기 위함이다:

  • 문제에서 MDP 주어져 있지 않지만, 경험을 통해 간단하게 만들 있는 경우
  • MDP 주어져 있지만, 환경이 너무 크기 때문에 샘플링을 통해 행동하는 경우

 

On-Policy vs Off-Policy
On-Policy

  • 행동하면서 학습하는 문제
  • 정책 $\pi$ 통한 경험의 샘플링을 통해 정책 $\pi$ 학습시키는 , 행동하는대로 학습하는 형태
  • 또한 검증시에도 같은 정책을 사용한다.

Off-Policy

  • 다른 (에이전트의) 행동 패턴을 통해 학습하는 문제
  • 다른 에이전트의 정책 $\mu$ 통핸 경험의 샘플링을 통해 정책 $\pi$ 학습시키는 , 다른 누군가의 행동을 보고 학습하는 형태

 

몬테카를로 정책 향상 (Policy Improvement)

다이나믹 프로그래밍에서는 정책 반복을 통해 정책을 발전 시켰다.

그림에서 화살표가 위로 향할 현재의 정책을 평가하고, 갱신된 정책함수를 얻게 된다. 그리고 아래로 향할 갱신된 정책함수를 사용해 탐욕적(greedy)으로  행동한다. 그리고 최후에는 최적의 정책으로 수렴하게 된다. Model-Free Control 사용해서 두개의 반복적인 프로세스 사이에 어떠한 행위가 들어올 있는지 알아볼 것이다.

 

 

몬테카를로에서 위의 정책향상을 적용해 보겠다. 같은 상황에서 다이나믹의 방법이 아니라 몬테카를로의 방식으로 정책을 발전시키려면 어떻게 해야할까?

다이나믹의 방법을 그대로 적용하려면 두가지 문제가 생긴다.

  • 상태 가치 함수를 사용하면 탐욕적으로 행동할 없다. 이는 상태만 알고있고, 행동(Action) 모르기 때문이다. 따라서 상태 가치 함수가 아닌, 행동 가치함수를 사용해야 한다.
  • 탐욕적으로 행동하다 보면, 탐색(Exploration)적인 문제가 생기는데, 탐욕적으로 행동하기 때문에 환경을 충분히 경험하지 못하게 된다.

 

따라서 탐욕적으로 아래의 Q(s, a)함수를 사용해 정책 향상을 해야 한다.

$\pi'(s) = argmax_{a \in A} Q(s, a)$

 

위의 수식을 사용해 가장 많은 보상을 얻을 있는 Q 선택하게 된다.

 

상태 가치 함수가 아닌, 행동 가치 함수 Q 사용해 탐욕적으로 정책을 발전시키는 방법이다. 화살표가 위를 향할 몬테카를로는 여러번의 에피소드를 실행하게 되고, 에피소드들의 평균 리턴값에 따라 Q함수를 평가하게 된다. 이를 평가하면 새로운 Q함수를 얻게 되고, 그를 통해 탐욕적으로 행동하면 최종적으로 수렴을 있게 된다. 하지만 탐욕적으로 행동하면 여전히 위에서 살펴본 같은 문제가 생긴다.

 

탐욕적 행동 선택

앞에 두개의 문이 있다고 상상해보자. 중에 하나를 고르는 문제이다. (이런류의 문제를 밴딧 문제, Bandit-Problem 이라고 한다.) 아래의 경험을 살펴보자:

왼쪽 문을 열었더니 보상 0 얻었다.

V(왼쪽문) = 0

오른쪽 문을 열었더니 보상 1 얻었다.

V(오른쪽문) = 1

오른쪽 문을 열었더니 보상 3 얻었다. (V 평균)

V(오른쪽문) = 3

오른쪽 문을 열었더니 보상 2 얻었다.

V(오른쪽문) = 2

 

위의 결과들을 보고 계속 탐욕적으로 행동한다면, 더이상 왼쪽문은 열지 않게 될것이다. 하지만 현실적으로는 왼쪽문은 경험하기 전까지는 왼쪽문이 어떤 가치를 주는지 알지 못하게 된다. (Local Optima 빠지게 되는 것이다.)

 

E-greedy 탐색 (Exploration)

E-greedy (Epsilon Greedy) 위의 문제에 대한 가장 간단한 해결책이다. 방법은 일정 확률을 사용한다. $\epsilon$ 확률에 의해 랜덤한 액션을 선택하고, $1 - \epsilon$ 확률에 의해 Greedy 액션을 선택한다.

$\pi(s|s) = \begin{cases} \frac{\epsilon}{m} + 1 - \epsilon, & \mbox{if}\ a* = argmax_{a \in A} Q(s, a) \\ \frac{\epsilon}{m} & otherwise \end{cases} $

 

간단한 아이디어 같아 보이지만, 방법을 통해 탐욕적 방법과 탐색을 모두 선택할 있게 되는 것이다.

 

E-greedy 정책 향상 (Policy Improvement)

E-greedy 유용한 이유는, 이를 통해 정책 향상이 가능하기 때문이다. 따라서 위에서 보았던 화살표 그림에서의 아래를 향하는 화살표에 E-greedy 적용할 있다는 뜻이다.

어떠한 e-greedy 정책 $\pi$ 대해, e-greedy 정책인 $\pi'$ $q_\pi$ 대해 $V_\pi'(s) \geq V_\pi(s)$ 만족하는 정책 향상이 된다.

 

개념을 다시 몬테카를로 정책향상에 적용해보면 다음과 같은 그림이 나올 있다.

에피소드를 위의 정책을 사용해 진행하고 평가한다. 그리고 향상 스텝에서는 e-greedy 적용한다. 정책은 확률적인(stochastic) 정책이 된다.

 

하지만 이는 약간의 효율성을 포기하는 것이다. 최종적으로는 최적 정책에 도달 하겠지만, 일정 확률로 랜덤한 액션을 취하기 때문이다. 따라서 이를 조금 효율적으로 만들어 보겠다.

 

몬테카를로는 여러번의 에피소드를 진행해 여러번의 리턴값들의 평균으로 정책을 갱신하게 된다. 이를 조금 바꿔 한번의 에피소드 진행마다 에피소드를 업데이트 하는 방식을 택하면 조금 빠르게 도달할 있게 되는 것이다. 그리고 평가는 조금 미루어 진행을 하는 방식이 된다.

 

GLIE

하지만 우리가 최적 정책을 찾으면서 충분한 탐색을 했다는 것을 어떻게 확인 있을까? 이를 위해서는 두가지의 밸런스를 조정해야 한다. 이를 조정하기 위한 아이디어가 GLIE (Greedy in the Limit with Infinite Exploration)이다

 

GLIE 다음 두가지 조건을 가진 일정한 탐색 시간을 정해놓는 방법이다.

  • 모든 상태와 액션의 방문을 보장하기 위해서 모든 상태와 액션이 무한대로 탐색될 있도록 하는 것이다. 이를 통해 모든 상태와 모든 상태에서의 액션 조합이 최대한 많이 탐색될 있게 하는 것이다.

$\lim_{k \rightarrow \infty} N_k (s, a) = \infty$

  • 정책은 결국 탐욕 정책으로 수렴할 것이다. 이는, 정책함수는 결국 최적의 보상을 얻는 방향으로 정책을 수정해 것이기 때문이다.

$\lim_{k \rightarrow \infty} \pi_k(a|s) = 1(a = argmax_{a' \in A} Q_k(s, a'))$

 

 

GLIE 몬테카를로

샘플링된 K번째 에피소드에서 $\pi$: {$S_1, A_1, R_2, …, S_{\gamma}$} ~ $\pi$ 각각의 상태 $S_t$ 액션 $A_t$ 대해 다음과 같은 갱신 수식을 적용한다:

$N(S_t, A_t) = N(S_t, A_t) + 1$

$Q(S_t, A_t) = Q(S_t, A_t) + \frac{1}{N(S_t, A_t)} (G_t - Q(S_t, A_t))$

수식에서의 N 카운터이다.
 

그리고, 정책은 시점에 따라 다음과 같이 갱신하고 발전한다. GLIE 정책이 확률적인 정책에서 점진적으로 탐욕적인 정책이 되는것을 보장하게 된다.

$\epsilon = frac{1}{k}$

$\pi = e-greedy(Q)$

 

이를 통해 여러번의 배치 애피소드를 모아 갱신하는 방식보다 훨씬 효율적인 갱신을 있게 된다.

 

시간차 정책 향상

몬테카를로에 비교하면, 시간차 학습은, 에피소드를 끝까지 진행하지 않아도 학습할 있다는 이점이 있었다. 따라서 시간차 학습에 E-greedy알고리즘을 적용하면 Q함수를 시점마다 학습할 있게 된다.

 

SARSA

위의 방법을 통해 행동-가치 함수를 갱신하는 알고리즘을 SARSA라고 부른다. 위의 그림을 보면 SARSA알고리즘인지 감이 것이다. SARSA 하나의 상태 S에서 행동 A 랜덤하게 샘플한 정책에 의해 선택하고 보상 R 받는다. 그리고 새로운 상태 S' 놓이게 되고 새로운 정책을 사용해 행동 A' 선택하게 된다.

 

$Q(S, A) = Q(S, A) + \alpha (R + \gamma Q(S',A') - Q(S,A))$

 

위의 수식이 SARSA 갱신 수식이다. 수식에 의하면, 기존의 Q값에 학습률 $\alpha$ 곱해진 새로운 가치를 조금 더해 갱신하게 되는데, 가치는 받은 보상과 감가율이 적용된 다음의 Q값을 더하고 현재의 Q값을 값이 된다. 수식에 의하면, 현재 상태 액션과 다음의 상태 액션만을 고려하 되는 것이다. (두개의 액션 모두 같은 정책을 통해 결정한다.)

 

SARSA 사용한 Q함수의 갱신은 다음 그림에 표현되어 있다.

SARSA 하나의 액션을 취할때 마다 Q함수를 갱신하게 되어있고 (모든 시점에 Q함수를 갱신한다는 의미이다.), Q함수는 E-greedy 사용해 정책을 향상시키게 된다. 그리고 E-greedy 의해 랜덤한 Exploration또한 수행하게 된다.

 

SARSA 수렴

SARSA 역시 최적의 Q함수 행동-가치 함수 Q(s,a) $\rightarrow$ $q_*(s,a)$ 수렴하게 되는데, 이는 GLIE 정책 $\pi_t(a|s)$ 통해 수렴하게 된다. 또한 적절한 스텝 사이즈를 맞춰주어야 한다

 

N-스텝 SARSA 리턴

n = 1, 2, $\inf$ 대해서,

n = 1,      (SARSA),       $q_t^{(1)} = R_{t+1} + \gamma Q(S_{t+1})$

n = 1,                           $q_t^{(2)} = R_{t+1} + \gamma R_{t+2} + \gamma^2Q(S_{t+1})$

n = $\inf$  (MC),       $q_t^{(\infty)} = R_{t+1} + \gamma R_{t+2} + … + \gamma^{T-1}R_T$

 

이전에 시간차 TD(0)에서 수식일 것이다.

SARSA역시 n-step 무한대일때는 몬테카를로와 같아진다.

 

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

 

그리고 행동-가치함수 Q 업데이트 하는 수식은 다음과 같다.

$Q(S_t, A_t) = Q(S_t, A_t) + \alpha((q_t^{(n)} - Q(S_t, A_t))$

 

SARSA($\lambda$)

SARSA 역시 $\lambda$ 리턴을 적용할 있다.

$(1 - \lambda)\lambda^{n - 1}$가중치를 사용해 N스텝의 Q값을 함께 고려하게 된다.

아래의 수식이 SARSA Forward View 됩니다.

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

 

Backward View

SARSA Backward View에서도 Eligibility Trace 테이블을 사용한다. (테이블은 방문한 상태에 대해 저장해 놓는 테이블이다.) TD($\lambda$) 다른점은 SARSA($\lambda$) 상태 마다 상태-행동 페어에 대한 하나의 Eligibility Trace 저장한다는 것이다.

$E_0(s, a) = 0$

$E_t(s, a) = \gamma\lambda E_{t - 1}(s, a) + 1(S_t = s, A_t = a)$

 

모든 상태s 행동 a에서 Q(s, a) 갱신이 되게 되는데, 이는 역시 TD-에러 $\delta_t$ Eligibility Trace $E_t(s)$ 비례하여 진행 된다.

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

$Q(s, a) = Q(s, a) + \alpha \delta_t E_t (s, a)$

 

Off-Policy Learning

지금까지는 On-Policy Learning 대해서만 이야기했다. 이는 학습하는 정책이 평가하는 정책과 같은 방식이다. 하지만 많은 경우 학습하는 정책과 평가하는 정책이 달라야 하는 경우가 있다.

정책 $\mu$(a|s) 따라 학습하고 있다고 가정해 보자.

하지만 평가에서는 타깃 정책인 $\pi$(a|s) 사용해 $v_s$(s) $q_{\pi}$(s, a) 구하게 된다.

 

이것이 중요한 이유는 여러가지가 있을 있다.

  • 로봇이 사람이나 다른 에이전트를 통해 학습할
  • 이전의 정책 $pi_1$, $pi_2$, … $pi_{t - 1}$ 통한 경험을 재사용하려고
  • 실험적인 정책을 사용해 최적의 정책을 학습하려
  • 하나의 정책을 사용해 여러개의 정책을 학습하려

결국 이를 정리하면, 다른 정책의 행동을 통해 현재 정책을 개선하려 사용하는 것이다.

 

중요도 샘플링

중요도 샘플링이란 현재의 분포 값을 추정하기 위해서 다른 분포에서 샘플링한 데이터를 사용해 추정하는 방법이다.

$E_{X~P}[f(X)] = \sum P(X)f(X)$

$= \sum Q(X) \frac{P(X)}{Q(X)}f(X)$

$= E_{X~Q}[\frac{P(X)}{Q(X)}f(X)]$

 

중요도 샘플링을 사용해 Off-Policy 몬테카를로나 Off-Policy 시간차학습을 구현할 수는 있다. 하지만 몬테카를로의 경우는 현실적으로 쓸모가 없을 정도로 성능이 좋지 않다.

 

Q러닝

Q러닝은 행동-가치함수 Q(s,a) Off-Policy 방식으로 학습하는 기법이다. 방식에는 중요도 샘플링이 필요하지 않다.

큐러닝은 다음 액션을 행동 정책 (학습하는 정책) $A_{t + 1} ~ \mu(-|S_t)$ 통해 결정하지만, 타깃 정책 (갱신&평가) 때에는 $A' ~ \pi(-|S_t)$ 사용하게 된다.

이런 특성 때문에 중요도 샘플링이 필요하지 않게 되는데, 다음 수식에 표현되어 있듯이, 갱신 수식에서는 A' 사용하게 되기 때문이다.

$Q(S_t, A_t) = Q(S_t, A_t) + \alpha (R_{t + 1} + \gamma Q(S_{t + 1}, A') - A(S_t, Q_t))$

 

Q러닝은 행동정책과 타깃정책을 모두 향상시키는 것이다.

타깃 정책 $\pi$ greedy Q함수이다.

$\pi (S_{t + 1}) = argmax_{a'} Q(S_t+1, a')$

그리고 행동 정책은 e-greedy Q함수이다.

따라서 이를 정리하면,

$R_{t+1} + \gamma Q(S_{t+1}, A')$

$= R_{t+1} + \gamma Q(S_{t+1}, argmax_{a'} Q(S_{t+1}, a'))$

$= R_{t+1} + \max_a' \gamma Q(S_{t+1}, a')$

 

수식은 argmax 다시 Q함수를 적용하기 때문에 최종적으로는 max Q함수를 찾게 되는 수식이다.

 

SARSA알고리즘은 그저 e-greedy 정책을 따라 탐험과 최적 정책을 모두 가져가려는 알고리즘이고, 탐험과 최적의 사이에서 갈등하는 문제가 있었지만, Q러닝은 정책과 탐험을 분리시키고, 행동은 e-greedy 사용하고, 갱신은 최적의 greedy (max) 사용해 갱신하는 방식으로 위의 문제를 해결한 것이다.

 

728x90
반응형