김성훈 교수님의 모두를 위한 RL 강좌 Lecture 3을 듣고 정리하였다.
Dummy Q-learning (table)
앞에서 Agent가 아무런 정보가 없기 때문에 운이 좋아서 H를 안 밟고 Goal까지 가는 방법밖에 없다고 했다. 즉, Action을 할 때마다 잘했는지 못했는지 알려주는게 아니라 Goal에 도착해야 reward를 받는다. 이때 바로바로 정보를 알려주는 역할을 하는 것이 “Q”이다. (김성훈 교수님은 “Q” 형님에게 물어봐라고ㅋㅋㅋ 뭔가 웃겼다)
Q function
Q function은 아래와 같이 입력으로 state와 action을 받고 quality(reward)를 내보낸다.
Q(state, action)
Q(s1, left): 0
Q(s1, right): 0.5
Q(s1, up): 0
Q(s1, down): 0.3
이렇게 Q의 결과가 있다고 할 때 1) Q의 최댓값을 찾고 2) 최댓값을 주는 행동을 내보내서 그 행동을 하게 한다. 이걸 식으로 나타내면 다음과 같다.
$$ Max Q = \max_{a'}Q(s, a') $$
$$ \pi^*(s) = argmax_aQ(s,a) $$
여기서 policy라는 개념이 있는데, $a=\pi(s)$로 표기한다. 위 식에서 $\pi(s)^*$는 optimal한 값을 의미한다. 그리고 policy는 어떤 state에서 Agent가 취할 수 있는 action이다. (정보 보충: 이 블로그 통해서 policy라는 개념에 대해 추가적으로 이해)
Q 학습
그렇다면 Q는 어떻게 학습할까? (즉, 저 0, 0.5, 0, 0.3 이런 수치를 어떻게 냈을까?)
김성훈 교수님은 일단 무조건 믿으라고 하셨다.
- 가정
- s’에도 Q가 있다.
- 내 condition
- 나는 지금 s에 있고
- 내가 a 행동을 하면 s’로 가게된다.
- a라는 행동을 하면 리워드로 r을 얻는다.
- Q(s’, a’)를 우리는 이미 알고 있다.
- Q(s,a) = r + max Q(s’,a’)로 표현할 수 있다. (무슨 의미인지는 뒤에서 추가 설명!)
⇒ 처음에는 이 모든 r들이 0일 것이고 Agent가 먼저 쭉 가보고 Goal에 도착을 해봐야 Q가 제대로 알려줄 것이다. Q가 Goal에 도착했다고 가정하면, 가는 길의 action, state, reward는 다음과 같다.
- 처음에 Agent는 $s_0$에서 출발해서 $a_0$이라는 행동을 하고 그 행동의 결과 $r_1$ 리워드를 받고 $s_1$로 이동하고 ... $s_n$(goal)에 도착한다. 이렇게 연속적인 결과들을 위와 같이 표현했다.
- 우리는 총 리워드의 합에 관심이 있다.
- 이렇게 움직였을 때 받을 수 있는 리워드는 R이다.
- t라는 시점에서 받은 리워드 $R_t$는 t 이후의 시점의 모든 리워드를 더했다고 치자.
- $R_t = r_t + R_{t+1}$로 다시 쓸 수 있다.
- 이런 방식이 Q를 학습하는 방법이라고 볼 수 있다.
- 즉, Q(s,a) = r + max Q(s’,a’)는 현재 상태 s에서 선택한 행동 a의 Q값은 다음 상태 s’로 갈 때 받을 보상 (r) + 다음 상태 s’에서 가장 높은 Q값을 가진 행동 a’의 Q값이라고 볼 수 있다.
Q 학습 in Frozen Lake
Frozen Lake에서 Q를 학습시켜보자.
1. Q 값을 0으로 초기화 한다.
2. 일단 움직여 본다. → 어쩌다가 끝까지 가게되었다.
- 일단 처음에는 모두 0이니까 오른쪽으로 움직여보면 0+0 Q값이 그대로 0이다.
- 어쩌다가 Goal까지 도착!
- 그럼 1+0 이니까 아래와 같이 Q값이 업데이트 된다.
- (Agent가 s14에서 a(=right)로 가면 얻을 수 있는 reward는 1)
3. 그럼 어쩌다가 다시 Agent가 13에 왔다고 하자. (빈공간은 모두 r이 0이다.)
- 13에서 a라는 행동을 해서 받을 수 있는 reward는 0
- $Q(s_{13}, a_{right}) = r + max(Q(s_{14}, a)) = 0 + max(0,0,1,0) = 1$
- 그래서 13의 Q값은 1로 업데이트된다.
4. 위와 같은 방식으로 Q값을 업데이트 하다보면 다음과 같이 Q값이 업데이트 된다.
그래서 Dummy Q-learning algorithm을 정리해보면,
- Table을 만들어서 모든 Q값을 0으로 초기화한다
- 환경을 만들어서 s를 확인
- 계속 반복
- a를 하나 선택해서 행동을 하고 바로 r을 받는다
- s’로 간다.
- Q를 업데이트 한다.
- 현재 상태 s가 s’가 된다.
이 알고리즘을 파이썬 코드로 표현하면 다음과 같다.
'Deep Learning > RL' 카테고리의 다른 글
[모두RL-⑥] DQN (0) | 2022.03.07 |
---|---|
[모두RL-⑤] Q-Network (0) | 2022.03.07 |
[모두RL-④] Stochastic (non-deterministic) (0) | 2022.03.07 |
[모두RL-③] E&E과 discounted future reward (0) | 2022.03.07 |
[모두RL-①] 강화학습 소개 (0) | 2022.03.04 |
댓글