요즘 수업에다가 프로젝트 일이 너무 바빠 원래 작성하던 cs231n 정리도 현재 중단 상태입니다.

 

 

후딱 좀 끝내고 마무리를 짓고 싶은데 여건이 안되네요 ㅠㅠ

 

 

원래 파이참을 쓰다가 주피터를 써야할 일이 생겨서 주피터로 넘어와 강화학습을 돌려야 하는 상황인데

 

 

갑자기 해당 오류를 마주하게 되어 잠시 당황하였습니다.(전에 랜섬웨어에 걸려서 컴퓨터를 포멧해서 그런지 기존에 설정해둔 셋팅이 날라가는 바람에 이런 상황이 벌어진듯 합니다.)

 

 

의외로 이 오류가 흔하지는 않은지 대부분 pip install gym이나 해보라는 댓글들 뿐이라 한참을 헤매다가

 

 

유사한 오류를 만난 분의 댓글을 보고 덕분에 쉽게 해결하게 되었습니다.

 

 

 

 

 

사진 1. 에러 화면

 

처음 library를 설치하는 코드를 실행했는데, 갑자기 저 오류를 마주하게 되었습니다.

 

 

library가 설치가 안되었구나... 싶어서 pip install gym을 이용하여 패키지를 설치하였는데도 해결이 안되었습니다.

 

 

사진 2. 설치된 library list 

 

!conda list를 하면 현재 conda에 설치된 모든 library들이 뜨는데요. 

(빨간색으로 칠한 부분은 package가 깔린 환경의 위치라고 보시면 됩니다.)

 

 

맨 아래에 gym이 깔려있다는 것을 확인할 수 있었습니다.

 

 

따라서 설치 자체의 문제라기 보다는 다른 문제임을 알 수 있었습니다.

 

 

사진 3. pip show gym

 

!pip show gym을 입력하면, 특정 package의 정보와 위치를 확인할 수 있습니다.

 

 

여기서 저는 gym 이라는 package에 대한 정보가 궁금하기 때문에 !pip show gym을 입력한 것이고, 저와 유사한 오류가 난 다른 패키지가 있다면 !pip show package_name 을 입력하시면 되겠죠?

 

 

여기서 Location 이라고 하는 부분이 있는데, 이 위치가 바로 해당 package가 설치된 위치라고 보시면 됩니다.

 

 

사진 4. sys.path.append

 

 

위에서 알게된 package의 위치를 sys.path.append("location 위치")를 이용해서 입력해주면 해당 package의 경로를 인식하게 되는 것 같습니다.

 

 

위의 코드를 입력해주시면, 더 이상 modulenotfounderror가 발생하지 않는 다는 것을 확인할 수 있습니다.

 

 

이런 방법을 통해 해당 오류를 해결할 수 있었습니다...!!

 

 

 

강화학습 관련 논문을 읽다가, Bootstrapping 이라는 단어를 마주하게 되었다.

 

 

Bootstrapping이라는 용어는 통계학에서도 사용되고, 또한 머신러닝에서도 사용되곤 한다. 

 

 

나는 위 두가지 분야에서 사용되는 의미를 알고 있었기 때문에, 강화학습에서 과연 유사한 의미를 가지는지 의문을 가지게 되었다.

 

 

왜냐하면 강화학습은 Data-driven 방식이 아니기 때문이다.

 

 

따라서 강화학습에서는 과연 Bootstrapping은 어떤 의미로 사용되는지를 다뤄보도록 한다.

 

 

 

 

강화학습에서의 Bootstrapping은 무엇인가??

 

 

 

강화학습에서의 Bootstrapping은 같은 종류의 추정값에 대해서 업데이트를 할 때, 한 개 혹은 그 이상의 추정값을 사용하는 것이다.

 

 

강화학습의 고전 알고리즘인 SARSA를 업데이트하는 식을 보고 이것이 무슨 얘기인지 이해해보자.

 

 

 

수식 1. SARSA의 업데이트 식

 

 

값 $R_{t+1} + \gamma Q(s', a')$ 은 $Q(s, a)$의 실제 값에 대한 추정치이고, 또한 TD(Temporal-Difference) target이라고 불린다. 

 

 

 

이렇게, 다른 Q value를 업데이트 하기 위해서 부분적으로 Q value를 사용하기 때문에 SARSA는 bootstrap 방식이다.

 

 

 

 

 

같은 업데이트 규칙을 대조적인 방법인 Monte Carlo을 사용해보면 어떤 차이가 있는지 확인할 수 있다.

 

 

 

수식 2. MC 방식으로 Q value update

 

 

$G_t$ 는 시간 $t$일때, 전체 discounted reward를 의미하고, 이러한 방식의 업데이트를 가정한다면, 상태 $s$에서 시작해서 action $a$를 취하고, 그러고 나서 episode가 끝날 때까지 현재 정책을 따르게 된다. 

 

 

 

수식 3. 반환값(Return) 계산식

 

 

반환값은 수식 3과 같이 계산할 수 있으며, 여기서 $T$는 terminal state에 도달하는 time step을 의미한다.

 

 

 

 

특히, 이 반환값($G_t$)은 다른 Q value로부터 어떠한 추정치를 전혀 사용하지 않기 때문에, 이는 오직 환경으로부터 얻게 되는 일련의 observation들만 사용하게 된다. 

 

 

 

 

 

 

Bootstrapping의 특징

 

 

 

Bootstrapping의 주요한 단점은 우리가 $Q(s', a')$에 대해서 어떤 starting value를 사용했는지에 따라 편향된다는 점이다.

 

 

 

이렇게 편항되는것은 대부분의 경우에 옳지 않으며, 너무 많은 자기 참조와 충분하지 않은 실제 데이터 때문에 전체적으로 업데이트 시스템이 불안정해질 수 있다.

 

 

 

이것이 바로 신경망을 이용하는 off-policy learning의 문제점이다. (Q-learning이 이에 해당한다.)

 

 

 

Bootstrapping을 사용하지 않으면, 더 긴 trajectory를 사용해야 하는데, 이는 그 대신에 종종 더 높은 분산을 가져오게 되며, 실제로 추정값이 수렴하기 전에 더 많은 샘플이 필요하게 됨을 의미한다.

 

 

 

따라서, bootstrapping의 문제점에도 불구하고, 만약 bootstrapping를 사용해서 작동이 되도록 만들 수 있다면 상당히 더 빠르게 배울 수 있을 것이고 종종 Monte Carlo approach에 비해서 더 선호된다.

 

 

 

 

[참고자료]

https://datascience.stackexchange.com/questions/26938/what-exactly-is-bootstrapping-in-reinforcement-learning

 

 

 

 

 

 

+ Recent posts