파이썬과 케라스로 배우는 강화학습 | 강화학습 기초 8
파이썬과 케라스로 배우는 강화학습 Chapter 4 정리
책 정보 📖
- 책 제목: 파이썬과 케라스로 배우는 강화학습
- 글쓴이: 이웅원, 양혁렬, 김건우, 이영무, 이의령
- 출판사: 위키북스
- 발행일: 2020년 04월 07일
- 챕터: Chapter 4. 강화학습 기초 3: 그리드월드와 큐러닝
책소개
강화학습의 기초부터 최근 알고리즘까지 친절하게 설명합니다! ‘알파고’로부터 받은 신선한 충격으로 많은 사람들이 강화학습에 관심을 가지기 시작했다. 하지만 처음 강화학습을 공부하는 분들을 위한 쉬운 자료나 강의를 찾아보기 어려웠다. 외국 강의를 통해 어렵게 이론을 공부하더라도 강화학습을 구현하는 데는 또 다른 장벽이 있었다. 이 책은 강화학습을 처음 공부하는 데 어려움을 겪는 독자를 위해 이론부터 코드 구현까지의 가이드를 제시한다.
특히 이번 개정판에서는 텐서플로 버전업에 맞춰서 코드를 업데이트하고 전반적인 이론 및 코드 설명을 개선했다. 그리고 실무에서 많이 활용될 수 있는 연속적 액터-크리틱 알고리즘을 추가했다.
주요 내용
- 강화학습의 기초 - 시간차 예측
몬테카를로 예측의 한계를 극복하기 위해 등장한 시간차 예측에 대해 알아보자. 시간차 예측은 강화학습에서 가장 중요한 아이디어 중 하나로, 실시간 학습을 가능하게 한다.
시간차 예측의 필요성
몬테카를로 예측의 단점
강화학습에서 가장 중요한 아이디어 중 하나가 시간차다.
몬테카를로 예측의 단점:
- 실시간이 아니라는 점이다
- 가치함수를 업데이트하기 위해서는 에피소드가 끝날 때까지 기다려야 한다
- 에피소드의 끝이 없거나 길이가 긴 경우 몬테카를로 예측은 적합하지 않다는 의미다
시간차 예측의 장점
시간차 예측은 몬테카를로 예측과는 다르게 타임스텝마다 가치함수를 업데이트한다. 에이전트는 실시간으로 예측과 현실의 차이를 학습할 수 있게 된다.
몬테카를로 예측 vs 시간차 예측
몬테카를로 예측의 업데이트
\[V(S_t) \leftarrow V(S_t) + \alpha(G_t - V(S_t))\]- 몬테카를로 예측의 가치함수 업데이트 식이다
- $S_t$는 한 에피소드 내에서 방문한 상태들, $G_t$는 상태로부터 받은 보상들의 합인 반환값이다
- $G_t$는 에피소드가 끝나야 그 값을 알 수 있다
가치함수의 두 가지 정의
\[v_\pi(s)=E_\pi[G_t | S_t = s]\]반환값에 대한 기댓값으로 정의하는 가치함수다. 몬테카를로 예측에서는 기댓값을 계산하지 않고 샘플링을 통해 예측한다.
\[v_\pi(s) = E_\pi[R_{t+1} + \gamma v_\pi(S_{t+1}) | S_t = s]\]다른 형태의 가치함수 정의다. 시간차 예측에서는 $G_t$를 $R_{t+1} + \gamma v_\pi(s^\prime)$으로 나타낸 가치함수 정의를 사용한다.
시간차 예측의 핵심 아이디어
- $R_{t+1} + \gamma v_\pi(s^\prime)$ 값을 다이내믹 프로그래밍처럼 ‘계산’하는 것이 아닌 샘플링하여 그 값을 현재의 가치함수로 업데이트한다
- 가치함수의 업데이트는 실시간으로 이루어지며 몬테카를로 예측과는 다르게 한 번에 하나의 가치함수만 업데이트한다
시간차 예측의 업데이트 방식
시간차 예측 업데이트 식
\[V(S_t) \leftarrow V(S_t) + \alpha(R_{t+1} + \gamma V(S_{t+1}) - V(S_t))\]시간차 예측에서 가치함수의 업데이트 식이다:
- 매 타임스텝마다 에이전트는 현재의 상태 $S_t$에서 행동을 하나 선택한다
- 환경으로부터 보상 $R_{t+1}$을 받고 다음 상태 $S_{t+1}$을 알게 된다
- 에이전트는 현재 가지고 있는 가치함수 리스트에서 다음 상태에 해당하는 가치함수 $V(S_{t+1})$을 가져올 수 있다
- 그러면 바로 $R_{t+1} + \gamma V(S_{t+1})$를 계산할 수 있고 계산 결과가 $S_t$의 가치함수 업데이트의 목표가 된다
업데이트 구성 요소
- $R_{t+1} + \gamma V(S_{t+1})$ = 업데이트의 목표
- $\alpha(R_{t+1} + \gamma V(S_{t+1}) - V(S_t))$ = 업데이트 크기
시간차 에러
2번에서 $R_{t+1} + \gamma V(S_{t+1}) - V(S_t)$는 시간차 에러라고 한다.
부스트트랩(Bootstrap)의 개념
예측으로 예측하기
시간차 예측에서 업데이트의 목표는 반환값과 달리 실제의 값은 아니다.
- $V(S_{t+1})$은 현재 에이전트가 가지고 있는 값이며 에이전트는 이 값을 $S_{t+1}$의 가치함수일 것이라고 예측하고 있다
- 다른 상태의 가치함수 예측값을 통해 지금 상태의 가치함수를 예측하는 이러한 방식을 부스트트랩이라고 한다
- 즉, 업데이트 목표도 정확하지 않은 상황에서 가치함수를 업데이트하는 것이다
시간차 예측의 수렴성과 특징
수렴성
시간차 예측은 에피소드가 끝날 때까지 기다릴 필요 없이 바로 가치함수를 업데이트할 수 있다. 하지만 이렇게 업데이트를 하여도 몬테카를로 예측과 같이 원래 가치함수 값에 수렴할 수 있을까?
→ 충분히 많은 샘플링을 통해 업데이트하면 참 가치함수에 수렴하며 많은 경우에 몬테카를로 예측보다 더 효율적이고 빠르게 참 가치함수에 근접한다.
시간차 예측의 장단점
장점
- 실시간 업데이트: 에피소드가 끝날 때까지 기다릴 필요가 없다
- 효율성: 많은 경우에 몬테카를로 예측보다 더 효율적이고 빠르게 참 가치함수에 근접한다
- 즉시 학습: 현재 상태에서 행동을 한 번 하고 다음 상태를 알게 되면 바로 이전 상태의 가치함수를 업데이트할 수 있다
단점
- 초기값 의존성: 시간차 예측은 몬테카를로 예측보다 초기 가치함수 값에 따라 예측 정확도가 많이 달라진다는 단점이 있다
- 부스트트랩 편향: 정확하지 않은 예측값으로 다른 예측값을 업데이트하므로 편향이 발생할 수 있다
시간차 예측의 동작 과정
시간차 예측에서 에이전트는 다음과 같은 과정을 반복한다:
- 현재 상태 $S_t$에서 행동 선택
- 환경으로부터 보상 $R_{t+1}$과 다음 상태 $S_{t+1}$ 획득
- 현재 가치함수 $V(S_t)$ 업데이트: \(V(S_t) \leftarrow V(S_t) + \alpha(R_{t+1} + \gamma V(S_{t+1}) - V(S_t))\)
- 다음 상태로 이동하여 과정 반복
이러한 과정을 통해 에이전트는 각 타임스텝마다 즉시 학습하며, 에피소드가 진행되는 동안 지속적으로 가치함수를 개선해나간다.
시간차 예측의 의의
시간차 예측은 강화학습에서 매우 중요한 개념이다:
- 실시간 학습을 가능하게 한다
- 부스트트랩이라는 아이디어를 도입한다
- 몬테카를로 예측과 다이내믹 프로그래밍의 장점을 결합한다
- 후에 살펴볼 시간차 제어(SARSA, Q-Learning)의 기반이 된다
시간차 예측은 예측과 현실의 차이를 실시간으로 학습함으로써 에이전트가 더욱 효율적으로 환경을 이해할 수 있게 해주는 핵심적인 방법이다.