요약
Greedy나 DP 알고리즘 문제에서 많이 볼 수 있는 Search Problem에서는 특정 state s에서 action a를 취하면 확정적으로 새로운 state s′으로 간다. 하지만 여기서는 조금 더 현실세계의 특성을 반영하여 action a를 취했을 때, s′으로 갈 확률T(s,a,s′)이 주어진다.
이번 장에서는 확률과정에서의 optimum path를 찾는 방법에 대하여 다룬다.
예제 설명 및 MDP
이번 장에서는 설명을 위하여 동전을 던져서 앞뒤를 맞추는데, 도전할 경우에는 4원을 받고, 성공할 경우에는 다시 또 게임을 하고 실패할 경우에는 4원을 받고 끝나며, 도전을 포기할 경우에는 6원을 받고 끝나는 게임을 예로 들어 설명하겠습니다.
이 게임에서 4n원을 받을 확률은 앞뒤를 맞출 확률이 1/2이므로 1/2n으로 주어지게 됩니다. 이 때, 내가 받을 것으로 기대되는 reward를 utility라고 하며, 계속 도전할 경우의 utility는
utility=4×12+8×14+12×18+…
으로 주어지며, 포기할 경우의 utility는
utility=6×1
로 주어지게 됩니다.
이 장의 목표는 utility를 최대로 만드는 최선의 전략(policy)를 찾는 것입니다.
또한, 위의 예제를 Markov Decesion Process(MDP) 로 나타내고 그림으로 표현하면 아래와 같이 표현할 수 있습니다. Transition이 현재의 상태에만 의존하기 때문에 Markov 모형이라 할 수 있습니다.

Discounting
Discounting(γ)이란 당장의 보상을 미래의 보상보다 더 선호하는 경향성을 나타내기 위한 파라미터로서, step이 지남에 따라 exponential하게 보상의 가치가 낮아진다는 가정이 들어가게 됩니다. 예를 들어, 3 단계 후의 utility 역시 4×12 이지만, γ가 0.9인 경우의 utility는 (0.9)2×4×12 가 됩니다. 즉, reward의 가치가 하락한 것을 알 수 있습니다. γ=1인 경우에는 현재의 reward와 미래의 reward의 가치가 같으며, γ=0인 경우에는 미래의 reward는 가치가 없는 극단적인 경우를 나타냅니다.
Policy evalution
이제 state s에서 기대되는 utility를 최대화하기 위해 선택해야 하는 전략(policy)를 구하기 위해 몇가지 변수를 정의하겠습니다. s에서 policy π(s)를 따를 때, value of policy를 Vπ(s), Q-value of policy를 Qπ(s,a)라 하고 정의는 아래와 같습니다.
Vπ(s)={0,if s is endQπ(s,a),otherwise
Qπ(s,a)=∑s′T(s,a,s′)[Reward(s,a,s′)+γVπ(s′)]
위의 예제에서 π="도전"인 경우의 Value of policy 는 아래와 같이 풀 수 있습니다.
Vπ(end)=0
Vπ(in)=12(4+Vπ(end))+12(4+Vπ(in))=8 (도전 후 실패한 경우 + 도전 후 성공한 경우)
위의 예제처럼 아주 쉬운 경우에는 이처럼 손으로 풀리지만, state가 아주 많거나 관계가 복잡한 경우에는 손으로 깔끔하게 풀린다고 보장할 수 없다. 따라서 앞의 강의들에서 사용했던 머신러닝의 아이디어를 가져와서 최적의 Vπ(s) 값을 찾게 되는데, 이러한 방법을 Policy evaluation이라 한다.
적당히 Vπ(s)값이 수렴할 때 까지 Vπ(s) 값을 여러 step에 걸쳐 update해 나갈건데,
1. t step에서의 value of policy를 V(t)π(s)라 하면, 먼저 V(t)π(s)를 모든 s값에 대하여 0인 벡터로 초기화 해준다.
2. 그 후 각각의 state s에 대하여 아래와 같이 update를 해준다.
V(t)π(s)=∑s′T(s,a,s′)[Reward(s,a,s′)+γV(t−1)π(s′)]≡Q(t−1)π(s,π(s))
3. 위의 과정을 아래와 같이 변화량이 일정값 이하가 될때까지 반복해준다.
maxs|V(t)π(s)−V(t−1)π(s)|≤ϵ
Value iteration
위에서 value of policy 값을 recurrent하게 구하는 방법을 알았으니, 이를 이용하여 이번에는 최적의 value Vopt(s) 를 구할 것인데 이러한 방법을 value iteration이라 한다.
Vopt(s)={0,if s is endQopt(s,a),otherwise
Qopt(s,a)=∑s′T(s,a,s′)[Reward(s,a,s′)+γVopt(s′)]
코딩으로 구현하는 방법은 위의 policy evaluation과 같은데 과정 2의 업데이트 방식만 아래와 같이 바꿔주면 된다.
V(t)opt(s)=maxa∑s′T(s,a,s′)[Reward(s,a,s′)+γV(t−1)opt(s′)]≡maxaQ(t−1)opt(s,π(s))
Python Code(클릭 시 github로)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# 도전시 +4원, 포기 시 +6
class MDP:
#state : in, out
def isEnd(self,state):
return state == 'end'
def actions(self):
return ['bet','notBet']
def succProbReward(self, state, action):
# return (new state, prob, reward)
# (self.state, prob, money)
result = []
if state =='in':
if action == 'bet':
#실패
result.append(('end',1/2,4))
#성공
result.append(('in',1/2,4))
else:
result.append(('end',1,6))
else :
result.append(('end',1,0))
return result
def discount(self):
return 1
def states(self):
return ['in','end']
def valueIteration(mdp):
V = {}
for s in mdp.states():
V[s] = 0
def Q(state,action):
return sum(prob*(reward+mdp.discount()*V[newState]) \
for newState, prob, reward in mdp.succProbReward(state,action))
while 1:
newV = {}
for state in mdp.states():
if mdp.isEnd(state):
newV[state] = 0
else:
newV[state] = max(Q(state, action) for action in mdp.actions())
if max(abs(V[state]-newV[state]) for state in mdp.states()) < 0.001:
break
V = newV
print(V)
|
cs |
MDP Modeling
line6 : state s가 in 일때는 가능한 a가 bet과 notBet으로 주어집니다.
line8 : s=′in′인 경우, bet을 취할 경우에는 4원을 받고 1/2의 확률로 in으로, 1/2의 확률로 end로 가게 됩니다. s=′end′인 경우에는, 확정적으로 reward가 없습니다.
line23 : 위의 코드에서는 γ=1, 즉, 미래의 reward와 현재의 reward의 가치가 같습니다.
Value iteration
line30 : Vopt(s)를 모든 s에서 0으로 초기화합니다.
line38 : s=′end′인 경우에는 reward를 받을 수 없으므로 value of policy는 항상 0이 됩니다.
line42 : 위에서 설명한 value iteration의 종료조건인 과정3을 나타냅니다. V 값의 변화량이 0.001 이하가 되면 과정을 종료합니다.
위의 코드를 돌려보면 V(′in′)=8,V(′out′)=0으로 위에서 손으로 푼 결과와 같은 값을 얻을 수 있습니다. 따라서 Optimal policy π(′in′)은 'in'상태에 계속 머무르기 위한 '도전'이 됩니다.
'ML > CS221 Stanford' 카테고리의 다른 글
On-Policy 와 Off-Policy (0) | 2020.03.21 |
---|---|
Lecture 9. Game playing 1 (0) | 2020.03.11 |
Lecture 8: Markov Decision Processes - Reinforcement Learning (0) | 2020.02.27 |
Lecture4 Generalization, K-means (0) | 2020.02.19 |
Lecture2 Linear classifiers, SGD (0) | 2020.02.18 |