*본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
|내용 정리|
< Policy Evaluation (정책 평가) - action value function>
1. Bellman Equation for Action-Value Function

이 식은 Action-Value Function(Q-function)에 대한 Bellman 방정식으로, 주어진 정책 하에서 특정 상태 sts_t 와 행동 ata_t 를 선택했을 때, 기대되는 총 보상.
- : 현재 상태 에서 행동 를 취했을 때, 다음 상태 로 전이될 확률
- : 현재 상태 에서 행동 를 했을 때, 즉시 얻는 보상
- : 할인율(0~1 사이의 값)로, 미래 보상의 가중치를 조절
- : 다음 상태 에서 정책 에 따라 행동 을 선택할 확률
- : 다음 상태에서의 기대되는 Q-value
이 식은 Dynamic Programming (DP) 기법을 이용하여 최적의 Q-value를 계산하는데 사용.
2. Q-table (Action-Value Function Table)

이 행렬은 각 상태(state) 와 행동(action) 에 대한 Q-value를 저장하는 테이블로, 일반적으로 강화학습에서 Q-learning
또는 SARSA 알고리즘에서 사용.
- ∣ : 가능한 상태의 개수
- : 가능한 행동의 개수
이 테이블은 보통 2D array 형태로 저장되며, 상태-행동 쌍의 가치를 학습하면서 업데이트.
3. Action-Value Function 업데이트 식 (Bellman 방정식)

- 이 식은 Action-Value Function을 업데이트하는 Bellman 방정식.
- 특정 상태 와 행동 에 대해, 다음 상태 와 행동 을 고려한 기대 보상을 계산하여 Q-value를 갱신.

- 위 업데이트를 반복하면서 변화량이 미리 설정한 임계값(Threshold) 이하로 줄어들면 수렴했다고 판단하고 업데이트를 멈춤.

- 할인율 γ 가 1보다 작을 경우, 업데이트를 무한히 반복하면 최적의 Action-Value Function 에 수렴.
정리
- Action-Value Function은 Bellman 방정식을 반복적으로 적용하여 갱신.
- 변화량이 충분히 작아질 때(Threshold 이하) 업데이트를 멈춤.
- 이면 무한 반복 시 최적의 Action-Value Function 에 수렴.
|응용|
14일차의 Iterative Policy Evaluation 간의 주요 차이점을 알아보자:
- 평가 대상:
- Iterative Policy Evaluation: 상태 가치 함수(V-함수)를 계산.
- Action-Value Function 계산: 상태-행동 가치 함수(Q-함수)를 계산.
- 함수 형태:
- V-함수: V^π(s) - 상태 s에서 정책 π를 따를 때의 기대 가치
- Q-함수: Q^π(s,a) - 상태 s에서 행동 a를 취하고 이후 정책 π를 따를 때의 기대 가치
- 벨만 방정식 형태:
- V-함수 벨만 방정식: V^π(s) = ∑_a π(a|s) ∑_s' p(s'|s,a) [R(s,a,s') + γV^π(s')]
- Q-함수 벨만 방정식: Q^π(s,a) = ∑_s' p(s'|s,a) [R(s,a,s') + γ ∑_a' π(a'|s') Q^π(s',a')]
- 용도:
- V-함수: 정책의 전반적 성능 평가에 유용
- Q-함수: 행동 선택 결정에 직접 사용 가능, 정책 개선에 유용
- 저장 구조:
- V-함수: 상태 공간의 크기만큼의 테이블(|S|)
- Q-함수: 상태-행동 공간의 크기만큼의 테이블(|S|×|A|)
Q-함수를 사용하면 V-함수만 알 때보다 정책 개선이 더 직접적이다. V-함수를 사용할 경우 최적 행동을 선택하려면 각 가능한 행동의 결과를 추가로 계산해야 하지만, Q-함수에서는 가장 큰 Q값을 가진 행동을 바로 선택할 수 있기 때문에 그렇다.
요약하면, 첫 번째 알고리즘(Iterative Policy Evaluation)은 상태 가치에 초점을 맞추고, 두 번째 알고리즘은 상태-행동 쌍의 가치에 초점을 맞춘다.
코드로 알아보자



- 함수 정의: Q-함수를 계산하는 함수를 정의.
- 매개변수:
- policy: 평가할 정책 함수 (상태와 행동을 입력받아 행동 선택 확률 반환)
- env: 환경 객체 (상태 전이 확률과 보상 함수 제공)
- gamma: 할인율(0.9)로, 미래 보상의 현재 가치 계산에 사용
- theta: 알고리즘 종료 조건의 임계값(1e-3)
- max_iterations: 최대 반복 횟수(1000)로 무한 루프 방지용

- Q-함수 초기화: 모든 상태-행동 쌍의 가치를 0으로 초기화.
- defaultdict(float)는 존재하지 않는 키의 기본값을 0.0으로 설정.

- delta를 theta보다 크게 설정하여 while 반복문에 처음 진입할 수 있도록 함.
- k는 반복 횟수를 추적하는 카운터.

- 반복 조건: delta가 theta 이상이고, 반복 횟수가 최대값 미만일 때 계속.
- 두 조건 중 하나라도 만족하지 않으면 알고리즘이 종료.

- 새로운 반복에서 delta를 0으로 초기화합니다.

- 모든 상태와 행동 쌍에 대해 반복합니다.

- 현재 상태-행동 쌍의 이전 Q-값을 저장합니다(나중에 변화량 계산에 사용).

- 새 Q-값 계산을 위한 변수 초기화.
- 현재 상태 s에서 행동 a를 수행했을 때 도달 가능한 다음 상태들을 가져오기.

- 다음 상태들에 대해 반복.
- 환경의 상태 공간에 없는 유효하지 않은 상태는 건너뛰기

- 상태 전이 확률: 상태 s에서 행동 a를 했을 때 다음 상태 s_prime으로 전이될 확률을 구하기.

- 보상: 상태 s에서 행동 a를 했을 때 다음 상태 s_prime으로 전이되면서 받는 보상을 구하기.

- 다음 상태 s_prime에서 기대되는 미래 가치 계산을 위한 변수 초기화
- 다음 상태에서 가능한 모든 행동에 대해 반복.

- 정책에 따라 다음 상태 s_prime에서 행동 a_prime을 선택할 확률을 구하기.

- 다음 상태에서의 기대 가치를 계산.
- 각 행동의 Q-값에 그 행동을 선택할 확률을 곱하고 이를 합산.

- 벨만 방정식을 적용하여 새로운 Q-값을 계산.
- 전이 확률 × (즉시 보상 + 할인된 미래 기대 가치)

- 계산된 새 Q-값으로 Q-함수를 업데이트.

- Q-값 변화의 최대치를 추적합니다.
- 현재까지의 최대 변화량과 방금 계산한 변화량 중 큰 값을 delta로 설정.

- 반복 카운터를 증가시키고 10회 반복마다 현재 상태를 출력.

- 최대 반복 횟수에 도달했다면 경고 메시지를 출력.

- 알고리즘 종료 후 총 반복 횟수를 출력하고 계산된 Q-함수를 반환.
이제 위의 함수를 가지고 실제 사례로 만들어보자.
1. 학습 집중 관리 예시
학습 집중력 관리를 강화학습 문제로 모델링해볼 수 있다:
상태(S):
- 피로도(낮음, 중간, 높음)
- 집중도(낮음, 중간, 높음)
- 시간대(아침, 오후, 저녁)
행동(A):
- 공부하기(1시간)
- 짧은 휴식(10분)
- 긴 휴식(30분)
- 카페인 섭취
보상(R):
- 공부 효율성(학습량) (+0.1 ~ +1.0)
- 피로 누적 (-0.1 ~ -0.5)
- 목표 달성 (+5 보너스)
정책 평가를 적용하면:
- 초기 무작위 정책은 모든 상태에서 네 가지 행동을 균등하게 선택한다.
- 정책 평가 후, 특정 상태의 가치가 계산된다:
- V[(피로도=높음, 집중도=낮음, 시간대=저녁)] = -0.2
- V[(피로도=낮음, 집중도=높음, 시간대=아침)] = +1.5
- Q-함수는 더 구체적인 행동 가치를 제공한다:
- Q[(피로도=높음, 집중도=낮음, 시간대=저녁), '긴 휴식'] = +0.4
- Q[(피로도=높음, 집중도=낮음, 시간대=저녁), '공부하기'] = -0.8
2. 스마트폰 사용 관리 예시
스마트폰 사용 습관을 관리하는 문제를 강화학습으로 모델링할 수 있다:
상태(S):
- 현재 활동 중요도(낮음, 중간, 높음)
- 알림 상태(없음, 중요, 긴급)
- 시간 가용성(적음, 보통, 많음)
행동(A):
- 알림 무시하기
- 알림 확인만 하기
- 앱 사용하기(5분)
- 앱 사용하기(20분 이상)
보상(R):
- 생산성 유지(+0.5)
- 중요 정보 놓침(-1.0)
- 과도한 스마트폰 사용(-0.3)
- 일 완료(+2.0)
정책 평가 결과:
- 특정 상태의 가치:
- V[(중요도=높음, 알림=없음, 시간=적음)] = +1.2
- V[(중요도=낮음, 알림=긴급, 시간=많음)] = +0.3
- Q-함수 예시:
- Q[(중요도=높음, 알림=중요, 시간=적음), '알림 무시하기'] = +0.8
- Q[(중요도=높음, 알림=중요, 시간=적음), '앱 사용하기(20분+)'] = -1.2
3. 스트레스 관리 예시
스트레스 관리를 강화학습 문제로 모델링:
상태(S):
- 스트레스 수준(낮음, 중간, 높음)
- 에너지 수준(낮음, 중간, 높음)
- 마감기한 근접도(여유, 보통, 촉박)
행동(A):
- 명상하기(15분)
- 운동하기(30분)
- 일에 집중하기(1시간)
- 휴식취하기(1시간)
보상(R):
- 스트레스 감소(+0.3)
- 일 진행도(+0.5)
- 마감기한 성공(+3.0)
- 스트레스 증가(-0.4)
정책 평가 결과:
- 상태 가치 함수:
- V[(스트레스=높음, 에너지=낮음, 마감=촉박)] = -0.5
- V[(스트레스=중간, 에너지=높음, 마감=여유)] = +1.8
- Q-함수:
- Q[(스트레스=높음, 에너지=중간, 마감=촉박), '일에 집중하기'] = +1.2
- Q[(스트레스=높음, 에너지=중간, 마감=촉박), '휴식취하기'] = -2.0
- Q[(스트레스=높음, 에너지=낮음, 마감=여유), '명상하기'] = +0.9
- Q[(스트레스=높음, 에너지=낮음, 마감=여유), '일에 집중하기'] = -0.1
|인증|




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