2. 강화학습이란 무엇인가 , 주요 용어 설명 (에이전트, 환경, 상태, 행동, 보상 등)

강화학습(Reinforcement Learning, RL)은 머신러닝의 한 분야로, 에이전트가 환경과 상호작용하여 최적의 행동을 학습하도록 하는 방법론입니다. 강화학습은 주어진 상태에서 특정 행동을 선택하고, 그 행동에 대한 보상을 받고, 이후의 선택에 반영해 나가는 iterative한 과정으로 작동합니다. 강화학습의 핵심은 누적 보상을 극대화하는 것입니다.

강화학습의 기본 구성 요소

강화학습 시스템은 주로 다음과 같은 구성 요소로 이루어져 있습니다:

  • 에이전트 (Agent): 학습을 수행하고 환경과 상호작용하여 행동을 선택하는 주체입니다. 에이전트는 주어진 상태에서 최적의 행동을 선택하기 위해 정책(Policy)을 학습합니다.
  • 환경 (Environment): 에이전트가 상호작용하는 외부 세계입니다. 에이전트의 행동에 따라 상태를 변화시키고 보상을 제공합니다.
  • 상태 (State): 에이전트가 환경에서 현재 위치하고 있는 상태를 나타냅니다. 상태는 환경의 특정 순간에 대한 정보를 포함합니다.
  • 행동 (Action): 에이전트가 특정 상태에서 선택할 수 있는 의사결정을 나타냅니다. 행동은 특정 상태에 대한 정책에 따라 결정됩니다.
  • 보상 (Reward): 에이전트가 특정 행동을 취한 결과로 환경으로부터 받는 피드백입니다. 보상은 에이전트가 선택한 행동이 얼마큼 유익했는지를 수치화한 것입니다.

1. 에이전트 (Agent)

에이전트는 강화학습의 주체로서 환경 내에서 의사결정을 수행하는 존재입니다. 에이전트는 처음에는 아무런 지식이 없는 상태에서 시작하며, 환경과의 상호작용을 통해 정보를 학습합니다. 이 과정에서 에이전트는 자신의 정책을 업데이트하고, 이를 통해 더 나은 행동을 선택할 수 있게 됩니다. 에이전트는 상태와 행동 조합에 대한 학습을 통해 행동의 가치를 평가하게 됩니다.

2. 환경 (Environment)

환경은 에이전트가 상호작용하는 주체로, 에이전트의 행동에 따라 변화하는 시스템입니다. 환경은 상태와 보상을 결정하는 역할을 하며, 에이전트가 상황을 인식하고 행동을 선택하는 기반이 됩니다. 예를 들어, 자율주행차의 경우 도로, 교통 신호, 보행자 등이 환경에 해당합니다. 에이전트는 이러한 환경에서 주어진 상태를 바탕으로 행동을 선택하고, 그 결과에 따라 새로운 상태와 보상을 받게 됩니다.

3. 상태 (State)

상태는 에이전트가 환경에서 현재 위치하고 있는 특정 순간의 정보를 의미합니다. 상태는 환경의 변수로부터 도출될 수 있으며, 각 상태는 에이전트에게 제공되는 정보의 집합입니다. 강화학습에서는 상태를 정의하는 것이 매우 중요하며, 상태의 정의가 잘못되면 에이전트는 최적의 전략을 학습하지 못할 수 있습니다. 예를 들어, 체스를 두는 에이전트의 경우, 게임판의 모든 기물의 배치가 상태로 정의될 수 있습니다.

4. 행동 (Action)

행동은 에이전트가 특정 상태에서 선택할 수 있는 다양한 대안입니다. 각 행동은 에이전트에게 영향을 미치므로, 올바른 행동을 선택하는 것이 중요합니다. 강화학습에서 행동은 연속적일 수도, 이산적일 수도 있으며, 일반적으로 에이전트의 정책에 따라 결정됩니다. 예를 들어, 게임에서 진행할 수 있는 모든 수를 행동으로 정의할 수 있습니다.

5. 보상 (Reward)

보상은 에이전트가 환경에서 특정 행동을 취한 결과로 받는 평가의 척도입니다. 보상은 양수일 수도 있고 음수일 수도 있으며, 에이전트는 보상을 최대화하기 위해 행동을 지속적으로 조정합니다. 보상은 학습의 목표가 되며, 에이전트가 선택한 행동의 결과를 평가하는 중요한 요소입니다. 예를 들어, 게임에서 승리했을 경우 긍정적인 보상을 주고, 패배할 경우 부정적인 보상을 주는 식입니다.

강화학습의 과정

강화학습의 과정은 다음과 같은 순서로 이루어집니다:

  1. 에이전트, 환경 및 초기 상태가 정의됩니다.
  2. 에이전트는 현재 상태에 대한 자유롭게 정해진 정책을 차례로 적용하여 행동을 결정합니다.
  3. 에이전트가 행동을 취하고, 환경은 그 행동에 대한 결과로 새로운 상태와 보상을 반환합니다.
  4. 에이전트는 보상을 기반으로 정책을 업데이트하고 다음 상태에서 행동 선택을 반복합니다.
  5. 이 과정은 에이전트가 최적의 정책을 학습할 때까지 계속됩니다.

예시 소스 코드

다음은 파이썬을 사용하여 미로에서 에이전트가 목표지점에 도달하도록 강화학습을 적용하는 간단한 예제입니다. 이 예제에서는 Q-learning 알고리즘을 사용하여 에이전트가 최적의 행동을 학습합니다.

import numpy as np
import random

# 미로 환경 정의
class Maze:
    def __init__(self, maze):
        self.maze = maze
        self.start = (0, 0)
        self.goal = (len(maze) - 1, len(maze[0]) - 1)
        self.state = self.start

    def reset(self):
        self.state = self.start
        return self.state

    def step(self, action):
        if action == 0:  # 상
            new_state = (max(self.state[0] - 1, 0), self.state[1])
        elif action == 1:  # 하
            new_state = (min(self.state[0] + 1, len(self.maze) - 1), self.state[1])
        elif action == 2:  # 좌
            new_state = (self.state[0], max(self.state[1] - 1, 0))
        else:  # 우
            new_state = (self.state[0], min(self.state[1] + 1, len(self.maze[0]) - 1))

        if self.maze[new_state[0]][new_state[1]] == 1:  # 벽
            return self.state, -1, False  # 보상은 -1, 상태 변하지 않음

        self.state = new_state

        if self.state == self.goal:
            return self.state, 10, True  # 목표 도달, 보상 10

        return self.state, -1, False  # 일반적인 경우, 보상 -1

# Q-learning 에이전트 정의
class QLearningAgent:
    def __init__(self, actions, alpha=0.1, gamma=0.9, epsilon=0.1):
        self.q_table = {}
        self.actions = actions
        self.alpha = alpha
        self.gamma = gamma
        self.epsilon = epsilon

    def get_action(self, state):
        if state not in self.q_table:
            self.q_table[state] = np.zeros(len(self.actions))

        if random.random() < self.epsilon:
            return random.choice(self.actions)  # 랜덤 액션 선택
        else:
            return np.argmax(self.q_table[state])  # 최적 액션 선택

    def update(self, state, action, reward, next_state):
        if next_state not in self.q_table:
            self.q_table[next_state] = np.zeros(len(self.actions))

        # Q-값 업데이트
        best_next_action = np.argmax(self.q_table[next_state])
        td_target = reward + self.gamma * self.q_table[next_state][best_next_action]
        self.q_table[state][action] += self.alpha * (td_target - self.q_table[state][action])


if __name__ == '__main__':
    # 미로 정의 (0: 통로, 1: 벽)
    maze = [
        [0, 0, 1, 0],
        [1, 0, 1, 0],
        [0, 0, 0, 0],
        [0, 1, 1, 0],
    ]
    env = Maze(maze)
    agent = QLearningAgent(actions=[0, 1, 2, 3])  # 상, 하, 좌, 우

    episodes = 1000
    for episode in range(episodes):
        state = env.reset()
        done = False

        while not done:
            action = agent.get_action(state)
            next_state, reward, done = env.step(action)
            agent.update(state, action, reward, next_state)
            state = next_state

    # Q-테이블 출력
    for state, q_values in agent.q_table.items():
        print(f"상태: {state}, Q-값: {q_values}")

결론

강화학습은 에이전트와 환경 간의 상호작용을 통해 최적의 행동을 학습하는 강력한 기법입니다. 에이전트는 보상을 최대화하기 위해 행동을 조정하며, 이 과정에서 다양한 알고리즘과 기술이 사용됩니다. 본 글에서는 강화학습의 주요 용어와 구성 요소에 대해 살펴보았으며, 또한 간단한 Q-learning 예제를 통해 이를 이해하는 데 도움이 되었기를 바랍니다.