Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

강화 학습 에이전트 훈련시키기

환경 및 강화 학습 에이전트를 만들었으면 train 함수를 사용하여 환경에서 에이전트를 훈련시킬 수 있습니다. 훈련을 구성하려면 rlTrainingOptions 객체를 사용하십시오. 예를 들어 환경 env에서 훈련 옵션 세트 opt와 훈련 에이전트 agent를 만듭니다.

opt = rlTrainingOptions(...
    MaxEpisodes=1000,...
    MaxStepsPerEpisode=1000,...
    StopTrainingCriteria="AverageReward",...
    StopTrainingValue=480);
trainResults = train(agent,env,opt);

envrlSimulinkEnv로 생성된 다중 에이전트 환경이라면 에이전트 인수를 배열로 지정합니다. 배열에서 에이전트의 순서는 env 생성에 사용된 에이전트 순서와 일치해야 합니다. MATLAB® 환경에는 다중 에이전트 훈련이 지원되지 않습니다.

에이전트를 만드는 방법에 대한 자세한 내용은 강화 학습 에이전트 항목을 참조하십시오. 환경을 만드는 방법에 대한 자세한 내용은 Reinforcement Learning Environments 항목과 Create Custom Simulink Environments 항목을 참조하십시오.

참고

train은 훈련이 진행됨에 따라 에이전트를 업데이트합니다. 이는 각 에이전트가 핸들 객체이기 때문에 가능합니다. 나중에 사용할 수 있도록 원래 에이전트 파라미터를 유지하려면 에이전트를 다음과 같이 MAT 파일에 저장합니다.

save("initialAgent.mat","agent")
에이전트를 새 변수에 복사하면 새 변수도 항상 업데이트된 파라미터를 가진 가장 최근의 에이전트 버전을 가리킵니다. 핸들 객체에 대한 자세한 내용은 핸들 객체 동작 항목을 참조하십시오.

rlTrainingOptions 객체의 StopTrainingCriteriaStopTrainingValue 옵션에 지정한 조건이 충족되면 훈련이 자동으로 종료됩니다. 종료 조건에 이르기 전에 훈련을 종료하려면 강화 학습 에피소드 관리자에서 훈련 중지를 클릭하면 됩니다.

훈련이 종료되면 훈련 통계량과 결과가 trainResults 객체에 저장됩니다.

train은 각 에피소드가 끝날 때마다 에이전트를 업데이트합니다. 그리고 trainResults가 마지막 훈련 결과를 저장하며, 이와 함께 훈련 시나리오를 정확하게 재현하고 에피소드 관리자를 업데이트하기 위한 데이터를 저장합니다. 따라서 나중에 훈련이 중지된 바로 그 지점에서 훈련을 재개할 수 있습니다. 이렇게 하려면 명령줄에 다음을 입력하십시오.

trainResults = train(agent,env,trainResults);
그러면 이전 train 호출에서 얻은 훈련 결과 객체와 에이전트 파라미터의 마지막 값에서 훈련이 시작됩니다.

trainResults 객체는 훈련 옵션 세트를 지정하는 rlTrainingOptions 객체 opt를 속성 중 하나로 포함합니다. 따라서 업데이트된 훈련 옵션을 사용하여 훈련을 다시 시작하려면 먼저 trainResults에서 점 표기법을 사용하여 훈련 옵션을 변경하십시오. 이전 훈련 세션에서 이미 최대 에피소드 수에 이른 경우 최대 에피소드 수를 늘려야 합니다.

예를 들어 에피소드 관리자에서 훈련 진행 상황을 표시하는 것을 비활성화하고, 명령줄에서 훈련 진행 상황을 표시하도록 Verbose 옵션을 활성화하고, 최대 에피소드 수를 2000개로 변경한 다음, 훈련을 다시 시작합니다. 그러면 새 trainResults 객체가 출력값으로 반환됩니다.

trainResults.TrainingOptions.MaxEpisodes = 2000;
trainResults.TrainingOptions.Plots = "none";
trainResults.TrainingOptions.Verbose = 1;
trainResultsNew = train(agent,env,trainResults);

참고

훈련이 종료되면 agents는 최종 훈련 에피소드가 끝날 때의 각 에이전트 상태를 반영합니다. 연속 탐색이므로, 최종 에이전트가 획득한 보상이 반드시 훈련 중에 달성한 최고치가 아닐 수 있습니다. 훈련 중에 에이전트를 저장하려면, SaveAgentCriteriaSaveAgentValue 속성을 지정하여 rlTrainingOptions 객체를 만들고 이를 traintrainOpts 인수로 전달하십시오.

훈련 알고리즘

대개 훈련은 다음 단계에 따라 진행됩니다.

  1. 에이전트를 초기화합니다.

  2. 각 에피소드에 대해 다음을 수행합니다.

    1. 환경을 재설정합니다.

    2. 환경에서 초기 관측값 s0을 가져옵니다.

    3. 초기 행동 a0 = μ(s0)을 계산합니다. 여기서 μ(s)는 현재 정책입니다.

    4. 현재 행동을 초기 행동으로 설정하고(a←a0), 현재 관측값을 초기 관측값으로 설정합니다(s←s0).

    5. 에피소드가 완료되거나 종료되지 않는 동안 다음 단계를 수행합니다.

      1. 행동 a를 환경에 적용하고, 다음 관측값 s'' 및 보상 r을 구합니다.

      2. 환경 세트(s,a,r,s')에서 학습합니다.

      3. 다음 행동 a' = μ(s')을 계산합니다.

      4. 다음 행동으로 현재 행동을 업데이트하고(a←a'), 다음 관측값으로 현재 관측값을 업데이트합니다(s←s').

      5. 환경에 정의된 종료 조건이 충족되면 에피소드를 종료합니다.

  3. 훈련 종료 조건이 충족되면 훈련을 종료합니다. 그렇지 않으면 다음 에피소드를 시작합니다.

이러한 단계의 세부 수행 방식은 에이전트와 환경의 구성에 따라 다릅니다. 예를 들어 각 에피소드 시작 시 환경을 재설정하는 경우 환경에서 초기 상태 값이 무작위로 할당되도록 구성할 수 있습니다. 에이전트 및 훈련 알고리즘에 대한 자세한 내용은 강화 학습 에이전트 항목을 참조하십시오. 병렬 처리와 GPU를 사용하여 훈련 속도를 높이려면 Train Agents Using Parallel Computing and GPUs 항목을 참조하십시오.

에피소드 관리자

기본적으로 train 함수를 호출하면 강화 학습 에피소드 관리자가 열리고, 여기서 훈련 진행 상황을 시각화할 수 있습니다.

Episode manager window showing the completion of the training for a DQN agent on the predefined pendulum environment.

에피소드 관리자는 각 에피소드에 대한 보상(EpisodeReward)과 이동 평균 보상 값(AverageReward)을 플롯에 표시합니다.

크리틱을 사용하는 에이전트의 경우, 환경의 초기 관측값이 주어지면 에피소드 Q0은 각 에피소드가 시작할 시점에 추정한 감가 장기 보상입니다. 크리틱이 잘 설계되어 성공적으로 학습이 이루어지면, 훈련이 진행됨에 따라 에피소드 Q0은 평균적으로 실제 감가 장기 보상에 근접하게 되며, 이는 감가 때문에 EpisodeReward 값에서 오프셋된 값일 수 있습니다. 잘 설계된 크리틱이 감가되지 않은 보상(DiscountFactor1임)을 사용하는 경우에는 위 Figure에 표시된 것처럼 에피소드 Q0이 평균적으로 실제 에피소드 보상에 근접하게 됩니다.

에피소드 관리자에는 여러 에피스드와 훈련 통계량도 표시됩니다. train 함수를 사용하여 에피소드와 훈련 정보를 반환할 수도 있습니다. 강화 학습 에피소드 관리자를 끄려면 rlTrainingOptionsPlots 옵션을 "none"으로 설정하십시오.

후보 에이전트 저장하기

훈련 중에, rlTrainingOptions 객체의 SaveAgentCriteriaSaveAgentValue 옵션에 지정한 조건을 충족하는 후보 에이전트를 저장할 수 있습니다. 예를 들어 훈련 종료에 대한 전반적인 조건을 아직 충족하지 못하더라도 에피소드 보상이 특정 값을 초과하는 에이전트를 저장할 수 있습니다. 예를 들어 다음과 같이 에피소드 보상이 100보다 크면 에이전트를 저장할 수 있습니다.

opt = rlTrainingOptions(SaveAgentCriteria="EpisodeReward",SaveAgentValue=100);

train은 저장된 에이전트를 rlTrainingOptionsSaveAgentDirectory 옵션을 사용하여 지정한 폴더의 MAT 파일에 저장합니다. 저장된 에이전트는 장시간 실행되는 훈련 과정에서 생성된 후보 에이전트를 테스트하는 경우 등에 유용할 수 있습니다. 저장 기준 및 저장 위치에 대한 자세한 내용은 rlTrainingOptions 항목을 참조하십시오.

훈련이 완료되면 save 함수를 사용하여 MATLAB 작업 공간에서 훈련된 최종 에이전트를 저장할 수 있습니다. 예를 들어 다음과 같이 에이전트 myAgent를 현재 작업 디렉터리의 파일 finalAgent.mat에 저장할 수 있습니다.

save(opt.SaveAgentDirectory + "/finalAgent.mat",'agent')

기본적으로 DDPG 에이전트와 DQN 에이전트가 저장될 때 경험 버퍼 데이터는 저장되지 않습니다. 저장된 에이전트를 추가로 훈련시킬 계획이면 이전 경험 버퍼를 시작점으로 사용하여 훈련을 시작할 수 있습니다. 이 경우 SaveExperienceBufferWithAgent 옵션을 true로 설정합니다. 일부 에이전트(예: 큰 크기의 경험 버퍼와 영상 기반 관측값을 사용하는 에이전트)의 경우 경험 버퍼를 저장하는 데 많은 메모리가 필요합니다. 이러한 경우에는 저장된 에이전트에 충분한 메모리를 사용할 수 있어야 합니다.

훈련된 정책 검증하기

훈련된 에이전트를 검증하기 위해 sim 함수를 사용하여 훈련 환경 내에서 에이전트를 시뮬레이션할 수 있습니다. 시뮬레이션을 구성하려면 rlSimulationOptions 객체를 사용하십시오.

에이전트 검증 시 에이전트가 다음을 어떻게 처리하는지 확인하는 것이 좋습니다.

Parallel Computing Toolbox™가 있는 경우, 병렬 훈련에서와 마찬가지로 멀티코어 컴퓨터에서 다중 병렬 시뮬레이션을 실행할 수 있습니다. MATLAB Parallel Server™가 있는 경우 컴퓨터 클러스터 또는 클라우드 리소스에서 다중 병렬 시뮬레이션을 실행할 수 있습니다. 병렬 연산을 사용하도록 시뮬레이션을 구성하는 방법에 대한 자세한 내용은 rlSimulationOptionsUseParallelParallelizationOptions 항목을 참조하십시오.

환경 시각화

훈련 환경에서 plot 메서드를 구현한 경우 훈련과 시뮬레이션 중에 환경 동작을 시각화할 수 있습니다. 훈련 또는 시뮬레이션 전에 plot(env)(여기서 env는 환경 객체임)를 호출하면, 훈련 중에 시각화가 업데이트되므로 각 에피소드 또는 시뮬레이션의 진행 상황을 시각화할 수 있습니다.

병렬 연산을 사용하여 에이전트를 훈련시키거나 시뮬레이션할 경우 환경 시각화는 지원되지 않습니다.

사용자 지정 환경에서는 사용자가 직접 plot 메서드를 구현해야 합니다. plot 함수를 사용하여 사용자 지정 환경을 만드는 방법에 대한 자세한 내용은 클래스 템플릿에서 사용자 지정 환경 만들기 항목을 참조하십시오.

참고 항목

함수

객체

관련 예제

세부 정보