저번의 SARSA에 이어서 Q-learning을 알아보자.
SARSA 마지막에 SARSA의 단점을 설명했었다. 환경에 따라 갇혀버리는 현상이 나타나는데 이는 Actiont+1때문에 발생하는 현상이라고 설명했다. 이러한 단점을 극복한 방법 중 한 개인 Q-learning을 설명한다.

강화 학습은 어떠한 정책을 따라서 행동을 계속하게 되면 에피소드가 끝날 때 얻는 보상이 최대화되도록 하는 정책을 찾는 과정이다.

그래서 상태 s 에서 V 함수의 의미는 상태가 s일 때 에피소드가 끝날 때까지 받는 보상의 기댓값을 의미한다. 따라서 시작 상태 sinit이 최대가 되는 정책 π를 찾게 되면 그것이 최적 정책이 된다.

V 함수와 굉장히 비슷한 의미를 가진 Q 함수를 정의한다. V함수와 비교하면 action이 들어간 함수로 강화학습에서 중요한 함수 중 한 개다. V 함수는 상태 s에서 가능한 모든 action을 해보고 보상의 기댓값을 계산한다. 하지만 Q함수는 상태 s에서 하나의 action을 해보고 그에 대한 보상의 기댓값을 계산한다. 다른 말로는 현재 하려고 하는 action의 가치를 평가할 수 있다. 따라서 매번 Q 함수의 최댓값을 가지는 action을 취하게 된다면 최적 정책을 가질 수 있다.

Q를 업데이트 하는 방법은 위 사진과 같다. 앞에서 말했듯이 Q 함수의 최댓값을 가지는 action을 취하는 것은 V함수의 최적 값이다. 따라서 벨만 방정식에 있는 V 함수 또한 Q로 바꿔서 recursive 하게 바꿀 수 있다. 하지만 여기서 강화 학습의 굉장히 고질적인 문제가 발생한다.
Q 함수를 업데이트 하는데 Q 함수의 approximation을 사용하기 때문에 bootstrap 문제가 발생해버린다. 간단하게 말하자면 bootstrap은 approximation을 이용한 어떠한 값을 업데이트하는 식에 또 다른 approximation이 들어가면 생기는 문제점이다. 이 문제를 해결하기 위한 연구가 강화 학습에서 핫한 주제 중 한 개다.

Q 함수 업데이트 과정을 보여주는 예제이다. agent가 initial state에 있을 때 오른쪽으로 가는 action을 취하면 업데이트를 위해 다음 state의 action은 max값을 가지는 action을 하게 된다. 사진에서는 오른쪽으로 가는 action이 100으로 가장 크기 때문에 그 값을 사용한다. 중요한 것은 만약 보상이 음수가 아닌 이상 업데이트를 할 때마다 업데이트된 Q 함수는 이전보다 더 좋은 값을 가지게 된다. 따라서 계속해서 업데이트를 진행하다 보면 최적의 Q 함수로 수렴한다는 것을 보여준다.

Q 함수의 의사결정 코드이다. SARSA와 비교해 본다면 업데이트 식에 max를 사용한다는 것이다. 이렇게 해줌으로 SARSA에서 언급한 갇혀버리는 현상을 극복할수있다. 왜냐하면 SARSA에서 갇혀버리는 문제가 생기는 근본적인 원인은 다음 action을 정책에 따라서 취했기 때문이다. 하지만 Q-learning에서는 그러지 않고 max 값을 가지는 action을 취하기 때문에 그럴 일이 발생하지 않는다.

깃허브에 위 사진과 같은 환경에서 q-learning을 적용한 코드를 만들어 봤다.
https://github.com/KwanWooPark97/RL_basic/tree/master/q_learning
GitHub - KwanWooPark97/RL_basic
Contribute to KwanWooPark97/RL_basic development by creating an account on GitHub.
github.com
'강화학습' 카테고리의 다른 글
Determinitic Deep PG(DDPG) 공부하기 (0) | 2022.12.14 |
---|---|
Advantage Actor Critic (A2C) 정리 (0) | 2022.12.08 |
Deep Q-Network(DQN) 공부하기 (0) | 2022.11.29 |
SARSA (0) | 2022.11.03 |
Policy iteration and Value iteration (0) | 2022.11.02 |