부분 관측 문제를 극복하는 DRQN 아키텍처
심층 강화 학습 분야에서, 전통적인 DQN(Deep Q-Network)은 완전한 상태 정보를 가정하기 때문에 현실 세계의 많은 상황에 적용하기 어렵다. 예를 들어 자율주행 차량이 센서의 시야 제한으로 인해 전체 도로 상황을 파악하지 못하거나, 로봇이 장애물에 의해 일부 영역을 관측할 수 없는 경우가 있다. 이러한 부분 관측 마르코프 결정 프로세스(POMDP)에서는 과거의 관측 정보를 통합하여 잠재 상태를 추론하는 능력이 필수적이다.
DRQN의 구조적 혁신
DRQN(Deep Recurrent Q-Network)은 이 문제를 해결하기 위해 순환 신경망(RNN), 특히 LSTM(Long Short-Term Memory)을 Q-함수 근사기에 통합한다. 네트워크는 다음과 같은 계층 구조를 갖는다:
- 입력 처리기: 원시 픽셀 데이터를 처리하는 컨볼루션 층들
- 시계열 메모리 모듈: CNN 출력을 입력으로 받아 시간적으로 연결된 정보를 유지하는 LSTM 셀
- 액션 평가기: LSTM의 은닉 상태를 기반으로 각 행동에 대한 Q값을 예측하는 완전 연결층
LSTM은 내부적으로 기억 게이트와 유입/유출 게이트를 통해 중요한 과거 정보를 유지하고 불필요한 정보는 버리는 메커니즘을 제공하므로, 단일 프레임에 의존하지 않고 일련의 관측 결과로부터 의미 있는 상태 표현을 구성할 수 있다.
시간 일관성 보존을 위한 트레이스 리플레이
DQN의 경험 리플레이 방식은 샘플 간 독립성을 가정하지만, DRQN에서는 시간적 연속성이 중요하다. 따라서 ReplayMemory 클래스는 연속된 경험 조각(trace)을 함께 저장하고 샘플링한다. 아래 코드는 길이 n의 시퀀스를 추출하는 핵심 로직이다:
def sample_trace(self, batch_size, trace_len):
sampled_sequences = []
for _ in range(batch_size):
episode = random.choice(self.storage)
start_idx = random.randint(0, len(episode) - trace_len)
sequence = episode[start_idx:start_idx + trace_len]
sampled_sequences.extend(sequence)
return np.stack(sampled_sequences)
이러한 트레이스 기반 리플레이는 역전파 시 정확한 그래디언트 흐름을 보장하며, RNN의 상태 전달을 자연스럽게 구현한다.
그리드월드 기반 검증 실험
본 구현은 gridworld.py를 통해 부분 관측 환경을 시뮬레이션한다. 에이전트는 9x9 그리드에서 목표 지점(초록색)까지 이동해야 하며, 함정(빨간색)은 부정적 보상을 유도한다. partial 모드 활성화 시, 에이전트는 주변 3x3 영역만 인식 가능하다.
실행 절차
- 저장소 복제:
git clone https://gitcode.com/gh_mirrors/de/DeepRL-Agents cd DeepRL-Agents - Jupyter 노트북 실행:
jupyter notebook Deep-Recurrent-Q-Network.ipynb - 환경 초기화:
env = gameEnv(partial=True, size=9) - 학습 설정:
- 트레이스 길이: 8
- LSTM 은닉 크기: 512
- 배치 크기: 4
- 탐험 감쇠: ε=1.0 → 0.1 (선형)
성능 비교: DRQN 대 DQN
동일한 환경에서 두 알고리즘을 비교하면 DRQN이 우수한 성능을 보인다:
- 목표 도달률 약 40% 향상
- 학습 안정성 증가 (보상 변동성 감소)
- 센서 노이즈 및 관측 누락에 대한 내성 확보
이는 과거 상태를 기억함으로써 일시적인 정보 손실에도 불구하고 일관된 정책을 유지할 수 있기 때문이다.
응용 가능성과 심화 학습
DRQN의 패러다임은 다음과 같은 분야로 확장될 수 있다:
- 비전 기반 로봇 탐색 (센서 지연 보정)
- 대화 시스템 (이전 발화 맥락 이해)
- 시계열 게임 AI (Atari 등 비완전 시야 게임)
이론적 배경을 깊이 있게 이해하려면 원본 논문 *"Deep Recurrent Q-Learning for Partially Observable MDPs"* 및 프로젝트 레포지터리의 문서를 참고하라.