목표

- Double Deep Q Network가 Deep Q Network의 어떤 문제를 어떻게 해결했는지 이해한다.

- Double Deep Q Network의 동작 방식을 이해하고 코드를 다룰 줄 안다.

 

DDQN의 특징

- Target network가 Online network의 행동을 평가한다.(max Q(s',a) 값을 평가한다)

- Double Q learning 은 2개의 Q table을 가지고 서로를 평가했지만 DNN 구조가 들어간 DDQN은 이미 target network, online network로 구분되어 있으므로 서로를 평가하는 방법으로 진행한다.

- 핵심은 행동( argmax(Q(s)))과 행동에 대한 평가( Q(s,argmax(Q(s)) ) 값을 분리했다는 것이다. 

def optimize_model(self, experiences):
    state, actions, reward, next_states, is_terminals = experiences
    batch_size = len(is_terminals)

    #online model에서 action index 취득
    argmax_a_q_sp = self.online_model(next_states).max(1)[1]

    
    q_sp = self.target_model(next_states).detach()

    #online model에서 취득한 action index를 target model에서 뽑은 Q(s', action index) 로 값을 평가.
    max_a_q_sp = q_sp[np.arange(batch_size), argmax_a_q_sp].unsqeeze(1)
    target_q_sa = rewards + (self.gamma * max_a_q_sp * (1 - is_terminals))
    q_sa = self.online_model(states).gather(1, actions)

    td_error = q_sa - target_q_sa
    value_loss = td_error.pow(2).mul(0.5).mean()
    self.value_optimizer.zero_grad()
    value_loss.backward()
    self.value_optimizer.step()

 

정리

- DDQN 기법을 통해 DQN의 overestimation 문제를 어느 정도 감소시켰다.

- 핵심은 행동( argmax(Q(s)))과 행동에 대한 평가( Q(s,argmax(Q(s)) ) 값을 분리 한 것이다.

+ Recent posts