본문 바로가기

강화학습

6. [강화학습] 큐러닝(Q-learning)

반응형

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

오늘 알아볼 내용은'큐 러닝(Q-learning)'입니다. 

 

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

 

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

 

https://codingopera.tistory.com/25

 

5. [강화학습] 살사(SARSA)

 안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 오늘 알아볼 내용은 '살사(SARSA)'입니다.  저의 경우 2016년 알파고와 이세돌의 바둑 대결로 인해 인공지능에 관심이 많

codingopera.tistory.com

 

 저번시간에 저희는 살사(SARAS) 알고리즘에 대해 알아보았습니다. 궁금하시거나 알고 싶으신 분들은 위의 링크를 참고하시기 바랍니다. 

 

 큐러닝(Q-learning)이란 현재 행동하는 정책과는 독립적으로 학습한다는 개념입니다. 이를 '오프폴리시'라고도 합니다. 즉 행동하는 정책과 학습하는 정책을 따로 분리합니다. 

 

SARAS 샘플

살사 알고리즘은 위와 같이 현재 상태, 행동, 보상 그리고 다음 상태, 행동을 통해 학습을 시킵니다. 그런데 agent가 exploration을 할때 A_t와 A_(t+1)를 모두 exploration 할 경우에는 성능이 오히려 떯어질수가 있습니다. 때문에 이 문제를 해결하기 위해서 마지막 A_(t+1)은 가장 큰 큐 함수를 따르게 하는 것입니다.(오프폴리시: A_t와 A_(t+1)을 분리)때문에 마지막 A_(t+1)은 필요없게 됩니다. 따라서 샘플은 [SARS]가 됩니다. 때문에 이를 수식으로 나타내면 아래와 같습니다. 수식을 잘 보시면 벨만 최적 방정식(R + gamma max)이 사용된 것을 알 수 있습니다. 

 

큐러닝을 통한 큐함수의 업데이트

 

이를 코드로 나타내면 아래와 같습니다. 수식과 비교해보시기 바랍니다. 

 

    # <s, a, r, s'> 샘플로부터 큐함수 업데이트
    def learn(self, state, action, reward, next_state):
        q_1 = self.q_table[state][action]
        # 벨만 최적 방정식을 사용한 큐함수의 업데이트
        q_2 = reward + self.discount_factor * max(self.q_table[next_state])
        self.q_table[state][action] += self.learning_rate * (q_2 - q_1)

 

아래 제 깃허브에 들어가시면 grid-world라는 게임의 환경과 큐러닝(Q-learning)전체 코드를 볼 수 있습니다. 

https://github.com/CodingOpera/RL/tree/main/5-q-learning

 

GitHub - CodingOpera/RL

Contribute to CodingOpera/RL development by creating an account on GitHub.

github.com

 

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

반응형