강화학습 스터디 4주차
(파이썬과 케라스로 배우는 강화학습을 읽고 요약정리 한 것입니다.)
1. 시간차 예측 Temporal Difference Prediction
이전에 살펴본 몬테카를로 예측의 단점은 실시간이 아니라는 점이다. 몬테카를로는 하나의 에피소드가 끝날 때까지 기다려야하며, 에피소드의 끝이 없거나 길이가 길다면 이 방법은 적합하지 않다.
이를 해결할 수 있는 방법이 시간차 예측 TD Prediction 이다. 시간차 예측은 타임스텝마다 가치함수를 업데이트하는 방법이다.
시간차 예측에서 매 타임스텝마다 에이전트는 현재의 상태 S에서 행동을 하나 선택하고 보상 R을 받고 다음 상태 S'를 알게 된다.
그렇다면 에이전트는 현재 가지고 있는 가치함수 리스트에서 다음 상태에 해당하는 가치함수 V(S')를 가져올 수 있고, 바로 R+𝛾V(S')를 구할 수 있다. 그리고 이것이 S의 가치함수 업데이트의 목표가 된다.
시간차 예측에서는 업데이트의 목표 값이 실제 값이 아니라 예측 값이다. 이처럼 다른 상태의 가치함수 예측값을 통해 지금 상태의 가치함수를 예측하는 방식을 부트스트랩 Bootstrap 이라고 한다.
2. 살사 Sarsa
정책 이터레이션은 정책 평가와 정책 발전으로 나누어져 있었고, 이 과정을 반복해서 실행하면 결국 최적 가치함수로 수렴하게 된다.
정책 평가와 발전의 단계를 매번 번갈아 가면서 실행하는 정책 이터레이션을 GPI(Generalized Policy Iteration) 이라고 한다. GPI에서 정책 발전의 식을 보면 상태변환확률의 값을 알아야 하는데, 이 값은 모델을 알아야 한다.
이 대신 탐욕 정책에서 현재 상태의 큐함수를 보고 판단한다면 모델을 몰라도 된다. 따라서 시간차 제어(시간차 예측과 탐욕정책이 합쳐진 것)에서 업데이트 하는 대상은 가치함수가 아닌 큐함수가 되어야 한다.
위 식을 보면 다음 상태의 큐함수를 알기 위해서는 다음 상태에서 취할 행동까지 선택해야 한다.
다시 말해, 우리가 큐함수를 업데이트하기 위해 필요한 샘플은 St, At, Rt+1, St+1, At+1 이고, 이를 살사 SARSA 라고 부른다.
살사는 현재 가지고 있는 큐함수를 토대로 탐욕 정책으로 모으고, 그 샘플로 큐함수를 업데이트 한는 과정을 반복하는 것이다.
우리는 앞에서도 greedy policy를 많이 써왔지만, 이 방법은 초기 에이전트에게 잘못된 학습으로 가게 할 가능성이 있다.
이 문제는 강화학습의 중요한 문제로 탐험 Exploration 의 문제이다.
따라서 greedy policy를 대체할 수 있는 ε-greedy policy (ε만큼의 확률로 엉뚱한 행동을 선택) 로 사용할 것이다.
3. 큐러닝 Q-learning
살사에서 ε-greedy policy 를 사용하여 큐함수를 업데이트 했다. 만약 ε의 확률로 엉뚱한 행동 a를 선택하여 리워드가 감소하는 결과를 얻었을 때, 업데이트 되는 행동 a의 큐함수는 값이 작아지게 된다. 이후에 다시 이전과 같은 상태가 되면 에이전트는 행동 a를 하는 것은 좋지 않다고 판단한다. 이 때 그리드월드에서는 에이전트가 갇힐 수 있는 현상이 발생한다.
살사는 온폴리시 시간차 제어 On-Policy TD Control, 즉 자신이 행동하는 대로 학습하는 시간차 제어이다.
탐험을 위해 선택한 ε-greedy policy 때문에 에이전트는 오히려 잘못된 정책을 학습할 수 도 있다.
그러나 위에서도 말했듯이 탐험은 강화학습의 중요한 문제이고, 이러한 딜레마를 해결하기 위해 오프폴리시 시간차 제어 Off-Policy TD Control (대표적으로 큐러닝 Q-learning) 사용한다.
- On-Policy: 행동하는 정책과 목표 정책이 동일. 하나의 정책으로 행동하고 학습.
- Off-Policy: 현재 행동하는 정책과는 독립적으로 학습. 즉, 행동하는 정책과 학습하는 정책을 따로 분리하여 에이전트는 행동하는 정책으로 지속적인 탐험을 하고 학습은 따로 목표 정책을 둠.
그렇다면 큐러닝에서는 어떻게 policy를 분리할까?
에이전트는 다음 상태에서 어떤 행동을 했는지와 관계없이 현재 상태 s의 큐함수를 업데이트 할 때는 다음 상태의 최대 큐함수를 이용한다.
따라서 현재 상태의 큐함수를 업데이트하기 위해 필요한 샘플은 St, At, Rt+1, St+1 이다.
살사와 큐러닝의 차이는 온폴리시, 오프폴리시의 차이일 뿐이다.