Game AI

강화학습_Q-Learning #1

tsyang 2023. 12. 19. 22:53

 

 

 

 

개요

 

강화학습이란 경험에 기초하여 학습하는 기법들을 칭한다.

 

강화학습은 일반적으로 3가지 요소를 지닌다

  1. 탐색 전략 : 게임 중 다양한 행동을 시도함
  2. 강화 함수 : 취한 행동을 평가함.
  3. 학습 규칙 : 위 두 가지를 연결함.

강화학습은 신경망으로 할 수 있지만 게임에서는 Q-Learning을 쓰는 것이 좋은 시작점이 될 수 있다. Q-Learning은 구현이 쉽고 게임이 아닌 산업에서 많이 쓰여졌으며 이론에 대한 깊은 이해 없이도 사용할 수 있다.

 

 

 

Q-Learning

 

Q-Learning은 취할 수 있는 액션들을 탐색하며 관련된 정보들을 저장하고 업데이트한다

 

Q러닝은 게임 세계를 State machine으로 다룬다. 알고리즘은 항상 어떤 상태를 가지며, 상태는 캐릭터의 환경이나 내부 정보들을 기록한다. 당연하지만 상태에 포함되지 않은 정보는 학습할 수 없다. 

 

Q러닝은 model-free 알고리즘으로도 알려져 있는데, 게임 세계가 어떻게 동작하는지에 대한 모델이 필요가 없기 때문이다. Q러닝은 모든것을 상태로 취급하기에 구현하기가 더 쉽다.

 

각 상태에서, 알고리즘은 현재 어떤 액션이 가능한지를 알아야 한다. 예를 들어 '문 열기'같은 행동은 문 근처에서만 가능할 것이다. 

 

캐릭터가 현재 상태에서 행동을 취하고나면, 강화 함수가 이에 대해 피드백을 준다. 피드백은 보통 [-1, 1]사이의 수를 사용한다. Q러닝 알고리즘은 상태를 다루기에 문맥을 다룰 수는 없는데(문맥을 상태로 나타내지 않는 한), 행동이 전반적으로 얼마나 좋았는지를 다루기 때문에 어느정도 이를 보완할 수 있다.

 

행동을 취하고 나면, 캐릭터는 보통 새로운 상태에 진입한다. 캐릭터가 같은 상태에서 같은 행동을 한다고 꼭 동일한 상태로 이동하지는 않는다. 외부 환경에 따라 상태가 바뀔 수 있기 때문이다. 다르게 말하면 외부 환경도 상태에 포함하기에, 캐릭터가 알 수 없는 외부환경, 즉 불확실성을 어느정도 처리할 수 있다.

 

이전 상태, 행동, 평가, 새로운 상태를 경험 튜플(experience tuple)이라 부르며, $<s,a,r,s'>$라 쓴다.

 

 

학습 방법

Q러닝은 시도한 행동과 그때의 상태에 대한 Q-Value들을 모두 저장한다. Q-Value는 그 상태일때 취했던 행동이 얼마나 좋은지를 나타낸다.

 

앞서 말한 경험 튜플에서 $s,a$ 즉, 이전 상태와 행동은 저장된 Q값을 찾기 위해 사용되며 $r,s'$ 즉, 평가와 새로운 상태는 Q값을 업데이트 하기 위해 사용된다. 업데이트는 다음과 같은 수식을 사용한다.

 

$$Q(s,a) = (1-{\alpha})Q(s,a)+{\alpha}(r+{\gamma}max(Q(s',a'))$$

 

${\alpha}$는 학습율(learning rate)이고 ${\gamma}$는 감가율(Discount rate)이다. $a'$은 새로운 상태($s'$)에서의 최선의 행동이다. 

 

$Q(s,a)$는 s,a일때의 Q값을 의미한다.

 

 

탐색 전략

어떤 행동을 시도해볼지에 대한 정책이 탐색 전략이라고 했다. 즉, 탐색 전략은 경험 튜플을 만들어 내기 위해 필요하다. 그러나 탐색 전략은 엄밀히 Q러닝의 일부는 아니다. 굳이 탐색 전략이 없더라도 플레이어의 행동을 기반으로 경험 튜플을 생성할 수 있다.

 

기본적인 탐색 전략기본적으로 최선의 행동을 취하되, 가끔 임의의 행동을 취하는 것이다. 얼마나 자주 임의의 행동을 취할지는 인자에 의해 결정된다.

 

 

수렴과 종료

Q값들이 변화하지 않는다면 결과가 수렴되었고 학습이 종료됐다고 볼 수 있다. 그러나 현실적으로는 충분한 시간이 없으므로 수렴이 완료되지 않아도 Q값들을 사용한다.