서론
강화 학습은 바둑과 같은 게임이나 자율 주행 자동차와 같은 실제 응용 분야에서 최근 달성한 성과들로 인해 지난 10년 동안 인기를 얻은 머신러닝의 융합 분야입니다. 이러한 성장은 최신 GPU의 비약적인 발전 및 머신러닝 기술의 진화와도 맞물려 있습니다. 우리는 이제 기계가 컴퓨터 게임에서 인간을 쉽게 뛰어넘을 수 있는 단계에 이르렀습니다. 심층 Q-네트워크(DQN)는 고차원성 및 장기적 계획이 필요한 아타리(Atari)와 같은 비디오 게임을 처리하는 데 큰 가능성을 보이는 강화 학습 알고리즘입니다. 본 튜토리얼에서는 DQN의 작동 방식을 설명하고, 기존에 OpenAI에서 관리했던 Gymnasium의 루나 랜더를 해결하는 과정을 통해 그 효과를 살펴봅니다.
강화 학습이란 무엇인가?
강화 학습은 누적 보상을 극대화하기 위해 에이전트가 환경 내에서 행동을 수행하며 의사 결정을 내리는 과정입니다. 주요 구성 요소는 다음과 같습니다.
- 에이전트(Agent): 환경과 상호작용하는 의사 결정 주체입니다.
- 환경(Environment): 에이전트가 상호작용하는 외부 시스템입니다.
- 상태(State, S): 환경의 현재 상황이나 구성입니다.
- 행동(Action, A): 에이전트가 취할 수 있는 가능한 움직임이나 결정입니다.
- 보상(Reward, R): 행동의 품질을 나타내는 환경으로부터의 피드백입니다.
- 정책(Policy, π): 상태를 행동에 매핑하여 에이전트의 행동 방식을 정의하는 전략입니다.
- 가치 함수(Value Function, V): 주어진 상태에서 기대되는 누적 보상을 추정합니다.
- Q-함수(Q-Function, Q): 주어진 상태에서 특정 행동을 취했을 때 기대되는 누적 보상을 추정합니다.
강화 학습의 작동 원리
- 초기화(Initialization): 에이전트는 환경에 대한 지식이 없거나 아주 최소한의 정보만 가진 상태로 시작합니다.
- 상호작용(Interaction): 에이전트는 자신의 정책에 기반하여 행동을 취함으로써 환경과 상호작용합니다.
- 피드백(Feedback): 환경은 각 행동에 대해 새로운 상태와 보상으로 응답합니다.
- 학습(Learning): 에이전트는 향후 의사 결정을 개선하기 위해 받은 보상을 바탕으로 정책 및 가치 함수를 업데이트합니다.
핵심 개념
- 탐험과 활용(Exploration vs. Exploitation): 새로운 행동을 탐색하는 것과 이미 알려진 높은 보상의 행동을 활용하는 것 사이의 균형을 맞춥니다.
- 할인율(Discount Factor, ): 즉각적인 보상에 대비하여 미래 보상의 중요도를 결정합니다.
- 벨만 방정식(Bellman Equation): 한 상태의 가치와 그 다음 이어지는 상태들의 가치 사이의 관계를 설명합니다.
벨만 방정식
벨만 방정식은 강화 학습의 기본 요소로, 가치 함수의 재귀적 분해를 제공합니다. Q-함수에 대한 벨만 방정식은 다음과 같습니다.
여기서:
- 는 상태 에서 행동 를 취했을 때의 Q-값입니다.
- 은 행동 를 취한 후 받는 보상입니다.
- 는 할인율로, 미래 보상의 중요도를 결정합니다.
- 는 가능한 모든 행동 에 대하여 다음 상태 에서 얻을 수 있는 최대 Q-값입니다.
시간차 학습(Temporal Difference Learning)
시간차(TD) 학습은 동적 계획법(Dynamic Programming)과 몬테카를로(Monte Carlo) 방법의 아이디어를 결합한 강화 학습의 핵심 접근법입니다. 예측된 가치와 실제 받은 보상에 다음 상태의 할인된 가치를 더한 값 사이의 차이, 즉 시간차 오차를 바탕으로 가치 함수를 업데이트합니다.
TD 학습의 일종인 Q-러닝의 업데이트 규칙은 다음과 같습니다.
여기서:
- 는 학습률(learning rate)로, 새로운 정보가 기존 정보를 덮어쓰는 정도를 제어합니다.
- 는 현재 Q-값에 대한 타깃(target)으로, 즉각적인 보상과 추정된 미래 보상을 결합한 값입니다.
강화 학습은 복잡한 의사 결정 문제를 해결하기 위한 강력한 프레임워크입니다. 이 프레임워크는 환경과의 상호작용 과정에서 겪는 시행착오를 통해 최적의 전략을 학습합니다.
DQN의 작동 원리
심층 Q-네트워크(DQN)는 Q-러닝을 심층 신경망(deep neural networks)과 결합하여 수많은 상태와 행동이 존재하는 환경을 처리합니다.
경험을 통한 학습
Q-러닝은 에이전트가 환경과의 상호작용을 통해 보상을 극대화하도록 학습하는 강화 학습 알고리즘입니다. 이는 미래 보상을 예측하기 위해 Q-함수 를 사용합니다. 에이전트는 벨만 방정식을 사용하여 Q-값을 업데이트하며, 받은 보상과 예상되는 미래 보상을 바탕으로 예측값을 조정합니다.
실제 예시
예측된 인 상태 에 있다고 가정해 봅시다. 행동 를 취한 후 상태 로 전이되고 8의 보상을 받습니다. 에서의 최적 행동에 대한 Q-값은 95이며, 할인율은 0.99입니다. 시간차는 다음과 같습니다.
학습률이 0.1이라면, 업데이트된 Q-값은 다음과 같습니다.
딥 Q-러닝
전통적인 Q-러닝은 Q-값을 저장하기 위해 테이블을 사용하지만, 이는 상태와 행동 공간이 방대한 환경에서는 사실상 적용이 불가능합니다. DQN은 를 근사하기 위해 신경망을 사용하므로, 에이전트가 아직 겪어보지 못한 상태-행동 쌍에 대해서도 일반화할 수 있게 해줍니다. 신경망의 입력은 관측값(observation)이며, 출력은 가능한 각 행동에 대한 Q-값입니다.
DQN 알고리즘
- 경험 재생(Experience Replay): 경험들 을 재생 버퍼(replay buffer)에 저장합니다. 버퍼에서 무작위로 샘플링하면 시간적 상관관계를 깨는 데 도움이 되어 학습이 더 안정적으로 이루어집니다.
- 타깃 네트워크(Target Network): 의사 결정을 위한 로컬(primary) 네트워크와 안정적인 Q-값 타깃을 제공하기 위한 타깃 네트워크 등 두 개의 신경망을 사용합니다.
- 훈련 단계:
재생 버퍼와 네트워크들을 초기화합니다.
각 에피소드마다:
시작 상태를 초기화합니다.
각 단계에 대해:
- -탐욕(-greedy) 정책을 사용하여 행동 를 선택합니다.
- 행동을 실행하고 보상 과 다음 상태 를 관측합니다.
- 경험을 재생 버퍼에 저장합니다.
- 재생 버퍼에서 미니배치(mini-batch)를 샘플링합니다.
- 타깃 Q-값을 계산하고 손실(loss)에 대해 경사하강법을 수행합니다.
- 타깃 네트워크를 주기적으로 업데이트합니다.
안정성을 위한 개선 사항
안정성과 수렴성을 보장하기 위해 다음과 같은 여러 개선 사항이 구현됩니다.
- -탐욕 행동 선택: 시간이 지남에 따라 탐색률을 조정하여 탐험과 활용 사이의 균형을 맞춥니다.
- 경험 재생: 과거 경험의 배치(batch)로부터 학습할 수 있게 하여 안정적인 훈련과 더 나은 수렴을 보장합니다.
- 타깃 네트워크 및 로컬 네트워크(Target vs. Local Network): 안정적인 Q-값 타깃을 제공하는 타깃 네트워크를 사용하여 진동과 발산을 줄입니다.
타깃 네트워크 및 로컬 네트워크
DQN에서는 학습을 안정화하기 위해 두 개의 네트워크가 사용됩니다.
- 주(로컬) 네트워크(Primary/Local Network): 이 네트워크는 지속적으로 업데이트되며 훈련 중에 행동을 선택하는 데 사용됩니다. 예측된 Q-값과 타깃 Q-값 사이의 손실을 최소화하여 학습합니다.
- 타깃 네트워크(Target Network): 이 네트워크는 Q-값 업데이트를 위한 안정적인 타깃을 제공합니다. 주 네트워크와 달리 타깃 네트워크의 가중치는 덜 빈번하게 업데이트되며, 일반적으로 수천 스텝마다 주 네트워크의 가중치를 복사하여 반영합니다.
두 개의 네트워크를 사용하는 이유
- 안정성: 주 네트워크의 가중치는 자주 업데이트되기 때문에 불안정성과 발산으로 이어질 수 있습니다. 타깃 네트워크를 사용하여 안정적인 Q-값 타깃을 제공함으로써, 학습 중 발생하는 급격한 변동을 방지합니다.
- 일관성: 타깃 네트워크는 주기적으로만 업데이트되므로 일관된 학습 목표를 유지하는 데 도움이 됩니다. 이를 통해 Q-값 업데이트가 더욱 안정적이고 신뢰할 수 있는 목표를 기반으로 이루어지며, 결과적으로 더 매끄럽고 안정적인 학습이 가능해집니다.
업데이트 메커니즘
- 주 네트워크 업데이트: 매 행동 이후, 주 네트워크는 예측된 Q-값과 타깃 네트워크가 제공하는 타깃 Q-값 간의 차이로 계산된 손실을 사용하여 가중치를 업데이트합니다.
- 타깃 네트워크 업데이트: 수천 스텝마다 주 네트워크의 가중치가 타깃 네트워크로 복사되며, 이를 통해 타깃 네트워크가 다시 업데이트되기 전까지 일정 스텝 동안 안정적인 목표를 제공하도록 보장합니다.

다음은 상세한 코드 예제입니다
1단계: 필수 라이브러리 설치
pip install swig gymnasium gymnasium[box2d] stable-baselines3 torch
2단계: 라이브러리 임포트 및 환경 설정
import gymnasium
from stable_baselines3 import DQN
from stable_baselines3.common.evaluation import evaluate_policy
# 루나 랜더 환경 생성
env = gymnasium.make("LunarLander-v3")
3단계: DQN 모델 정의
# DQN 모델 정의
model = DQN("MlpPolicy", env, verbose=1)
4단계: DQN 모델 학습
# 필요에 따라 타임스텝 조정
model.learn(total_timesteps=750_000)
5단계: 학습된 모델 평가
mean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10)
print(f"Mean reward: {mean_reward} +/- {std_reward}")
# 선택 사항: 모델 저장
model.save("dqn_lunar_lander")
6단계: 학습된 모델 시각화
import time
# 필요한 경우 모델 불러오기
# model = DQN.load("dqn_lunar_lander")
# 모델 성능 시각화
episodes = 5
for episode in range(1, episodes + 1):
obs, info = env.reset()
done = False
score = 0
while not done:
env.render()
action, _states = model.predict(obs)
obs, reward, terminated, truncated, info = env.step(action)
done = terminated or truncated
score += reward
print(f"Episode: {episode}, Score: {score}")
time.sleep(1)
env.close()
설명
- 환경 설정:
gymnasium.make("LunarLander-v3")는 루나 랜더 환경을 초기화합니다. - DQN 모델: Stable Baselines3의
DQN클래스를 사용하여 MLP 정책이 적용된 모델을 정의합니다. - 학습:
learn메서드는 지정된 타임스텝 수만큼 모델을 학습시킵니다. - 평가:
evaluate_policy함수는 여러 에피소드에 걸쳐 모델의 성능을 평가합니다. - 시각화: 루프 내에서 환경을 렌더링하여 학습된 모델의 성능을 실시간으로 시각화합니다.
추가 팁
- 하이퍼파라미터: 더 나은 성능을 위해 하이퍼파라미터(학습률, 배치 크기 등)를 조정해야 할 수도 있습니다.
- 체크포인트: 학습 진행 상황이 유실되는 것을 방지하기 위해 훈련 중 중간 모델을 저장합니다.
- 모니터링: 텐서보드(TensorBoard)를 사용하여 실시간으로 학습 지표를 모니터링합니다.

결론
DQN은 Q-러닝과 심층 신경망을 결합한 강력한 강화 학습 알고리즘입니다. 경험 재생 및 타깃 네트워크와 같은 기법을 활용함으로써, DQN은 Gymnasium의 루나 랜더와 같은 복잡한 환경을 효과적으로 해결하도록 학습하며 게임과 실제 응용 분야 모두에서 잠재력을 보여줍니다. 주 네트워크와 함께 타깃 네트워크를 사용하면 학습의 안정성과 일관성이 보장되므로, DQN은 광범위한 강화 학습 문제에 적용할 수 있는 강력하고 효율적인 알고리즘이 됩니다.
추가 학습 자료
- DQN을 활용한 딥 Q-러닝 - 강화 학습 5부
- 로켓 착륙을 학습하는 AI(루나 랜더) | 강화 학습
- Gymnasium 공식 문서 - 루나 랜더
- 심층 강화 학습으로 아타리 게임하기
- Keras를 사용한 DQN으로 루나 랜더 해결하기
- 심층 Q-네트워크(DQN) 설명
- BCS 멤버 그룹 - 심층 Q-네트워크 DQN
- 유다시티 - 심층 강화 학습



