반응형
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-값을 두 개의 부분으로 분리함:
- V(s): 해당 상태(state) 자체가 얼마나 좋은지 평가하는 값
- 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
반응형
'컴퓨터과학' 카테고리의 다른 글
GANs vs VAEs 차이점 완벽 정리! AI 생성 모델의 원리부터 최신 활용까지 (0) | 2025.02.12 |
---|---|
강화 학습 (Q-Learning, Deep Q-Learning) 완벽 정리 | AI 학습 방법 완전 분석! (1) | 2025.02.10 |
Q-Learning vs Deep Q-Learning 비교 분석 (0) | 2025.02.10 |
Q-Learning과 Deep Q-Network(DQN)구현 (Python + OpenAI Gym) (0) | 2025.02.10 |
Q-Learning과 Deep Q-Learning의 실제 활용 사례 (0) | 2025.02.10 |