ПочатиПочніть безкоштовно

Фіксовані Q-цілі

Ви готуєтеся тренувати свій Lunar Lander із фіксованими Q-цілями. Як передумову, потрібно створити як онлайн-мережу (яка обирає дію), так і цільову мережу (яка використовується для обчислення TD-цілі).

Вам також потрібно реалізувати функцію update_target_network, яку ви зможете викликати на кожному кроці навчання. Цільова мережа не оновлюється градієнтним спуском; натомість update_target_network злегка зсуває її ваги у бік Q-мережі на невелику величину, щоб мережа залишалася досить стабільною з часом.

Зверніть увагу, що лише для цієї вправи ви використовуєте дуже маленьку мережу, щоб ми могли легко надрукувати й переглянути її словник стану. У неї лише один прихований шар розміру два; простір дій і простір станів також мають розмірність 2.

Функція print_state_dict() доступна у вашому середовищі, щоб надрукувати словник стану.

Ця вправа є частиною курсу

Глибоке навчання з підкріпленням у Python

Переглянути курс

Інструкції до вправи

  • Отримайте .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))
Редагувати та запускати код