카테고리 없음

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

dev-self 2025. 4. 16. 20:38

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

 

|내용 정리|

<TD(Temporal Difference)  예제 연습>

환경 설명

  • 상태 공간(State Space): 4x4 그리드 정보
  • 행동 공간(Action Space): 상(up), 하(down), 좌(left), 우(right)
  • 전이 모델(Transition Model):
    1. Agent의 행동에 따라 상하좌우 이동(무작위성 없음)
    2. 이동 불가한 경우 제자리
    3. Goal에 도달시 상호작용 종료
  • 보상(Reward): Goal 도달시 +10 획득
  • 감가율(Discount Factor): γ = 0.9
  • 정책(Policy):
    1. π(a|s) = 0.25 (모든 행동이 동일한 확률)
    2. π(down|s) = π(right|s) = 0.4 (아래/오른쪽 방향 선호) π(up|s) = π(left|s) = 0.1 (위/왼쪽 방향 비선호)

그리드 구성

  • 왼쪽 상단에 'A'로 표시된 시작점
  • 오른쪽 하단에 'G'로 표시된 목표점(Goal)

이 환경에서 TD 학습을 통해 가치 함수(value function)와 행동-가치 함수(action-value function)를 찾는 문제이다.


1. 초기 함수 __init__에 대한 정의

environment.py의 Env 클래스 초기화:

  • self.agent_pos: 에이전트의 초기 위치를 (y=0, x=0)으로 설정한다.
  • self.goal_pos: 목표 위치를 (y=3, x=3)으로 설정한다.
  • self.y_min, self.x_min, self.y_max, self.x_max: 그리드의 경계를 정의한다 (0부터 3까지).
  • self.state: 4x4 그리드를 나타내는 배열로, 목표 위치는 -1, 에이전트 위치는 1로 표시된다.
  • self.state_space: 가능한 모든 상태(4x4 그리드에서 에이전트의 모든 위치)를 리스트로 저장한다.
  • self.action_space: 가능한 행동(0: 위, 1: 오른쪽, 2: 아래, 3: 왼쪽)을 정의한다.
  • gamma: 할인 계수로 0.9로 설정되어 있다. 미래 보상의 현재 가치를 반영한다.
  • alpha: 학습률로 5e-3으로 설정되어 있다. TD 업데이트의 크기를 조절한다.

2. 주요 코드 수식

TD(0) 업데이트 (상태 가치 함수):

  • td: TD 오차로, 현재 보상(r)과 다음 상태의 할인된 가치(gamma * value_vector[i_s_next])에서 현재 상태의 가치(value_vector[i_s])를 뺀 값이다.
  • value_vector[i_s]: TD 오차와 학습률(alpha)을 곱한 값으로 업데이트된다.

TD(0) 업데이트 (행동 가치 함수):

  • td: 현재 보상(r)과 다음 상태-행동 쌍의 할인된 가치(gamma * action_value_matrix[i_s_next][a_next])에서 현재 상태-행동 쌍의 가치(action_value_matrix[i_s][a])를 뺀 값이다.
  • action_value_matrix[i_s][a]: TD 오차와 학습률(5 * alpha)을 곱한 값으로 업데이트된다. (여기서 학습률은 상태 가치 함수보다 5배 크다.)

보상 함수:

  • 목표에 도달했을 때만 보상 10을 받고, 그 외에는 0이다.

3. 디버깅 샘플 출력물

출력 예시:

*주요 관찰점

  1. 정책 2의 더 높은 가치: 하/우 방향을 선호하는 정책 2가 전반적으로 더 높은 가치 함수 값을 가진다. 이는 목표 상태(G)가 오른쪽 아래에 있어 이 방향들이 더 효율적이기 때문이다.(정책 1 - 균등 확률 정책) / 정책 2 - 하/우 방향 선호 정책)
  2. 가치 분포: 두 정책 모두 목표 상태(G)에 가까울수록 가치가 높아지는 패턴을 보이며, 이는 감가율(γ=0.9)을 고려한 기대 보상의 특성을 잘 반영한다.
  3. 목표 상태의 가치: 목표 상태(G)의 가치는 항상 0으로 설정되어 있습니다. 이는 목표에 도달하면 에피소드가 종료되어 추가 보상이 없기 때문이다.
  4. 행동-가치 함수: 목표 상태로 직접 이동하는 행동은 가장 높은 Q-값(10.000)을 가진다.
 

4. 실행 구조도 (Flowchart)

 

주요 컴포넌트 설명

  1. Env 클래스
    • 그리드 월드 환경을 정의하다.
    • reset(), step(), reward() 등의 메서드로 에이전트와 환경의 상호작용을 구현하다.
  2. get_state_index()
    • 현재 상태(state)가 state_space 리스트에서 어디에 위치하는지 찾아 인덱스를 반환하다.
  3. TD(0) 알고리즘
    • td_value_prediction: 상태 가치 함수 V(s)를 업데이트하다.
      • 수식: V(s) ← V(s) + α * [r + γ*V(s_next) - V(s)]
    • td_action_value_prediction: 행동 가치 함수 Q(s,a)를 업데이트하다.
      • 수식: Q(s,a) ← Q(s,a) + 5α * [r + γ*Q(s_next,a_next) - Q(s,a)]
      • 학습률(5α)이 상태 가치 함수보다 크다.
  4. 정책(Policy)
    • policy1: 모든 행동을 균일한 확률로 선택하다.
    • policy2: 위/아래 행동에 더 높은 확률을 할당한다.
  5. 출력
    • 계산된 가치 함수(value_table)와 행동 가치 행렬(action_value_matrix)을 비교한다.

시각적 이해를 위한 다이어그램

 

이 구조도를 통해 환경 생성 → 정책 적용 → TD 학습 → 결과 출력의 전체 흐름을 명확히 이해할 수 있다.


TD 학습 작동 방식

 

1. State-Value Function V(s) 학습 과정

td_value_prediction() 함수 작동 방식:
  1. 모든 상태의 가치를 0으로 초기화
  2. 에피소드마다:
    • 초기 상태 s에서 시작
    • 현재 정책에 따라 행동 a 선택
    • 행동 a를 취하고 보상 r과 다음 상태 s' 관찰
    • TD 오차 계산: TD = r + γV(s') - V(s)
    • 가치 함수 업데이트: V(s) ← V(s) + α × TD

2. Action-Value Function Q(s,a) 학습 과정

td_action_value_prediction() 함수 작동 방식:
  1. 모든 상태-행동 쌍의 가치를 0으로 초기화
  2. 에피소드마다:
    • 초기 상태 s에서 시작하고 정책에 따라 행동 a 선택
    • 행동 a를 취하고 보상 r과 다음 상태 s' 관찰
    • 다음 상태 s'에서 정책에 따라 다음 행동 a' 선택
    • TD 오차 계산: TD = r + γQ(s',a') - Q(s,a)
    • 행동 가치 함수 업데이트: Q(s,a) ← Q(s,a) + α × TD

|인증|

 

 

-------

패스트캠퍼스 링크

https://bit.ly/4hTSJNB