카테고리 없음

패스트캠퍼스 환급챌린지 37일차 : 스크래치부터 시작하는 강화학습의 모든 것 강의 후기

dev-self 2025. 4. 10. 21:18

*본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

|내용 정리|

<Monte-Carlo Method Example - 02>

예제 구성 

  • 환경 구성:
    • 상태 공간(State space): 3x4 격자
    • 행동 공간(Action space): 상(위), 하(아래), 좌(왼쪽), 우(오른쪽)
    • 시작점: A (왼쪽 상단)
    • 목표: G (오른쪽 상단)
  • 전이 모델(Transition model):
    • 에이전트의 행동에 따라 상하좌우 이동 (무작위성 없음)
    • 이동 불가한 경우 제자리에 머무름, 파란색 영역에 들어가면 시작점으로 이동
    • Goal에 도달시 상호작용 종료
  • 보상 구조:
    • Goal 도달 시 +10 보상 획득
    • 감가율(Discount factor) γ = 0.9
  • 정책:
    • π(a|s) = 0.25 (예측용, 모든 행동이 동일한 확률)

1. 환경 구현 (environment.py)

환경 클래스 Env는 기본적인 MDP(Markov Decision Process) 환경을 구현

이 코드는 3x4 격자 환경을 초기화:

  • agent_pos: 에이전트의 시작 위치 (0,0) - 왼쪽 상단
  • goal_pos: 목표 위치 (0,3) - 오른쪽 상단
  • drift_area: 파란색 드리프트 영역 - (0,1)과 (0,2) 위치

이 환경 설정은 앞서 보신 이미지의 격자 환경과 일치한다. 여기서 중요한 점은:

  • 에이전트가 드리프트 영역에 들어가면 시작점으로 돌아간다
  • 목표에 도달하면 에피소드가 종료된다

 

이 메소드는:

  1. 에이전트가 선택한 액션(상,하,좌,우)에 따라 위치를 업데이트.
  2. 드리프트 영역 확인: 에이전트가 파란색 영역(drift_area)에 들어가면 시작점(0,0)으로 강제 이동.
  3. 목표 도달 확인: 에이전트가 목표에 도달하면 done=True로 설정하여 에피소드 종료를 알림.
  4. 보상 계산: 상태 전이에 따른 보상을 계산하고 반환.
  5. 최종적으로 (보상, 다음 상태, 종료 여부)를 반환.

이 메소드는 강화학습의 핵심 인터페이스로, 에이전트가 액션을 선택하면 환경이 반응하는 방식을 정의.

 

reset() 메소드

  • 환경을 초기 상태로 리셋
  • 에이전트를 시작 위치(0,0)에 배치하고 환경 상태를 초기화

exploring_reset() 메소드

  • Exploring Starts(ES) 방법을 위한 특수 리셋 기능
  • 무작위 위치에서 에피소드를 시작할 수 있도록 에이전트를 랜덤한 유효 위치에 배치
  • 이는 모든 상태-행동 쌍이 방문될 확률을 보장하기 위한 방법

transition_probability() 메소드

  • 상태 전이 확률을 계산
  • 현재 상태(s)와 액션(a)이 주어졌을 때, 다음 상태(s')로 전이할 확률을 계산
  • 이 환경에서는 전이가 결정적(deterministic)이므로 확률은 0 또는 1

2. Monte-Carlo 예측 (mc_prediction.py)

1. calc_return 함수: 총 보상(Return) 계산

 

이 함수는 시간 t부터 에피소드 종료까지의 모든 보상에 감가율을 적용하여 합산:

  • n = len(rewards): 에피소드의 남은 단계 수
  • gammas = gamma * np.ones([n]): 각 단계마다 동일한 감가율(γ=0.9) 적용
  • powers = np.arange(n): 0부터 n-1까지의 지수 값 생성
  • power_of_gammas = np.power(gammas, powers): γ^0, γ^1, γ^2, ... 계산
  • discounted_rewards = rewards * power_of_gammas: 각 보상에 해당 감가율 적용
  • g = np.sum(discounted_rewards): 감가된 보상의 총합 계산

이 함수는 다음 수식을 구현합니다: G_t = R_t + γR_{t+1} + γ²R_{t+2} + ... + γ^{T-t-1}R_{T-1}

 

2. mc_value_prediction 함수: 상태 가치 함수 학습

이 함수는 Monte-Carlo 방법을 사용하여 상태 가치 함수를 학습:

  1. 초기화:
    • value_vector: 각 상태의 가치를 저장하는 벡터, 처음에는 0으로 초기화
    • returns: 각 상태별로 방문 횟수('n')와 평균 반환값('avg')을 추적
  2. 반복 학습 (10,000회):
    • 주어진 정책에 따라 에피소드 생성
    • 생성된 에피소드의 각 타임스텝에 대해 처리
  3. 상태 가치 업데이트 (모든 방문 MC 방법):
    • s_t = episode['states'][t]: 타임스텝 t에서의 상태
    • i_s_t = get_state_index(env.state_space, s_t): 상태 인덱스 찾기
    • g_t = calc_return(gamma, episode['rewards'][t:]): t 시점부터의 총 보상 계산
    • 증분식 평균 업데이트:

  • 이는 새로운 반환값을 포함하여 상태의 평균 가치를 업데이트하는 공식이다. 수식으로는: V(s) = V(s) + (G_t - V(s)) / N(s)
  • value_vector[i_s_t] = returns[i_s_t]['avg']: 상태 가치 벡터 업데이트

3. Monte-Carlo 제어 (mc_control.py)

MC 제어 알고리즘은 두 가지 방식으로 구현:

  1. Exploring Starts (ES) 방법:

 

주요 특징:

  1. Exploring Starts:
    • s = env.exploring_reset(): 무작위 상태에서 에피소드 시작
    • if step_count == 0: a = np.random.choice(...): 첫 단계에서 무작위 액션 선택
    • 이는 모든 상태-행동 쌍이 충분히 탐색되도록 보장
  2. 정책 개선:
    • a_max = action_value_matrix[i_s_t].argmax(): 각 상태에서 최대 Q값을 가진 액션 선택
    • policy[i_s_t][:] = 0: 모든 액션의 확률을 0으로 설정
    • policy[i_s_t][a_max] = 1: 최적 액션의 확률을 1로 설정 (탐욕적 정책)
    • 주석 "# 탐욕적 정책"은 이 부분이 greedy policy임을 나타냄

이 방법은 탐욕적 정책을 직접 사용하되, 에피소드 시작에서 무작위성을 도입하여 충분한 탐색을 보장

 

2. ε-soft 정책

주요 특징:

  1. 반복 횟수 증가:
    • range(20000): ES 방법보다 더 많은 반복 (20,000회)
    • 이는 ε-soft 정책이 탐색에 더 많은 시간이 필요할 수 있기 때문
  2. ε-greedy 정책 사용:
    • policy[i_s_t][:] = eps / len(env.action_space): 모든 액션에 ε/|A|의 확률 할당
    • policy[i_s_t][a_max] += 1 - eps: 최적 액션에 추가로 1-ε의 확률 할당
    • 주석 "# 모든 액션에 ε/|A| 확률 할당"과 "# 최적 액션에 1-ε 추가"는 이 배분의 의미를 설명

이 방법은 항상 일정 확률(ε)로 무작위 탐색을 수행하면서, 동시에 현재 알고 있는 최적 행동을 더 자주 선택한다.

두 방법의 주요 차이점

  1. 탐색 방식:
    • ES: 에피소드 시작에서만 무작위성 도입 (첫 상태와 행동)
    • ε-soft: 모든 단계에서 일정 확률로 탐색 수행
  2. 정책 유형:
    • ES: 학습 후 완전히 탐욕적 정책 사용 (확률 1로 최적 행동 선택)
    • ε-soft: 항상 일정 확률(ε)로 탐색 가능한 정책 유지
  3. 수렴 특성:
    • ES: 모든 상태-행동 쌍이 탐색된다면 최적 정책으로 수렴 가능
    • ε-soft: ε > 0인 한 진정한 최적 정책에 정확히 수렴하지는 않음 (ε의 영향으로)
  4. 적용 환경:
    • ES: 에피소드 시작을 제어할 수 있는 환경에 적합
    • ε-soft: 임의의 에피소드 시작이 어려운 실제 환경에 더 적합

핵심 수식 및 알고리즘

1총 보상(Return) 계산:

이것은 시간 t부터 에피소드 끝까지의 감가된 보상의 합을 계산한다:

  • g = r_t + γr_{t+1} + γ²r_{t+2} + ... + γ^{T-t-1}r_{T-1}
  • 여기서 γ는 감가율(discount factor)로 0.9가 사용됨
  • 이 수식은 미래 보상을 현재 가치로 환산하는 역할을 한다

가치 함수 업데이트:

이것은 Monte-Carlo 방법에서 상태 가치를 증분식으로 업데이트하는 방법이다:

  • avg_prev: 이전까지의 평균 반환값
  • n_prev: 이전 방문 횟수
  • g_t: 현재 에피소드에서의 반환값
  • 이 식은 새로운 경험을 포함하여 상태 가치의 평균을 업데이트한다.

ε-soft 정책 개선:

ε-soft 정책의 정의:

  • 모든 액션은 최소 ε/|A|의 확률로 선택됨 (탐색)
  • 최대 가치를 가진 액션은 1-ε+ε/|A|의 확률로 선택됨 (활용)
  • 이렇게 하면 탐색과 활용 사이의 균형을 맞출 수 있음

코드 간 연관성

  1. environment.py는 기본 환경을 구현하며 mc_prediction.py와 mc_control.py에서 이 환경을 사용
  2. mc_prediction.py는 주어진 정책에 대한 가치 함수 예측에 중점
  3. mc_control.py는 최적 정책을 찾기 위한 제어 알고리즘 구현

Monte-Carlo 방법의 특징

  • 모델 없는(Model-free) 학습: 환경의 전이 확률을 모르는 상태에서도 학습 가능
  • 에피소드 기반: 완전한 에피소드 경험을 통해 학습
  • 증분식 평균: 새로운 경험을 기존 지식에 점진적으로 통합

|인증|

 

-------

패스트캠퍼스 링크

https://bit.ly/4hTSJNB