*본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
|내용 정리|
<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) 위치
이 환경 설정은 앞서 보신 이미지의 격자 환경과 일치한다. 여기서 중요한 점은:
- 에이전트가 드리프트 영역에 들어가면 시작점으로 돌아간다
- 목표에 도달하면 에피소드가 종료된다

이 메소드는:
- 에이전트가 선택한 액션(상,하,좌,우)에 따라 위치를 업데이트.
- 드리프트 영역 확인: 에이전트가 파란색 영역(drift_area)에 들어가면 시작점(0,0)으로 강제 이동.
- 목표 도달 확인: 에이전트가 목표에 도달하면 done=True로 설정하여 에피소드 종료를 알림.
- 보상 계산: 상태 전이에 따른 보상을 계산하고 반환.
- 최종적으로 (보상, 다음 상태, 종료 여부)를 반환.
이 메소드는 강화학습의 핵심 인터페이스로, 에이전트가 액션을 선택하면 환경이 반응하는 방식을 정의.
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 방법을 사용하여 상태 가치 함수를 학습:
- 초기화:
- value_vector: 각 상태의 가치를 저장하는 벡터, 처음에는 0으로 초기화
- returns: 각 상태별로 방문 횟수('n')와 평균 반환값('avg')을 추적
- 반복 학습 (10,000회):
- 주어진 정책에 따라 에피소드 생성
- 생성된 에피소드의 각 타임스텝에 대해 처리
- 상태 가치 업데이트 (모든 방문 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 제어 알고리즘은 두 가지 방식으로 구현:
- Exploring Starts (ES) 방법:

주요 특징:
- Exploring Starts:
- s = env.exploring_reset(): 무작위 상태에서 에피소드 시작
- if step_count == 0: a = np.random.choice(...): 첫 단계에서 무작위 액션 선택
- 이는 모든 상태-행동 쌍이 충분히 탐색되도록 보장
- 정책 개선:
- 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 정책

주요 특징:
- 반복 횟수 증가:
- range(20000): ES 방법보다 더 많은 반복 (20,000회)
- 이는 ε-soft 정책이 탐색에 더 많은 시간이 필요할 수 있기 때문
- ε-greedy 정책 사용:
- policy[i_s_t][:] = eps / len(env.action_space): 모든 액션에 ε/|A|의 확률 할당
- policy[i_s_t][a_max] += 1 - eps: 최적 액션에 추가로 1-ε의 확률 할당
- 주석 "# 모든 액션에 ε/|A| 확률 할당"과 "# 최적 액션에 1-ε 추가"는 이 배분의 의미를 설명
이 방법은 항상 일정 확률(ε)로 무작위 탐색을 수행하면서, 동시에 현재 알고 있는 최적 행동을 더 자주 선택한다.
두 방법의 주요 차이점
- 탐색 방식:
- ES: 에피소드 시작에서만 무작위성 도입 (첫 상태와 행동)
- ε-soft: 모든 단계에서 일정 확률로 탐색 수행
- 정책 유형:
- ES: 학습 후 완전히 탐욕적 정책 사용 (확률 1로 최적 행동 선택)
- ε-soft: 항상 일정 확률(ε)로 탐색 가능한 정책 유지
- 수렴 특성:
- ES: 모든 상태-행동 쌍이 탐색된다면 최적 정책으로 수렴 가능
- ε-soft: ε > 0인 한 진정한 최적 정책에 정확히 수렴하지는 않음 (ε의 영향으로)
- 적용 환경:
- 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|의 확률로 선택됨 (활용)
- 이렇게 하면 탐색과 활용 사이의 균형을 맞출 수 있음
코드 간 연관성
- environment.py는 기본 환경을 구현하며 mc_prediction.py와 mc_control.py에서 이 환경을 사용
- mc_prediction.py는 주어진 정책에 대한 가치 함수 예측에 중점
- mc_control.py는 최적 정책을 찾기 위한 제어 알고리즘 구현
Monte-Carlo 방법의 특징
- 모델 없는(Model-free) 학습: 환경의 전이 확률을 모르는 상태에서도 학습 가능
- 에피소드 기반: 완전한 에피소드 경험을 통해 학습
- 증분식 평균: 새로운 경험을 기존 지식에 점진적으로 통합

|인증|




-------
패스트캠퍼스 링크