MDP를 모른다는 것은 보상함수와 전이확률을 모른 다는 말입니다. 실제 액션을 해보고 보상을 받고 전이확률을 계산해보기 전까지 확률분포도 전혀 모르는 상태라는 말입니다. 이러한 상황을 모델-프리 라고 합니다. 이럴때 사용할 수 있는 방법이 몬테카를로(Monte Carlo) 방법과 Temporal difference 학습방법이 있습니다. 이번 장에서는 몬테카를로 방법에 대해 설명드리겠습니다.
몬테카를로(Monte Carlo) 방법은 강화학습에서 MDP(Markov Decision Process)의 전체 구조를 모를 때 사용하는 방법입니다. 이 방법은 경험(즉, 에이전트가 환경과 상호 작용하여 얻은 데이터)을 기반으로 상태의 가치를 평가합니다. 몬테카를로 방법은 무작위 샘플링을 통해 문제를 통계적으로 해결하는 방식이며, 강화학습에서는 주로 에이전트의 경험을 이용해 상태의 가치를 추정하는 데 사용됩니다. 몬테카를로 방법의 과정 에피소드 생성: 에이전트가 정책을 따라 환경과 상호 작용하면서, 시작 상태에서부터 종료 상태까지의 에피소드(상태, 행동, 보상의 시퀀스)를 생성합니다. 보상의 합산: 각 에피소드에서 얻은 보상을 시간에 따라 합산하여, 각 상태에 대한 총 반환값(또는 누적 보상)을 계산합니다. 가치 추정: 하나의 상태에 대해 여러 에피소드에서 계산된 반환값의 평균을 취하여, 해당 상태의 가치를 추정합니다. 특징 비모델 기반: 몬테카를로 방법은 환경의 전이 확률이나 보상 함수를 명시적으로 알 필요가 없습니다. 대신, 에이전트의 경험만으로 상태 가치를 추정합니다. 에피소드 단위의 학습: 이 방법은 완전한 에피소드를 기반으로 학습하기 때문에, 각 에피소드가 끝날 때까지 가치의 추정을 보류합니다. 분산성: 몬테카를로 방법은 샘플링의 분산이 높을 수 있으므로, 때로는 많은 에피소드를 통해 평균을 내야 안정적인 가치 추정이 가능합니다. 적용 몬테카를로 방법은 특히 결과를 바로 알 수 없고, 한 행동의 장기적인 영향을 평가해야 하는 환경에 적합합니다. 예를 들어, 카지노 게임이나 투자 결정과 같이 불확실성이 높고 결과가 명확하지 않은 상황에서 유용합니다. 몬테카를로 방법은 간단하면서도 강력한 도구로, 명시적인 모델 없이도 복잡한 의사결정 문제를 해결하는 데 도움을 줄 수 있습니다. 몬테카를로 방법에서 기대값 계산은 주로 무작위 샘플링을 통해 이루어집니다. 이 방법은 확률적인 프로세스의 결과를 대규모로 시뮬레이션하여, 관심 있는 변수의 기대값을 추정합니다. 몬테카를로에서 기대값을 계산하는 과정은 다음과 같습니다: 샘플링: 관심 있는 확률 변수에 대한 샘플(데이터 포인트)을 대량으로 생성합니다. 이 샘플은 실제 환경에서의 에피소드 실행이나 시뮬레이션을 통해 얻을 수 있습니다. 결과 수집: 각 샘플링에서 얻은 결과(예: 보상, 상태의 가치 등)를 수집합니다. 평균 계산: 수집된 결과의 평균을 계산하여 기대값을 추정합니다. 수학적으로, n개의 독립적이고 동일하게 분포된 샘플 X1,X2,…,Xn에 대해, 기대값 E[X]은 다음과 같이 추정됩니다: E[X]≈ n1 ∑i=1n Xi 수렴 판단: 충분히 많은 샘플을 사용하면, 몬테카를로 방법에 의한 추정치는 실제 기대값에 수렴하게 됩니다. 샘플의 수를 늘릴수록 추정의 정확도는 일반적으로 향상됩니다. 몬테카를로 방법은 각종 확률적 과정의 기대값을 추정하는 데 널리 사용되며, 복잡한 확률 분포를 가진 문제에서도 효과적입니다. 샘플링이 무작위로 이루어지기 때문에, 큰 수의 법칙에 따라 평균값은 모집단의 기대값에 접근합니다. 계산의 정확도는 샘플의 크기에 크게 의존하며, 일반적으로 샘플이 많을수록 추정치는 더 정확해집니다. 몬테카를로 방법을 사용함으로써, 복잡한 시스템이나 프로세스의 기대값을 효과적으로 추정할 수 있으며, 이는 강화학습, 금융 모델링, 물리학 시뮬레이션 등 다양한 분야에서 유용하게 활용됩니다. 쉽게 말하면 몬테카를로에서 기대값은, 앞뒷면 두개의 경우의 수를 가진 동전을 30회 던졌을 때 앞이나 뒤가 나올 확률을 계산하는 것이고, 이는 그냥 모든 사건에서 얻은 값의 평균을 계산하면 그것이 곧 기대값이 됩니다. 동전 100번 던진 후 앞면이 43회 나왔다면 앞면의 확률이 43%라고 할수 있고 이것이 기대값입니다. 더 많이 던질수록 그 값은 점점 더 정확해 질 것입니다. 이것이 몬테카를로 방법론입니다.
에이전트가 환경과 상호 작용하면서 다양한 상황에서 얻은 경험을 바탕으로 학습을 진행하는 과정입니다. 몬테카를로 경험쌓기의 과정 1. 에피소드 생성: 에이전트는 정책을 따라 환경과 상호 작용하면서, 시작 상태부터 종료 상태까지의 완전한 에피소드를 생성합니다. 이 에피소드는 상태, 행동, 그리고 받은 보상의 연속적인 시퀀스로 구성됩니다. 2. 경험 수집: 에피소드를 통해 에이전트는 다양한 상태에서 어떤 행동을 취했을 때 얻을 수 있는 결과(보상)를 경험합니다. 3. 가치 추정: 에피소드의 각 상태에 대해, 그 상태부터 에피소드의 끝까지 얻은 보상의 합계(또는 할인된 합계)를 계산합니다. 이렇게 계산된 값은 해당 상태의 가치 추정치로 사용됩니다. 4. 정책 개선: 충분한 수의 에피소드를 통해 각 상태에 대한 가치 추정이 이루어진 후, 이 정보를 사용하여 보다 좋은 정책을 만들기 위해 에이전트의 행동 방식을 조정할 수 있습니다. 특징 및 장단점 - 모델 불필요: 몬테카를로 방법은 환경의 전체적인 모델을 명시적으로 알 필요가 없습니다. 에이전트는 직접 경험을 통해 학습합니다. - 에피소드 기반: 이 방법은 각 에피소드가 완료될 때까지 학습이 이루어지며, 에피소드마다 가치 함수를 업데이트합니다. - 고분산: 몬테카를로 방법은 경험의 무작위성으로 인해 분산이 높을 수 있습니다. 따라서 많은 수의 에피소드를 통해 평균을 내야 안정적인 가치 추정이 가능합니다. - 효율적인 비모델 기반 접근법: 환경의 다양한 상태와 결과를 경험하며 학습하기 때문에, 모델을 명확하게 정의할 필요가 없는 복잡한 환경에 적합합니다. 몬테카를로 경험쌓기는 강화학습에서 중요한 방법 중 하나로, 에이전트가 다양한 경험을 통해 학습하고, 그 결과로 보다 나은 의사결정을 할 수 있도록 돕습니다.
에이전트는 상태 s0에서 시작해서 액션 a0을 하고 그에 따른 보상 r0을 받고 s1에 도착합니다. 그 다음 에이전트는 상태 s1에서 시작해서 액션 a1을 하고 그에 따른 보상 r1을 받고 s2에 도착합니다. . . . 이렇게 반복해서 랜덤 에이전트가 목적지 s에 도착하면 에피소드가 종료되고, 각 상태에 대해 리턴을 계산할 수 있습니다. 경험쌓기와 테이블 업데이트 과정을 충분히 반복하고 나면 각 에피소드들 별로 리턴값들이 누적되어 있을 겁니다. 충분한 경험 이후 최종적으로 밸류를 구하기 위해 모든 상태 s에 대해 리턴의 합 V(s)를 방문횟수 N(s)로 나누면 됩니다. 즉, 리턴의 평균을 구하는 식입니다. 이 값은 각 상태의 밸류에 대한 근사치입니다. 하지만 위와 같은 방식은 에피소드를 많이 담고 있을 경우 컴퓨터 메모리에 문제가 발생할 수도 있고 비효율적이 될 수 있기 때문에 에피소드 1개가 끝날 때마다 테이블 값을 조금씩 업데이트 하는 버전으로 주로 사용하게 됩니다. 알파라고 불리는 것은 딥러닝의 학습률과 유사한 개념으로, 업데이트의 정도를 어느정도로 하느냐를 정하는 명칭입니다. 알파의 값이 작을수록 업데이트를 조금씩 하고, 알파의 값이 클수록 업데이트를 크게 합니다. 이런 방식으로 하면 N(s)를 따로 저장해 둘 필요 없이 에피소드가 끝날때마다 갱신 업데이트를 하게 됩니다. 결국 V(s)의 값에 V(s) + 알파(Gt - V(s))의 새로운 식을 대입하면 되는데, Gt가 V(s)보다 크면 알파에 곱해진 값이 양수가 되어 기존의 V(s) 값을 더 크게 만들라는 뜻이고, 반대의 경우에는 V(s)의 값을 더 작게 만들라는 수식으로 이해하면 됩니다.
실제 몬테카를로 코드 작성하기 위해 아래의 4가지 요소가 구현되어야 합니다. 1)환경 에이전트가 활동할 수 있는 기본 환경, 액션에 따른 상태 s가 변하는 부분 구현, 그 다음 보상을 어느정도로 할지 정해야 하는 부분 2)에이전트 환경에 따른 움직임을 어떻게 해야 하는지 정해야 하는 부분 3)경험 저장소 경험이 쌓이는 부분, 메모리에 저장되는 부분 구현 4)학습 경험 저장소에 쌓인 경험 데이터를 이용해 학습 업데이트
[환경] 환경 class를 만듭니다. 환경 안에는 에이전트의 최초 위치를 x, y, z의 좌표 위치를 초기화 합니다. 함수 def step으로 지정해 에이전트의 활동 액션영역을 만듭니다. 액션을 받아 상태변이를 일으키고 보상을 정해주는 함수입니다. 에이전트의 각 엑션에 따른 환경변화를 각각의 함수로 만듭니다. 에이전트의 움직임에 따른 다음 환경을 얻는 함수를 만듭니다. 최초 환경의 종료조건을 달성했을 때 에피소드가 끝났는지 판별해주는 함수를 작성합니다. reset 기능을 넣어 에이전트가 종료 조건 달성한 이후 초기화 상태를 만들어 놓기위해 설정합니다. [에이전트] 에이전트 class를 만듭니다. 기본값을 설정합니다. 에이전트의 액션 a을 함수로 구현합니다. 확률로써 구현해도 되고, 어떤 지정한 방식을 사용해도 됩니다. [메인함수] 여기에는 먼저 만들어놓은 환경 class와 에이전트 class를 불러와 초기화시킵니다. 환경의 기본 좌표값을 지정합니다. 할인계수 감마값을 지정합니다. 알파값 즉 학습률을 지정합니다. 총 훈련할 에피소드의 범위를 지정해 for문을 사용해 학습을 이터레이션 코드를 작성합니다. while loop를 넣어 에이전트가 랜덤으로 경험을 쌓는 과정을 반복하고, append를 이용해 경험 저장소에 에이전트의 액션, 그에따른 환경, 보상을 각각 저장합니다. 그 후 for loop를 만들어 에피소드가 끝나고 바로 해당 데이터를 이용해 학습 업데이트를 진행하도록 합니다. 이 학습 결과를 출력하는 코드를 추가하여 MC방법의 결과를 확인합니다.