“바닥부터 배우는 강화학습”(저자 Github) 책을 읽으면서 정리하고자 합니다.
바닥부터 배우는 강화학습
Chapter 8. 가치 기반 에이전트
-
강화학습에 뉴럴넷 접목시키기
-
가치 함수를 뉴럴넷으로 표현하기
\(v_{\pi}(s), \ q_{\pi}(s,a)\) -
정책 함수 자체를 뉴럴넷으로 표현하기
\(\pi (a|s)\)
-
-
에이전트 분류
-
가치 기반(value-based) 에이전트
- 가치 함수 q(s,a)에 근거하여 액션 선택
- SARSA, Q러닝
- q(s,a)가 곧 정책 함수 역할
- 가치 함수 q(s,a)에 근거하여 액션 선택
-
정책 기반(policy-based) 에이전트
- 정책함수를 보고 직접 액션 선택
-
액터 크리틱(actor-critic)
-
가치 함수와 정책 함수 모두 사용
-
액터 : 정책
크리틱 : 가치함수
-
-
8.1 밸류 네트워크의 학습
-
밸류 네트워크
- 뉴럴넷으로 이루어진 가치함수
\(v_{\theta,\pi}(s)\\ \theta: 뉴럴넷 파라미터\)
- 뉴럴넷으로 이루어진 가치함수
-
손실 함수 정의
-
뉴럴넷을 학습하려면 예측과 정답 사이 차이를 측정하는 손실 함수를 정의해야 함
\(L(\theta) = (v_{true}(s)-v_{\theta}(s))^{2}\) -
존재하는 모든 상태를 방문해볼 수 없으니 기댓값을 사용하여 정의
\(L(\theta) = E_{\pi}[(v_{true}(s)-v_{\theta}(s))^{2}]\)
-
-
그라디언트 계산
\(L(\theta)의 \ \theta에\ 대한\ 그라디언트\ 계산\\ \bigtriangleup_{\theta}L(\theta) = -E_{\pi}[(v_{true}(s)-v_{\theta}(s))\bigtriangleup_{\theta}v_{\theta}(s)]\) -
파라미터 업데이트
\(\theta{}' = \theta-\alpha\triangledown_{\theta}L(\theta) \\ \theta_{}'= \theta+\alpha(v_{true}(s)-v_{\theta}(s))\triangledown_{\theta}L(\theta)\)
[몬테카를로 리턴]
\(\theta{}' = \theta+\alpha(G_{t}-v_{\theta}(s))\triangledown_{\theta}v_{\theta}(s_{t})\)
-
샘플 상태 s를 모으고 파라미터를 계속해서 업데이트해 나가면 점점 손실 함수의 값이 줄어들고 결국 뉴럴넷의 아웃풋이 실제 밸류에 수렴한다.
-
에피소드가 끝나야만 리턴을 계산할 수 있으니 실시간으로 업데이트가 불가능하다
에피소드가 끝날 때가지 많은 확률적 요소가 결합되어 있어 정답지 분산이 크다
[TD 타깃]
\(\theta{}' = \theta+\alpha(r_{t+1}+\gamma v_{\theta}(s_{t+1})-v_{\theta}(s))\triangledown_{\theta}v_{\theta}(s_{t})\\
v_{\theta}(s_{t+1})은\ 반드시\ 상수\ 취급해야\ 한다.\)
- 반드시 상수 취급해야 하는 이유?
- 목적지를 변하지 않기 위함
- 상수 취급하라는 것은 편미분할 때 0으로 만들어 버리는 것
- 처음 강화 학습 구현할 때 가장 많이 하는 실수
- TD 타깃 계산시 텐서에서 detach 함수 호출하면 됨
8.2 딥 Q러닝
-
q(s,a) 사용
내재된 정책(implicit policy) : 밸류만 평가하는 함수인데 마치 정책 함수처럼 사용
[이론적 배경 - Q 러닝]
-
벨만 최적방정식 이용
\(Q_{*}(s,a) = E_{s_{}'}[r+\gamma\underset{a'}{max}Q_{*}(s',a')-Q(s,a)]\\ Q(s,a) = Q(s,a) + \alpha(r+\gamma\underset{a'}{max}Q(s',a')-Q(s,a))\) -
손실함수 정의
\(L(\theta) = E[(r+\gamma\underset{a'}{max}Q_{*}(s',a')-Q_{\theta}(s,a))^{2}]\)
손실 함수를 정의할 때 기댓값 연산자 E가 반드시 필요하다. -
파라미터 업데이트
\(\theta_{}'= \theta+\alpha(r+\gamma\underset{a'}{max}Q_{\theta}(s',a')-Q_{\theta}(s,a))\triangledown_{\theta}Q_{\theta}(s,a)\)
파라미터를 계속해서 업데이트해 나가면 Q(s,a)는 최적 액션가치 함수에 가까워진다. -
미니 배치
- 기댓값 연산자를 없애기 위해 여러 개의 샘플을 뽑아 평균을 이용해 업데이트
- 미니 배치 사이즈
- 하나의 미니 배치를 구성하는 데 몇 개의 데이터를 사용할 것인가
- 배치 크기가 커질수록 더 장확한 그라디언트를 계산할 수 있지만 그만큼 한 번에 소모해버리는 데이터가 많아지므로 적절하게 조절해야 한다.
-
딥 Q러닝 pseudo code
\(\begin{align*} \text{1.}&\quad Q_{\theta}의\ 파라미터\ \theta\ 초기화 \\ \text{2.}&\quad 에이전트의\ 상태\ s를\ 초기화(s\leftarrow s_{0})\\ \text{3.}&\quad 에피소드가\ 끝날\ 때까지\ 다음(A\sim E)을 반복\\ &\quad \text{A}.\ Q_{\theta}에 대한\ \varepsilon - greedy를\ 이용하여\ 액션\ a'를\ 선택\\ &\quad \text{B}.\ a를\ 실행하여\ r과\ s'을 관측\\ &\quad \text{C}.\ s'에서\ Q_{\theta}에\ 대한\ greedy를\ 이용하여\ 액션\ a'를\ 선택\\ &\quad \text{D}.\ \theta_{}' \leftarrow \theta+\alpha(r+\gamma\underset{a'}{max}Q_{\theta}(s',a')-Q_{\theta}(s,a))\triangledown_{\theta}Q_{\theta}(s,a)\\ &\quad \text{E}.\ s\leftarrow s' \\ \text{4.}&\quad 에피소드가\ 끝나면\ 다시\ 2번으로\ 돌아가서\ \theta가\ 수렴할\ 때까지\ 반복 \end{align*}\)
[익스피리언스 리플레이와 타깃 네트워크]
-
DQN (Deep Q-Network)
- Experience Replay
- 겪었던 경험 재사용
- replay buffer 개념 도입
- 버퍼에 가장 최근 데이터 n개를 저장해 놓자
- 각각의 데이터 사이 상관성이 작아 더 효율적으로 학습 가능
- 단, off-policy 알고리즘에만 사용가능 (행동 정책과 타깃 정책이 서로 다른 정책)
- Target Network
- $r+\gamma\underset{a’}{max}Q_{\theta}(s’,a’)$ 정답으로 사용되기 때문에 정답이 $\theta$에 의존
- 정답지가 자주 변하는 것은 학습의 안정성을 매우 떨어뜨림
- 정답을 계산하기 위한 타깃 네트워크, 학습을 받고 있는 Q 네트워크 2개 준비
- 타깃 네트워크 고정해놓고 정답지를 계산
- Experience Replay
-
DQN 구현