move84

강화 학습: 정책 반복 방법 완벽 가이드 본문

강화학습

강화 학습: 정책 반복 방법 완벽 가이드

move84 2025. 4. 5. 12:39
반응형

강화 학습(Reinforcement Learning, RL)은 에이전트가 환경과 상호 작용하며, 보상을 최대화하는 방향으로 학습하는 머신 러닝의 한 분야이다. 정책 반복(Policy Iteration)은 강화 학습의 핵심 알고리즘 중 하나로, 최적의 정책(optimal policy)을 찾는 데 사용된다. 이 글에서는 정책 반복의 개념, 알고리즘, 그리고 실제 파이썬 예제를 통해 정책 반복 방법을 자세히 살펴본다.

🧠 정책 반복의 기본 개념 (Policy Iteration: 기본 개념)
정책 반복은 두 가지 주요 단계, 즉 정책 평가(Policy Evaluation)와 정책 개선(Policy Improvement)을 반복적으로 수행하여 최적의 정책을 찾아가는 방법이다. 정책 평가는 현재 정책에 따라 각 상태(state)의 가치(value)를 계산하고, 정책 개선은 계산된 가치를 바탕으로 정책을 업데이트한다. 이 두 단계를 반복하면 정책은 점차 최적 정책에 수렴하게 된다.

💡 정책 평가 (Policy Evaluation: 정책 평가)
정책 평가는 주어진 정책 π(pi) 하에서 각 상태의 가치 함수 V(s)를 계산하는 과정이다. 이는 벨만 기대 방정식(Bellman Expectation Equation)을 사용하여 수행된다. 벨만 기대 방정식은 다음과 같이 나타낼 수 있다:

V(s) = E[R(s, a) + γ * V(s')]

여기서:

  • V(s)는 상태 s의 가치
  • E는 기대값
  • R(s, a)는 상태 s에서 행동 a를 했을 때 받는 보상
  • γ (감마)는 할인율(discount rate, 0 ≤ γ ≤ 1)
  • V(s')는 다음 상태 s'의 가치

정책 평가는 반복적인 계산을 통해 이루어진다. 초기 가치 함수 V(s)를 0으로 초기화하고, 벨만 기대 방정식을 반복적으로 적용하여 가치 함수를 업데이트한다. 이 과정을 가치 함수가 수렴할 때까지 반복한다.

🚀 정책 개선 (Policy Improvement: 정책 개선)
정책 개선 단계에서는 정책 평가에서 계산된 가치 함수를 바탕으로 정책을 개선한다. 이는 각 상태 s에서 최적의 행동 a를 선택하여 새로운 정책 π'(pi prime)을 생성하는 과정이다. 최적의 행동은 현재 상태 s에서 가치를 최대화하는 행동이다. 정책 개선은 다음과 같은 수식을 통해 수행된다:

π'(s) = argmax_a {R(s, a) + γ * V(s')}

여기서:

  • π'(s)는 새로운 정책에서 상태 s에서의 행동
  • argmax_a는 가치를 최대화하는 행동 a를 선택
  • R(s, a)는 상태 s에서 행동 a를 했을 때 받는 보상
  • γ는 할인율
  • V(s')는 다음 상태 s'의 가치

이 과정을 통해, 각 상태에서 더 나은 가치를 얻을 수 있는 행동을 선택함으로써, 정책이 점차 개선된다.

💻 정책 반복 알고리즘 (Policy Iteration: 알고리즘)
정책 반복 알고리즘은 정책 평가와 정책 개선을 반복적으로 수행하는 형태로 구성된다. 다음은 정책 반복 알고리즘의 일반적인 단계이다:

  1. 초기화 (Initialization): 임의의 초기 정책 π(pi)와 가치 함수 V(s)를 설정한다.
  2. 정책 평가 (Policy Evaluation): 현재 정책 π(pi)에 대한 가치 함수 V(s)를 계산한다.
  3. 정책 개선 (Policy Improvement): 가치 함수 V(s)를 사용하여 새로운 정책 π'(pi prime)을 생성한다.
  4. 수렴 확인 (Convergence Check): 새로운 정책 π'(pi prime)이 이전 정책 π(pi)과 동일한지 확인한다. 만약 동일하다면 알고리즘을 종료하고, 그렇지 않다면 π(pi) = π'(pi prime)으로 업데이트하고 2단계로 돌아간다.

이 과정을 통해 정책은 점차적으로 최적 정책으로 수렴하게 된다.

🐍 파이썬 예제 (Python Example: 파이썬 예제)
다음은 간단한 그리드 월드(grid world) 환경에서 정책 반복을 구현하는 파이썬 예제이다. 이 예제는 정책 평가, 정책 개선, 그리고 전체 정책 반복 과정을 포함한다.

import numpy as np

# 그리드 월드 환경 설정
GRID_SIZE = 4
ACTIONS = ['UP', 'DOWN', 'LEFT', 'RIGHT']

def is_valid(row, col):
    return 0 <= row < GRID_SIZE and 0 <= col < GRID_SIZE

# 보상 및 전이 확률 설정
rewards = np.zeros((GRID_SIZE, GRID_SIZE))
rewards[GRID_SIZE - 1, GRID_SIZE - 1] = 1  # 목표 지점 보상
transitions = {
    'UP': (-1, 0),
    'DOWN': (1, 0),
    'LEFT': (0, -1),
    'RIGHT': (0, 1)
}

# 할인율 설정
discount_factor = 0.9

# 정책 평가 함수
def policy_evaluation(policy, values, theta=0.001):
    while True:
        delta = 0
        for row in range(GRID_SIZE):
            for col in range(GRID_SIZE):
                if row == GRID_SIZE - 1 and col == GRID_SIZE - 1:  # 목표 지점은 가치 0
                    continue
                v = values[row, col]
                new_value = 0
                for action in ACTIONS:
                    dr, dc = transitions[action]
                    new_row, new_col = row + dr, col + dc
                    if not is_valid(new_row, new_col):
                        new_row, new_col = row, col  # 경계 밖이면 원래 위치
                    new_value += 0.25 * (rewards[row, col] + discount_factor * values[new_row, new_col])
                values[row, col] = new_value
                delta = max(delta, abs(v - values[row, col]))
        if delta < theta:
            break
    return values

# 정책 개선 함수
def policy_improvement(values):
    policy = np.zeros((GRID_SIZE, GRID_SIZE), dtype=int)  # 0:UP, 1:DOWN, 2:LEFT, 3:RIGHT
    policy_stable = True
    for row in range(GRID_SIZE):
        for col in range(GRID_SIZE):
            if row == GRID_SIZE - 1 and col == GRID_SIZE - 1:  # 목표 지점 정책
                continue
            old_action = policy[row, col]
            best_value = -np.inf
            best_action = None
            for action_idx, action in enumerate(ACTIONS):
                dr, dc = transitions[action]
                new_row, new_col = row + dr, col + dc
                if not is_valid(new_row, new_col):
                    new_row, new_col = row, col
                value = rewards[row, col] + discount_factor * values[new_row, new_col]
                if value > best_value:
                    best_value = value
                    best_action = action_idx
            policy[row, col] = best_action
            if policy[row, col] != old_action:
                policy_stable = False
    return policy, policy_stable

# 정책 반복 함수
def policy_iteration():
    # 초기 정책 (모든 행동을 동일 확률로 선택)
    policy = np.zeros((GRID_SIZE, GRID_SIZE), dtype=int)
    values = np.zeros((GRID_SIZE, GRID_SIZE))
    while True:
        # 정책 평가
        values = policy_evaluation(policy, values)
        # 정책 개선
        policy, policy_stable = policy_improvement(values)
        if policy_stable:
            break
    return policy, values

# 실행
optimal_policy, optimal_values = policy_iteration()

# 결과 출력
print("Optimal Policy:")
for row in range(GRID_SIZE):
    for col in range(GRID_SIZE):
        action_idx = optimal_policy[row, col]
        if row == GRID_SIZE - 1 and col == GRID_SIZE - 1:
            print("G", end=" ")  # Goal
        else:
            print(ACTIONS[action_idx][0], end=" ")  # 첫 글자 표시
    print()

print("\nOptimal Values:")
print(optimal_values)

이 예제는 4x4 그리드 월드 환경에서 최적의 정책을 찾는 과정을 보여준다. 각 단계별로 정책 평가와 정책 개선을 수행하며, 최종적으로 최적의 정책과 가치 함수를 출력한다. policy_evaluation 함수는 주어진 정책 하에서 가치 함수를 계산하고, policy_improvement 함수는 가치 함수를 기반으로 정책을 개선한다. policy_iteration 함수는 이 두 함수를 반복적으로 호출하여 최적 정책을 찾는다.

🗺️ 정책 반복의 장단점 (Policy Iteration: 장단점)
정책 반복은 최적의 정책을 찾는 강력한 방법이지만, 몇 가지 장단점을 가지고 있다.

  • 장점:
    • 최적 정책으로 수렴하는 것을 보장한다.
    • 정책 개선 단계에서 항상 정책을 개선한다.
  • 단점:
    • 정책 평가 단계에서 가치 함수를 정확하게 계산해야 하므로, 계산 비용이 많이 들 수 있다.
    • 환경이 복잡할수록 계산 시간이 증가한다.

결론 (Conclusion: 결론)
정책 반복은 강화 학습에서 최적 정책을 찾는 효과적인 방법이다. 정책 평가와 정책 개선을 반복적으로 수행하여 최적 정책으로 수렴하며, 이론적으로는 최적해를 보장한다. 하지만 계산 비용이 많이 들 수 있으므로, 복잡한 환경에서는 다른 방법(예: 가치 반복)과 비교하여 적절한 방법을 선택해야 한다. 이 글에서 제공된 예제와 설명을 통해 정책 반복을 이해하고, 실제 문제에 적용하는 데 도움이 되기를 바란다.

📚 핵심 용어 요약 (Key Terms: 핵심 용어)

  • 강화 학습 (Reinforcement Learning, RL): 에이전트가 환경과 상호 작용하며 보상을 최대화하도록 학습하는 머신 러닝의 한 분야.
  • 정책 반복 (Policy Iteration): 정책 평가와 정책 개선을 반복적으로 수행하여 최적 정책을 찾는 강화 학습 알고리즘.
  • 정책 (Policy, π): 특정 상태에서 어떤 행동을 할지 결정하는 전략.
  • 가치 함수 (Value Function, V(s)): 특정 상태에서 에이전트가 얻을 수 있는 예상 누적 보상.
  • 정책 평가 (Policy Evaluation): 주어진 정책 하에서 각 상태의 가치 함수를 계산하는 과정.
  • 정책 개선 (Policy Improvement): 가치 함수를 사용하여 정책을 개선하는 과정.
  • 벨만 기대 방정식 (Bellman Expectation Equation): 가치 함수를 계산하기 위한 핵심 방정식.
  • 할인율 (Discount Rate, γ): 미래 보상의 중요도를 나타내는 값 (0 ≤ γ ≤ 1).
  • 상태 (State): 환경의 특정 상황.
  • 행동 (Action): 에이전트가 환경에서 수행할 수 있는 동작.
  • 최적 정책 (Optimal Policy): 에이전트가 환경에서 최대 보상을 얻을 수 있는 정책.

반응형