본문 바로가기
컴퓨터과학

DQN의 발전된 알고리즘 3가지 (Double DQN, Dueling DQN, Prioritized Experience Replay)

by 코드그래피 2025. 2. 10.
반응형

DQN의 발전된 알고리즘

기존 DQN의 한계

DQN은 기존 Q-Learning보다 훨씬 강력한 알고리즘이지만, 몇 가지 한계점이 있어요.

1. 과적합 문제 (Overestimation Bias)

  • DQN은 미래 보상을 예측할 때 Q-값을 과대평가(Overestimation)하는 경향이 있어.
  • 결과적으로 잘못된 행동을 선택할 가능성이 커짐.

2. 비효율적인 학습 (Inefficient Learning)

  • 모든 상태(state)를 똑같이 학습하다 보니 중요한 경험이 충분히 반영되지 않음.

3. 불안정한 학습 과정

  • 신경망 학습이 불안정해질 수 있고, 수렴하지 않는 경우가 발생할 수 있음.

이러한 문제를 해결하기 위해 Double DQN, Dueling DQN, Prioritized Experience Replay (PER) 같은 기법이 개발되었어요.

Double DQN (DDQN)

✅ “DQN의 Q-값 과대평가 문제를 해결한 알고리즘”

✅ 문제점: DQN은 Q-값을 과대평가하는 경향이 있음

  • DQN에서는 벨만 방정식을 이용해 Q-값을 업데이트할 때,
target = reward + gamma * np.max(model.predict(next_state)[0])

위와 같이 다음 상태에서 가장 큰 Q-값을 선택하는 방식입니다.

  • 하지만 이 과정에서 신경망이 가짜 Q-값을 만들어 과대평가할 위험이 있음.

✅ 해결 방법: 두 개의 Q-네트워크를 사용

  • 기존 네트워크 (Online Network): 현재 학습 중인 신경망
  • 타깃 네트워크 (Target Network): 일정 주기로 업데이트되는 네트워크
  • 두 개의 네트워크를 분리해서 Q-값을 계산하면 더 정확한 보상 예측이 가능함.

📌 Double DQN 코드 수정 (DQN과 비교)

# Double DQN에서 Q-값 계산
target = reward + gamma * target_model.predict(next_state.reshape(1, -1))[0][np.argmax(model.predict(next_state.reshape(1, -1))[0])]
  • DQN과 달리, 현재 네트워크에서 행동을 선택하고, 타깃 네트워크에서 그 행동의 Q-값을 가져옴.
  • 덕분에 과대평가 문제를 해결할 수 있어요!

Dueling DQN

✅ “Q-값을 상태(State)와 행동(Action)으로 분리하여 학습 성능을 향상시키는 알고리즘”

✅ 문제점: 어떤 상태에서는 행동 선택이 덜 중요함

  • 예를 들어, 자동차 자율 주행에서 신호 대기 상태에서는 액셀이나 핸들 조작이 의미 없음.
  • 기존 DQN은 이런 상태에서도 불필요한 계산을 수행해서 비효율적인 학습이 발생함.

✅ 해결 방법: 가치(Value)와 이득(Advantage) 분리

  • Dueling DQN은 Q-값을 두 개의 부분으로 분리함:
  1. V(s): 해당 상태(state) 자체가 얼마나 좋은지 평가하는 값
  2. A(s, a): 특정 행동(action)을 했을 때 얼마나 추가적인 이득(advantage)이 있는지 평가하는 값

📌 Dueling DQN 수식

$$ Q(s, a) = V(s) + A(s, a) $$

  • 즉, 어떤 상태에서는 특정 행동이 중요하지 않다면, 굳이 그 행동을 학습하지 않도록 함.
  • 결과적으로 학습 속도가 빨라지고 성능이 향상됨.

📌 Dueling DQN 코드 예제 (TensorFlow)

from tensorflow.keras.layers import Input, Dense, Lambda
from tensorflow.keras.models import Model
import tensorflow.keras.backend as K

def build_dueling_dqn(state_size, action_size):
    inputs = Input(shape=(state_size,))
    layer = Dense(24, activation='relu')(inputs)
    layer = Dense(24, activation='relu')(layer)

    # 가치(Value) 분리
    value = Dense(1, activation='linear')(layer)
    
    # 이득(Advantage) 분리
    advantage = Dense(action_size, activation='linear')(layer)
    
    # 최종 Q-값 계산 (V + A)
    q_values = Lambda(lambda x: x[0] + (x[1] - K.mean(x[1], axis=1, keepdims=True)))([value, advantage])

    model = Model(inputs=inputs, outputs=q_values)
    model.compile(optimizer='adam', loss='mse')
    return model
  • 이 코드에서는 Q-값을 가치(Value)와 이득(Advantage)로 분리해서 계산하고 있어요.
  • 이를 통해 불필요한 행동을 줄이고, 더 중요한 행동에 집중하도록 학습 가능해요!

Prioritized Experience Replay (PER)

✅ “더 중요한 경험을 우선적으로 학습하도록 개선한 알고리즘”

✅ 문제점: 모든 경험을 동일한 비율로 학습하는 것은 비효율적

  • 기존 DQN은 과거 경험을 랜덤하게 샘플링하여 학습했어.
  • 하지만 중요한 경험과 덜 중요한 경험이 같은 확률로 학습되면 비효율적임.

✅ 해결 방법: 중요한 경험을 더 많이 학습하도록 함

  • 경험을 우선순위(priority) 기반으로 정렬하고, 중요한 경험을 더 자주 학습하도록 함.

📌 PER 코드 예제 (Python)

import numpy as np
import random

class PrioritizedReplayBuffer:
    def __init__(self, size, alpha=0.6):
        self.size = size
        self.alpha = alpha
        self.buffer = []
        self.priorities = []

    def add(self, experience, td_error):
        priority = (abs(td_error) + 1e-5) ** self.alpha
        self.buffer.append(experience)
        self.priorities.append(priority)

    def sample(self, batch_size):
        priorities = np.array(self.priorities)
        probs = priorities / np.sum(priorities)
        indices = np.random.choice(len(self.buffer), batch_size, p=probs)
        batch = [self.buffer[i] for i in indices]
        return batch

📌 한눈에 정리: DQN 개선 알고리즘 비교

알고리즘 핵심 개념 개선된 점
Double DQN 두 개의 네트워크 사용 Q-값 과대평가 문제 해결
Dueling DQN 가치(Value)와 이득(Advantage) 분리 불필요한 행동 학습 감소
Prioritized Experience Replay (PER) 중요한 경험을 우선 학습 학습 속도 및 성능 향상

결론

DQN은 강화 학습에서 획기적인 발전을 이루었지만, 몇 가지 한계를 가지고 있었어요.

  • Double DQN: Q-값 과대평가 문제를 해결하여 더욱 신뢰할 수 있는 학습 가능
  • Dueling DQN: 상태(State)와 행동(Action)을 분리하여 학습 효율성 향상
  • Prioritized Experience Replay (PER): 중요한 경험을 우선적으로 학습하여 학습 속도 개선

이러한 개선된 알고리즘을 적절히 활용하면 더욱 효율적이고 안정적인 강화 학습을 수행할 수 있어요!

📌 DQN을 활용한 강화 학습 프로젝트를 진행 중이라면, 위의 개선 알고리즘을 조합해서 성능을 높여보세요.

 

https://wishsun1411.tistory.com/85

 

강화 학습 (Q-Learning, Deep Q-Learning) 완벽 정리 | AI 학습 방법 완전 분석!

강화 학습(Reinforcement Learning, RL)강화 학습은 인공지능(AI)과 머신러닝에서 중요한 학습 방법 중 하나로, 에이전트(Agent)가 환경(Environment)과 상호 작용하며 최적의 행동을 학습하는 방식입니다. 특

wishsun1411.tistory.com

 

반응형