728x90
반응형
경험 리플레이(Experience Replay)
경험 샘플을 순서대로 학습시키면, 서로 독립적이지 않음
리플레이 버퍼에 저장한 후, 일부를 무작위로 뽑아 Q함수 학습에 사용
stable-baselines의 리플레이 버퍼
DQN과 같은 OffPolicyAlgorithm은 환경에 따라 자동으로 리플레이 버퍼를 지정
리플레이 버퍼 클래스는 stable_baselines3.common.buffers에 정의
경험을 고정된 크기의 버퍼에 축적
버퍼가 가득 차면 오래된 경험부터 덮어 씀
버퍼 크기는 알고리즘 클래스를 초기화할 때 buffer_size 인자로 설정 가능
Per(Prioritized Experience Replay)
경험리플레이(ER)는 모든 경험을 동일한 확률로 샘플링
중요한 경험에 우선 순위를 주면 더 효율적일 것
경험의 중요도는 예사오가 실제의 차이를 반영하는 TD 오차를 이용
가중 중요도 샘플링(Weighted Importance Sampling)
중요한 경험이 실제 확률보다 자주 샘플링되므로 편향이 생김
모든 사례가 고르게 샘플링되면 미니 배치 크기(N)일때 1/N 확률로 샘플링
비트 플리핑(bit-flipping)
n개의 동전이 있을 때, 하나씩 뒤집어서 목표 상태에 도달해야만 +1의 보상을 받고, 이외에는 -1 의 보상을 받는 경우
어떤 동전을 뒤집어도 보상이 -1
n이 크면 무작위로 행동해서 보상을 받는 것이 불가능
보상이 드물거나(sparse), 이진적(binary, 성공/실패)인 경우에는 긍정적 보상을 받기 어려워 학습이 안됨
문제에 맞는 별도의 보상 함수 설계가 필요(예: 목표 상태와 비슷할 수록 보상) → 문제에 대한 배경 지식이 필요하므로 어렵고, 모든 문제에 가능하지 않음
비트 플리핑 환경
# 5개의 동전을 최대 5번까지 뒤집어서 목표 상태에 도달해야 하는 환경
from stable_baselines3.common.envs import BitFlippingEnv
N_BITS = 5
env = BitFlippingEnv(n_bits=N_BITS, continuous=False, max_steps=N_BITS)
## 비트 플리핑: 바닐라 ER
from stable_baselines3 import DQN
from stable_baselines3.common.logger import configure
# 모델
model = DQN("MultiInputPolicy", env, verbose=1)
# 학습 과정을 CSV로 저장
log_dir = "./vanilla"
new_logger = configure(log_dir, ["csv"])
model.set_logger(new_logger)
# 학습
model.learn(5000, progress_bar=True)
## 학습 과정 시각화
import pandas as pd
import matplotlib.pyplot as plt
log_df = pd.read_csv(log_dir + "/progress.csv")
plt.plot(log_df['time/total_timesteps'], log_df['rollout/success_rate'])
728x90
반응형
'AI > 강화학습(RL)' 카테고리의 다른 글
[RL] Off-policy 정책경사 (2) | 2024.09.06 |
---|---|
[RL] PPO (0) | 2024.09.06 |
[RL] 정책경사 (1) | 2024.09.05 |
[RL] 가치 기반 강화학습 (NFQ, DQN, 이중 DQN, DQNPolicy, 듀얼링) (7) | 2024.09.05 |
pytorch 설치 안되는 경우 (0) | 2024.09.04 |
댓글