클리핑된 확률 비율
이제 PPO 목적 함수의 핵심 구성 요소인 클리핑된 확률 비율을 구현해 보겠습니다.
참고로, 확률 비율은 다음과 같이 정의됩니다: $$\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$$
그리고 클리핑된 확률 비율은 $\mathrm{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon)$입니다.
이 연습은 강의의 일부입니다
Python으로 배우는 Deep Reinforcement Learning
연습 안내
action_log_prob에서 행동 확률prob을,action_log_prob_old에서prob_old를 얻으세요.- 이전 행동 로그 확률을 torch의 기울기 계산 그래프에서 분리하세요.
- 확률 비율을 계산하세요.
- 대리 목적 함수를 클리핑하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
log_prob = torch.tensor(.5).log()
log_prob_old = torch.tensor(.4).log()
def calculate_ratios(action_log_prob, action_log_prob_old, epsilon):
# Obtain prob and prob_old
prob = ____
prob_old = ____
# Detach the old action log prob
prob_old_detached = ____.____()
# Calculate the probability ratio
ratio = ____ / ____
# Apply clipping
clipped_ratio = torch.____(ratio, ____, ____)
print(f"+{'-'*29}+\n| Ratio: {str(ratio)} |\n| Clipped ratio: {str(clipped_ratio)} |\n+{'-'*29}+\n")
return (ratio, clipped_ratio)
_ = calculate_ratios(log_prob, log_prob_old, epsilon=.2)