ML&DL/Sung Kim's RL Lecture

LEC 04. Q-learning (table)

rrojin 2021. 1. 7. 19:06

LEC 04

1) Exploit&Exploration

2) Random Noise

3) Discounted Future Reward

1) Exploit & Exploration 알고리즘

Lec 03에서의 dumy Q-learning 방식으로는 한 가지 길로만 가게 된다. 

따라서, E&E알고리즘(Exploit & Exploration)을 도입하여 여러 경우의 수를 만들어야 한다.

Exploit는 이미 알고있는 확률값을 사용하여 액션을 선택하는 것이고,

Exploration은 랜덤하게 새로운 도전으로 값을 선택하는 방식이다.

 

Explot과 Exploration의 채택 비중은 E-greedy 방식을 사용하여 정할 수 있다.

슬라이드와 같이 e값을 0.1로 고정한다면, Exploit 90% VS Exploration 10% 로 분배된다.

 

이때, decaying E-greedy를 적용할 수도 있는데, 학습 횟수가 늘어날 수록 랜덤하게 선택할 확률을 줄이는 것이다.

강의에서는, 같은 동네에 10년쯤 살았으면, 맛집을 더 잘 알테니 Exploit의 선택 비중을 높이는 것과 같다고 설명했다 ;) 

 


2) Random Noise

 랜덤 노이즈를 더하여 경우의 수를 더 넓힐 수 있다. 기존 Q값에 노이즈를 더하는데, 2,3등이 뽑힐 확률을 높인다고 한다. 노이즈에도 앞서 decaying E-greedy에서 적용한 decaying 개념을 동일하게 적용할 수 있다.


3) Discounted Future Reward

1번 길과(하늘색) 2번 길(노랑색)중 더 효율적인 경로는 2번이다.

그렇다면, 어떻게 2번 길을 유리하게 학습시킬까?  

이때 나온 개념이 'Discounted future reward' 이다.

 

Discounted future reward, 미래 일에 대한 reward를 낮추는 방법인데, 바로 얻어지는 reward는 그대로 두고, 미래의 reward에 1보다 작은 값의 감마값을 곱하여 값을 작게한다. 슬라이드에서 감마는 0.9!

 

같은 개념으로 Q에 적용할 수 있다.

 

discounted future reward를 적용하여 계산한 테이블이다.

다음 그림과 같이 0.729 vs 0.9 로 계산되어 down으로 이동하게 된다. 2번길 선택 받음~

 

근사치이기에 Qhat으로 표기하였는데, 다음 2조건을 만족하면 이 값을 계속 업데이트 시 Q에 수렴하게 된다.

(1) 특정방향에서 항상 같은 reward 받음 (2) 상태의 수가 유한


LAB 04

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
50
51
52
import gym
import numpy as np
import matplotlib.pyplot as plt
from gym.envs.registration import register
 
 
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])
 
dis = .99
num_episodes = 2000
 
rList = []
 
for i in range(num_episodes):
    state = env.reset()
    rAll = 0
    done = False
    
    e = 1. / ((i//100)+1)
    
    while not done:
        # decaying E-greedy
        #if np.random.rand(1)<e:
            #action = env.action_space.sample()
        #else:            
            #action = np.argmax(Q[state, :])
        
        # Random Noise
        action = np.argmax(Q[state, :] + np.random.randn(1,env.action_space.n)/(0.01*(i+1)))
        new_state, reward, done, _ = env.step(action)
        Q[state, action] = reward + dis * 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]: youtu.be/MQ-3QScrFSI

[3]: youtu.be/VYOq-He90bE

'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 03. Dummy 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