강화학습

오프-정책 , 중요도 샘플링

정지홍 2024. 12. 11. 10:26

목표 정책 target policy

  • agent가 최종적으로 학습하고자 하는 정책.
  • agent가 환경에서 최정의 행동을 결정하기 위해 사용하게 될 정책이다.
  • 평가와 개선의 대상인 목표 정책
  • 목적
    • 목표정책을 agent가 장기적인 보상을 최대로 얻을수 있는 행동을 결정하는데 사용됨
    • 학습이 완료되면 agent는 목표정책을 기반으로 행동함
  • 쉽게 생각하면 목표 정책이 최종 학습 모델이고, 행동 정책은 학습을 위한 데이터를 어떻게 수집하는지에 대한것
특징 목표 정책 행동 정책
역할 최적의 행동을 학습하는데 초점 데이터 수집 및 환경 탐험
오프정책에서의 관계 목표 정책 != 행동 정책 행동 정책은 탐험에 초점
온 정책에서의 관계 목표 전책 = 행동 정책 학습과 행동이 동일한 정책에 기반
주요기능 최적 정책을 결정 다양한 데이터를 제공해서 학습을 지원

 

온-정책 on-policy

  • agent가 학습에 사용하는 데이터가, 현재의 정책에 의해서 생성된 data와 일치하는 방식.
    즉, agent는 자신의 현재 policy에 따라서 행동하고, 그 행동으로 얻은 data를 학습에 사용함.
  • 특징...
    • 힉습정책과 행동 정책이 동일함.
    • 수집된 데이터가 현재 정책에 기반하기 때문에, 정책 변화에 따른 data 갱신이 필요.
    • 예시 알고리즘...
      • SARSA( state - action - reward - state - action ): 탐험을 하면서도 학습 대상 정책을 동일하게 유지
      • A2C( advantage actor-critic): 온정책 기반으로 정책과 가치 함수를 동시에 학습
  • 장점
    • 학습이 상대적으로 직관적이며 구현이 간단하다.
    • 수렴이 안정적일 가능석이 높음
  • 단점
    • 새로운 데이터만 사용하니 효율성 감소
    • 충분히 탐험하지 않으면 지역 최적해에 빠질수 있음.

 

오프-정책 off-policy

  • agent가 행동정책( behavior policy)를 따르면서 수집한 데이터를 통해서, 다른 목표 정책을 학습하는 방식
  • 특징
    • 행동 정책과 학습 대상인 목표 정책이 다를 수 있음
    • 학습 데이터가 기존에 수집된 경험이나, 다른 agent의 data를 포함할수있음
    • 예시 알고리즘...
      • Q-learning : 행동 정책은 탐험 위주로 설정하며, 학습은 목표 정책을 학습
      • DQN : 신경망을 활용한 Q-learning의 확장
  • 장점
    • 목표 정책과 행동 정책을 분리하는 것이 가능. 이로 인해 다양한 데이터로부터 학습가능
    • 경험 재사용이 가능
  • 단점
    • 학습 복잡 및 수렴 속도 느림
구분 온-정첵 오프-정책
행동 방식 "내가 경험한것만 믿고 배운다" "내 경험 + 다른 사람의 조언도 참고해서 배운다"
데이터 활용 현재 정책으로 직접 수집한 데이터만 사용 과거 데이터 및 다른 정책에서 나온 데이터도 사용
효율성 새로운 경험이 필요하니 데이터 효율이 낮음 과거 데이터를 활용하니 데이터 효율이 높음
단점 데이터가 제한적이며, 학습 속도가 느림 내가 직접 경험하지 않은 데이터로 인해,
학습의 정확성이 감소할수있음

==>온정책은 대상정책과 행동정책을 거의 같게 보고, 오프정책은 서로 떼어내서 별개로 보는것

 

 

 

중요도 샘플링 importance sampling

  • 다른 확률 분포에서 샘플링한 데이터를 가지고, 어떠한 확률 분포의 기대값을 계산하는 기법

  • 이제 위의 식을 가지고 x가 다른 확률 분포에서 샘플링 되었다고 가정하자.
    즉, pi가 아니라 b라는 확률 분포에서 샘플링 했다고 가정할거임... 
    • 그러면 아래처럼 식이 유도된다.

  • 위의 식을 통해서, 각각의 x값에 pi (x) / b (x)가 곱해짐을 볼 수 있다.
    즉, 이를 가중치라고 생각할 수 있다.

확률 분포 b에서 데이터를 샘플링하여, E pi [x]를 계산하기.

  • 아래는 그 예시이다.
import numpy as np
x = np.array( [1,2,3] ) # 확률 변수
pi = np.array( [0.1 , 0.1 , 0.8 ] ) # 확률 분포

e = np.sum( x*pi ) # 기대값을 계산
print(f'E_pi[x]의 값은 {e}입니다.')

# 몬테카를로 법으로 계산
n = 100
samples = []
for _ in range ( n ):
    s = np.random.choice( x , p=pi )
    samples.append(s)
mean = np.mean( samples )
var = np.var( samples )
print(f'몬테카를로법으로 구한 E_pi[x]의 기대값은 {mean}이며, 분산은 {var}입니다.')

# 중요도 샘플링 , 
# 확률분포 b를 사용해서 샘플링 함. 샘플링 대상은 b의 인덱스이다.
# 가중치 rho를 계산할떼, 샘플링한 인덱스를 사용함.
b = np.array( [1/3 , 1/3 , 1/3 ] ) # 확률 분포
n=100 # 샘플 갯수
samples = [] 
for _ in range( n ):
    idx = np.arange( len(b) ) # b의 인덱스
    i = np.random.choice ( idx , p=b ) # 0,1,2를 각각 1/3의 확률로 랜덤하게 하나 뽑는다.
    s = x[i] # s는 확률 변수 값이다.
    rho = pi[i] / b[i] # 가중치를 의미. 즉, 위의 E_pi의 확률 분포를 구하기 위함. rho는 식에 따라서 pi[i]/b[i]이다.
    samples.append( rho * s ) # samples에 append해줌.
mean = np.mean( samples ) # b의 확률 분포를 이용하여, E_pi의 기대값을 구함.
var = np.var( samples ) # b의 확률 분포를 이용하여, E_pi의 분산을 구함.
print( f'pi(x)에서 직접 샘플링하기 어려운 관계로, b의 확률 분포를 이용한 중요도 샘플링 결과... 기대값은 {mean}이고 분산은 {var}입니다.')