저번에는 A2C에 대해 공부했으니 이를 이용해서 나온 알고리즘인 DDPG를 공부한다.
DDPG는 이름에서 알 수 있게 policy를 determinitic 하게 고르는 방식의 알고리즘이다. 논문을 처음 봤을 때는 많은 수식 때문에 이해하기 어려웠는데 수업시간에서 배운 내용으로 정리해보려고 한다.
내 생각에는 DDPG 알고리즘 자체는 PPO나 SAC 알고리즘에 밀려서 SOTA 알고리즘은 아니지만 잠깐 Pick-and-Place 작업을 공부했을 때 Reinforcement Learning for Pick and Place Operations in Robotics: A Survey이라는 논문을 읽었는데
많은 사람들이 다른 알고리즘보다 DDPG 알고리즘을 더 많이 사용하고 있다는 것을 알았다. 아직 직접 사용해본 적은 없지만 DDPG는 어딘가에 내가 모르는 강점이 확실히 있다고 생각하며 DDPG에 관심을 가졌던 기억이 있다.
기존 ACTOR를 생각하면 Stochastic 한 action에서는 mu와 std를 출력으로 가우시안 분포를 만들어서 action을 sampling 하도록 진행했다. 하지만 DDPG에서는 ACTOR를 Deterministic 하게 만들어서 state가 입력으로 들어오면 action이 바로
정해지도록 만들어 버린다. 이렇게 만들 수 있었던 이유를 하나씩 정리해보자.
기존 objective 함수는 위와 같았다. 여기서 만약 policy가 deterministic 하다면 $u_t$를 $\pi_\theta (x_t)$형태로 바꿀 수 있다. 그리고 Q 함수와 V 함수가 같아지게 된다. 왜냐하면 Q 함수는 현재 state에서 어떠한 action의 가치를 추측하는 함수였는데 action이 deterministic 하므로 state가 정해지면 해당 action이 정해지기 때문이다.
첫 번째 사진을 보면 $V_0$를 구하는 식에 $V_1$이 들어가고 $V_1$에는 $V_2$가 들어가는 순환 구조를 볼 수 있다.
그리고 V 함수와 Q 함수가 같다는 것을 보였으니 objective 함수도 두 번째 사진처럼 바꿀 수 있다.
앞에서 정리한 내용들을 토대로 위와 같이 정의할 수 있다. DDPG는 off-policy이다.
DDPG는 4개의 네트워크를 사용한다. Actor와 Critic 네트워크와 DQN과 같이 target 네트워크를 사용한다.
이렇게 설정하면 3가지의 문제점이 생기는데 샘플 간의 상관관계, target이 불안정함, 약한 탐색능력이 문제가 된다. 따라서 각각 해결 방법을 제시했다.
먼저 샘플간의 상관관계를 줄이기 위해 DQN과 같이 experience replay buffer를 사용한다. 그리고 buffer에서 random sample을 사용한 데이터를 이용해서 학습을 진행한다. Critic 네트워크의 loss를 보면 기존과 같이 MSE 방법을 사용하는데 $y_i$는 TD를 사용한다.
불안정한 target을 해결하기 위해서 target 네트워크를 사용한다. DQN처럼 몇 step 마다 update 하는 방식이 아닌 soft update 방식을 채택해서 매 step마다 $\tau$만큼을 업데이트해준다.
마지막으로 탐색의 약한 모습을 해결하기 위해 가우시안 백색 noise를 매번 action에 더해줘서 탐색 능력을 향상한다.
다음은 Actor의 Loss이다. chain rule을 사용하여 objective 함수를 수정했고 간단하게 Q를 미분하는 Loss를 사용한다.
마지막에 - 가 붙은 이유는 tensor flow나 pytorch는 gradient descent 방식을 사용하므로 - 를 붙여서 gradient ascent 방식으로 변경한다.
DDPG의 의사결정 코드이다. 앞에서 정리한 내용을 순서대로 따라가면 어렵지 않게 이해할 수 있다.
https://github.com/KwanWooPark97/RL_basic
GitHub - KwanWooPark97/RL_basic
Contribute to KwanWooPark97/RL_basic development by creating an account on GitHub.
github.com
DDPG 또한 깃허브에 올려놨습니다. 책에 있는 코드를 가져왔기 때문에 이해하기 더 쉬울 것으로 생각합니다. 깃허브에 있는 코드들에 최대한 코멘트를 달아서 설명을 추가해보도록 하겠습니다.
다음에는 RL의 꽃 PPO 알고리즘을 다뤄보겠습니다.
'강화학습' 카테고리의 다른 글
Advantage Actor Critic (A2C) 정리 (0) | 2022.12.08 |
---|---|
Deep Q-Network(DQN) 공부하기 (0) | 2022.11.29 |
Q-learning (0) | 2022.11.07 |
SARSA (0) | 2022.11.03 |
Policy iteration and Value iteration (0) | 2022.11.02 |