ML&DL/Sung Kim's RL Lecture

LEC 03. Dummy Q-learning (table)

rrojin 2021. 1. 7. 17:26

LEC 03 

에이전트는 사전에 map을 모르는 채로 움직이며, 매 행동이 끝난 뒤에 상태 정보를 받는다.

따라서, 길을 알려주는 행동대장을 따라갈 필요가 있는데, 이때 등장하는 Q형님이 바로 행동대장이다.

Frozen Lake 게임을 Q형님과 함께 수행해본다. 

 

Q형님에게 입력할 값은 2개 : (1) state 현재 위치 / (2) action 다음에 취할 행동(상하좌우 중 이동할 방향) 

그러면, Q형님은 각 행동 별 확률(가능성)을 알려준다.

이제, Q형님의 가르침대로 4방향 중 최대값을 가지는 방향을 찾아 이동하면 된다.

Max Q = maxQ(s1, a') : 최대 확률값 

argmax Q(s1, a) : 그 최대 확률에 해당하는 행동 (ex. 오른쪽)

=> Optimal policy *


그렇다면, 이 행동대장 Q는 어떻게 학습시킬까?

 

나는 현재 s에 있고 a의 행동으로 s'로 움직일 것이다. -> 즉, Q(s, a))

이때, s'로 움직였을 때 받을 reward(r)를 알고 있으며, Q(s', a')도 알고있는다고 믿는다.

그러면, Q(s,a) = r + max Q(s', a') 로 표현할 수 있다.  

 

Q(s,a) = r + max Q(s', a') 를 반복 사용해서 16*4 table을 학습시켜본다.

먼저 테이블을 '움직일 공간 수(env.observation_space.n) * 행동 수(env.action_space.n)'크기의 0 으로 초기화한다.

다음,

{ 현재 위치(s)에서 다음 행동(a)을 랜덤으로 선택한다.

 행동 a를 취하여 s'으로 이동하였을 때 얻을 reward와 미리 알고 있는 max Q(s',a')값을 더해 Q(s,a) 값을 구한다.

 그리고 현재 위치를 s'로 갱신한다. }

다음 작업을 게임이 끝날 때까지 반복한다. (goal에 도착하거나 or hole에 빠지거나)

 


LAB 03

 

Windows10 Code

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
46
47
48
49
import gym
import numpy as np
import matplotlib.pyplot as plt
from gym.envs.registration import register
import random as pr
 
def rargmax(vector): # 최댓값 선택 (모든 액션 기댓값이 0이라면, 랜덤하게 액션선택)
    m = np.amax(vector) 
    indices = np.nonzero(vector == m)[0]
    return pr.choice(indices)
 
env_dict = gym.envs.registry.env_specs.copy()
for env in env_dict:
    if 'FrozenLake-v3' in env:
        del gym.envs.registry.env_specs[env]
        
register(
    id='FrozenLake-v3',
    entry_point='gym.envs.toy_text:FrozenLakeEnv',
    kwargs={'map_name''4x4','is_slippery':False}
)
 
env = gym.make('FrozenLake-v3')
 
= np.zeros([env.observation_space.n, env.action_space.n]) # Q table 0으로 초기화
 
num_episodes=2000
 
rList=[]
for i in range(num_episodes):
    state = env.reset()
    rAll = 0
    done = False
    
    while not done:
        action = rargmax(Q[state, :])        
        new_state, reward, done, _ = env.step(action)
        Q[state,action] = reward + np.max(Q[new_state, :])
        rAll += reward
        state = new_state
        
    rList.append(rAll)
 
print("Success rate: " + str(sum(rList)/num_episodes))
print("Final Q-table Values")
print("LEFT DOWN RIGHT UP")
print(Q)
plt.bar(range(len(rList)), rList, color='blue')
plt.show()
cs

Result

 

Reference:

[1]: http://hunkim.github.io/ml/

[2]: https://youtu.be/Vd-gmo-qO5E

[3]: https://youtu.be/yOBKtGU6CG0Lab2

 

'ML&DL > Sung Kim's RL Lecture' 카테고리의 다른 글

LEC 06. Q-Network  (0) 2021.01.08
LEC 05. Q-learning on Nondeterministic Worlds!  (0) 2021.01.08
LEC 04. Q-learning (table)  (0) 2021.01.07
LEC 02. Playing OpenAI GYM Games  (0) 2021.01.06
Lec 01. RL Introduction  (0) 2021.01.06