'바닥부터 배우는 강화 학습' 8장에는 가치 기반 에이전트를 학습하는 방법에 대해서 설명하고 있습니다. 아래 내용은 공부하면서 핵심 내용을 정리한 것입니다.
참고자료
- 도서: 바닥부터 배우는 강화 학습 / 8장 가치 기반 에이전트
- 이번 챕터에서 다룰 문제
◦ 모델 프리
◦ 상태 공간 (state space)과 액션 공간(action space)이 매우 커서 테이블에 담지 못할 상황 - 강화 학습에 뉴럴넷을 접목시키는 접근법 2가지
◦ 함수 $v_{\pi}(s)$나 $q_{\pi}(s)$를 뉴럴넷으로 표현하는 방식
◦ 정책 함수 $\pi(a|s)$를 뉴럴넷으로 표현하는 방식
- 가치 기반(value-based): 가치 함수에 근거하여 액션을 선택
모델-프리 상황에서는 $v(s)$만 가지고 액션을 정할 수 없기 때문에 액션-가치 함수 $q(s, a)$ 사용 - 정책 기반(policy-based): 정책 함수 $\pi(a|s)$를 보고 직접 액션을 선택
- 액터-크리틱(actor-critic): 가치 함수와 정책 함수를 모두 사용
◦ 액터: "행동하는 녀석" 정책 $\pi$를 뜻 함
◦ 크리틱: "비평가" 가치 함수 $v(s)$ 또는 $q(s, a)$를 뜻 함
8.1 밸류 네트워크의 학습
- 정책 $\pi$가 고정되어 있을 때 뉴럴넷을 이용하여 $\pi$의 가치 함수 $v_{\pi}(s)$ 학습하는 방법
- 밸류 네트워크(value netowrk): 뉴럴넷으로 이루어진 가치 함수 $v_{\theta}(s)$
- 손실함수: $L(\theta)=(v_{true}(s) - v_{\theta}(s))^2$
존재하는 모든 상태 $s$에 대해서 $L(\theta)$ 계산이 어려움 - 기댓값 손실함수: $L(\theta)=\mathbb{E} \left [ (v_{true}(s) - v_{\theta}(s))^2 \right ]$
- 그라디언트: $\nabla_{\theta} L(\theta)=- \mathbb{E} \left [ (v_{true}(s) - v_{\theta}(s)) \nabla_{\theta} v_{\theta}(s) \right ]$
$$\begin{equation}
\begin{split}
\theta' &= \theta - \alpha \nabla_{\theta}L(\theta) \\
&= \theta + \alpha (v_{true}(s) - v_{\theta}(s)) \nabla_{\theta}v_{\theta}(s)
\end{split}
\end{equation}$$
- 위 식으로 $\theta$ 업데이트
- 실제 상황에서는 실제 가치 함수인 $v_{true}(s)$가 없음. 몬테카를로 / TD 학습방법 사용 가능
◈ 첫 번째 대안: 몬테카를로 리턴
$$V(s_t) \gets V(s_t) + \alpha(G_t - V(s_t))$$
- 몬테카를로 방식을 이용해 테이블의 벨류값을 업데이트하는 수식
$$L(\theta)=\mathbb{E} \left [ (G_t - v_{\theta}(s))^2 \right ]$$
- 손실 함수의 정답 $v_{true}(s)$ 자리에 $G_t$를 대입
$$\theta' = \theta + \alpha (G_t - v_{\theta}(s)) \nabla_{\theta}v_{\theta}(s)$$
- 동일한 방식으로 $\theta$를 업데이트
◈ 두 번째 대안: TD 타깃
$$L(\theta)=\mathbb{E} \left [ (r_{t+1} + \gamma v_{\theta}(s_{t+1}) - v_{\theta}(s))^2 \right ]$$
- 손실 함수의 정답 $v_{true}(s)$ 자리에 $r_{t+1} + \gamma v_{\theta}(s_{t+1})$를 대입
$$\theta' = \theta + \alpha (r_{t+1} + \gamma v_{\theta}(s_{t+1}) - v_{\theta}(s)) \nabla_{\theta}v_{\theta}(s)$$
- 동일한 방식으로 $\theta$를 업데이트
- 위 수식에서 $v_{\theta}(s_{t+1})$을 상수로 취급해야 안정적인 학습 가능
8.2 딥 Q러닝
- 가치 기반 에이전트는 명시적 정책(explicit policy)이 없음.
- 액션-가치함수 $q(s, a)$를 이용. 내재된 정책(implicit policy)
◈ 이론적 배경 - Q러닝
$$\begin{equation}
\begin{split}
Q_*(s, a) &= \mathbb{E}_{s'} \left [ r + \gamma \underset{a'}{\mathrm{max}}Q_*(s', a') \right ] \\
Q(s, a) \gets Q(s, a) &+ \alpha (r + \gamma \underset{a'}{\mathrm{max}}Q(s', a') - Q(s, a))
\end{split}
\end{equation}$$
- 벨만 최적 방정식과 테이블 업데이트 수식
$$L(\theta) = \mathbb{E} \left [ (r + \gamma \underset{a'}{\mathrm{max}} Q_{\theta}(s', a') - Q_{\theta}(s, a))^2 \right ]$$
- 벨만 최적 방정식과 테이블 업데이트 수식을 뉴럴넷으로 확장
$$\theta' = \theta + \alpha \left ( r + \gamma \underset{a'}{\mathrm{max}} Q_{\theta}(s', a') - Q_{\theta}(s, a) \right ) \nabla_{\theta}Q_{\theta}(s, a)$$
- 위 식을 이용하여 $\theta$를 업데이트해 나가면 $Q_{\theta}(s, a)$는 점점 최적의 액션-가치함수 $Q_{*}(s, a)$에 가까워짐
- 기댓값 연산자를 없애기 위해 여러 개의 샘플을 뽑아서 평균을 이용해 업데이트함. 이처럼 복수의 데이터를 모아 놓은 것을 미니 배치(mini-batch)라 함
- 미니 배치 사이즈(mini-batch size): 미니 배치를 구성할 데이터 개수
딥 Q러닝 pseudo code
- $Q_{\theta}$의 파라미터 $\theta$를 초기화
- 에이전트의 상태 $s$를 초기화 $(s \gets s_0)$
- 에피소드가 끝날 때까지 다음을 반복
◦ $Q_{\theta}$에 대한 $\epsilon$ - greedy를 이용하여 액션 $a$를 선택
◦ $a$를 실행하여 $r$과 $s'$을 관측
◦ $s'$에서 $Q_{\theta}$에 대한 greedy를 이용하여 액션 $a'$을 선택
◦ $\theta$ 업데이트: $\theta \gets \theta + \alpha (r + \gamma Q_{\theta}(s', a') - Q_{\theta}(s, a))\nabla_{\theta}Q_{\theta}(s, a)$
◦ $s \gets s'$
- Q러닝은 off-policy 학습
◦ 실행할 액션을 선택하는 행동 정책: $\epsilon$ - greedy $Q_{\theta}$
◦ 학습 대상이 되는 타깃 정책: greedy $Q_{\theta}$
◈ 익스피어런스 리플레이어와 타깃 네트워크
익스피리언스 리플레이(Experience Replay)
- "겪었던 경험을 재사용하면 더 좋지 않을까?" 하는 아이디어에서 출발
- 하나의 상태 전이(transition) $e_t$는 $(s_t, a_t, r_t, s_{t+1})$로 표현 가능
"상태 $s_t$에서 액션 $a_t$를 했더니 보상 $r_t$을 받고 다음 상태 $s_{t+1}$에 도착하였다"는 뜻 - 리플레이 버퍼(replay buffer)
◦ 가장 최근에 발생한 데이터 n개를 버퍼에 저장
◦ 새로운 데이터가 하나 버퍼에 들어오면 가장 오래된 데이터를 하나 제거
◦ 학습할 때는 버퍼에서 임의로 데이터를 뽑아서 사용. (예, 32개씩 미니 배치 단위로 학습)
◦ 각각의 데이터 사이 상관성(correalation)이 작아서 더 효율적으로 학습 가능
◦ off-policy 알고리즘에만 사용할 수 있음
별도의 타깃 네트워크(Target Network)
- 하나의 네트워크 $\theta$만 사용할 경우 $\theta_i$를 업데이트하여 $\theta_{i+1}$이 된 경우 정답도 함께 변경됨
$R + \gamma \underset{A'}{\mathrm{max}} Q_{\theta_i} (S', A') \to R + \gamma \underset{A'}{\mathrm{max}} Q_{\theta_{i+1}} (S', A')$ - 정답지가 자주 변하는 것은 학습의 안정성을 매우 떨어 뜨림
◈ DQN 구현
- 이 부분은 구현에 대한 코드가 설명되어 있습니다.
'강화 학습 > 바닥부터 배우는 강화 학습' 카테고리의 다른 글
바닥부터 배우는 강화 학습 | 10. 알파고와 MCTS (0) | 2023.03.22 |
---|---|
바닥부터 배우는 강화 학습 | 09. 정책 기반 에이전트 (0) | 2023.01.28 |
바닥부터 배우는 강화 학습 | 07. Deep RL 첫 걸음 (0) | 2023.01.17 |
바닥부터 배우는 강화 학습 | 06. MDP를 모를 때 최고의 정책 찾기 (0) | 2023.01.05 |
바닥부터 배우는 강화 학습 | 05. MDP를 모를 때 밸류 평가하기 (0) | 2022.11.29 |