Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

subsay

가치함수 본문

강화학습

가치함수

subsay 2017. 9. 17. 20:10

가치함수

에이전트가 학습할 수 있도록 문제를 MDP로 정의했습니다.

에이전트는 MDP를 통해 최적 정책을 찾으면 됩니다.

하지만 에이전트가 어떻게 최적 정책을 찾을 수 있을 까요?


어떠한 특정한 상태에 에이전트가 있다고 가정해봅시다.

이 에이전트 입장에서 어떤 행동을 하는 것이 좋은지를 알 수 있을까요?

현재 상태에서 앞으로 받을 보상들을 고려해서 선택해야 좋은 선택을 할 수 있습니다.

하지만 아직 받지 않은 많은 보상들을 어떻게 고려할 수 있을까요?

이때 나오는 개념이 바로 가치함수 입니다.


MDP -> 가치함수 -> 행동 선택


현재 시간 t로부터 에이전트가 행동을 하면서 받을 보상들을 합한다면


R(t+1) + R(t+2) + R(t+3) + R(t+4) + R(t+5) + R(t+6) + ...


보상은 행동을 했을 때가 아닌 그 다음 타임스텝에 받는다는 것을 기억합시다.

따라서 시간 t에 행동을 해서 보상은 R(t+1) 입니다.

그 다음 시간에 행동을 해서 받는 보상은 R(t+2)이고 그렇게 시간 마다 보상을 다합하면 위 식이 나옵니다.


시간마다 받는 보상을 모두 포함했지만 에이전트가 시간마다 보상을 받을 수도 있고 게임이 끝날 때 한번에 받을 수도 있습니다.


대문자로 쓴 보상 R은 확률변수이며 확률변수라는 것 자체가 정해져 있는 수가 아니라는 뜻입니다.

따라서 그 값이 0이 될 수도 있고 어떤 실수가 될 수도 있습니다.


위 식과 같이 보상들을 감가하지 않고 더하면 세 가지 문제가 생깁니다.

1. 에이전트 입장에서는 지금 받은 보상이나 미래에 받는 보상이나 똑같이 취급합니다.

에이저는 현재에 보상을 받은 경우와 시간이 좀 흘러서 100의 보상 받은 경우를 구분할 수 없습니다.

감가하지 않았다면 에이전트가 보게 되는 보상의 합은 단순한 덧셈이 되기 때문입니다.


2. 100이라는 보상을 1번 받는 것과 20이라는 보상을 5번 받는 것을 구분할 방법이 없습니다.

사람은 당연하게 구분하는 것을 에이전트는 구분할 수 없습니다.


3. 시간이 무한대라고 하면 보상을 시간마다 0.1씩 받아도 합이 무한대이고, 1씩 받아도 합이 무한대입니다.

수치적으로 두 경우를 구분할 수 없습니다.


이러한 문제 때문에 에이전트는 단순한 보상의 합으로는 판단을 내리기가 어렵습니다.

따라서 좀더 정확한 판단을 위해 감가율을 고려하는 것입니다.

감가율을 이용해 앞으로 받을 보상의 현재 가치를 나타내면 다음과 같습니다.


R(t+1) + γR(t+2) + γ^2R(t+3) + γ^3R(t+4) + γ^4R(t+5) + ....


이 값을 반환값 Gt라고 합시다.


Gt = R(t+1) + γR(t+2) + γ^2R(t+3) + γ^3R(t+4) + γ^4R(t+5) + ....


반환값이라는 것은 에이전트가 실제로 환경을 탐험하며 받은 보상의 합입니다.

에이전트가 에피소드가 끝난 후에 '그때로부터 얼마의 보상을 받았지?'라며 보상들을 정산하는 것이 반환값입니다.

만일 에피소드를 t = 1 부터 5까지 진행했다면 에피소드가 끝난 후에 방문했던 상태들에 대한 5개의 반환값이 생길 것입니다.


G1 = R2 + γR3 + γ^2R4 + γ^3R5 + γ^4R6

G2 = R3 + γR4 + γ^2R5 + γ^3R6

G3 = R4 + γR5 + γ^2R6

G4 = R5 + γR6

G5 = R6


에이전트는 이러한 반환값을 에피소드가 끝난후에야 알 수 있습니다.

하지만 꼭 에피소드가 끝날 때까지 기다려야 할까요? 때로는 정확한 값을 얻기 위해 끝까지 기다리는 것보다 정확하지 않더라도 현재의 정보를 토대로 행동하는 것이 나을 때가 있습니다.

에이전트도 직접 다 경험을 해서 보상을 받아보지 않더라도 얼마의 보상을 받을 것이라고 예측할 수 있습니다.


정확히 말하자면 어떠한 상태에 있으면 앞으로 얼마의 보상을 받을 것인지에 대한 기댓값을 고려해볼 수 있습니다.

그것이 바로 가치함수 입니다.

간단하게 기댓값은 반환값의 기댓값으로 표현 됩니다


v(s) = E[Gt|St=s]


각 타임스텝마다 받는 보상이 모두 확률적이고 반환값이 그 보상들의 합이므로 반환값은 확률변수입니다.

하지만 가치함수는 확률변수가 아니라 특정 양을 나타내는 값이므로 소문자로 표현합니다.

가치함수는 에이전트가 가지고 있는 값이기 때문입니다.

이 처럼 상태의 가치를 고려하는 이유는 만약 현재 에이전트가 갈 수 있는 상태들의 가치를 안다면 그 중에서 가장 가치가 제일 높은 상태를 선택할 수 있기 때문입니다.


사람도 마찬가지로 어떤 선택을 할 때 여러 선택을 놓고서 '이게 괜찮을 것 같은데' 하면서 각 선택이 가져올 가치의 기댓값을 따집니다.

정확하지 않아도 기댓값이 비교로도 선택은 가능합니다.

우리가 옷을 살 때도 입지 않았지만 눈으로 보고서 '괜찮겠다'라고 기대를 하면서 삽니다.

이렇게 기대를 하고 샀지만 기대에 맞지 않을 때가 많습니다.


하지만 그것은 상관이 없습니다.

이러한 과정을 여러 번 반복하면 결국 기대가 정확해지기 때문입니다.

에이전트 또한 이러한 개념인 가치함수를 통해 어느 상태가 좋을지 판단합니다.


가침한수의 식에 반환값의 수식을 대입하면 


v(s) = E[R(t+1) + γR(t+2) + γ^2R(t+3) + γ^3R(t+4) + γ^4R(t+5) + ...|St=s]


γR(t+2)부터 뒤의 항을 γ로 묶어주고 그것을 반환값의 형태로 표현해봅니다.


v(s) = E[R(t+1) + γ(R(t+2) + γR(t+3) + γ^2R(t+4) + γ^3R(t+5) + ...)|St=s]

v(s) = E[R(t+1) + γG(t+1)|St=s]


R(t+2) + γR(t+3) ... 부분을 반환값의 형태로 표현하긴 했지만 사실 에이전트가 실제로 받은 보상이 아닙니다.

이 보상은 앞으로 받을 것이라 예상하는 보상입니다.

따라서 이 부분을 앞으로 받을 보상에 대한 기댓값인 가치함수로 표현할 수 있습니다.

반환값을 가치함수로 바꿔서 표현하면 


v(s) = E[R(t+1) + γv(S(t+1))|St=s]


여기까지는 가치함수를 정의할 때 정책을 고려하지 않습니다.

하지만 에이전트가 앞으로 받을 보상에 대해 생각할 때 정책을 고려하지 않으면 안됩니다.

왜냐하면 상태에서 상태로 넘어갈 때 에이전트는 무조건 행동을 해야하고 각 상태에서 행동을 하는 것이 에이전트의 정책이기 때문입니다.

정책에 따라서 계산하는 가치함수는 당연히 달라질 수 밖에 없습니다.


따라서 에이전트는 자신이 어떤 행동을 할지를 고려해서 앞으로 받을 보상을 계산합니다.

MDP에서의 가치함수는 항상 정책을 고려해야 합니다.

가치함수에서 어떻게 정책을 고려할까요?

식으로 표현하는 건 간단합니다.

가치함수와 기댓값의 기호 밑에 정책을 써주면 정책을 고려한 가치함수가 됩니다.


vπ(s) = Eπ[R(t+1) + γvπ(S(t+1))|St=s]


강화학습에서 상당히 중요한 벨만 기대 방정식입니다.

벨마 기대 방정식은 현재 상태의 가치함수 vπ(s)와 다음 상태의 가치함수 vπ(S(t+1)) 사이의 관계를 말해주는 방정식 입니다.

강화학습은 벨만 방정식을 어떻게 풀어나가느냐의 스토리입니다.




큐함수

가치함수는 말 그대로 "함수"입니다.

따라서 입력이 무엇이고 출력이 무엇인지 알 필요가 있습니다.


상태 -> 가치함수 -> 받을 보상의 합


지금까지 설명한 가치함수는 상태 가치함수입니다.

상태가 입력으로 들어오면 그 상태에서 앞으로 받을 보상의 합을 출력하는 함수 입니다.

에이전트는 가치함수를 통해 어떤 상태에 있는 것이 얼마나 좋은지 알 수 있습니다.


에이전트는 가치함수를 통해 다음에 어떤 상태로 가야할지 판단할 수 있습니다.

어떤 상태로 가면 좋을 판단한 후에 그 상태로 가기 위한 행동을 따져볼 것입니다.

하지만 어떤 상태에서 각 행동에 대해 따로 가치함수를 만들어서 그 정보를 얻어올 수 있다면 에이전트는 굳이 다음 상태의 가치함수를 따져보지않아도 어떤행동을 해야 할지 선택할 수 있습니다.

이처럼 어떤 상태에서 어떤 행동이 얼마나 좋은지 알려주는 함수를 행동 가치함수라고 합니다.

간단하게 앞으로는 큐함수라고 부를 것입니다.


하나의 상태에서 n개의 행동 상태를 가질 때, 행동 상태에서 따로 가치함수를 계산할 수 있는데, 그 것이 바로 큐함수 입니다.

따라서 큐함수는 상태, 행동이라는 두가지 변수를 가지며, qπ(s,a)라고 나타냅니다.


가치함수와 큐함수 사이의 관계

1. 각 행동을 했을 때 앞으로 받을 보상인 큐함수 qπ(s,a)를 π(a|s)에 곱합니다.

2. 모든 행동에 대해 큐함수를 곱한 값을 더하면 가치함수가 됩니다.


vπ(s) = Σ(a∈A)π(a|s)qπ(s,a)


큐함수는 강화학습에서 중요한 역할을 합니다.

강화학습에서 에이전트가 행동을 선택하는 기준으로 가치함수보다는 보통 큐함수를 사용합니다.


큐함수 또한 벨만 기대 방정식의 형태로 나타낼 수 있습니다.

가치함수의 식과 다른 점은 조건문에 행동이 더 들어간다는 점입니다.


qπ(s,a) = Eπ[R(t+1) + γqπ(S(t+1),A(t+a))|St=s,At=a]





'강화학습' 카테고리의 다른 글

정리 MDP, 가치함수, 벨만 방정식  (0) 2017.09.17
벨만 방정식  (1) 2017.09.17
MDP  (0) 2017.09.17