카테고리 없음

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

dev-self 2025. 4. 3. 17:50

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

 

|내용 정리|

<Value Iteration 코드 연습>

예제 환경 구성

  • 그리드 크기: 3x3 (가로 3칸, 세로 3칸)
  • 에이전트 시작 위치: (0,0) (좌측 상단)
  • 목표 위치: (2,2) (우측 하단)
  • 행동 공간: 4가지 방향 이동
    • 0: 상 (↑)
    • 1: 우 (→)
    • 2: 하 (↓)
    • 3: 좌 (←)

전이 모델

  • 에이전트가 선택한 방향으로 80%의 확률로 이동
  • 미끄러짐 효과로 20%의 확률로 제자리에 머무름
  • 그리드 경계를 벗어나는 이동 시도 시 제자리에 머무름

보상 체계

  • 목표(G)에 도달하면 +10 보상
  • 그 외 모든 이동에는 0 보상

할인율(감마)

  • γ = 0.9

이 그리드 환경에서는 Value Iteration 알고리즘을 사용하여 에이전트가 시작 위치(A)에서 목표 위치(G)까지 가장 효율적으로 이동하는 최적 정책을 찾는다.

Value Iteration은 각 상태의 가치를 반복적으로 업데이트하면서 최적 가치 함수를 계산하고, 이를 기반으로 최적 정책을 도출한다. 여기서는:

  1. 모든 상태에서 가능한 모든 행동의 기대 가치를 계산
  2. 각 상태에서 최대 가치를 가진 행동을 선택
  3. 상태 가치의 변화가 충분히 작아질 때까지 반복

코드로 보기

- ENV

 

- transition_probability

 

- reward 함수

 

- value_iteration

 

- main 실행함수 샘플

 

- 실행 예시

 

[1] 최초  설정:

  • 에이전트는 (0,0) 위치에서 시작
  • 목표는 (2,2) 위치에 있음
  • 행동 공간은 상(0), 우(1), 하(2), 좌(3)
  • 감가율(γ)은 0.9
  • 목표 도달 시 +10의 보상
  • 의도한 방향으로 80% 확률로 이동, 20% 확률로 제자리에 머무름

 

[2] 첫 번째 반복:

 

 
  • 처음에는 목표 위치 (2,2)만 10의 가치를 가지고 있음 (보상).
  • 그 주변 셀 (1,2)와 (2,1)은 이미 8의 가치를 가짐. 이는 목표로부터 한 칸 떨어져 있기 때문에 감가된 가치(10 * 0.9 * 0.8 = 7.2)와 제자리에 머무를 확률을 고려한 값.

 

[3] 열 번째 반복 (마지막):

  • 에이전트는 (0,0) 위치에서 시작
  • 목표는 (2,2) 위치에 있음
  • 행동 공간은 상(0), 우(1), 하(2), 좌(3)
  • 감가율(γ)은 0.9
  • 목표 도달 시 +10의 보상
  • 의도한 방향으로 80% 확률로 이동, 20% 확률로 제자리에 머무름

 

가치의 전파:

  1. 처음에는 목표 위치와 그 인접 셀만 가치를 가짐
  2. 반복을 거듭할수록 그리드 전체로 가치가 전파됨
  3. 가까운 셀에서 먼 셀로 가치가 점점 감소하며 전파됨
  4. Delta(가치 함수의 최대 변화량)가 점점 감소하며 알고리즘이 수렴

알고리즘 코드 구현 부분

수식 설명

 

 

  • 𝑉[𝑘+1](𝑠):
    • 의미: 상태 𝑠에서의 새로운 가치 함수 (k+1 번째 반복에서의 값).
    • 목적: 현재 상태 𝑠의 가치를 업데이트.
  • max⁡𝑎:
    • 의미: 모든 가능한 행동 𝑎 중에서 최댓값을 선택.
    • 목적: 최적의 행동을 선택하여 가치를 극대화.
  • ∑𝑠′𝑝(𝑠′∣𝑠,𝑎:
    • 의미: 상태 𝑠에서 행동 𝑎를 취했을 때 다음 상태 𝑠′로 전이할 확률의 합.
    • 목적: 모든 가능한 다음 상태 𝑠′에 대한 기대값을 계산.
  • 𝑟+𝛾𝑉𝑘(𝑠′):
    • 의미: 보상 𝑟과 할인된 다음 상태의 가치 𝛾𝑉𝑘(𝑠′)의 합.
    • 목적: 현재 보상과 미래 가치를 고려하여 총 기대 보상을 계산.
  • 전체 수식:
    • 의미: 현재 상태 𝑠의 가치를 모든 가능한 행동과 다음 상태에 대한 기대 보상으로 업데이트.
    • 목적: 가치 함수를 반복적으로 개선하여 최적 정책을 서치.

코드 설명

  1. for i_s, s in enumerate(env.state_space)::
    • 의미: 모든 상태 𝑠를 순회합니다. i_s는 상태의 인덱스.
    • 목적: 각 상태의 가치를 업데이트하기 위해 반복.
  2. action_values = np.zeros([len(env.action_space)]):
    • 의미: 각 행동에 대한 가치를 저장할 배열을 0으로 초기화.
    • 목적: 행동별 기대 보상을 계산하기 위한 임시 저장소.

  1. for a in env.action_space::
    • 의미: 모든 가능한 행동 𝑎를 순회.
    • 목적: 각 행동에 대한 기대 보상을 계산.
  2. action_value = 0:
    • 의미: 현재 행동 𝑎에 대한 기대 보상을 0으로 초기화.
    • 목적: 누적값을 계산하기 위한 변수.

  1. for i_s_next, s_next in enumerate(env.state_space)::
    • 의미: 모든 가능한 다음 상태 𝑠′를 순회합니다. i_s_next는 다음 상태의 인덱스입니다.
    • 목적: 각 다음 상태에 대한 전이 확률과 보상을 고려합니다.
  2. p_s_next = env.transition_probability(s, a, s_next):
    • 의미: 상태 𝑠에서 행동 𝑎를 취했을 때 다음 상태 𝑠′로 전이할 확률 𝑝(𝑠′∣𝑠,𝑎)를 가져옴.
    • 목적: 전이 모델을 반영.
  3. reward = env.reward(s, a, s_next):
    • 의미: 상태 𝑠에서 행동 𝑎를 취하고 𝑠′로 전이했을 때의 보상 𝑟을 가져옴.
    • 목적: 즉각적인 보상을 반영.
  4. action_value += p_s_next * (reward + gamma * value_vector[i_s_next]):
    • 의미: 기대 보상에 전이 확률 𝑝(𝑠′∣𝑠,𝑎)와 할인된 다음 상태 가치 𝛾𝑉𝑘(𝑠′)를 곱한 값을 누적.
    • 목적: 수식 ∑𝑠′𝑝(𝑠′∣𝑠,𝑎)[𝑟+𝛾𝑉𝑘(𝑠′)]를 코드로 구현한 부분.

  1. action_values[a] = action_value:
    • 의미: 행동 𝑎에 대한 기대 보상을 배열에 저장.
    • 목적: 모든 행동에 대한 기대 보상을 비교하기 위해 임시로 저장.

 

  1. new_value_vector[i_s] = np.max(action_values):
    • 의미: 모든 행동에 대한 기대 보상 중 최댓값을 선택하여 새로운 가치 함수로 저장.
    • 목적: 수식 max⁡𝑎를 코드로 구현한 부분으로, 최적의 행동을 반영.

 

 

|인증|

 

 

 

-------

패스트캠퍼스 링크

https://bit.ly/4hTSJNB