역방향 및 정방향보기는 혼란 스러울 수 있지만 게임 재생 프로그램과 같은 간단한 것을 다루는 경우 실제로는 매우 간단합니다. 사용중인 참조를보고 있지 않으므로 일반적인 개요 만 알려 드리겠습니다.
신경망과 같은 함수 근사자가 있고 특정 출력에 대해 학습하고 상태 결과를 예측하는 데 두 가지 기능, train
및 predict
이 있다고 가정합니다. (주어진 주에서 행동을 취한 결과)
게임을 플레이했을 때의 흔적이 있다고 가정하면, predict
메쏘드를 사용하여 각 점에서 어떤 움직임을 보이는지 말해 주며, 경기가 끝나면 잃는다 (V = 0). 내 상태가 s_1, s_2, s_3 ... s_n이라고 가정합니다.
몬테카를로 접근법은 추적 및 최종 스코어를 사용하여 트레이스의 각 상태에서 내 함수 근사자 (예 : 신경 네트워크)를 트레이닝한다고 말합니다. 그래서,이 추적 주어, 당신은 전화처럼 뭔가를 할 것이다 :
train(s_n, 0)
train(s_n-1, 0)
... train(s_1, 0)
을.
즉, 나는 모든 국가가 추적의 최종 결과를 예측하도록 요청하고 있습니다.
동적 프로그래밍 접근법은 다음 상태의 결과를 기반으로 훈련한다고 말합니다. 그래서 내 훈련은
train(s_n, 0)
train(s_n-1, test(s_n))
... train(s_1, test(s_2))
같은 것입니다.
즉, 마지막 상태가 트레이스의 최종 결과를 예측할 때 다음 상태가 예측하는 것을 예측하기 위해 함수 근사자를 요구합니다.
TD 학습은 λ=1
이 첫 번째 경우 (몬테카를로)에 해당하고 λ=0
이 두 번째 경우 (동적 프로그래밍)에 해당합니다. 우리가 λ=0.5
을 사용했다고 가정합니다. 그리고 우리의 교육은 다음과 같습니다
train(s_n, 0)
train(s_n-1, 0.5*0 + 0.5*test(s_n))
train(s_n-2, 0.25*0 + 0.25*test(s_n) + 0.5*test(s_n-1)+)
... 이제
당신이 실제로 다시 테스트하지 않기 때문에, 내가 여기에 쓴 것은 완전히 정확하지 각각의 approximator 단계. 대신 예상 값 (예제에서는 V = 0
)으로 시작한 다음 다음 단계를 다음 예측 값으로 학습하도록 업데이트합니다. V = λ·V + (1-λ)·test(s_i)
.
몬테카를로와 동적 프로그래밍 방법보다 훨씬 빠릅니다. 알고리즘에 극한 값을 알지 않기 때문입니다. (현재 예측을 무시하거나 최종 결과를 무시합니다.)
사실, 입력은 현재 상태와 가능한 제어 신호가 될 것이고 출력은 레벨의 예상 진행 상황과 같을 것입니다. 이 방법으로 각 단계에서 가능한 모든 제어 신호를 테스트하고 최상의 출력을 갖는 신호를 선택하십시오. 최종 보상은 레벨 진행 상황입니다 (아마도 레벨을 넘기위한 특별한 보너스가있을 것입니다). –
일정한 시간이 경과 한 후에 진행이 진행되지 않으면이 구성표에서 시간 초과를 원할 수 있습니다. 그러나, NN을 사용하여 레벨을 재생함으로써 얻게되는 경험 이외의 교육 데이터는 필요하지 않습니다. 내가 기대하는 바는 먼저 그것이 올바르게 움직이는 법을 배우는 것입니다. 그런 다음 점프하는 법을 배웁니다. 그런 다음 기능을 기반으로보다 세련된 동작을 학습해야합니다. 학습을 쉽게하기 위해 피 (예 : 적 또는 구덩이)를 추출 할 수 있습니다. –