블로그 이사🏡 했습니다. 👉🏻 둘러보기
본문 바로가기
  • What Get's You Here, Won't Get You There
CS/AI

Q-learning (Reinforcement Learning) 1

by OMIN_ 2022. 6. 18.

Q-learning은 모델 없이 학습하는 강화학습 기법 중 하나이다. 

배경지식

Agent는 상태 s ∈ S 에서 행동 a ∈ A 를 취할 수 있고,

한 agent가 상태 s에서 행동 a를 취했을 때 s' 으로 이동할 확률은 T(s, a, s'), 얻을 수 있는 보상은 R(s, a, s') 이다.

V(s)는 상태 s의 value이고,

Q(s, a)는 상태 s에서 행동 a를 취했을 때 얻을 수 있는 V(s')에 할인율을 적용한 결과이며, 해당 행동을 취했을 때 어떤 V(s')값을 얻을 수 있는지에 대한 quality를 나타낸다.

그리고 더 빠른 시일에 획득하는 보상이 선호되기에 할인율 𝜸가 적용된다.

 

만약 agent가 처한 환경의 모든 것을 알고 있고, T(s, a, s')와 R(s, a, s')을 알고 있어서 이를 의사결정에 적용할 수 있다면 아래와 같이 재귀적으로 각 상태 s의 V(s)와 Q(s,a)를 구할 수 있다.

V(s)와 Q(s,a) 값 구하기

즉, agent가 행동을 취하지 않고도 각 상태의 값을 재귀적으로 계산하여 배열 혹은 각 환경을 대변할 수 있는 자료구조에 저장할 수 있는 것이다.

V(s) 값, Q(s,a) 값을 저장한 표 (Slide credit: CS188 of Klein and Abbeel)

 

이렇듯 환경의 모든 상황을 사전에 파악할 수 있어서 agent가 직접 환경에 투입된 채 행동을 취하지 않고도 Q(s,a)와 V(s) 학습하는 방법을 'Offline learning'이라고 한다.

 

하지만 현실세계, 혹은 확률적으로 행동하는 적이 있는 게임 상황에서는 상태 s에서 어떤 보상을 얻을 수 있을지, 상태 s에서 행동 a를 취했을 때 s'으로 이동할 확률이 몇 %일지 명확히 알 수 없을 때가 많다. 즉 T(s,a,s')와 R(s,a,s')을 모르는 것이다.

 

T(s,a,s')과 R(s,a,s')의 값을 알지 못하면 V(s)와 Q(s,a)를 어떻게 알아낼 수 있을까?

간단하다. 직접 불구덩이에 몸을 던지면 된다.

 

이때 활용할 수 있는 학습 방법이 Q-learning이며, Q-learning은 실제 환경, 게임에 들어가서 직접 행동을 취함으로써(불구덩이에 몸을 던짐으로써) Q(s,a)와 V(s)를 학습하는 'Online learning'이다. 이 학습 방법을 활용하면 항상 최적의 행동 a를 취하지 않고도(초기에는 최적의 행동이 무엇인지 조차 모름) 심지어는 확률적으로 행동을 취해도 여러 번의 시도 끝에 최적의 Q(s,a)와 V(s)를 얻을 수 있다.

 

Q-learning

Q-learning에서는 불구덩이 속에 몸을 던지고 값을 얻는다고 표현했다. 즉 한 번 불구덩이에 몸을 던질 때마다 agent는 sample을 얻는다. 그리고 이를 아래와 같이 표현할 수 있다.

Sample

상태 s에서 행동 a를 취했을 때의 Q(s,a)는 상태 s'에서의 보상과, 상태 s'에서 취할 수 있는 행동 a'을 취했을 때 얻을 수 있는 최대 Q(s',a') 즉 V(s')에 할인율을 적용하고 이 둘을 더함으로써 알아낼 수 있다.

 

불구덩이 속에 던지고 얻은 sample로 Q(s,a), 즉 우리의 학습 model의 결과물을 업데이트 하는 것이다.(앞으로는 model로 표현하겠다.)

 

그렇다면 이렇게 한 번 불구덩이에 몸을 던지고 얻은 sample로 model을 업데이트 했으면 끝일까? 그렇지 않다.

 

우리가 측정한 model Q(s, a)가 optimal한 값이 되기 위해서는 반복적으로 수행하며 이를 업데이트 할 필요가 있다. 

반복적으로 불구덩이에 몸을 던져 sample을 얻고, sample과 기존에 우리가 측정한 model의 차이를 좁혀야 optimal한 값을 얻을 수 있는데, 우선 아래 그림은 sample과 model의 차이를 표현한다.

Difference

그리고 아래와 같이 기존 model에 difference를 더해줌으로써 optimal한 값에 가까워질 수 있다.

Q-learning

 

그런데 못 보던 녀석이 등장했다. 바로 𝝰다. 𝝰는 'learning rate'으로, sample과 model의 차이를 기존 model에 얼마나 반영할 지 설정하는 값이며,

0 < 𝝰 < 1이다.

𝝰가 클수록 새로운 sample을 model에 반영하는 비율이 높아지며, 이는 아래 그림을 통해 확인할 수 있다.

model + diff

첫 번째 줄이 뜻하는 바는 기존 model에 learning rate을 곱한 차이를 더해주는 것이고, 두 번째 줄은 learning rate 𝝰를 분배한 것이다.

 

기존 model에 sample을 얼마나 반영할 지 아래 그림을 통해 더 직관적으로 확인할 수 있는데, 𝝰가 1에 가까울수록(1 - 𝝰)를 곱하는 model은 비중이 작아질 것이고, 𝝰를 곱하는 sample의 비중은 더 커질 것이다.

 

Q-learning

 

하지만 이러한 학습 방법도 여러 문제에 봉착하는데, 가장 큰 문제는, 현실 세계 혹은 게임 세계의 환경은 매우 커서 위 Q(s, a) 값을 테이블에 저장하고, 이를 지속적으로 업데이트 하는 것이 공간 비효율적이라는 문제점이다. 그리고 이를 해결하기 위해 agent가 처한 상태 s의 feature를 파악하고, 이를 통해 상태 s를 일반화한 뒤 각 feature별 가중치를 곱하는 방식인 Approximate Q-learning을 활용할 수 있다.

'CS > AI' 카테고리의 다른 글

Q-learning(Reinforcement learning) 2  (0) 2022.06.18

댓글