본문 바로가기

강화학습

9. [강화학습] REINFORCE

반응형

 안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다.

오늘 알아볼 내용은 'REINFORCE'입니다. 

 

 저의 경우 2016년 알파고와 이세돌의 바둑 대결로 인해 인공지능에 관심이 많이 생기기 시작했고 이후 구글의 딥마인드 팀에서 발표한 DQN논문 특히 아타리사의 '브레이트 아웃' 게임을 하는 것을 보고 많은 감명을 받아 '강화 학습'이라는 학문에 많은 관심을 갖게 되었습니다. 그래서 오늘부터는 강화 학습에 대해 차분히 정리를 해보도록 하겠습니다.

 

 저는 '파이썬과 케라스로 배우는 강화 학습'이라는 책을 읽으면서 독학을 하였습니다. 이 글은 이 책을 참고하여 제작합니다.(광고 아닙니다!!)

 

 저번 시간까지 배운 알고리즘들은 '가치 기반 강화 학습(Value-based RL)'입니다. 즉 에이전트가 가치 함수를 기반으로 행동 및 학습을 했습니다. 반면 이번 시간부터 알아볼 알고리즘은 '정책 기반 강화 학습(Policy-based RL)'입니다. 정책 기반 강화 학습에서는 가치 함수를 이용해 행동을 선택하지 않고 상태에 따라 바로 행동을 선택합니다. 즉 정책을 인공신경망(NN)을 통해 직접적으로 근사 시킵니다. 이때 출력층의 활성 함수는 Softmax함수를 사용합니다. 그 이유는 Softmax함수는 합이 '1'즉 확률로써 나타나기 때문입니다. 밑의 수식은 f(x)가 i번째 행동을 할 확률입니다.

Softmax 함수

 

 위에서 정책을 인공신경망을 통해 직접적으로 근사시킨다고 했는데, 이를 식으로 나타내면 아래와 같습니다. 여기서 theta라는 정책 신경망의 가중치값을 이용하여 정책을 근사한 것을 알 수 있습니다. 

 

 누적 보상은 최적화하고자 하는 목표함수가 되며 최적화를 하게 되는 변수는 인공신경망 가중치 theta입니다. 이를 식으로 나타내면 아래와 같습니다. 

 

이를 최적화하는 방법은 미분값을 이용하여 '경사 상승법(gradient ascent)'을 이용하면 됩니다. 여기서 잠깐! '경사 상승법'이란 '경사 하강법'의 반대 개념으로 경사 즉 기울기를 향해 올라간다는 의미입니다. 그 이유는 loss함수에서는 loss값을 최소화해야 했기 때문에 '경사 하강법'을 사용했지만, 여기서는 누적 보상을 최대화해야 하기 때문에 '경사 상승법'을 사용하는 것입니다. 이를 식으로 나타내면 아래와 같습니다. 보시다시피 '+'를 사용한 것을 알 수 있습니다. 이렇게 경사 상승법을 따라 근사된 정책을 업데이트하는 방식을 폴리시 그라디언트(Policy Gradient)라고 합니다. 

 

 위와 같이 폴리시 그라디언트(Policy Gradient)를 하기 위해서는 목표함수 J의 그라디언트를 알아야 합니다. 이를 정리한 것이 위의 그림의 식들입니다. 간단히 설명하자면 목표 함수 J는 상태 s0에 대한 가치 함수라고 할 수 있습니다. 

 

이를 미분하면 Policy Gradient Theorem에의해서 아래와 같은 식이 됩니다. 여기서 d(s)는 에이전트가 상태 s에 있을 확률을 의미하고, pi(a|s)는 에이전트가 상태 s에서 행동 a를 할 확률을 의미합니다. 따라서 이 둘을 곱하면 에이전트가 특정 상태 s에서 행동 a를 할 확률을 나타냅니다. 

 

다시 log 형태로 바꾸어주면 다음과 같습니다. 

 

위에서 d(s) * pi(a|s)는 확률을, log는 확률변수를 의미하므로 이를 기댓값으로 나타낼 수 있습니다. 따라서 이는 다음과 같게 됩니다. 

 

폴리시 그라디언트에서는 행동을 선택하는 데 가치함수가 꼭 필요하지 않습니다. 따라서 현재 에이전트는 정책만 가지고 있고 가치 함수 혹은 큐 함수를 가지고 있지 않기 때문에 q(s, a)를 구할 수 없습니다. 때문에 이를 반환 값 Gt로 대체하는 것입니다. 이렇게 반환 값 Gt를 사용하는 알고리즘이 REINFORCE알고리즘입니다. 

 

  지금 까지 저희는 'REINFORCE'에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 궁금한 사항 혹은 앞으로 다루어 주었으면 좋을 주제가 있으시면 댓글 남겨주시면 감사하겠습니다. 저는 '코딩 오페라'의 'Master.M'이었습니다. 감사합니다.

반응형

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

11. [강화학습] 연속적인 A2C  (0) 2022.05.23
10. [강화학습] A2C  (0) 2022.04.26
8. [강화학습] DQN(카트폴)  (0) 2022.04.05
7. [강화학습] 딥살사(Deep SARSA)  (0) 2022.04.04
6. [강화학습] 큐러닝(Q-learning)  (0) 2022.03.25