• PyTorch를 활용한 강화학습/심층강화학습 실전 입문
  • 오가와 유타로 지음/심효섭 옮김
  • 위키북스


  • 에이전트가 목표로 곧장 향하도록 정책을 학습시켜보자.
    • 정책반복 : 정책에 따라 목표에 빠르게 도달했던 경우에 수행했던 행동을 중요한 것으로 보고, 이때의 행동을 앞으로도 취할 수 있도록 정책을 수정하는 방법 -> 결과가 좋았던 경우에 취했던 행동을 중시
    • 가치반복 : 목표 지점부터 거슬러 올라가며 목표 지점과 가까운 상태(목표 지점 한 단계 전, 두 단계 전 등)로 에이전트를 유도해 오는 방법 -> 목표 지점 외의 지점에도 가치를 부여
  • 정책경사(policy gradient) 알고리즘 : 정책반복 알고리즘 중 하나
    • 여기서는 소프트맥스 함수(softmax)를 사용한다. 소프트맥스 함수는 머신러닝, 딥러닝에서 널리 사용되는 함수로서 다음과 같이 정의된다.

    • Na는 선택 가능한 행동의 가짓수를 의미하며, 미로에서는 상, 하, 좌, 우 4방향이 있으므로 4가 된다.
    • theta에 지수함수 exp를 적용한 다음 비율을 계산하도록 한 것이다.
    • 는 역온도(inverse temperature)라고 한다. 역온도가 작아질수록 행동이 무작위로 선택된다.
  • 정책경사 알고리즘에 따라 에이전트 이동시키기
    • 소프트맥스라는 함수를 정의하여 이전 코드에서 비율을 계산하는 부분에 exp(theta)로 바꿔서 작성한다.
    • 그리고 초기 정책을 계산한다.

    • 처음에는 바꾸기 전과 결과가 같지만 학습에 따라 달라진다.
    • 이번에는 에이전트를 움직이는 함수를 구현하고 반환값에 상태 외에 취했던 행동을 함께 반환하도록 한다.
    • 목표 지점에 다다를 때까지 에이전트를 움직이는 함수도 조금 수정하여 상태와 행동을 모두 기록하도록 한다.

  • 정책경사 알고리즘으로 정책 수정
    • 정책경사 알고리즘은 아래 식과 같이 파라미터(theta)를 수정한다.

    • 위 식에서 는 상태(위치) si에서 행동 aj를 취할 확률을 결정하는 파라미터다.
    • 는 학습률이라고 하며, 가 1번 학습에 수정되는 정도를 제어한다. 값이 너무 작으면 학습 속도가 늦어지고, 너무 크면 학습이 잘 되지 않는다.
    • N(si,aj)는 상태 si에서 행동 aj를 취했던 횟수
    • P(si,aj)는 현재 정책하에서 상태 si일 때 행동 aj를 취할 확률
    • N(si,a)는 상태 si에서 행동을 취한 횟수의 합계
    • T는 목표 지점에 이르기까지 걸린 모든 단계의 수
    • 이를 함수로 정의하여 실행시켜보면

    • 구체적인 수치는 실행할 때마다 바뀌겠지만 처음에 균등분포에 가까웠던 각 행동의 확률이 변화한 것을 알 수 있다.
    • 파이썬의 리스트 컴프리헨션 문법을 사용해 상태 si에 대한 것만을 골라낸다.
    • 이제 반복해서 파라미터를 수정하도록 하는 반복문을 구현한다.

    • 이 코드를 실행하면 각 시행에 걸린 단계 수와 정책의 변화에 대한 절댓값의 합을 출력한다.
    • 정책의 변화량이 보다 작아지면 학습을 종료한다.
    • 정책경사 알고리즘으로 학습한 정책을 확인해보자

    • 위의 정책을 보면 s0에서 s1로 갈 경우 막다른 길이 나온다는 것을 학습하여 오른쪽 으로의 정책값이 줄어들었다는 것을 알 수 있다.
    • 마찬가지로 여러 위치에서 목표하는 지점으로 가는 방향이 아닌 경우의 정책값이 애매한 값으로 줄어든 것을 확인할 수 있다.
    • 애니메이션으로 시각화 : 이전 코드와 다른점은 행동과 상태 정보가 함께 담긴 정보를 사용한다는 점이 다르다.

 

 

'강화학습' 카테고리의 다른 글

미로찾기를 위한 강화학습 구현 - 무작위  (0) 2019.03.12

+ Recent posts