이전 포스터에 이어서 Asynchronous Advantage Actor-Critic :A3C를 알아보겠습니다!
이번 포스터에는 Advantage부분을 집중해서 알아보겠습니다.
Critic network에서 ad ft(=Qft - Vft)을 사용하는데 Q ft을 그대로 사용하는 것이 아닌 n-step return Gt(n)을 사용한다는 것 입니다. 이렇게 하여 네트워크 사용 하나를 줄입니다.
policy gradient에서는 목적함수로 total reward를 사용했습니다.
하지만 이론적으로는 Gt를 사용했지만, 앞으로 얻을 reward를 고려하고 멀리있는 것은 값을 낮추는 discounted return을 사용했습니다.
: 이것의 역할은 현재 action이 얼마나 좋은지를 따져 얼마나 다가가게 하는지 입니다.
여기서는 이 return 대신 ad ft을 사용한다는 것 입니다.
Q ft은 state에서 action을 취했을 때 얻을 수 있는 return의 expectation이었고, state value ft은 모든 action에 대한 return의 expectation이었습니다. ad>0이면 이 때 쓴 action이 평균보다 좋다는 의미입니다. 따라서 단순한 return보다는 좋은 정보를 갖고 있습니다. 하지만 이 ad ft을 사용하려면 네트워크가 두 개가 필요합니다.
따라서 Q ft을 n-step return Gt(n)으로 사용합니다. 이렇게 네트워크 하나만 만들게 변경합니다. n이 커질 수록 gradinet variance가 더 커집니다. 이 n을 가지고 flexible 하게 조절할 수 있다는 장점이 있습니다. 이렇게 boostrapping의 degree를 flexible하게 조절합니다.
이제 A3C알고리즘의 수도코드를 보겠습니다. 여기서는 work agent 한 개에 대한 수도코드입니다.
우선 global network의 actor net Θ , critic net Φ 가 있습니다.
accumulated gradient를 계산하기 위해 dΘ, dΦ 를 사용합니다.
global net의 parameter를 copy합니다.
st에서 시작할 때, terminal이면 멈추고 tmax까지 왔으면 멈추게 해줍니다.
이렇게 반복하며 길이가 tmax인 trajectory segment를 얻습니다. 이것이 앞으로 학습하게 될 샘플 데이터입니다.
이제 파라미터를 업데이트 하기 위해 우선 n-step return Gt(n)를 구해줍니다.
이전에 사용했던 방법과 같이 감마를 누적으로 곱해주기 위해 맨 뒤에서 부터 t-1 ~ start로 진행합니다.
이를 통해 tmax만큼 accumulated gradient를 계산해줍니다.
global net의 파라미터에 step size를 곱하여 accumulated gradient를 더하고 빼줍니다. 이렇게 asynchronoisly하게 update를 합니다.
policy의 softmax를 취해 action을 하나 고를 수 있습니다. weigh share을 통해 CNN net까지는 공유하고 이후에 분리할 수도 있습니다.
A2C는 sysnchronous를 사용합니다.
용도의 차이를 구분하며, 각 상황에 맞게 적용해야 합니다.
우선 A3C는 각 worker agent들이 asysnchronous하기에 각기 다른 policy로 시작하게 됩니다.
하지만 이렇게 되면 종종 optimal 이 아닌 경우가 생깁니다.
A2C는 이런 inconsitency를 해결하기 위해 sysnchronous하게 weight를 update합니다.
각 agent들이 학습이 다 끝난 후 accumulated graident를 모아서 update합니다. 그런 후 각 agent들이 모두 같은 weight값을 가진 후 시작합니다. 그렇기에 training이 더 응집력(cohesive)있고, 속도도 같은 policy를 갖고 시작하기에 빠릅니다.
참고로 A2C가 GPU를 더 효율적으로 사용하고 batch size가 클 때 효율적으로 작용한다는 점이 있습니다.
고려대학교 오승상 교수님 강화학습 : https://www.youtube.com/watch?v=spAnltgCRY8