[RL] 경험 리플레이

    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

    댓글