대학원 수업/강화학습

8. MonteCarlo(3/3) - off-policy ~ importance sampling

따옹 2022. 10. 22. 11:25

Off - policy

실제 play, optimize policy가 다름

behavior policy b - random policy

target policy π - optimize policy

policy를 이용해서 Q값을 업데이트하는 policy는 pi,

내가 직접 플레이를 하면서 개션하는가

다른 사람들의 플레이(tv에서 잘하는 사람을 참고) 보면서 내 policy를 improve하는가,

 

Off policy 장점

내 policy를 계속해서 변화시켜나기 때문에 내 policy에 벗어나기 쉽다 그렇기 때문에 

혁신적이고 스타일이 다른 diverse한 탐험을 할 수 있다

하지만 당연히 단점도 있지

실제 에피소드 만드는 policy와 참고하는 policy의 행동이 너무 다르면 어떤 상황에서의 Q값을 계산하면 정확하지 않음

기본적으로 어떤 행동을 취했을 때, 다음 행동들이 연결돼서 끝까지 갔을 때 행동이 내 policy와 많이 벌어져

내 policy와 가치가 안 맞는다.

1번 줄만 차이있음(on-policy와)

 

behavior policy (random하게)쓰면서 π update

장점 : epsilon greedy 이런거 필요없음 남을 보면서 하면돼서 배울점이 있음

문제점 : 행동에 distribution이 다름 쟤 행동과 내 행동이 다름

 

어떤 state에서의 가치를 찾고싶다 !

그 뒤에 어떤 식으로 action을 취하는데에 그 가치가 결정된다

 

이걸 해결하는 방법은 importance sampling

importance sampling

b policy가 엉망으로 행동할 때 참고해서 내가 어떤 state의 가치를 정하면 문제가 생김

그것을 해결하기 위해선 보정이 필요한데, 그 방법이 importance sampling

 

내가 알고싶은 주사위의 분포가 원래 알고 있는 주사위의 distribution(주사위의 눈이 나올 각각의 확률)이 다를 경우,

sampling을 통해서(주사위 1000번, 10000번) 분포를 알아낼 수 있다.

추정을 할 수 있게 어떻게 하느냐...

x: 주사위 눈

p(x) : 특정 눈이 나올 확률

f(x) : 상금

 x가 p(x)라는 분포를 따를 때의 기대값

 

A주사위를 굴려 분포를 알아낸다고 한대도 내가 알고자하는 B분포가 아님

A, B의 분포의 비율을 알 수 있다면 A분포를 샘플링 한 다음 B 분포를 알아냄 importance sampling ratio 사용

f(x) 주사위 1이 나오면 100원, 2나오면 200원... 등등

p(x)f(x) = 확률x 상금

x가 p(x)라는 분포를 따를 때, 분포가 다른 q(x)를 가져와보면 아래와 같이 생각해볼 수 있음

( p라는 분포를 가지는 주사위/q라는 분포를 가지는 주사위 ) 비율을 알아야한다 p(x)/q(x)

 

Importance sampling ratio : p(x)/q(x)

(p(x)/q(x))*f(x) 새로운 확률(분포) reward

q(x)를 적용해줌으로 새로운 분포를 사용할 수 있음

ex ) p주사위에서 1이나올 확률 / q주사위에서 1이 나올 확률

 

Importance sampling ratio의 개념을 쉽게 풀어 쓰자면

어떤 state에서 어떤 action이 쟤는 25%확률로 취함 하지만 나는 70%의 확률로 취한다면

쟤가 25% 확률로 action을 취했을 때 얻는 reward값의 weight를 높여준다.

b와 π의 distribution이 다르기 때문에 가중치를 곱해준다. 즉, 비율대로 반영해준다.

 

q 분포를 통해 p의 분포를 파악한다.

 

starting에서 어떤 policy를 썼을 때, 특정 tragactory를 고르게 될 확률은?

특정 tragactory를 가질(골라질) 확률은 아래와 같다.

내 policy에 의해서 결정되는 확률 / stochastic environmnet에 의해서 결정되는 확률

p(St+1|St, At)는 stochastic environmnet이기 때문에 있음 (next state가 여러가지가 있을 수 있기 때문에)

(Sk에서 Ak로 가는 확률) x (Sk에서 Ak일 때 next state가 Sk+1일 확률) 곱하고 k 에 대해서 다 곱함

=> 그 trajactory가 골라질 확률

 

Importance sampling 

분모 : b라는 policy를 썼을 때, 나오는 trajactory

분자 : pi라는 policy를 썼을 때, 나오는 trajactory

b라는 policy를 쓸 땐 아래, 위는 pi를 쓸 때 trajectory

어떤 state에서 특정 액션을 취할 확률을 계산할 수 있다면 추정할 수 있다면 importance sampling ratio로 쓸 수 있다.

return에 importance sampling  곱하면 pi라는 policy의 v(s)임

여러번 해서 평균낸 값 ex) 3번 했을 때, 100, 200, 300 이면 평균은 200
importance sampling ratio 를 곱해줬을 때

어떤 state의  V,Q값을 구할 때, 출발 state(s)로 부터 ~  episode 가 끝났을 때, 나에게 주어진 reward의 합 G(t) return

stochasic일때는 기대값으로 

 

Vb(s) behavior policy를 썼을 때의 가치

pi policy에서의 V(s)값은 Vb(s) * (importance sampling ratio)

 

importance sampling ratio 개념

쟤가 10일 때 내가 50이라면, 0.1인데 운좋게 취했을 때 나는 그걸 250점으로 간주하겠다

나는 별로 취하지 않을 행동인데, 쟤는 엄청 취하면 나는 줄이겠다.

Ordinary importance sampling 

monte Carlo로 episode로 만듦

각 iteration에서 11번째 값을 모아서 각각 importance sampling ratio를 곱해주고 전체 iteration값으로 나눠줌

G(t)는 각각의 reward의 합

각각의 importance sampling ratio

10번의 V값들을 계산하고 싶으면 각 ep의 10번째 각 S의 Reward 합을 계산하면 G(t)

시그마 Impartance sampling ratio x G(t) / 60 -> ordinary Import sampling ratio

weighted 와의 차이, 밑이 타우가 S의 합이냐 , 또는 weight들의 합이냐

Weighted importance sampling

분모 : weighted 들의 합

 

각각 return 값이 100, 200, 300 일 때,

축구를 생각해 봤을 때, 같은 100점을 땄을 때, 아시안컵에서 우승 가중치와 월드컵의 가중치는 분명 다름

동일하게 각 3건에 대해서 나누면 ordinary / 똑같은 경기 1판이지만 가중치에 따라 4, 3, 2번한 거처럼 치겠다. weighted

둘다 Importance sampling 이지만  weighted 를 많이 쓰긴 함.

 

weighted importance sampling에서는 각각의 가중치를 4,3,2 부여

ordinary importance sampling Weighted importance sampling
1600 / 3 1600/4+3+2

bias : True분포에서 조금 틀어져서 샘플링 됨(치우침)

variance : sampling을 할 때마다, variance가 크다(뭔말일까? 내가 적었지만 잘 모르겠다)

tade-off 관계

장단점이 있기 때문에 뭐가 좋다 말하긴 어렵다.

 

Weighted importance sampling using Incremental Mean

Wk : Importance sampling

using incremental mean

Wn : Importance sampling Ratio

Gn : return 값,

Cn : 기존의 importance sampling 계속 더해가면서 분모를 넣음

한 case가 나올 때 마다 update

W = W*(1/b(at|st)) =  W*(pi(at|st) /b(at|st))

target policy가 deterministic 하므로, 역계산을 통해 update

항상 behavior가 최적의 목적지로 가기위해서 분자는 1이 된다.

 

1. R 0, W 1으로 세팅

2. reverse order 

하나의 episode가 끝나면 맨 뒤에서 부터 C 0으로 세팅, W 를 구함 초기값은 1, Incremental mean을 계산

Q의 초기값은 random 

importance sampling ratio를 곱해줌 

뒤에서부터 action을 보는데, 그 다음것을 보는데 어떤 스테이트에서 액션을 취할 때, optimize하는 policy가 그 액션을 취할 수도 안 취할 수도 / 취한 액션이 취하는 것일 수도 있고 안 취한 것일 수도 있는데, 만약 그 액션이 (내가 취하는 것과 쟤가)서로 다르면 분자를 버림

만약 같은 액션이라면 1 (100프로 그 action을 취하기 때문에 )

내가 취할 액션과 달랐다 -> 분자는 0

0이 되는 순간 뭘 곱한다 한들, 계속 0이기 때문에 episode를 버림. 한 데까지만 한다.

 

 

결론적으로 내가 어떤 episode에서 state를 10번째 할 때, 9번째 state에서 B,Q 값을 구함

8번 일때 9번, 10번의 ratio 곱해줘야함

 

ep 가 길거나 복잡하면 직접 계산할 수 없다. 그 때 TD사용 (continuous tasks의 경우)