강화학습

강화 학습: 계층적 강화 학습 (Hierarchical Reinforcement Learning)

move84 2025. 4. 6. 09:59
반응형

강화 학습은 에이전트가 환경과 상호 작용하며 보상을 최대화하는 일련의 의사 결정을 배우는 머신 러닝 패러다임입니다. 복잡한 환경에서는 단일 레벨의 강화 학습 알고리즘이 비효율적이거나 학습하기 어려울 수 있습니다. 계층적 강화 학습(HRL)은 이러한 문제를 해결하기 위해 설계되었습니다. HRL은 문제를 더 작고 관리하기 쉬운 하위 작업으로 분해하여 에이전트가 복잡한 환경에서 효율적으로 학습하고 문제를 해결할 수 있도록 돕습니다. 이 블로그 게시물에서는 HRL의 기본 개념, 작동 방식, 장점 및 몇 가지 관련 예를 살펴보겠습니다.

🤖 HRL의 기본 개념 (Basic Concepts of HRL)

HRL은 문제를 여러 계층으로 나눕니다. 최상위 계층(High-Level)은 일반적으로 더 추상적인 목표를 처리하고, 하위 계층(Low-Level)은 이러한 목표를 달성하기 위한 구체적인 행동을 수행합니다. 이러한 계층적 구조는 에이전트가 장기적인 종속성을 이해하고, 복잡한 문제의 공간을 탐색하는 데 도움을 줍니다. HRL의 주요 구성 요소는 다음과 같습니다:

  • 정책 (Policy) (정책): 각 계층에는 정책이 있습니다. 최상위 계층 정책은 하위 목표를 선택하고, 하위 계층 정책은 해당 목표를 달성하기 위한 행동을 선택합니다.
  • 하위 목표 (Subgoals) (서브 골): 최상위 계층 정책은 하위 목표를 설정합니다. 하위 목표는 하위 계층이 달성해야 하는 작업입니다.
  • 보상 (Reward) (보상): 각 계층은 보상을 받을 수 있습니다. 최상위 계층은 하위 목표를 성공적으로 완료하면 보상을 받고, 하위 계층은 하위 목표를 달성하기 위한 행동을 수행하면 보상을 받습니다.

🚀 HRL 작동 방식 (How HRL Works)

HRL은 일반적으로 다음과 같은 방식으로 작동합니다:

  1. 계층 구조 정의 (Define the Hierarchical Structure): 문제의 복잡성에 따라 적절한 계층 구조를 정의합니다. 최상위 계층과 하위 계층의 수, 각 계층의 역할, 하위 목표 등을 결정합니다.
  2. 정책 학습 (Policy Learning): 각 계층의 정책을 학습합니다. 최상위 계층은 하위 목표를 선택하는 정책을 학습하고, 하위 계층은 선택된 하위 목표를 달성하기 위한 행동을 선택하는 정책을 학습합니다. 정책 학습에는 다양한 강화 학습 알고리즘(예: Q-learning, SARSA, PPO 등)을 사용할 수 있습니다.
  3. 학습 및 상호 작용 (Learning and Interaction): 에이전트는 환경과 상호 작용하면서 각 계층의 정책을 개선합니다. 최상위 계층은 하위 목표를 선택하고, 하위 계층은 해당 목표를 달성하기 위한 행동을 수행합니다. 환경으로부터 보상을 받아 정책을 업데이트합니다.
  4. 추론 (Inference): 학습된 정책을 사용하여 새로운 환경에서 작업을 수행합니다. 최상위 계층은 하위 목표를 선택하고, 하위 계층은 해당 목표를 달성하기 위한 행동을 수행하여 최종 목표를 달성합니다.

다음은 간단한 예시 파이썬 코드입니다. 이 코드는 Q-러닝을 사용하여 HRL을 구현하는 개념을 보여줍니다. (주의: 완전한 HRL 구현이 아니며, 개념을 설명하기 위한 단순화된 예시입니다.)

import numpy as np

# 환경 (Environment)
class Environment:
    def __init__(self):
        self.state = 0  # 초기 상태

    def step(self, action): #환경 단계
        if action == 0:  # 왼쪽으로 이동
            self.state = max(0, self.state - 1)
            reward = -0.1
        elif action == 1:  # 오른쪽으로 이동
            self.state = min(3, self.state + 1)
            reward = -0.1
        elif action == 2 and self.state == 3: # 목표 도달
            reward = 1.0
        else:
            reward = -0.5
        done = self.state == 3
        return self.state, reward, done

# 에이전트 (Agent) - 최상위 계층
class TopLevelAgent:
    def __init__(self, num_subgoals):
        self.q_table = np.zeros((4, num_subgoals)) #Q-테이블 (상태 x 하위 목표)
        self.alpha = 0.1 # 학습률
        self.gamma = 0.9 # 할인율

    def choose_subgoal(self, state):
        return np.argmax(self.q_table[state, :]) #최고 가치 하위 목표 선택

    def update_q_table(self, state, subgoal, reward, next_state):
        best_next_q = np.max(self.q_table[next_state, :])
        self.q_table[state, subgoal] += self.alpha * (reward + self.gamma * best_next_q - self.q_table[state, subgoal])

# 에이전트 - 하위 계층 (예시)
class BottomLevelAgent:
    def __init__(self):
        self.q_table = np.zeros((4, 2)) #Q-테이블 (상태 x 행동)
        self.alpha = 0.1
        self.gamma = 0.9

    def choose_action(self, state):
        return np.argmax(self.q_table[state, :]) #최고 가치 행동 선택

    def update_q_table(self, state, action, reward, next_state):
        best_next_q = np.max(self.q_table[next_state, :])
        self.q_table[state, action] += self.alpha * (reward + self.gamma * best_next_q - self.q_table[state, action])

# HRL 실행
num_subgoals = 2  # 하위 목표 수
env = Environment()
top_agent = TopLevelAgent(num_subgoals)
bottom_agent = BottomLevelAgent()

# 학습 루프
for episode in range(1000):
    state = 0
    done = False

    while not done:
        # 최상위 계층: 하위 목표 선택
        subgoal = top_agent.choose_subgoal(state)

        # 하위 계층 실행
        for _ in range(10): # 하위 목표 달성 시도
            action = bottom_agent.choose_action(state) # 하위 행동 선택
            next_state, reward, done = env.step(action) # 환경 단계

            # 하위 계층 Q-테이블 업데이트 (목표 달성, 아니면 벌점)
            if subgoal == 0 and (action == 0 or action == 1) or subgoal == 1 and (action == 0 or action == 1):
                bottom_agent.update_q_table(state, action, reward, next_state)

            if done:
                reward = 1.0 # 최종 보상
                break
            state = next_state

        top_agent.update_q_table(state, subgoal, reward, next_state)
        state = next_state # 다음 상태로 이동

print("최상위 Q-테이블:", top_agent.q_table)
print("하위 Q-테이블:", bottom_agent.q_table)

이 코드는 간단한 환경에서 HRL의 기본 작동 방식을 보여줍니다. 복잡한 환경에서는 더 정교한 HRL 아키텍처가 사용됩니다.

💡 HRL의 장점 (Advantages of HRL)

HRL은 단일 레벨 강화 학습에 비해 여러 가지 장점을 제공합니다:

  • 학습 효율성 (Learning Efficiency): 문제를 더 작고 관리하기 쉬운 하위 작업으로 분해하여 학습 속도를 높입니다.
  • 일반화 (Generalization): 학습된 하위 목표를 다른 작업에 재사용하여 일반화 능력을 향상시킵니다.
  • 탐색 효율성 (Exploration Efficiency): 계층적 구조를 통해 상태 공간을 효과적으로 탐색합니다.
  • 장기적 종속성 처리 (Handling Long-Term Dependencies): 장기적인 종속성을 이해하고 문제를 해결하는 데 도움을 줍니다.
  • 설계 용이성 (Ease of Design): 문제를 더 쉽게 모델링하고 설계할 수 있습니다.

🧩 HRL의 다양한 유형 (Different Types of HRL)

HRL에는 다양한 유형이 있으며, 문제의 특성에 따라 적절한 아키텍처를 선택할 수 있습니다:

  • 옵션 (Options): 옵션은 하위 정책의 일종으로, 시작 상태와 종료 조건을 갖습니다. 에이전트는 옵션을 사용하여 복잡한 행동을 배울 수 있습니다.
  • MAXQ: MAXQ는 MDP (Markov Decision Process)를 계층적으로 분해하는 방법입니다. 각 하위 작업은 MDP로 모델링됩니다.
  • Hierarchical Imitation Learning (HIL): HIL은 전문가의 시연을 사용하여 하위 정책을 학습합니다. 전문가의 행동을 모방하여 학습을 가속화합니다.

📚 HRL 관련 용어 정리 (Summary of Key Terms)

  • 강화 학습 (Reinforcement Learning) (강화 학습): 에이전트가 환경과 상호 작용하며 보상을 최대화하는 일련의 의사 결정을 배우는 머신 러닝 패러다임입니다.
  • 계층적 강화 학습 (Hierarchical Reinforcement Learning) (계층적 강화 학습): 문제를 더 작고 관리하기 쉬운 하위 작업으로 분해하여 에이전트가 복잡한 환경에서 효율적으로 학습하도록 돕는 강화 학습 방법입니다.
  • 정책 (Policy) (정책): 에이전트가 특정 상태에서 어떤 행동을 취할지 결정하는 함수입니다.
  • 하위 목표 (Subgoal) (서브 골): 최상위 계층이 하위 계층에 부여하는 중간 목표입니다.
  • 보상 (Reward) (보상): 에이전트가 환경으로부터 받는 신호로, 에이전트의 행동에 대한 피드백을 제공합니다.
  • Q-러닝 (Q-learning) (큐 러닝): 강화 학습 알고리즘 중 하나로, Q-테이블을 사용하여 최적의 행동을 학습합니다.
  • 상태 (State) (상태): 환경의 특정 시점의 상황을 나타냅니다.
  • 행동 (Action) (액션): 에이전트가 환경에서 수행할 수 있는 동작입니다.
  • 옵션 (Options) (옵션): 하위 정책의 일종으로, 시작 상태와 종료 조건을 갖습니다.

🧐 결론 (Conclusion)

계층적 강화 학습은 복잡한 문제를 해결하기 위한 강력한 도구입니다. 문제를 계층적으로 분해함으로써 HRL은 학습 효율성을 높이고, 일반화 능력을 향상시키며, 장기적인 종속성을 처리할 수 있습니다. HRL은 로봇 공학, 게임, 자연어 처리 등 다양한 분야에서 응용되고 있으며, 앞으로 더욱 발전할 것으로 예상됩니다.

반응형