본문 바로가기
IT

Q-러닝을 통한 강화 학습 실습: Frozen Lake 예제

by 작은비움 2024. 7. 17.
반응형

Q-러닝을 통한 강화 학습 실습: Frozen Lake 예제

이번 글에서는 Q-러닝(Q-learning)을 통해 강화 학습을 실습하는 방법을 소개합니다. 특히, Frozen Lake 게임을 예제로 사용하여 Q-러닝의 핵심 개념과 알고리즘을 이해하고, 이를 통해 에이전트가 최적의 경로를 찾아가는 과정을 살펴보겠습니다. Q-러닝은 강화 학습에서 매우 중요한 알고리즘으로, 상태-행동 쌍의 가치를 학습하여 최적의 행동을 선택할 수 있도록 합니다.

https://www.youtube.com/watch?v=Vd-gmo-qO5E

 

Q-러닝 개요

Q-러닝은 강화 학습에서 사용하는 대표적인 알고리즘 중 하나입니다. 이는 상태-행동 쌍의 가치를 학습하여 최적의 행동을 선택할 수 있도록 합니다. Q-러닝의 핵심 아이디어는 상태와 행동을 입력으로 받아, 해당 상태에서 특정 행동을 수행할 때 기대되는 보상을 출력하는 Q-함수를 학습하는 것입니다.

Q-러닝의 기본 개념

  • 상태(State): 에이전트가 현재 위치한 환경의 상태를 나타냅니다.
  • 행동(Action): 에이전트가 상태에서 취할 수 있는 행동을 나타냅니다.
  • 보상(Reward): 에이전트가 특정 행동을 수행했을 때 받는 보상입니다.
  • Q-함수(Q-function): 상태-행동 쌍을 입력으로 받아, 해당 상태에서 특정 행동을 수행할 때 기대되는 보상을 출력합니다.

 

Frozen Lake 환경 소개

Frozen Lake는 OpenAI GYM에서 제공하는 간단한 환경 중 하나입니다. 이 환경에서 에이전트는 얼음 위를 이동하여 목표 지점에 도달하는 것이 목표입니다. 얼음판에는 구멍이 있으며, 에이전트가 구멍에 빠지면 게임이 종료됩니다.

환경 설정

python
코드 복사
 
import gym env = gym.make('FrozenLake-v0') state = env.reset()

Q-러닝 알고리즘

Q-러닝의 주요 단계

Q-러닝 알고리즘은 다음과 같은 순서로 진행됩니다:

  1. Q-테이블 초기화: Q-테이블을 모든 상태-행동 쌍에 대해 0으로 초기화합니다.
  2. 에피소드 반복: 각 에피소드마다 상태를 초기화합니다.
  3. 행동 선택: 현재 상태에서 최적의 행동을 선택하거나 랜덤하게 선택합니다.
  4. 행동 수행: 선택한 행동을 환경에서 수행하고, 새로운 상태와 보상을 얻습니다.
  5. Q-값 업데이트: Q-값을 업데이트합니다.
  6. 상태 갱신: 새로운 상태로 현재 상태를 갱신합니다.
  7. 종료 조건: 에피소드가 종료되면 다음 에피소드를 시작합니다.

Q-값 업데이트 공식

Q-값은 다음 공식에 따라 업데이트됩니다:

 

Q(s,a)←Q(s,a)+α(r+γmax⁡a′Q(s′,a′)−Q(s,a))Q(s, a) \leftarrow Q(s, a) + \alpha \left( r + \gamma \max_{a'} Q(s', a') - Q(s, a) \right)

 

여기서,

  • Q(s,a)Q(s, a)는 현재 상태 ss에서 행동 aa를 선택했을 때의 Q-값입니다.
  • α\alpha는 학습률(learning rate)입니다.
  • rr은 현재 상태에서 행동 aa를 선택했을 때의 보상입니다.
  • γ\gamma는 할인율(discount factor)입니다.
  • max⁡a′Q(s′,a′)\max_{a'} Q(s', a')는 다음 상태 s′s'에서 가능한 모든 행동 a′a' 중 최대 Q-값입니다.

Q-러닝 알고리즘 구현

예제 코드

다음은 Q-러닝 알고리즘을 사용하여 Frozen Lake 환경을 학습하는 예제 코드입니다:

python
코드 복사
 
import numpy as np
import gym

env = gym.make('FrozenLake-v0')
Q = np.zeros([env.observation_space.n, env.action_space.n])
alpha = 0.1
gamma = 0.99
epsilon = 0.1

for episode in range(1000):
    state = env.reset()
    done = False
    while not done:
        if np.random.rand() < epsilon:
            action = env.action_space.sample()
        else:
            action = np.argmax(Q[state, :])
        
        next_state, reward, done, info = env.step(action)
        Q[state, action] = Q[state, action] + alpha * (reward + gamma * np.max(Q[next_state, :]) - Q[state, action])
        state = next_state

print("Q-테이블")
print(Q)

이 코드는 1000번의 에피소드를 반복하며 Q-테이블을 학습합니다. 학습이 완료된 후, Q-테이블을 출력합니다.

Q-러닝 실습: Frozen Lake 게임 플레이

게임 플레이 코드

학습된 Q-테이블을 사용하여 Frozen Lake 게임을 플레이해보겠습니다. 다음 코드는 학습된 Q-테이블을 사용하여 최적의 경로를 찾아가는 에이전트를 구현합니다:

python
코드 복사
 
state = env.reset()
env.render()

done = False
while not done:
    action = np.argmax(Q[state, :])
    next_state, reward, done, info = env.step(action)
    env.render()
    state = next_state

    if done:
        if reward == 1:
            print("Goal reached!")
        else:
            print("Fell into a hole!")
        break
 

이 코드는 학습된 Q-테이블을 사용하여 에이전트가 최적의 경로를 찾아가는 과정을 보여줍니다.

 

결론

이번 글에서는 Q-러닝 알고리즘을 통해 강화 학습을 실습하는 방법을 소개했습니다. Frozen Lake 게임을 예제로 사용하여 Q-러닝의 핵심 개념과 알고리즘을 이해하고, 이를 통해 에이전트가 최적의 경로를 찾아가는 과정을 살펴보았습니다. Q-러닝은 강화 학습에서 매우 중요한 알고리즘으로, 다양한 문제에 적용할 수 있는 강력한 도구입니다.

태그

강화학습, Q러닝, OpenAIGYM, 머신러닝, 인공지능, 프로즌레이크, 강화학습알고리즘, 자율주행, 로봇제어, 게임AI

반응형

댓글