728x90
SMALL
Monte-Carlo RL
강화학습(Reinforcement Learning, RL)에서 정책 평가와 정책 개선을 위한 기법 중 하나로 무작위 샘플링을 통해 결과를 추정하는 기법이다.
Monte-Carlo Estimation
Monte-Carlo Estimation은 무작위 샘플링을 사용하여 어떤 양을 추정하는 방법
복잡한 수학적 모델의 해를 근사하는 데 사용되며, 주로 확률적 문제를 해결하는 데 적용
Monte Carlo Control 알고리즘
- 가치 함수 초기화: 모든 상태-행동 쌍의 q(s,a)q(s, a) 값을 무작위로 설정
- 에피소드 생성: 무작위로 초기 상태와 행동을 선택하고, 정책 π\pi를 사용하여 에피소드를 생성
- 보상 계산: 에피소드의 보상을 역순으로 계산하여 GG를 업데이트
- 가치 함수 업데이트: 에피소드에서 처음 나타난 상태-행동 쌍의 q(s,a)q(s, a) 값을 업데이트
- 정책 개선: 현재의 q(s,a)q(s, a) 값을 기반으로 새로운 정책을 설정
On-Policy and Off Policy
On-Poliy는 현재의 정책을 이용한 학습을, Off-Policy는 다른 정책을 이용한 학습을 의미한다.
구분 | On-Policy | Off-Policy |
정의 | 현재 정책을 사용하여 행동하고 학습하는 방식 | 다른 정책을 사용하여 행동하고 학습하는 방식 (넓게 탐색) |
경험 사용 | 현재의 행동 정책으로 얻은 경험만 사용 | 행동 정책과는 별개의 목표 정책을 위해 경험 사용 |
대표 알고리즘 | SARSA | Q-learning, DQN |
장점 | 정책 일관성 유지. 안정적 학습 | 다양한 정책 실험 가능, 효율적인 학습 가능 |
단점 | 학습속도나 효율성이 떨어짐 | 데이터 편향 문제, 학습의 불안정성 |
off Policy는 학습과 평가에서 policy를 다르게 사용하며, 두가지의 policy가 있다.
- Behavior policy
환경을 통해 에피소드를 생성할때 사용하는 policy distribuion - Estimation policy
학습하는 policy
off Policy에서는 대부분 important sampling을 사용한다.
important sampling
데이터의 효율성을 높이는 데 사용
행동 정책 (Behavior Policy)과 목표 정책 (Target Policy)이 다르기 때문에, 행동 정책에서 얻은 경험을 목표 정책의 가치 추정에 활용할 때 중요 샘플링이 필요하다.
중요 샘플링은 데이터를 수집할 때 사용하는 행동 정책과 평가할 때 사용하는 목표 정책 간의 차이를 보정하기 위한 수학적 방법으로 이를 통해 행동정책에서 수집한 데이터를 목표정책 데이터로 변환한다.
주요샘플링의 가중치는 목표정책과 행동 정책의 확률 비율로 정의된다.
경험이 Behavior Policy를 따르지만, 이 경험을 Target Policy의 관점에서 평가하는 것을 의미
- Exploration Policy와 Target Policy가 일치하지 않으면 (즉, last_action과 get_greedy_action(last_step)가 다르면), W는 불필요하게 큰 변화를 만들 수 있다.
- Behavior Policy와 Target Policy가 다를 경우, Importance Sampling Ratio는 W로 보정되지만, 정책이 일치하지 않으면 이를 바탕으로 Q-Value를 업데이트하는 것은 부적절할 수 있다.
- 따라서 Behavior Policy가 Target Policy와 일치하지 않는 경우, Off-Policy 학습에서 수집된 데이터를 무시하고 학습을 중단하는 것이 일반적!
- 블랙잭 코드에서 아래 부분에 해당한다.
# monte-carlo off-policy learning
maxiter = 1000000
gamma = 1
N = np.zeros((10, 10, 2, 2), dtype='float32')
SUM = np.zeros((10, 10, 2, 2), dtype='float32')
Q = np.random.uniform(size=(10, 10, 2, 2))
for _ in range(maxiter):
steps, actions = generate_episode(policy_func=get_random_action)
G = 0.
W = 1.
last_step = steps.pop()
while len(steps) > 0:
G = gamma * G + last_step['reward']
last_step = steps.pop()
last_action = actions.pop()
# exploring-start estimation
observ = last_step['observation']
idx = (observ[0] - 12, observ[1] - 1, observ[2], last_action)
if not in_episode((steps, actions), observ, last_action):
N[idx] += W
SUM[idx] += W * G
Q[idx] = SUM[idx] / N[idx]
# Behavior Policy와 Target Policy 간의 일치를 체크
if last_action != get_greedy_action(last_step): # 같은 행동이 아니면 버리기
break
if last_action == 0:
W = W / behavior_prob_hit
else:
W = W / (1. - behavior_prob_hit)
728x90
LIST
'SKT FLY AI > Reinforcement Learning' 카테고리의 다른 글
Reinforcement Learning(5) Temporal-Difference RL (0) | 2024.07.18 |
---|---|
Reinforcement Learning (3) Markov Decision Process (0) | 2024.07.17 |
Reinforcement Learning (2) Backpropagation (0) | 2024.07.17 |
Reinforcement Learning (1) Intro (2) | 2024.07.17 |