MC 는 게임을 시뮬레이션한 것을 바탕으로 S A > R S A > R S A 이런 Episode 를 얻을 수 있었다.
그렇기 때문에 구현이 직관적으로 이루어질 수 있었다.
일단 episode 를 Generate 하는 것인데, 우리가 정책 pi 를 들고있다고 가정하면
Random 한 card 를 뽑는 과정을 통하여 쉽게 generate 할 수 있다.
2. Episode 진행 과정중 bust 가 나지 않는 상태과정에 대해서는 Reward를 조금 씩 주었다.
그이유는 21에 가까워졌다는 것으로 좋은 쪽으로 상태 이전이 일어났기에 일종에 Reward 를 부여한 것이다.
물론 Q(s,a) 가 그 값을 고려하여 update 하겠 지만, Q로인한 정책이 너무 소극적으로 바뀌게 되어 조금 더 직접적인 rewad도 필요했다.
3.간단한 게임이였지만 Ace 의 존재 (1 or 10) 떄문에 상태전이가 복잡한 경우가 생기더라,
다만 MC 의 장점이기도했지만, Episode 를 만들때만 주의하게 되면 , 그러한 상태 전이를 뒤에서 고려할 필요가 없었다.
4.구현에 유리함이 있었지만 상대적으로 많은 Episode (3만번)를 generate 하고, 그 것으로 Q값을 Q*값으로 수렴 시키고 최적 정책 pi 를 구했지만, 그마저도 data 불균형이 생기게 되더라, 그말인 즉슨, 자주오게 되는 state 에 대해서 update 가 자주일어나지고, 반대인 적은 case 도 생기게 되어, 적은 case 에 대해서 값이 들죽날죽해진다.
MC 결과를 지켜보자
ace 가 없는 경우 Q(S,0=stand) 의값, ace 가 없는 경우 Q(S,1=hit) 의값,
x 축은 내 카드합(0~20) y 축은 딜러 카드의 숫자이다.
ace 가 있는 경우 Q(S,0=stand) 의값,ace 가 있는 경우 Q(S,1=hit) 의값,
x 축은 내 카드합(0~20) y 축은 딜러 카드의 숫자이다.
Q값이 날카롭고 울퉁불퉁 하다 = 충분히 수렴시키지 못하였다.
사실 노트북으로 에피소드를 30000번 돌린 회수이긴한데,
ACE 를포함 한경우라면 3000번도 안돌아갔을거다.
그와중에 합이 13~20, 으로 분산이 된다치면 .. state 개수에 비해서 시행회수가 아직 너무 작다.
어찌됫건 ace 가있는경우 Q(S,1) 값이 ace 없는 경우 Q(S,1) 보다 대체적으로 높게나온것을 볼수 있다.
최적 정책은(Ace 없는경우)
ace 가 있는경우
ace 가 있는경우 최적정책이 더 1로(hit) 으로 덮여야 하는데, 듬성듬성 덮여있다.
전체적으로 dealer 패가 높을수록 더 공격적으로 하라고 지시한듯 하다.
역시 충분히 더돌려보고싶으나 수렴이 제대로 되고있는지 모니터링 하기가 꽤 까다롭다.
이번강화학습을 구현하면서 느꼈지만, 비교적 적은 state 의 예제를 구현해보는 데도, 구현하기에 꽤 까다롭고,
debuging과 Q 값, 정책값등을 같이 모니터링 하면서 코드를 지속적으로 수정 해주어야 한다.
하지만 예제코드를 구현하면서 어떻게 돌아가는지 체험해본 것 같다.
다음으로 DP 로 구현 과정을 요약하자면
1. 상태전이 확률 설정은 카드값이 나올 확률로 대체 한다.
2. Dealer 의 첫 숫자 - (17~21) 의 최종 기대값도 미리 계산된 페이지를 참고한다.