Оптимизация сети с использованием градиентов, отсталых от других (PyTorch) - PullRequest
0 голосов
/ 27 декабря 2018

Я использую Reinforcement Learning для обучения двух сетей, одна - сеть актеров, обозначенная как u, а другая - сеть критики, обозначенная как Q.

Сеть акторов u получает вход,и производит тензор актера.как, ты (ы) -> а.в то время как Q получает тот же вход, плюс тензор актера u, полученный на предыдущем шаге.и производит оценку.Как Q (s, a) -> q

И теперь я делаю обратное распространение в этих двух сетях.Чтобы оптимизировать вас, формула: enter image description here

    ce_optimizer = torch.optim.Adam(tn.critic_e.parameters(), lr=tn.LR_C)
    ae_optimizer = torch.optim.Adam(tn.actor_e.parameters(), lr=tn.LR_A)
    ... # optimize the critic network, which is easy

    # optimize the  actor network
    ae_optimizer.zero_grad()
    ce_optimizer.zero_grad()  # since we optimized critic network in above part,
    a_pred = tn.actor_e(patch, hmap)
    q_eval = tn.critic_e(patch, hmap, a_pred)
    q_eval.backward(torch.tensor([[1.0]]).to(device))
    ae_optimizer.step()  # note using optimizer for actor network

Я делаю один прямой процесс для вас, а затем Q, и обратно, что, как только вы получите его оценки, простоиспользуя соответствующий оптимизатор для выполнения операции step ().Правильна ли здесь логика?

...