일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 강화학습
- c
- 확률
- pandas
- 수학
- SK바이오사이언스
- 에라토스테네스의 체
- 포토샵
- align-items
- Prefix Sums
- Codility
- c++
- 상태
- skt membership
- grid
- series
- 통신사할인
- stl
- spring
- Design Pattern
- Javascript
- Gap
- Photoshop
- 소수
- 백준
- CSS
- dataframe
- Flexbox
- margin
- 알고리즘
- Today
- Total
sliver__
딥살사 / 폴리시 그레디언트 본문
[딥살사 이론]
딥살사는 살사 알고리즘을 사용하며 큐함수를 인공신경망으로 근사합니다.
적용할 환경은 에이전트, 움직이는 장애물 3개, 목적지 입니다.
====================================
위 문제의 상태정의는 아래와 같습니다.
1. 에이전트에 대한 도착지점의 상대위치 x,y
2. 도착지점의 라벨
3. 에이전트에 대한 장애물의 상대 위치 x,y
4. 장애물의 라벨
5. 장애물의 속도
====================================
기존의 살사의 큐함수 업데이트는 아래와 같습니다.
\(Q_t(S_t,A_t) \leftarrow Q_t(S_t, A_t) + \alpha(R_{t+1} + \gamma Q(S_{t+1}, A_{t+1}) - Q(S_t, A_t))\)
하지만 딥살사는 인공신경망을 사용하여 업데이트하며 경사하강법을 사용합니다.
경사하강법을 사용하려면 오차함수를 정의해야 합니다.
오차함수는 MSE(Mean Squared Error)를 사용합니다.
위 수식에서 정답과 예측을 정의할 수 있습니다.
정답 : \(R_{t+1} + \gamma Q(S_{t+1}, A_{t+1})\ )
예측 : \(Q(S_t, A_t))\)
\(MSE = (정답 - 예측)^2 = (R_{t+1} + \gamma Q_\theta (S_{t+1}, A_{t+1}) - Q_\theta(S_t, A_t))^2\)
딥살사는 현재 상태에서의 행동한 큐함수
그리고 다음상태에서 행동한 큐함수를 근사시켜 MSE를 구하여
모델 파라미터를 업데이트합니다.
[폴리시 그레디언트]
이전까지는 가치기반 강화학습이였다면 폴리시 그레디언트는 정책기반 강화학습입니다.
가치기반 강화학습은 인공신경망의 출력함수로 각 행동의 큐함수 값을 얻었다면,
정책기반 강화학습은 출력함수로 각 행동을 할 확률을 구합니다.
그래서 두 학습방법의 차이점은 출력함수의 함수입니다.
정책기반 강화학습의 출력층은 softmax 함수를 사용합니다.
\(s(y_i) = {e^{y_i} \over \sum_j e^{y_j}}\)
정책기반 강화학습은 정책을 근사시켜 누적보상의 최대합을 구하는게 목표이고
목표함수를 위하여 정책의 인공신경망을 업데이트해야 합니다.
정책을 표현하는 수식은 아래와 같습니다.
\( policy = \pi_{\theta} (a|s)\)
목표함수는 \(J(\theta)\)로 나타내며 아래와 같이 표현합니다.
\(maximize(J(\theta)\)
목표함수를 최대화하기 위해서 경사상승법을 사용합니다.
정책신경망 업데이트의 수식은 아래와 같습니다.
\(\theta_{t+1} = \theta + \alpha \nabla_\theta J(\theta)\)
가치함수로 나타내는 목표함수의 정의는 아래와 같습니다.
\(J(\theta) = v_{\pi_\theta}(s_0)\)
다음스텝의 정책을 업데이트하기 위해서는 목표함수의 미분값이 필요합니다.
양변을 미분하면 아래와 같습니다.
\(\nabla_\theta J(\theta) = \nabla_\theta v_{\pi_\theta} (s_0)\)
\(\nabla_\theta J(\theta) = \sum_s d_{\pi_\theta} (s) \sum_a \nabla_\theta \pi_\theta (a | s) q_\pi (s,a)\)
목표함수의 미분식을 위와 같이 표현할 수 있다고합니다.
궁금하신분은 "Policy Gradient Methods for Reinforcement Learning with Function Approximation" 논문을 참조해주세요.
위 수식의 의미는 가능한 모든 상태에 대해 각 상태에서 특정 행동을 했을 때 받을 수 있는 큐함수의 미분값입니다.
\(d_{\pi_\theta} (s)\) 는 s 상태에 에이전가 있을 확률을 나타냅니다.
\(\nabla_\theta J(\theta) = \sum_s d_{\pi_\theta} (s) \sum_a \pi_\theta (a|s) \times {\sum_a \nabla_\theta \pi_\theta (a | s) \over \sum_a \pi_\theta (a|s) } q_\pi (s,a)\)
로그함수의 미분으로 아래와 같이 표현됩니다.
\(\nabla_\theta J(\theta) = \sum_s d_{\pi_\theta} (s) \sum_a \pi_\theta (a|s) \times \nabla_\theta \log \pi_\theta (a | s) q_\pi (s,a)\)
그리고 기댓값의 정의는 어떠한 상태에서 모든 행동을 했을 때, 평균값을 의미합니다.
위 수식에서 \(\sum_s d_{\pi_\theta} (s) \sum_a \pi_\theta (a|s)\)는
상태 s에서 정책에 대한 모든 행동 a를 했을 때의 값이므로
기댓값으로 표현할 수 있습니다.
\(\nabla_\theta J(\theta) = E_{\pi_\theta} [ \nabla_\theta \log \pi_\theta ( a | s ) q_\pi (s,a)]\)
결과적으로 폴리시 그레디언트 수식은 아래와 같습니다.
\(\theta_{t+1} = \theta_t + \alpha \nabla_\theta J(\theta) \thickapprox \theta_t + \alpha[\nabla_\theta \log \pi_\theta ( a | s) q_\pi(s,a)]\)
그런데 폴리시 그레디언트에서는 정책에 대한 근사를 진행합니다.
큐함수를 가지고 있지 않기 때문에 \(q_\pi (s,a)\)를 구할 수 없습니다.
이 값을 대체할 수 있는 방법이 중요합니다.
그 중 반환값 \(G_t\)를 사용하는 알고리즘이 REINFORCE 알고리즘입니다.
'CS > 강화학습' 카테고리의 다른 글
카트폴 (0) | 2021.11.07 |
---|---|
인공신경망 (Neural Network) (0) | 2021.10.23 |
근사함수 (0) | 2021.10.11 |
살사(SARSA) / 큐러닝(Q-Learning) (0) | 2021.10.10 |
다이내믹 프로그래밍 (0) | 2021.10.09 |