*본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
|내용 정리|
<TD(Temporal Difference) 예제 연습>

환경 설명
- 상태 공간(State Space): 4x4 그리드 정보
- 행동 공간(Action Space): 상(up), 하(down), 좌(left), 우(right)
- 전이 모델(Transition Model):
- Agent의 행동에 따라 상하좌우 이동(무작위성 없음)
- 이동 불가한 경우 제자리
- Goal에 도달시 상호작용 종료
- 보상(Reward): Goal 도달시 +10 획득
- 감가율(Discount Factor): γ = 0.9
- 정책(Policy):
- π(a|s) = 0.25 (모든 행동이 동일한 확률)
- π(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. 디버깅 샘플 출력물
출력 예시:


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

주요 컴포넌트 설명
- Env 클래스
- 그리드 월드 환경을 정의하다.
- reset(), step(), reward() 등의 메서드로 에이전트와 환경의 상호작용을 구현하다.
- get_state_index()
- 현재 상태(state)가 state_space 리스트에서 어디에 위치하는지 찾아 인덱스를 반환하다.
- 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α)이 상태 가치 함수보다 크다.
- td_value_prediction: 상태 가치 함수 V(s)를 업데이트하다.
- 정책(Policy)
- policy1: 모든 행동을 균일한 확률로 선택하다.
- policy2: 위/아래 행동에 더 높은 확률을 할당한다.
- 출력
- 계산된 가치 함수(value_table)와 행동 가치 행렬(action_value_matrix)을 비교한다.
시각적 이해를 위한 다이어그램

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

1. State-Value Function V(s) 학습 과정
td_value_prediction() 함수 작동 방식:
- 모든 상태의 가치를 0으로 초기화
- 에피소드마다:
- 초기 상태 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() 함수 작동 방식:
- 모든 상태-행동 쌍의 가치를 0으로 초기화
- 에피소드마다:
- 초기 상태 s에서 시작하고 정책에 따라 행동 a 선택
- 행동 a를 취하고 보상 r과 다음 상태 s' 관찰
- 다음 상태 s'에서 정책에 따라 다음 행동 a' 선택
- TD 오차 계산: TD = r + γQ(s',a') - Q(s,a)
- 행동 가치 함수 업데이트: Q(s,a) ← Q(s,a) + α × TD
|인증|




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