해결된 질문
24.07.19 13:21 작성
·
101
·
수정됨
0
이렇게 기존의 V 테이블을 가지고 새로운 V` 을 구하는데
while True:
#delta <- 0
delta = 0
#각 s에 대해 반복:
for s in range(num_states):
#v <- V(s)
old_value = V[s]
new_value = 0
#업데이트 규칙 : V(s) = sum(pi(a|s)*sum(p(s,a)*[r + gamma*v(s')]))
for a, prob_action in enumerate(policy[s]):
# s', r에 대해 합산
for prob, s_, reward, _ in transitions[s][a]:
new_value += prob_action * prob * (reward + GAMMA * V[s_])
V[s] = new_value
#delta <- max(delta|v - V(s)|)
delta = max(delta, np.abs(old_value - V[s]))
V[s] = new_value
여기 실습 코드에서는 바로 V[s]을 업데이트 합니다.
예를 들면
9번 타일 상태 값에서 오른쪽 action을 해서 10번의 다음 상태 값을 가지고 계산 합니다.
그리고 9번이 상태 값이 업데이트 됩니다.
그리고 나서 10번에서 왼쪽의 action의 상태 값을 구할때 이미 업데이트된 9번의 상태 값을 가지고 상태를 업데이트 합니다.
기존 ppt 에서 설명은 기존의 V를 가지고 있다가 기존의 V를 업데이트 하지 않은 채로
새로운 V` 테이블을 계산 하고 V 을 V` 로 교체 하는것으로 표현 되고 있습니다.
https://cs.stanford.edu/people/karpathy/reinforcejs/gridworld_dp.html
해당 사이트의 코드는
ppt 에서 배운 대로 V를 V` 로 교체 하는것으로 되어 있습니다.
실습 처럼 바로 값을 업데이트 하는게 맞는건지 ppt 처럼 스왑 하는게 맞는건지
어느것이 맞는건지 잘모르겠습니다.
답변 2
1
2024. 07. 19. 13:36
인프런 AI 인턴이 이미 잘 답변해 주었네요. 결론적으로는 두가지 모두 족보에 있는 방법들이고 둘다 수렴을 보장하는 방법들 입니다.
바로 V[s]를 update 하는 방식이 즉시 갱신 (in-place update) 방식이고, 두개의 V table 을 유지하다가 한번에 update 하는 방식이 sweeping 방식입니다. 즉시 갱신 방식은 각 상태를 순회하며 그때그때 값을 업데이트하기 때문에 구현이 간단하고 메모리 사용이 적습니다. 위핑 방식은 한 번의 순회 동안 이전 상태 값을 참조하여 일관된 업데이트를 보장합니다. 일반적으로 스위핑 방식이 더 안정적인 수렴을 보일 수 있지만, 즉시 갱신 방식도 자주 사용됩니다.
요약하면 즉시 갱신 방식은 메모리 효율적이고 구현이 간단한 반면 스위핑 방식은 일관된 업데이트를 보장하고 안정적 수렴이 가능하므로 적용하는 문제에 따라 더 적합한 방법을 선택하면 되는 문제입니다.
좋은 질문 감사합니다.
1
안녕하세요, 인프런 AI 인턴입니다.
BACK HO KIM님, 강화학습에서 반복 정책 평가(algorithm for policy evaluation)와 연관된 질문에 대해 혼란이 있으신 것 같습니다. 질문자님이 제공한 코드와 설명은 반복 정책 평가 과정에서 “in-place” 방식과 “two-array” 방식 사이의 차이점에 대한 혼동을 불러일으키는 것 같습니다.
In-place 방식: 이 방식에서는 V[s]
값을 계산할 때 바로 업데이트를 진행합니다. 즉, 업데이트하는 동안 계산된 새로운 값(new_value
)으로 현재 상태의 가치(V[s]
)를 바로 갱신합니다. 이 방식은 메모리 사용량은 적지만, 순서에 따라 계산 결과가 영향을 받을 수 있습니다.
Two-array 방식: 이 방식은 두 개의 배열을 사용합니다. 하나는 현재의 가치 함수(V
)를 저장하는 데 사용되고, 다른 하나는 새로운 가치 함수(V'
)를 계산하는 데 사용됩니다. 모든 상태에 대해 새로운 가치 함수를 계산한 후에야 최종적으로 V'
의 값을 V
에 복사하여 업데이트합니다. 이 방식은 순차적인 의존성을 피할 수 있어 더 안정적인 업데이트가 가능하지만, 추가적인 메모리가 필요합니다.
실제로 어느 방식을 사용할지는 구현 환경과 성능 요구 사항에 따라 달라질 수 있습니다. 핵심적으로 중요한 것은, 각 반복에서의 정책 평가 과정이 어떤식으로든지 이루어져야 한다는 점입니다.
강화학습 입문에서 Deep Q-learning까지 강의에서 설명한 것처럼, 기본 원칙 상으로는 새로운 V'
테이블을 계산한 후에 V
로 교체하는 것이 이론적으로 설명되는 방식입니다. 이론과 실습에서 차이가 있을 수 있는데, 이는 특정 상황에서는 in-place 방식이나 다른 최적화 방법을 사용할 수 있기 때문입니다.
따라서 정답은 둘 다 맞는 것일 수 있습니다. 문제에 대한 정확한 해결 방법은 강의 내용과 구현 목적을 고려하여 결정되어야 합니다.
질문자님이 공유한 링크 (Stanford University Resource)는 이론적 설명과 함께 다양한 방식의 구현을 제공하며, 각기 다른 상황과 선호도에 따라 적절한 방식을 선택할 수 있도록 도와줍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
2024. 07. 19. 13:40
그렇 군요 chat gpt 에게 물어봐도 2가지 방식을 혼용해서 계속 알려주길레 혼동이 많이 왔습니다. 궁금증 해결 되었습니다. 감사합니다.