카테고리 없음

OpenAI Gym을 활용한 강화 학습 환경 구축

임베디드 친구 2026. 1. 25. 20:41
728x90
반응형

OpenAI Gym을 활용한 강화 학습 환경 구축

1. OpenAI Gym이란?

OpenAI Gym은 강화 학습을 위한 다양한 환경을 제공하는 라이브러리입니다. OpenAI에서 개발했으며, 연구자와 개발자가 쉽게 강화 학습 모델을 실험하고 평가할 수 있도록 설계되었습니다. OpenAI Gym은 다양한 환경을 지원하며, 대표적인 환경으로 CartPole, MountainCar, Atari 게임 등이 있습니다.

강화 학습을 실험하려면 환경(environment)이 필요합니다. OpenAI Gym은 이러한 환경을 미리 정의해 두었기 때문에, 별도로 환경을 구축할 필요 없이 바로 강화 학습 알고리즘을 적용할 수 있습니다.

2. OpenAI Gym 설치

OpenAI Gym을 사용하기 위해서는 먼저 라이브러리를 설치해야 합니다. 아래 명령어를 실행하여 설치할 수 있습니다.

pip install gym

Atari 게임과 같은 추가 환경을 사용하려면 추가적인 패키지를 설치해야 합니다.

pip install gym[atari]

3. OpenAI Gym 환경 살펴보기

설치가 완료되었으면, 이제 OpenAI Gym이 제공하는 환경을 실행해 보겠습니다. 가장 기본적인 예제로 CartPole-v1 환경을 실행하는 코드를 작성해 보겠습니다.

import gym

# 환경 생성
env = gym.make("CartPole-v1")

# 환경 초기화
state = env.reset()

for _ in range(100):
    env.render()  # 환경 시각화
    action = env.action_space.sample()  # 무작위 액션 선택
    state, reward, done, _, _ = env.step(action)  # 환경에 액션 적용
    if done:
        break

env.close()

위 코드는 CartPole-v1 환경을 생성하고, 랜덤한 행동을 100번 수행하는 간단한 예제입니다. env.step(action)을 호출하여 환경을 업데이트하고, done 변수가 True가 되면 에피소드가 종료됩니다.

4. OpenAI Gym의 주요 구성 요소

OpenAI Gym의 환경은 크게 네 가지 요소로 구성됩니다.

4.1 상태(State)

강화 학습 에이전트가 환경을 이해하는 데 사용하는 정보입니다. 예를 들어 CartPole-v1에서는 막대의 각도와 카트의 속도 등이 상태로 주어집니다.

state = env.reset()
print("초기 상태:", state)

4.2 행동(Action)

에이전트가 환경에서 수행할 수 있는 행동입니다. CartPole-v1 환경에서는 0 (왼쪽 이동), 1 (오른쪽 이동) 두 가지 액션이 존재합니다.

print("가능한 액션 개수:", env.action_space.n)

4.3 보상(Reward)

에이전트가 특정 행동을 수행한 후 얻는 보상입니다. CartPole-v1에서는 막대가 쓰러지지 않는 동안 1의 보상을 받습니다.

4.4 종료 조건(Done)

환경이 종료되었는지를 나타내는 불리언 값입니다. True가 되면 환경이 초기화되거나 종료되어야 합니다.

5. 강화 학습을 위한 간단한 DQN 구현

강화 학습의 대표적인 알고리즘 중 하나인 Deep Q-Network(DQN)을 OpenAI Gym에서 구현해 보겠습니다.

5.1 필요한 라이브러리 설치

먼저 필요한 패키지를 설치합니다.

pip install tensorflow keras numpy gym

5.2 DQN 모델 구현

다음은 CartPole-v1 환경에서 DQN을 이용해 학습하는 코드입니다.

import gym
import numpy as np
import random
import tensorflow as tf
from tensorflow import keras
from collections import deque

# 환경 설정
env = gym.make("CartPole-v1")
state_size = env.observation_space.shape[0]
action_size = env.action_space.n
gamma = 0.95  # 할인율
learning_rate = 0.001

def build_model():
    model = keras.Sequential([
        keras.layers.Dense(24, activation='relu', input_shape=(state_size,)),
        keras.layers.Dense(24, activation='relu'),
        keras.layers.Dense(action_size, activation='linear')
    ])
    model.compile(optimizer=keras.optimizers.Adam(learning_rate), loss='mse')
    return model

model = build_model()

epsilon = 1.0  # 탐색 비율
epsilon_min = 0.01
epsilon_decay = 0.995
episodes = 1000
batch_size = 32
memory = deque(maxlen=2000)

for e in range(episodes):
    state = env.reset()
    state = np.reshape(state, [1, state_size])
    total_reward = 0
    for time in range(500):
        if np.random.rand() <= epsilon:
            action = random.randrange(action_size)
        else:
            action = np.argmax(model.predict(state))

        next_state, reward, done, _, _ = env.step(action)
        next_state = np.reshape(next_state, [1, state_size])
        memory.append((state, action, reward, next_state, done))
        state = next_state
        total_reward += reward

        if done:
            print(f"Episode: {e + 1}/{episodes}, Score: {total_reward}")
            break

    if len(memory) > batch_size:
        minibatch = random.sample(memory, batch_size)
        for state, action, reward, next_state, done in minibatch:
            target = reward
            if not done:
                target += gamma * np.amax(model.predict(next_state))
            target_f = model.predict(state)
            target_f[0][action] = target
            model.fit(state, target_f, epochs=1, verbose=0)

    if epsilon > epsilon_min:
        epsilon *= epsilon_decay

위 코드에서는 신경망을 이용하여 Q값을 예측하고, 경험을 저장한 후 배치를 학습하는 방식으로 DQN을 구현하였습니다. CartPole-v1 환경에서 학습을 진행하면서 점차 더 높은 점수를 얻도록 모델을 최적화합니다.

6. 결론

이 포스팅에서는 OpenAI Gym을 활용하여 강화 학습 환경을 구축하는 방법을 설명하였습니다. OpenAI Gym을 사용하면 다양한 강화 학습 환경을 쉽게 설정하고 실험할 수 있으며, DQN과 같은 딥러닝 모델을 적용하여 에이전트를 학습시킬 수 있습니다.

반응형