이번 글에서는 OpenAI GYM 환경을 활용하여 강화 학습을 실습하는 방법을 소개합니다. 특히, Frozen Lake 게임을 통해 에이전트가 최적의 경로를 찾아가는 과정을 살펴보겠습니다. 먼저, OpenAI GYM과 TensorFlow를 설치하고, 환경을 초기화한 후, 에이전트가 직접 키보드 입력을 통해 환경을 탐험하는 예제를 통해 강화 학습의 기본 개념을 이해해보겠습니다.
https://www.youtube.com/watch?v=xvDAURQVDhk
OpenAI GYM과 TensorFlow 설치
먼저, OpenAI GYM과 TensorFlow를 설치해야 합니다. 이를 위해 다음 명령어를 사용합니다:
설치가 완료되면, Python 인터프리터에서 제대로 설치되었는지 확인합니다:
import gym
import tensorflow as tf
print("OpenAI GYM and TensorFlow installed successfully!")
이제 OpenAI GYM 환경을 활용하여 강화 학습을 실습할 준비가 완료되었습니다.
환경 설정 및 초기화
Frozen Lake 환경 설정
Frozen Lake는 에이전트가 얼음 위를 이동하여 목표 지점에 도달하는 환경입니다. 이 환경에서 에이전트는 좌우상하로 이동할 수 있으며, 구멍에 빠지지 않고 목표 지점에 도달해야 합니다.
env = gym.make('FrozenLake-v0')
state = env.reset()
환경 초기화
환경을 초기화하여 첫 번째 상태를 얻습니다. 이 상태에서 에이전트는 행동을 선택하고, 그 결과를 확인하며 학습을 진행합니다.
키보드 입력을 통한 에이전트 제어
이번 예제에서는 키보드 입력을 통해 에이전트가 환경을 탐험하는 방법을 소개합니다. 이를 통해 강화 학습 환경에서 에이전트가 어떻게 행동을 선택하고, 그 결과를 학습하는지 이해할 수 있습니다.
키보드 입력 처리
Python에서 키보드 입력을 처리하여 에이전트를 제어하기 위해 다음 코드를 사용합니다:
import gym
import termios
import tty
def get_key():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
actions = {
'w': 3, # up
's': 1, # down
'a': 0, # left
'd': 2 # right
}
에이전트 제어
이제 키보드 입력을 통해 에이전트를 제어하는 코드를 작성합니다. 에이전트가 키 입력에 따라 행동을 선택하고, 그 결과를 출력합니다:
state = env.reset()
env.render()
while True:
key = get_key()
if key not in actions:
print("Game terminated!")
break
action = actions[key]
next_state, reward, done, info = env.step(action)
env.render()
print(f"State: {next_state}, Reward: {reward}, Done: {done}, Info: {info}")
if done:
print("Episode finished!")
state = env.reset()
env.render()
이 코드는 에이전트가 키보드 입력에 따라 움직이며, 각 행동에 따른 결과를 출력합니다.
강화 학습 알고리즘 적용: Q-러닝
Q-러닝 알고리즘 개요
Q-러닝은 상태-행동 쌍의 가치를 학습하여 최적의 행동을 선택하는 강화 학습 알고리즘입니다. Q-러닝 알고리즘은 다음과 같은 순서로 진행됩니다:
- 초기화: Q-테이블을 모든 상태-행동 쌍에 대해 0으로 초기화합니다.
- 에피소드 반복: 각 에피소드마다 상태를 초기화합니다.
- 행동 선택: 현재 상태에서 최적의 행동을 선택하거나 랜덤하게 선택합니다.
- 행동 수행: 선택한 행동을 환경에서 수행하고, 새로운 상태와 보상을 얻습니다.
- Q-값 업데이트: Q-값을 업데이트합니다.
- 상태 갱신: 새로운 상태로 현재 상태를 갱신합니다.
- 종료 조건: 에피소드가 종료되면 다음 에피소드를 시작합니다.
Q-러닝 알고리즘 구현
다음은 Q-러닝 알고리즘을 사용하여 Frozen Lake 환경을 학습하는 예제 코드입니다:
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-테이블을 출력합니다.
결론
OpenAI GYM은 강화 학습 알고리즘을 개발하고 테스트하는 데 매우 유용한 도구입니다. 다양한 환경을 제공하여 RL 알고리즘을 쉽게 실습할 수 있으며, 이를 통해 RL의 기본 원리와 응용 방법을 이해할 수 있습니다. Q-러닝과 같은 알고리즘을 통해 간단한 문제를 해결하는 방법을 배워보세요.
태그
강화학습, OpenAIGYM, 머신러닝, 인공지능, 프로즌레이크, Q러닝, 자율주행, 로봇제어, 게임AI, 추천시스템
'IT' 카테고리의 다른 글
Lecture 05: Q-learning을 활용한 비결정론적 세계에서의 학습 (0) | 2024.07.17 |
---|---|
Lab 4: Q-learning을 활용한 Exploration and Exploitation와 할인된 보상 discounted reward 최적화 (0) | 2024.07.17 |
Q-러닝을 통한 강화 학습 실습: Frozen Lake 예제 (0) | 2024.07.17 |
Q-러닝을 완벽하게 하는 방법 (0) | 2024.07.17 |
Lecture 2: Playing OpenAI GYM: GamesOpenAI GYM 환경을 이용한 강화 학습 실습 (0) | 2024.07.17 |
댓글