Main Content

SAC(Soft Actor-Critic: 소프트 액터-크리틱) 에이전트

SAC(소프트 액터-크리틱) 알고리즘은 모델이 주어지지 않은(model-free) 온라인 방식의 오프-폴리시 액터-크리틱 강화 학습 방법입니다. SAC 알고리즘은 장기 기대 보상과 정책의 엔트로피를 모두 최대화하는 최적의 정책을 계산합니다. 정책 엔트로피는 주어진 상태에서 정책의 불확실성 정도를 나타내는 지표입니다. 엔트로피 값이 높을수록 더 많은 탐색이 이루어집니다. 기대되는 누적 장기 보상과 엔트로피 둘 다를 최대화하면 환경에 대한 활용(exploitation)과 탐색(exploration) 간에 균형을 맞추는 데 도움이 됩니다.

다양한 유형의 강화 학습 에이전트에 대한 자세한 내용은 강화 학습 에이전트 항목을 참조하십시오.

Reinforcement Learning Toolbox™의 SAC 에이전트 구현은 2개의 Q-값 함수 크리틱을 사용하며, 이를 통해 가치 함수의 과대 추정을 방지합니다. 다른 SAC 알고리즘 구현에서는 추가적인 가치 함수 크리틱이 사용됩니다.

다음과 같은 관측값 공간과 행동 공간이 있는 환경에서 SAC 에이전트를 훈련시킬 수 있습니다.

관측값 공간행동 공간
이산 또는 연속연속

SAC 에이전트는 다음 액터와 크리틱을 사용합니다.

크리틱액터

rlQValueFunction을 사용하여 만드는 Q-값 함수 크리틱 Q(S,A)

rlContinuousGaussianActor를 사용하여 만드는 확률적 정책 액터 π(S)

훈련 중에 SAC 에이전트는 다음을 수행합니다.

  • 학습하는 동안 규칙적인 간격으로 액터 및 크리틱 속성을 업데이트합니다.

  • 연속 행동 공간에 대해 가우스 확률 분포의 평균과 표준편차를 추정한 다음, 그 분포를 기반으로 행동을 무작위로 선택합니다.

  • 기대 리턴값과 정책 엔트로피의 균형을 맞추는 엔트로피 가중치 항을 업데이트합니다.

  • 순환 경험 버퍼를 사용하여 과거의 경험을 저장합니다. 에이전트는 버퍼에서 무작위로 샘플링된 경험 미니 배치를 사용하여 액터와 크리틱을 업데이트합니다.

에이전트의 UseExplorationPolicy 옵션이 false로 설정된 경우, simgeneratePolicyFunction에는 항상 최대가능도를 갖는 행동이 사용됩니다. 따라서 시뮬레이션되는 에이전트와 생성되는 정책은 결정적으로 동작합니다.

UseExplorationPolicytrue로 설정된 경우, 에이전트는 확률 분포에서 샘플링하여 행동을 선택합니다. 따라서 정책은 확률적이며 에이전트는 관측값 공간을 탐색합니다.

이 옵션은 시뮬레이션과 배포에만 영향을 미치고 훈련에는 영향을 미치지 않습니다.

액터 및 크리틱 함수 근사기

정책과 가치 함수를 추정하기 위해 SAC 에이전트는 다음과 같은 함수 근사기를 관리합니다.

  • 확률적 액터 π(A|S;θ) — 액터는 파라미터 θ를 사용하면서 상태 S에 있을 때 각 연속 행동 A를 취할 조건부 가우스 확률의 평균 및 표준편차를 출력합니다.

  • 하나 또는 두 개의 Q-값 크리틱 Qk(S,A;ϕk) — 크리틱은 각각 파라미터 ϕk를 사용하면서 관측값 S와 행동 A를 입력값으로 받고 가치 함수의 기대치를 반환하며 여기에는 장기 보상과 엔트로피가 둘 다 포함됩니다.

  • 하나 또는 두 개의 타깃 크리틱 Qtk(S,A;ϕtk) — 최적화의 안정성을 높이기 위해 에이전트는 주기적으로 타깃 크리틱 파라미터 ϕtk를 해당하는 최신 크리틱 파라미터 값으로 설정합니다. 타깃 크리틱 개수는 크리틱 개수와 일치합니다.

두 크리틱 Q1(S,A;ϕ1)과 Q2(S,A;ϕ2)를 사용하는 경우 각 크리틱이 서로 다른 구조를 가질 수 있습니다. 크리틱의 구조가 동일한 경우 초기 파라미터 값이 서로 달라야 합니다.

각 크리틱 Qk(S,A;ϕk)와 대응되는 타깃 크리틱 Qtk(S,A;ϕtk)는 동일한 구조와 파라미터화를 가져야 합니다.

함수 근사를 위해 액터와 크리틱을 만드는 방법에 대한 자세한 내용은 Create Policies and Value Functions 항목을 참조하십시오.

훈련이 진행되는 동안 에이전트는 θ의 파라미터 값을 조정합니다. 훈련 후에 파라미터는 조정된 값으로 유지되고 훈련된 액터 함수 근사기는 π(A|S)에 저장됩니다.

행동 생성

SAC 에이전트의 액터는 평균 및 표준편차 출력값을 생성합니다. 행동을 선택하기 위해 액터는 먼저 이들 파라미터를 갖는 가우스 분포에서 행동을 제한 없이(비유계) 무작위로 선택합니다. 훈련 중에 SAC 에이전트는 이 비유계 확률 분포를 사용하여 주어진 관측값에 대한 정책의 엔트로피를 계산합니다.

SAC 에이전트가 제한이 설정된(유계) 행동을 생성해야 하는 경우에는 액터가 가우스 분포에서 샘플링된 비유계 행동에 tanh스케일링 연산을 적용하여 유계 행동을 생성합니다.

Generation of a bounded action from an unbounded action randomly selected from a Gaussian distribution

에이전트 생성

MATLAB® 명령줄에서 또는 강화 학습 디자이너 앱을 사용하여 SAC 에이전트를 만들고 훈련시킬 수 있습니다. 강화 학습 디자이너를 사용하여 에이전트를 만드는 방법에 대한 자세한 내용은 Create Agents Using Reinforcement Learning Designer 항목을 참조하십시오.

명령줄에서 환경의 관측값 사양과 행동 사양을 기반으로 디폴트 액터와 크리틱을 사용하는 SAC 에이전트를 만들 수 있습니다. 이렇게 하려면 다음 단계를 수행하십시오.

  1. 환경에 대한 관측값 사양을 만듭니다. 환경 인터페이스 객체가 이미 있는 경우 getObservationInfo를 사용하여 이러한 사양을 가져올 수 있습니다.

  2. 환경에 대한 행동 사양을 만듭니다. 환경 인터페이스 객체가 이미 있는 경우 getActionInfo를 사용하여 이러한 사양을 가져올 수 있습니다.

  3. 필요한 경우, 각 학습 가능한 계층의 뉴런 개수를 지정하거나 순환 신경망을 사용할지 여부를 지정합니다. 이렇게 하려면 rlAgentInitializationOptions를 사용하여 agent initialization option 객체를 만드십시오.

  4. 필요한 경우, rlSACAgentOptions 객체를 사용하여 에이전트 옵션을 지정합니다.

  5. rlSACAgent 객체를 사용하여 에이전트를 만듭니다.

또는, 액터와 크리틱을 만들고 이러한 객체를 사용하여 에이전트를 만들 수 있습니다. 이 경우 액터와 크리틱의 입력 차원, 출력 차원이 환경의 대응하는 행동 사양, 관측값 사양과 일치하도록 해야 합니다.

  1. rlContinuousGaussianActor 객체를 사용하여 확률적 액터를 만듭니다. SAC 에이전트의 경우 평균값들을 원하는 행동 범위로 적절히 스케일링하려면, 액터 신경망은 평균값들의 출력 경로에 마지막 두 계층으로 tanhLayerscalingLayer를 포함하면 안 됩니다. 그러나 표준편차 값들의 비음(non-negativity)을 보장하기 위해서는 액터 신경망은 표준편차 값들의 출력 경로에 reluLayer를 마지막 계층으로 포함해야 합니다.

  2. rlQValueFunction 객체를 사용하여 크리틱을 하나 또는 두 개 만듭니다.

  3. rlSACAgentOptions 객체를 사용하여 에이전트 옵션을 지정합니다.

  4. rlSACAgent 객체를 사용하여 에이전트를 만듭니다.

함수 근사를 위해 액터와 크리틱을 만드는 방법에 대한 자세한 내용은 Create Policies and Value Functions 항목을 참조하십시오.

훈련 알고리즘

SAC 에이전트는 다음 훈련 알고리즘을 사용하는데, 이 알고리즘은 액터 모델과 크리틱 모델, 엔트로피 가중치를 주기적으로 업데이트합니다. 훈련 알고리즘을 구성하려면 rlSACAgentOptions 객체를 사용하여 옵션을 지정하십시오. 여기서 K = 2는 크리틱 개수이고 k는 크리틱 인덱스입니다.

  • 임의의 파라미터 값 ϕk로 각 크리틱 Qk(S,A;ϕk)를 초기화하고, 동일한 임의의 파라미터 값으로 각 타깃 크리틱을 초기화합니다. ϕtk=ϕk.

  • 임의의 파라미터 값 θ로 액터 π(S;θ)를 초기화합니다.

  • π(S)의 초기 무작위 정책에 따라 일련의 행동을 취해 웜 스타트를 수행합니다. 각 행동에 대해 경험을 경험 버퍼에 저장합니다. 워밍업 행동의 수를 지정하려면 NumWarmStartSteps 옵션을 사용하십시오.

  • 각 훈련 시간 스텝에 대해 다음을 수행합니다.

    1. 현재 관측값 S에 대해 π(S;θ)의 정책을 사용하여 행동 A를 선택합니다.

    2. 행동 A를 실행합니다. 보상 R과 다음 관측값 S'을 관측합니다.

    3. 경험 (S,A,R,S')을 경험 버퍼에 저장합니다.

    4. 경험 버퍼에서 M개의 경험 미니 배치(Si,Ai,Ri,S'i)를 무작위로 샘플링합니다. M을 지정하려면 MiniBatchSize 옵션을 사용하십시오.

    5. 매 DC 시간 스텝마다, 모든 샘플링된 경험에 걸쳐 손실 Lk의 최소화를 통해 각 크리틱의 파라미터를 업데이트합니다. DC를 지정하려면 LearningFrequency 옵션을 사용하십시오.

      Lk=12Mi=1M(yiQk(Si,Ai;ϕk))2

      S'i가 종료 상태인 경우 가치 함수 타깃 yi는 경험 보상 Ri와 동일합니다. 그 외의 경우에는 가치 함수 타깃은 Ri, 크리틱에서 반환된 최소의 감가된 미래 보상, 가중 엔트로피의 합입니다.

      yi=Ri+γ*mink(Qtk(Si',Ai';ϕtk))αlnπ(Si';θ)

      여기서 각 요소는 다음과 같습니다.

      • A'i는 제한이 설정된(유계) 행동으로, 액터 π(S'i)의 제한 없는(비유계) 출력값으로부터 도출됩니다.

      • γ는 감가 인자로, DiscountFactor 옵션을 사용하여 지정합니다.

      • αlnπ(S;θ)는 상태 S에 있을 때 액터의 유계 출력값에 대한 가중 정책 엔트로피입니다. α는 엔트로피 손실 가중치이며 EntropyLossWeight 옵션을 사용하여 지정합니다.

      NumStepsToLookAhead의 값을 N과 같도록 지정할 경우, N-스텝 리턴값(그다음 N개 스텝의 보상에 N번째 보상의 원인이 된 상태에 대한 감가 추정값을 더한 값)이 타깃 yi를 계산하는 데 사용됩니다.

    6. 매 DA 시간 스텝마다 다음 목적 함수를 최소화하여 액터 파라미터를 업데이트합니다. DA를 설정하려면 LearningFrequencyPolicyUpdateFrequency 옵션을 모두 사용하십시오.

      Jπ=1Mi=1M(mink(Qk(Si,Ai;ϕk))+αlnπ(Si;θ))

    7. 매 DA 시간 스텝마다 다음 손실 함수를 최소화하여 엔트로피 가중치도 업데이트합니다.

      Lα=1Mi=1M(αlnπ(Si;θ)α)

      여기서 ℋ는 타깃 엔트로피로, EntropyWeightOptions.TargetEntropy 옵션을 사용하여 지정합니다.

    8. 매 DT 스텝마다 타깃 업데이트 방법에 따라 타깃 크리틱을 업데이트합니다. DT를 지정하려면 TargetUpdateFrequency 옵션을 사용하십시오. 자세한 내용은 타깃 업데이트 방법 항목을 참조하십시오.

    9. 4~8단계를 NG회 반복합니다. 여기서 NG는 기울기 스텝의 수이며 NumGradientStepsPerUpdate 옵션을 사용하여 지정합니다.

타깃 업데이트 방법

SAC 에이전트는 다음 타깃 업데이트 방법 중 하나를 사용하여 타깃 크리틱 파라미터를 업데이트합니다.

  • 평활화 — 평활화 인자 τ를 사용하여 매 시간 스텝마다 타깃 크리틱 파라미터를 업데이트합니다. 평활화 인자를 지정하려면 TargetSmoothFactor 옵션을 사용하십시오.

    ϕtk=τϕk+(1τ)ϕtk

  • 주기적 — 평활화하지 않고 타깃 크리틱 파라미터를 주기적으로 업데이트합니다(TargetSmoothFactor = 1). 업데이트 주기를 지정하려면 TargetUpdateFrequency 파라미터를 사용하십시오.

    ϕtk=ϕk

  • 주기적 평활화 — 평활화를 사용하여 타깃 파라미터를 주기적으로 업데이트합니다.

타깃 업데이트 방법을 구성하려면 rlSACAgentOptions 객체를 만들고, 다음 표에 표시된 대로 TargetUpdateFrequency 파라미터와 TargetSmoothFactor 파라미터를 설정하십시오.

업데이트 방법TargetUpdateFrequencyTargetSmoothFactor
평활화(디폴트 값)11보다 작음
주기적1보다 큼1
주기적 평활화1보다 큼1보다 작음

참고 문헌

[1] Haarnoja, Tuomas, Aurick Zhou, Kristian Hartikainen, George Tucker, Sehoon Ha, Jie Tan, Vikash Kumar, et al. "Soft Actor-Critic Algorithms and Application." Preprint, submitted January 29, 2019. https://arxiv.org/abs/1812.05905.

참고 항목

객체

관련 예제

세부 정보