[강화학습] REINFORCE (PG)

Eugene CHOI·2021년 5월 11일
0

Machine Learning

목록 보기
8/13
post-thumbnail

우리가 실제로 문제를 해결하는데 있어서는, 정확한 행동에 대한 가치 자체의 값보다는 어떤 정책에 따라서 어떤 행동을 선택해야 하는지가 더 중요합니다.

하지만 우리가 지금까지 Q-learning에 기초한 이론을 통하여 잘 학습해왔는데, 굳이 이제와서 정책을 사용할 필요가 있을까요?

지금까지 저희가 학습한 환경들은 모두 이산 행동 또는 10개가 넘지 않는 작은 action space를 가지는 환경입니다.
만약 수 많은 행동이 있거나 극단적으로 연속적인 행동 공간(스티어링 휠의 각도, 바퀴의 속도 등)을 가진다면 비선형 신경망으로 표현되는 Q(s,a)Q(s,a)를 기반으로 연속된 행동 중 최선의 행동을 찾는 것은 쉽지 않습니다.

가장 대표적인 정책 기반 학습법인 정책 그라디언트(policy gradient)를 통한 강화학습을 알아보겠습니다.

Policy gradient는 목표함수(JJ)를 최대화 하는 것이 목표입니다.

J=Q(s,a)logπ(as)J=Q(s,a) \log{\pi(a|s)}

신경망을 통한 학습에서는 일반적으로 손실 함수를 통해 표현하므로 손실함수(LL)을 다음과 같이 정의하겠습니다.

L=J=Q(s,a)logπ(as)L=-J=-Q(s,a) \log{\pi(a|s)}

그러면 손실함수 LL에 대한 그라디언트는 다음과 같습니다.

0L=Q(s,a)logπθ(as)\triangledown_0L=-Q(s,a)\triangledown\log\pi_\theta(a|s)

REINFORCE

(=Monte Carlo Policy Gradient)

지금까지는 신경망의 출력을 특정 행동에 대한 식별자로 하였습니다. 하지만 이와 같은 방법은 신경망의 가중치가 아주 조금만 변하더라도 다른 행동으로 바뀌어 버리는 수가 있습니다.
만약 신경망의 출력이 모든 행동에 대한 확률 분포라면 가중치의 작은 변화는 특정 행동의 확률을 약간 높이는 것과 같기 때문에 앞서 설명한 것과 같이 행동이 완전 뒤바뀌는 일이 일어나지 않습니다.
또한 상수 대신 Q(s,a)를 사용한다면 에피소드의 시작 부분의 좋은 행동에 대한 확률은 높이고, 나쁜 행동에 대한 확률은 낮출 수 있게 됩니다.
또한 확률 기반이기 때문에 인위적으로 ϵgreedy\epsilon-greedy 알고리즘을 통해 무작위 탐색을 하도록 명령할 필요가 없이 무작위의 신경망 가중치에 따라 자동으로 탐험이 수행됩니다.

이것이 REINFORCE 알고리즘이고, 다음과 같은 방법을 통해 수행됩니다.

  1. 신경망 가중치를 무작위로 초기화한다.
  2. N개의 에피소드를 플레이하면서 (s, a, r, s')를 저장한다.
  3. 에피소드 k의 각 단계 t에 대하여 할인된 총 보상을 Qk,t=i=0γiriQ_{k,t}=\displaystyle\sum_{i=0}\gamma^ir_i식에 따라서 계산한다.
  4. 모든 전이에 대한 손실 함수를 L=Q(s,a)logπL=-Q(s,a)\log\pi(a|s)$에 따라 계산한다.
  5. 손실 함수를 최소화하는 방향으로 SGD 업데이트를 수행한다.
  6. 수렴할 때까지 단계 2부터 반복한다.

문제점

  1. 최상의 행동값이 정책에 의존적이기 때문에 업데이트가 오래된 데이터는 학습하는데 있어 무의미합니다. 따라서 이전 정책에서 얻은 데이터를 학습에 활용할 수 없기 때문에 replay buffer를 사용할 수 없습니다. 이는 수렴은 더 빨라지지만 환경과의 상호작용이 훨씬 많이 필요해지는 장단점을 가지는 문제입니다.

  2. 완전한 에피소드에 대한 요구REINFORCE와 크로스 엔트로피 방법 모두 학습에 사용될 에피소드가 많을수록, 에피소드의 길이가 짧을수록 잘 작동합니다.(학습 초기에는 좋은 성능을 내기 힘들기 때문) 에피소드의 길이가 길다면 배치가 매우 커지고 환경과 수 많은 상호작용을 필요로하기 때문에 학습의 효율성, 샘플 효율성 측면에서 모두 좋지 않습니다.

  3. 높은 그라디언트 분산:PG의 그라디언트는 할인 보상에 비례하는 값을 갖게 됩니다. 그러나 이 보상은 환경에 따라서 크게 좌우됩니다. 예를 들어 CartPole의 경우 막대를 수직으로 잡고 있기만 하면 스텝마다 1의 보상을 받게 됩니다. 그러므로 리워드는 1~200 사이의 값을 가지게 됩니다. 매우 성공한 에피소드와 매우 실패한 에피소드 사이에는 200배의 영향력 차이가 있습니다. 그 말은 그냥 운 좋게 높은 스텝을 받은 에피소드가 최종 그라디언트에서 우세한 값을 가지기 때문에 큰 문제를 초래합니다.

    QQ에서 baseline이라는 값을 빼면 높은 분산을 가지는 PG를 바로잡을 수 있습니다.
    일반적으로 베이스라인으로 쓰는 값들은 다음과 같습니다.

    1. 상수값: 일반적으로 할인 보상의 평균값
    2. 할인 보상의 이동 평균
    3. 상태 s의 상태값 V(s)V(s)
  4. 탐험: 정책의 출력이 확률 분포로 표현되기 때문에 자동으로 탐색을 한다고 앞서 설명드렸습니다. 그대로만 된다면 이상적이겠지만 사실 지역적으로만 최적인 정책(local minima)에 수렴하여 환경 탐색을 중지할 가능성이 높습니다.

    엔트로피(HH)는 어떤 시스템의 불확실성을 측정하는 척도입니다. 정책의 엔트로피는 에이전트가 수행할 행동에 대해 얼마나 불확실한지를 보여줍니다.

    H(π)=π(as)logπ(as)H(\pi)=-\sum\pi(a|s)\log\pi(a|s)

    만약 모든 행동이 동일한 확률을 가진다면 우리는 어디로 갈지 전혀 예측할 수 없습니다. 이런 경우에는 가장 높은 엔트로피(불확실성)을 가집니다.
    반대로 한 행동이 1의 확률, 나머지 모든 행동은 0의 확률을 가진다면, 이때는 엔트로피가 최소가 됩니다.
    우리는 이 엔트로피를 활용하여 손실 함수에서 엔트로피를 빼 줌으로써 다음 취할 행동에 대하여 너무 확신하고 있는 에이전트에게 벌을 주어 탐색을 계속 시킬 수 있습니다.

  5. 샘플 간의 상호 연관 관계: DQN의 경우 replay buffer에서 랜덤으로 샘플링함으로써 근접한 샘플 간의 상호 연관 관계를 끊어 이 문제를 해결하였지만, PG는 on policy이기 때문에 이 방법을 사용할 수 없습니다.

    하나의 환경이 아니라 여러 개의 환경과 동시에 상호작용하여 생성되는 데이터를 학습데이터로 사용하면 이 문제를 해결할 수 있습니다.

profile
Hi, my name is Eugene CHOI the Automotive MCU FW developer.

0개의 댓글