본문 바로가기
KAIST/Reinforcement Learning

Gymnasium's Lunar Lander with Deep Q Learning (DQN) : 한국어 번역

by 나비스 2024. 12. 2.

Gymnasium's Lunar Lander 출처 : https://www.findingtheta.com/blog/solving-gymnasiums-lunar-lander-with-deep-q-learning-dqn

 

 

이 블로그 글은 해당 내용을 한국어로 번역한 글입니다.

 

이 글의 주된 타겟 독자는 강화학습을 입문하는 사람들입니다!

 

강화학습이 어떤 것인지부터 시작해서 DQN을 설명하고 그것을 Lunar Lander에 적용하는 것까지 다룰 예정입니다.

 

https://www.findingtheta.com/blog/solving-gymnasiums-lunar-lander-with-deep-q-learning-dqn

 

Solving Gymnasium's Lunar Lander with Deep Q Learning (DQN)

Learn how the Reinforcement Learning Algorithm Deep Q Learning (DQN) works and apply it to solve Gymnasium's Lunar Lander

www.findingtheta.com

 

 

Introduction

강화 학습은 최근 10년 동안 바둑과 같은 게임, 자율 주행 자동차와 같은 실제 응용 분야에서의 성과로 인해 인기를 얻은 기계 학습의 학제 간 연구 분야입니다. 이러한 성장은 최근 들어 발전한 GPU의 발전과 기계 학습 기술의 진화로 인해 가능했습니다. 우리는 기계가 컴퓨터 게임에서 인간을 쉽게 능가할 수 있는 단계에 도달했습니다. Deep Q-Network, DQN는 고차원 high dimensionality이고, 장기 계획이 필요하기 때문에 Atari와 같은 비디오 게임을 처리하는 데 큰 가능성을 보여준 새로운 강화 학습 알고리즘입니다. 이 튜토리얼에서는 DQN의 작동 방식을 설명하고 이전에 OpenAI에서 관리했던 Gymnasium의 Lunar Lander를 이기는 데 효과적인지 보여줍니다.

 

강화학습 Reinforcement Learning

일단 강화학습은 에이전트가 환경에서 행동을 수행하여 누적 보상을 극대화하는 결정을 내리도록 합니다.

강화학습 아키텍처 : 출처 : https://www.findingtheta.com/blog/solving-gymnasiums-lunar-lander-with-deep-q-learning-dqn

 

[RL의 핵심 요소]

  • Agent: 환경과 상호작용하는 의사결정자
  • Environment: 에이전트가 상호작용하는 외부 시스템
  • State (S): 환경의 현재 상황이나 상태
  • Action (A): 에이전트가 취할 수 있는 가능한 움직임이나 행동
  • Reward (R): 환경으로부터 받는 피드백으로 행동의 퀄리티를 나타냄
  • Policy (\pi): 어떤 상태에서 행동으로 매핑하는 전략으로 이는 에이전트의 행동을 정의함.
  • Value Function (V): 주어진 상태에서 예상되는 누적 보상을 추정
  • Q-Function (Q): 주어진 상태에서 특정 행동을 수행할 경우 예상되는 누적 보상을 추정

 

[RL의 작동 방식]

  1. Initialization 초기화: 에이전트는 환경에 대한 지식이 없거나 최소한의 지식으로 시작합니다.
  2. Interaction 상호작용 : 에이전트는 정책에 따라 행동을 취함으로써 환경과 상호작용합니다.
  3. Feedback 피드백 : 환경은 각 행동에 새로운 상태와 보상으로 반응(피드백)합니다.
  4. Learning 학습 : 에이전트는 받은 보상에 따라 정책 또는 가치 함수를 업데이트하여 미래의 결정을 개선합니다.

[RL의 핵심 개념]

  • Exploration vs Exploitation 탐색 대 활용 : 새로운 행동에 대한 탐색과 보상이 높은 알려진 행동에 대한 활용을 균형 있게 조절합니다.
  • Discount Factor 할인 계수 (γ) : 즉각적인 보상과 미래 보상의 상충되는 중요성을 결정합니다.
  • Bellman Equation 벨만 방정식 : 한 상태의 가치와 그 다음 상태의 가치 사이의 관계를 설명합니다.

[벨만 방정식 Bellman Equation]

$$Q(s,a)=r +\;\gamma \; max_{a'}\;Q(s', a')$$

  • $Q(s, a)$ : 상태 s에서 행동 a를 취할 때 얻는 Q값
  • $r$ : 행동을 취한 후 즉각적으로 받는 보상 reward
  • $\gamma$ : 할인 계수로 미래 보상의 중요성을 결정
  • $ max_{a'}\;Q(s', a') $: 가능한 모든 다음 상태 s'와 모든 행동 a'에 대하여 최대를 가지는 Q값

[시간차 학습 Temporal Difference Learning]

TD 학습은 동적 프로그래밍: Dynamic programming, DP과 몬테카를로 : Monte Carlo Method, MC 방법의 아이디어를 결합한 RL의 핵심 접근 방법입니다. 예측된 값과 실제로 받는 보상의 차이(시간적 차이)와 다음 상태의 할인된 값에 따라 가치 함수를 업데이트합니다.

 

TD 학습의 한 유형인 Q-Learning Q-러닝, Q-학습의 업데이트 규칙 : 

$$Q(s, a) \leftarrow Q(s,a) + \alpha \; (r \; + \gamma max_{a'}\;Q(s', a')\; - Q(s, a) )$$

  • $\alpha$ : 학습률, 새 정보를 이전 정보에 덮어쓰는 정도
    • 높은 학습률은 새 정보를 빠르게 반영하여 모델의 파라미터를 크게 조정함. 장) 모델이 빠르게 수렴할 수 있음 단) 최적해를 넘어서거나 발산할 위험이 있음, 과적합 가능성.
    • 낮은 학습률은 이전 정보를 더 많이 유지함. 
  • $ r \; + \gamma max_{a'}\;Q(s', a') $ : 현재 Q값에 대한 목표로 즉각적인 보상과 미래의 예상 보상을 결합한 것.

 

 

DQN, Deep Q-Learning

DQN 아키텍처 : 출처 : https://www.findingtheta.com/blog/solving-gymnasiums-lunar-lander-with-deep-q-learning-dqn

Q-Leanring과 심층 신경망을 결합하여 수 많은 상태와 행동이 있는 환경을 처리.

 

Q-러닝은 에이전트가 환경과의 상호 작용을 통해 보상을 최대화하는 방법을 배우는 강화 학습 알고리즘입니다.

이는 Q 함수 Q(s, a)를 사용하여 미래 보상을 예측합니다.

에이전트는 벨만 방정식을 사용하여 Q 값을 업데이트하고 즉각적으로 받는 보상과 예상되는 미래 보상에 따라 예측을 조정합니다.

 

예시

예측된 $Q(s, a) = 100$ 인 상태  s에 있다고 가정하자. 행동 a를 취한 후 상태 s'로 전환하고 보상 8을 받습니다. s'에서 가장 좋은 액션에 대한 Q값은 95이고 할인 계수는 0.99입니다.

그렇다면 TD는 $8+0.99*95 - 100 = 2.05$이고, 학습률이 0.1이면 업데이트된 Q값은 $100+0.1*2.05 = 100.205$입니다.

 

DQN 알고리즘

 

기존의 Q-학습은 Q-값을 저장하기 위해 테이블을 사용하는데, 많은 상태와 액션이 있는 환경에서는 실행 불가능합니다. DQN은 신경망을 사용하여 $Q(s, a)$를 근사화하여 에이전트가 보이지 않는 상태-행동 쌍으로 일반화할 수 있도록 합니다. 신경망의 입력은 관찰값이고 출력은 각 가능한 행동에 대한 Q-값입니다.

 

  1. Experience Replay : 경험(s, a, r, s')을 replay 리플레이 버퍼에 저장합니다. 버퍼에서 무작위 샘플링을 하면 시간적 상관관계를 제거하고 학습을 더 안정적으로 만드는 데 도움이 됩니다.
  2. Target Network : 1)  의사 결정을 위한 기본 네트워크(primary)와 2) 안정적인 Q 값 목표를 제공하기 위한 타겟 네트워크(target)의 두 가지 신경망을 사용합니다.
  3. Training Steps:
    리플레이 버퍼와 네트워크를 초기화합니다.
    각 에피소드에 대해 :
       시작 상태를 초기화합니다.
          각 단계에 대해 :
    1. $\epsilon$ -탐욕 정책을 사용하여 행동 a를 선택합니다.
    2. 행동을 실행하고 보상 r, 다음 상태 s'를 관찰합니다.
    3. 리플레이 버퍼에 경험을 저장합니다.
    4. 리플레이 버퍼에서 미니 배치를 통해 샘플링합니다.
    5. 목표 Q 값을 계산하고 손실에 대해 경사 하강을 수행합니다.
    6. 주기적으로 타겟 네트워크를 업데이트합니다.

 

안정성 향상

안정성과 수렴을 보장하기 위해 여러 가지 개선 사항이 구현되었습니다.

  1. $\epsilon$ 탐욕적 Greedy 행동 선택 : 시간에 따른 탐사율을 조정하여 탐사와 개발의 균형을 맞춥니다.
  2. 경험 재생 experience replay : 과거 경험을 기반으로 학습하여 안정적인 학습과 더 나은 수렴을 보장합니다.
  3. 타겟 vs 로컬 네트워크 : 타겟 네트워크를 사용하여 안정적인 목표 Q 값 을 제공하고 진동과 발산을 줄입니다.

타겟 vs. 로컬 네트워크

DQN에서는 두 가지 네트워크를 사용하여 학습을 안정화합니다.

  • 기본(로컬) 네트워크 : 이 네트워크는 지속적으로 업데이트되며 학습 중에 행동을 선택하는 데 사용됩니다. 예측 Q 값과 목표 Q 값 사이의 손실을 최소화하여 학습합니다.
  • 타겟(목표) 네트워크 : 이 네트워크는 Q-값 업데이트에 대한 안정적인 타겟을 제공합니다. 기본 네트워크와 달리 타겟 네트워크의 가중치는 덜 자주 업데이트되며, 일반적으로 기본 네트워크의 가중치를 수천 단계마다 한 번씩 복사합니다.

왜 두 개의 네트워크를 사용해야 하나요?

  1. 안정성 : 기본 네트워크의 가중치는 자주 업데이트되므로 불안정성과 발산으로 이어질 수 있습니다. 타겟 네트워크를 사용하여 안정적인 Q-값 타겟을 제공함으로써 학습에서 급격한 진동을 피할 수 있습니다.
  2. 일관성 : 타겟 네트워크는 주기적으로만 업데이트되므로 일관된 학습 타겟을 유지하는 데 도움이 됩니다. 이를 통해 Q 값 업데이트가 더 안정적이고 신뢰할 수 있는 타겟을 기반으로 하여 더 매끄럽고 안정적인 학습이 가능해집니다.

업데이트 메커니즘

  1. 기본 네트워크 업데이트 : 각 작업 후에 기본 네트워크는 예측 Q 값과 대상 네트워크가 제공한 타겟 Q 값의 차이에서 계산된 손실을 사용하여 가중치를 업데이트합니다.
  2. 타겟 네트워크 업데이트 : 몇 천 단계마다 기본 네트워크의 가중치가 타겟 네트워크에 복사되어 타겟 네트워크가 다시 업데이트되기 전에 특정 단계 수에 대해 안정적인 타겟을 제공할 수 있도록 합니다.

루나 랜더 출처 : https://www.findingtheta.com/blog/solving-gymnasiums-lunar-lander-with-deep-q-learning-dqn

 

 

 

코드

1단계: 필요한 라이브러리 설치

1pip install gymnasium gymnasium[box2d] stable-baselines3 torch

 

 

2단계: 라이브러리 가져오기 및 환경 설정

1import gym
2from stable_baselines3 import DQN
3from stable_baselines3.common.evaluation 
4import evaluate_policy
5
6# Create the Lunar Lander environment
7env = gym.make("LunarLander-v2")

 

 

3단계: DQN 모델 정의

1# Define the DQN model
2model = DQN("MlpPolicy", env, verbose=1)

 

 

4단계: DQN 모델 학습

1# Train the model
2model.learn(total_timesteps=100000)  # Adjust the timesteps as needed

 

 

5단계: 훈련된 모델 평가

1# Evaluate the trained mode
2lmean_reward, std_reward = evaluate_policy(model, env, n_eval_episodes=10)
3print(f"Mean reward: {mean_reward} +/- {std_reward}")
4
5# Optionally, save the model
6model.save("dqn_lunar_lander")

 

 

6단계: 훈련된 모델 시각화

1import time
2# Load the model if needed
3# model = DQN.load("dqn_lunar_lander")
4# Visualize the model's performanceepisodes = 5
5
6for episode in range(1, episodes + 1):    
7	obs = env.reset()    
8    done = False    
9    score = 0    
10    while not done:        
11    	env.render()        
12        action, _states = model.predict(obs)        
13        obs, reward, done, info = env.step(action)        
14        score += reward    
15    print(f"Episode: {episode}, Score: {score}")    
16	time.sleep(1)
17env.close()

설명

  • 환경 설정: gym.make("LunarLander-v2")는 Lunar Lander 환경을 초기화합니다.
  • DQN 모델: Stable Baselines3의 DQN 클래스는 MLP 정책으로 모델을 정의하는 데 사용됩니다.
  • 학습: learn`메서드는 지정된 수의 시간 단계로 모델을 학습합니다.
  • 평가: evaluate_policy 함수는 여러 에피소드에 걸쳐 모델의 성능을 평가합니다.
  • 시각화: 루프는 훈련된 모델이 실시간으로 어떻게 수행되는지 시각화하기 위해 환경을 렌더링합니다.

추가 팁

  • 하이퍼 파라미터: 더 나은 성능을 위해 하이퍼 파라미터 예를 들어, 학습률, 배치 크기 등을 조정해야 할 수도 있습니다.
  • 체크포인팅: 진행 상황 손실을 방지하기 위해 훈련 중에 중간 모델을 저장합니다.
  • 모니터링: TensorBoard를 사용하여 실시간으로 교육 지표를 모니터링합니다.

 

score 출처 : https://www.findingtheta.com/blog/solving-gymnasiums-lunar-lander-with-deep-q-learning-dqn

 

결론

DQN은 Q-러닝과 심층 신경망을 결합한 강력한 강화 학습 알고리즘입니다. 경험 재생 및 타겟 네트워크와 같은 기술을 활용하여 DQN은 Gymnasium의 Lunar Lander와 같은 복잡한 환경을 해결하는 방법을 효과적으로 학습하여 게임과 실제 응용 프로그램 모두에서 잠재력을 보여줍니다. 기본 네트워크와 함께 타겟 네트워크를 사용하면 학습의 안정성과 일관성이 보장되어 DQN은 광범위한 RL 문제에 대한 강력하고 효율적인 알고리즘이 됩니다.