에이전트 구현 방법에는 크게 '분포 모델'과 '샘플 모델'이 있다.
분포 모델
분포 모델은 확률 분포를 명시적으로 유지하는 모델이다.
그래서 '무작위로 행동하는 에이전트'를 분포 모델로 구현한다면, 다음처럼 구현할 수 있다.
이와 같이 각 상태에서의 행동 확률 분포를 self.pi 변수에 유지한다.
그리고 실제 행동을 할 때는 이 확률 분포를 토대로 샘플링한다.
이것이 에이전트를 분포 모델로 구현하는 방법이며, 이처럼 확률 분포를 명시적으로 유지한다는 점이 분포 모델의 특징이다.
샘플 모델
샘플 모델은 '샘플링이 가능하다' 라는 조건만 충족하면 되는 모델이다.
확률 분포를 유지할 필요가 없기 때문에 분포 모델보다 간단히 구현할 수 있다.
확률 분포 없이 단순히 네 가지 행동 중 하나를 무작위로 선택하도록 구현했다.
이건 "완전 무작위"여서 확률 분포 유지 없이도 np.random 모듈이 이를 대체해줬다.
그럼 확률분포 없이 최적 정책을 찾는 과정은 어떻게 구현하는걸까?
분포 모델 버전의 Q 러닝
먼저 비교를 위해, 분포 모델 버전의 Q Learning 코드를 보겠다.
이 코드에서 주목할 부분은 self.pi와 self.b라는 두 가지 정책이다.
두 정책 모두 확률분포로 유지되고 있다.
따라서 이 코드는 분포 모델이다.
또한, self.pi와 self.b가 갱신되는 위치가 update() 메서드라는 점에도 주목해야 한다.
샘플 모델 버전의 Q 러닝
먼저 두 가지 변경사항을 적용해보자.
- self.pi 삭제
- self.b 갱신을 get_action() 메서드에서 수행
위에서 이야기한대로, 샘플 모델로 바꾸기 위해 내부에 확률 분포를 제거했다.
천천히 살펴보면, 내부에 self.pi를 이용해 추가적인 연산을 수행하는 부분이 없는 것을 알 수 있다.
그렇다면 self.pi를 완전히 제거해도 된다.
만약 필요하다면 필요한 시점에 Q 함수를 탐욕화하여 언제든 만들어낼 수 있다.
다음으로 행동 정책인 self.b를 보자.
이전 코드에는 update() 메소드에서 갱신했으나 여기서는 get_action() 메소드가 호출되는 시점에 갱신하도록 수정했다.
self.b는 Q 함수를 입실론-탐욕화한 정책이므로 Q함수만 있으면 언제든지 만들 수 있다.
이제 에이전트를 완전한 '샘플 모델'로 만들어보자.
get_action() 메소드에서 self.b를 사용하지 않고, Q 함수를 이용하여 입실론-그리디 정책에 따른 행동 선택을 직접 구현했다.
만약 Target 정책이 필요하다면, else:문 내에 있는 코드를 추가적인 함수로 구현하면 될 것이다.
정리
이번 내용을 키워드로 정리해보자.
- 에이전트 구현 방법
- 분포 모델
- 샘플 모델
본 내용은 밑바닥부터 시작하는 딥러닝 4를 참고하여 작성되었습니다.
밑바닥부터 시작하는 딥러닝 4 - 예스24
『밑바닥부터 시작하는 딥러닝』 시리즈, 이번엔 강화 학습이다! 강화 학습 핵심 이론부터 문제 풀이, 심층 강화 학습까지 한 권에!이 책의 특징은 제목 그대로 ‘밑바닥부터 만들어가는 것’이
www.yes24.com
'CS Repository > 기초 강화학습' 카테고리의 다른 글
[강화학습] 강화학습에 신경망 더하기 (0) | 2025.09.01 |
---|---|
[강화학습] 시간차 학습, SARSA, Q-Learning (1) | 2025.09.01 |
[강화학습] 강화학습에서 최적 정책을 찾는 방법 (0) | 2025.09.01 |
[강화학습] Off-Policy, On-Policy, 중요도 샘플링 (0) | 2025.08.31 |
[강화학습] 벨만 방정식 (0) | 2025.08.29 |