Abstract
DQN을 연속 action domain에 적용했음. Deterministic policy gradient를 연속공간에서 사용할수 있는 actor-critic, model-free 알고리즘을 개발했음. 20여개의 물리 태스크에서(카트폴, 스윙 등) 잘 동작함. Policy를 찾는 알고리즘이고 역시 raw input 사용해서 end to end로 policy를 직접 학습한다
Introduction
DQN으로 잘했는데, DQN은 높은 차원의 탐색 Observation spaces를 고작 여러개의 low demensinal action space로 바꾸는것 밖에 하지 못함. 각종 물리 조작은 연속적인, Hign dimensional action space이다.
예를들면 사람팔은 7개의 관절이 있고, 각 관절마다 3개의 값만 가진다고 가정해도 action space는 2의 7승 = 2187개가 된다. Action space가 커지면 DQN을 성공적으로 훈련시키기 어렵고, 더군다나 Action space를 제한하는것도 뭔가 정보를 버리는 형태라 많은 문제를 야기 시킬수도 있다.
그래서 off-Policy actor-critic 알고리즘을 DL을 사용하여 근사시키는 방법을 제안한다.
강화학습 이론에서 Policy gradient를 하는 방법이 3가지가 있음(David silver교수님)
전(DQN논문)까지는 Value Function 을 DL로 근사 시켰는데, 이제는 Policy를 근사하는 DL을 만들예정
Policy를 직접 근사 시키는 방법이 좋은 이유는?
– 기존에 비해 더 수렴이 잘되며
– Action space가 여러개이거나 Continuous할때 효과적이고
– Stochastic한 Policy를 배울수 있음
하지만
– local minima에 빠질수 있고
– policy를 평가하는게 비효율적이고, variance가 높다.
기존에 학습했던(DQN)의 아이디어 2개(replay-buffer)와 Target Network를 그대로 사용하고, 추가적으로 Batch Norm을 적용했다.
여러 영역 문제에 적용했고, Deep DPG(DDPG)라 불리고, 잘 동작하였다.
BackGround
강화학습의 기본배경지식
환경 enviroment : E, S = state, A = action
Policy : 내가 state를 보고 어떤 action을 취할것인가? 가 policy임
Policy는 2가지가 있다.(Deterministic, stochastic)
그래서 Action-value function을 return값을 구하는 펑션 return값은 RL에서 현재 state에서 얻을수 있는 미래의 reward의 합
Q는 어떤 State에서 Action을 취했을때 나오는 값의 합이고,
Action을 취할때는 policy가 필요하므로(아래의 식에서는 stochastic policy)를 사용했다.
Q값을 정의하는 수식이 많이 있는데 아래는 salsa방법으로 정리한 수식이다.
Salsa는 Q값을 업데이트 하기 위해 S0 -> A0 -(r)-> S1->A1이 다 필요한 방법(추후 정리 필요)
만약 policy가 Deterministic하면 뒤의 E가 사라지므로 DQN이 된다.
뒤에 policy 파이가 뮤로(deterministic policy) 바뀌면 뮤(St+1)을 넣으면 action이 결정되기 때문에 DQN과 같아진다.
그래서 DQN을 다시 정리하면 loss는 Q function으로 부터 나온 Target값과 Y값을 mse loss로 계산
Y값은 현재상태의 reward와 다음상태의 Q function을 더한 값이고,
Q fuction이 2개가 있는데 Target Network를 주기적으로 복사를 해서 쓴것이 DQN이다.
여기까지가 복습
ALGORITHM
바로 DQN은 continuous action spaces에 적용이 불가능하고, 그래서 actor-critic 알고리즘을 적용해봄
Critic 비평가는 Q function이고(DQN의 Q funtion)
Actor Network는 Policy Network이고, 뭔가 체인룰에 의해서 곱으로 분리된 형태로 업데이트 된다.
Policy network도 미래의 Q값을 최대화 하는 방향으로 가야 하기 때문에 미분값을 구해야 하고 논문에서는 세타로 바로 미분하는게 아니고 체인룰로 액션으로 먼저 미분하고 세타로 다시 미분한다.
Critic Network는 DQN과 동일하게 y를 구한후 mse로 Backpropergation하면 되고,
Actor Network는 y값이 Q(s,a)로 구해지므로 y값을 바로 Backpropergation을 할수가 없음
Actor Network에서 나오는 값이 a (action)이니깐
그래서 a에 대한 Q의 변화량을 먼저 구하기 위해 체인룰을 통해 a로 먼저 미분하고, 나온값으로 Backprop을 한다고 추정(코드를 보고 싶다)
논문의 이 이 다음부터는 DQN에 이야기가 반복됩
replay buffer를 사용해서 data를 independant하게 만들고,
원래는 TargetNetwork을 적당한 epoch 복사했는데, 값을 줘서 조금씩 계속 업데이트하게 바꿨고(Soft update target network)
DDPG Deterministic하기 때문에 exploration을 다른 곳을 하게 해주기 위해 Noise N을 추가 했다.
그래서 알고리즘을 종합하면 아래와 같다.
– critic network와 actor network를 초기화하고
– target network에 복사해주고
– replay buffer 초기화해주고
– loop 시작
– 랜덤으로 action을 선택해 탐험하고
– 그로부터 상태 state1 s1을 받고
– St의 상태에서 policy u에 의해 At 액션을 선택하고
– At 액션으로부터 reward Rt를 받고 상태는 S t+1로 변경된다.
– 앞서 이야기한 Q fuctnion은 4가지 값(St, at, rt, St+1)로 인해 update되므로 replay buffer에 담고
– 많이 담겼으면 replay byffer에서 N개의 minibatch를 가져오고
– 가져온것으로 target값을 계산하고,
– 그 targer값으로 critic(Q function) 업데이트 하고,
– 정체모를식으로 actor Netowork를 업데이트 하고,
– target network를 가중치를 줘서 update update를 한다.
Results
거의 모든 경우에서, Low demension 과 continuous action space에서 전부 잘됨
후기
critic network는 어떻게 훈련시키는지 알겠는데 actor network는 어떻게 훈련 시키는지 모르겠음
추후 코드를 보면서 이해가 필요함