실습 · 연습문제 2개
Q-learning 갱신 q-learning-update
경험 하나로 행동 가치 표를 갱신한다.
가 종료 상태이면 그 뒤의 가치는 0이므로 목표는 뿐이다. 함수 q_learning_update(Q, s, a, r, s_next, done, alpha, gamma)를 완성해 갱신된 표를 반환한다.
| 인자 | 뜻 |
|---|---|
Q |
shape (S, A)의 행동 가치 표. 바꾸지 않고 복사본을 갱신해 반환한다 |
s, a, s_next |
정수 상태·행동 번호 |
r |
받은 보상 |
done |
s_next가 종료 상태이면 True |
alpha, gamma |
학습률, 할인율 |
테스트는 손으로 계산한 갱신(퀴즈와 같은 값 2.85), Q[s, a] 말고는 바뀌지 않는지, 종료 처리, 목표에 평균이 아니라 를 쓰는지, 작은 사슬에서 무작위 경험으로 반복하면 로 수렴하는지 확인한다.
생각해 볼 것: 목표의 를 실제로 다음에 고른 행동의 로 바꾸면 SARSA가 된다. 두 갱신이 같은 경험에서 다른 값을 내는 예를 하나 만들어 본다.
REINFORCE 기울기와 baseline reinforce-gradient
행동이 개인 softmax 정책 에서 score는
다(는 번째 성분만 1인 벡터). 표본 개 로 만든 REINFORCE 추정량
을 계산하는 함수 reinforce_grad(theta, actions, returns, baseline=0.0)을 완성한다.
| 인자 | shape | 뜻 |
|---|---|---|
theta |
(A,) |
로짓 |
actions |
(N,) |
정수 행동 |
returns |
(N,) |
각 행동 뒤의 이득 |
baseline |
스칼라 | 이득에서 뺄 상수 |
반환하는 기울기의 shape은 (A,)다. 테스트는 손으로 계산한 표본 하나, baseline을 뺀 결과, 성분의 합이 0인지, 표본이 많을 때 정확한 기울기 에 가까운지(baseline이 있어도 없어도), 로짓이 클 때 수치적으로 안정한지를 확인한다.
힌트: np.eye(A)[actions]가 shape (N, A)의 one-hot 행렬이다. softmax는 theta - theta.max()로 계산한다.