이전 강의에서는 표를 활용해서 보상 값이니, 상태가 변할 확률이니 하는 것들을 제시해주었다.
하지만 실제 삶에서는 그렇게 명확하게 값이 주어지는 것을 거의 찾아보기 힘들다.
그래서 이번 Lecture 5에서는 그런 값들을 추산하는 방법(Value Function Approximation)과
일반화(Generalization)기법을 배울 것이다.
일반화를 통해 이제껏 보지 못한 사례도
해결할 수 있는 강화학습을 만들어낼 수 있지 않을까 기대해본다.
VFA 방식을 도식화한 슬라이드이다.
이전 강의에서는 V와 Q를 구하기 위해 주어진 값들을 활용해 공식에다 대입했다면
이 방식은 어떤 계수(parameter)들을 활용해서 s를 표현하는 것이다.
s가 (1,1)로 표현이 되고, w가 (2$s_1$ + 3$s_2$)라면
V 추정값은 5가 되는 식으로 진행될 것 같다.
이렇게 단순한 방식으로 V, Q를 추정할 수 있을까?
이런 의구심이 들기 마련이지만, Deep Neural Network가 바로 이런 방식으로 동작하며
Deep Q Network를 사용했다는 아타리 강화학습도 결국엔 같은 방식으로 진행했을테다.
그러니 안심하고 배워보자.
지난 번 코딩과제에서 애를 먹었던 부분이
P행렬 안의 보상 혹은 확률을 계속해서 불러내는 것이었는데
VFA를 통해 보다 간소화된 표현방법을 사용할 수 있을 것 같다.
VFA 자체가 복잡할 것이라는 우려가 있지만...
VFA의 첫 번째 방식을 살펴보자.
Oracle이라는 존재가 있어서, 우리가 상태 정보를 주면 참값 V(s)를 반환해준다고 가정하자.
그 참값과, approximation을 통해 얻은 근사값을 비교하면서
오차를 줄여나가는 것이 첫 번째 VFA 방식이다.
SGD 방식을 활용해서 오차 J를 줄여줄 수 있는데,
쉽게 말하자면 다음과 같다.
$\nabla_w J(w)$는 J가 w에 따라 변하는 방향 나타내는 방법이므로
w를 그 방향에 맞춰서 업데이트 시켜주는 것이다.
여기서 추산값인 $\hat{V}$를 Linear VFA로 바꿔줄 수 있다.
$\hat{V}$은 Linear VFA에서 $x(s)^T * w$이므로
$\nabla_w V(s)$ 같은 값이 그냥 x(s)로 바뀐다.
지금은 워낙 식도 복잡하고 잘 와닿지도 않지만
역시 예제나 과제를 통해서 더 자세하게 확인할 수 있을 거라고 믿는다.
다만 지금은 Oracle이 전해주는 참값을 오차를 계산하는 데 쓰고 있지만
현실에서는 그런 거 없다.
그래서 몬테카를로 방식에서 썼던 G(미래 보상의 현재가치) 값을 참값의 대용으로 쓴다.
말하자면 오차 (= 참값 - 근사값)를 (근사값 - 근사값)으로 쓰는 셈이다.
수도코드로 표현한 몬테카를로 Linear VFA는 위와 같다.
그래도 몇 줄 안 되어서 구현 가능하니 과제에서도 직접 써볼 기회가 오면 좋겠다.
과제를 풀기 전에, 예제부터 확인해보자.
상당히 필기가 많아 지저분하지만, 본래 문제는 가운데 저 다이어그램이다.
총 7가지 상태가 있고, 각 상태는 왼편 상단의 벡터로 표현 가능하다.
$\alpha$ = 0.5, 초기 parameter(w), 즉 $w_0$은 [1, 1, 1, 1, 1, 1, 1]이다.
몬테카를로 방식을 도입한다고 했을 때,
과거 전력이 $[s_1, a_1, 0, s_7, a_1, 0, s_7, a_1, 0, terminal]$인 경우에 대해
파라미터 업데이트가 어떤 방법으로 이뤄질까?
과거 행적은 참 한심하기 짝이 없지만 (보상은 하나도 못 받고 전전긍긍하다가 끝나버렸다)
다음 에피소드를 기대하며 일단은 파라미터들을 고쳐줘야 한다.
보상을 못받았으므로 $G(s_1)$ = 0이고, $V(s_1)$은 $x(s_1)^t * w_0 =3$ 이다.
파라미터 업데이트 공식에 대입하면,
$\Delta w = 0.5 * (0 - 3) * [2 0 0 0 0 0 0 1] = [-3 0 0 0 0 0 0 -1.5]$ 가 된다.
그러므로 $ w + \Delta w = [-2 1 1 1 1 1 1 -1.5]$로 파라미터를 업데이트해줄 수 있다.
몬테카를로가 쓰였다면, TD Learning도 빠질 수는 없다.
TD Learning을 결국 완벽하게 이해하지 못하고 넘어갔었는데,
과제에서도 TD Learning을 코드로 짜보지 못했기 때문에
여기서라도 잘 짚고 넘어갈 필요가 있다.
수도코드는 위와 같으며 앞서 살펴봤던 예제에도 적용할 수 있다.
$[s_1, a_1, 0, s_7]$을 활용해서 파라미터를 업데이트해보면,
$ \Delta w = 0.5 * (0 + 0.9 * [0, 0, 0, 0, 0, 0, 1, 2]^T*[1, 1, 1, 1, 1, 1, 1, 1]- [2, 0, 0, 0, 0, 0, 0, 1]^T*[1, 1, 1, 1, 1, 1, 1, 1])* [2, 0, 0, 0, 0, 0, 0, 1]$
$ = 0.5 * (-0.3) * [2, 0, 0, 0, 0, 0, 0, 1] $
Transpose를 유의해서 작성하자면 위와 같을 것이다.
이는 앞서 몬테카를로에서 확인한 -1.5 * x(s)와 10배나 차이가 나는 셈인데,
TD Learning이 하나의 에피소드를 여러 개로 나눠서 학습한다는 점을 생각하면
그렇게 놀라운 일은 아닌 것 같다.
또 일반적으로는 TD Learning이 MC보다 더 잘 작동한다고 하니(더 빠르게 수렴한다)
코드를 짤 때는 TD를 집어넣으면 되겠다.
Control에서는 Model Free Policy Control에서 그러했듯, Q를 사용한다.
VFA를 사용한 Control에서는 Off Policy Learning을 배우게 되는데,
Lecture 4에서 봤듯이, On Policy Learning은 과거의 경험을 그대로 사용하는 것,
Off Policy Learning은 새로 조합한 행동들을 사용하는 것을 뜻한다.
언뜻 보더라도 Off Policy Learning이 더 어려워보인다.
일단 방식은 V 에서 Q로 바뀌었다는 점만 빼면 동일하다.
Oracle이 제공해주는 Q 참값에 대한 근사값도
x(s)에서 x(s, a)로 바뀌었을 뿐이다.
강의는 Control에 대한 자세한 논의없이 유야무야 끝나고만다.
VFA를 잘 이해한다면 그냥 잘 써먹을 수 있으리라는 믿음 때문인지...
다음에 나올 과제를 풀어본다면 이렇게 넘긴 의중이 무엇인지 알 수 있을 테다.
'트렌드 한눈에 보기 > 학계 트렌드' 카테고리의 다른 글
[CS234] Lecture 7: Imitation Learning 정리 (1) | 2020.12.17 |
---|---|
[CS234] Lecture 6: CNNs and Deep Q Learning 정리 (0) | 2020.12.16 |
[CS234] Assignment 1 풀이 (0) | 2020.12.14 |
[CS234] Lecture 4: Model Free Control 정리 (0) | 2020.12.12 |
[CS234] Lecture 3 - Model Free Policy Evaluation 정리 (0) | 2020.12.11 |