시작하기무료로 시작하기

고정 Q-타깃

고정 Q-타깃으로 Lunar Lander를 학습할 준비를 하려고 합니다. 그에 앞서, 행동을 선택하는 온라인 네트워크와 TD-타깃 계산에 사용하는 타깃 네트워크를 모두 인스턴스화해야 해요.

또한 매 학습 단계에서 사용할 수 있는 update_target_network 함수를 구현해야 합니다. 타깃 네트워크는 경사하강법으로 직접 업데이트하지 않고, 대신 update_target_network가 가중치를 Q-네트워크 쪽으로 조금씩 이동시켜 시간이 지나도 비교적 안정적으로 유지되도록 해요.

참고로, 이 연습 문제에서는 상태 딕셔너리를 쉽게 출력하고 확인할 수 있도록 아주 작은 네트워크를 사용합니다. 은닉층은 크기 2인 층 하나뿐이며, 행동 공간과 상태 공간의 차원도 각각 2입니다.

상태 딕셔너리를 출력하기 위한 print_state_dict() 함수가 환경에 준비되어 있습니다.

이 연습은 강의의 일부입니다

Python으로 배우는 Deep Reinforcement Learning

강의 보기

연습 안내

  • 타깃 네트워크와 온라인 네트워크 각각에 대해 .state_dict()를 얻으세요.
  • 온라인 네트워크의 파라미터와 타깃 네트워크의 파라미터 사이의 가중 평균을 사용해 타깃 네트워크의 상태 딕셔너리를 업데이트하세요. 이때 온라인 네트워크의 가중치는 tau를 사용합니다.
  • 업데이트된 상태 딕셔너리를 타깃 네트워크에 다시 로드하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

def update_target_network(target_network, online_network, tau):
    # Obtain the state dicts for both networks
    target_net_state_dict = ____
    online_net_state_dict = ____
    for key in online_net_state_dict:
        # Calculate the updated state dict for the target network
        target_net_state_dict[key] = (online_net_state_dict[____] * ____ + target_net_state_dict[____] * ____)
        # Load the updated state dict into the target network
        target_network.____
    return None
  
print("online network weights:", print_state_dict(online_network))
print("target network weights (pre-update):", print_state_dict(target_network))
update_target_network(target_network, online_network, .001)
print("target network weights (post-update):", print_state_dict(target_network))
코드 편집 및 실행