각 알고리즘의 구현에 사용되는 트릭의 수를 최소화하고, 유사한 알고리즘 간의 차이를 최소화. 제거된 트릭의 몇 가지 예는, 모든 알고리즘에서 observation 정규화뿐만 아니라 원래 Soft-Actor Critic 코드에 있던 regularization 항을 생략.
알고리즘 간의 차이를 제거한 예로, 유니티의 DDPG, TD3, SAC 구현은 모두 environment 상호작용의 고정된 간격 후에 gradient descent update를 실행하는 규칙을 따름. (하지만, 이 알고리즘의 다른 공개된 구현은 일반적으로 서로 약간 다른 접근 방식을 취하기 때문에 비교하기가 어렵다.)
모든 알고리즘은 대략 의도한 성능을 달성한다는 의미에서 "상당히 우수" 하지만 모든 task에 대해 논문에서 보고된 최상의 결과와 반드시 일치하지는 않는다.
Spinning Up package에 구현된 알고리즘
MLP(Multilayer Perceptron, ANN)인 actor-critics로 구현되어 있으며, Gym Mujoco 환경과 같은 fully-observed되어 있고, 이미지가 아닌 state 기반의 강화 학습 환경에 적합
Vanilla Policy Gradient가 가장 기본적이며, 왜냐하면 deep RL의 등장보다 먼저 나왔기 때문에 deep RL 공간에서 입문 알고리즘이다. Vanila Policy Gradient의 핵심 요소가 80년대 후반에서 90년대 초반으로 거슬러 올라간다. 궁극적으로 더 강력한 알고리즘인 TRPO와 PPO 순서로 이끄는 연구의 시초가 되었다.
여기서 중요 핵심 기능은 이 알고리즘은 on-policy이다. 즉, 오래된 data를 쓰지 않아서 sample의 효율성이 떨어진다. 하지만 좋은점도 있는데, 알고리즘이 관심 있는 목표인 policy performance를 직접 최적화하며, update를 계산하려면 on-policy data가 필요하다는 사실을 수학적으로 계산한다. 이러한 종류 알고리즘은 안정성을 위해 sample 효율성을 포기한다. 하지만 VPG에서 TRPO, PPO로의 진전은 sample 효율성의 부족분을 보충한다.
DDPG는 VPG와 비슷하게 기초적인 알고리즘이다. 더 determinsitc policy gradients의 이론은 DDPG로 이끈다. 비록 훨씬 더 최근 이론이지만, Deterministic Policy Gradients 이론은 2014년에야 발표되었으며, 이로 인해 DDPG가 탄생하게 되었다. DDPG는 Q-learning 알고리즘과 밀접하게 연결되어 있으며, Q-function와 policy을 동시에 학습하면서 서로를 개선하도록 update한다.
DDPG과 Q-Learning과 같은 알고리즘은 off-policy이다. 효율적으로 old data를 재사용한다. optimality(최적성)을 위한 최적 Bellman 방정식을 이용함으로써 이 이점을 가지고 Q-function은 어떤 env의 interaction data를 사용하여 만족하기 위해 학습된다 (env에서 큰 reward 영역에서 충분한 경험을 하는 한)
그러나 의심스럽게, Bellman 방정식을 만족하는 것이 좋은 policy 성능으로 이어진다는 보장이 없다. 경험적으로 좋은 성능을 얻을 수 있으며, 그 경우 sample 효율성은 훌륭하지만 보장의 부재이 없기 때문에 이러한 부류의 알고리즘은 잠재적으로 취약하고 불안정할 수 있다.
TD3와 SAC는 DDPG의 파생형태이고 이러한 issue를 완화하기 위해 다양한 insight를 적용했다.
actor_critic 함수에 알고리즘 함수를 인수로 넣어서 actor-critic PyTorch 모듈 구성간결하게, RL은 agent와 시도와 에러에 의해 어떻게 배우는지 연구하는 것이다. 이를 idea로 형식화하면 agent의 행동에 보상을 주고 벌을 주는 것이 앞으로 그행동을 더 많이 하거나 아예 안할 가능성이 커지도록 한다.
RL에서 주요 요소는 agent와 env이다. env는 agent가 살아가면 인터랙션하는 world이다. interaction 매 순간마다, agent는 world의 state를 관찰하고(부분적으로도) 얻기 위해 action을 결정한다. agent가 그 action을 취하면 env는 변화하고, 하지만 스스로를 바꾼다.
agent는 env에서 reward 신호를 인식하고, 현재 world state가 얼마나 좋은지 나쁜지를 숫자로 알 수 있다. agent의 목표는 누적된 reward(return)을 최대화하는 것이다. RL 기법은 agent가 해당 목표를 달성하기 위해 행동을 배우는 것이다.
(state): world의 state의 완전한 기술. world에 대해 state에서 숨긴 정보는 없다.
(observation): state의 부분적 기술. 생략된 정보
deep RL에서, 거의 항상 state와 observation을 real-valued vector, matrix, 고차원 tensor로 표현한다. ex) visual observation은 RGB matrix, robot은 joint 각도와 속도
agent가 env의 완전한 state를 관찰할 수 있다면, 이 env를 fully observed.
agent가 env를 부분적으로 observation만 볼 수 있으면, env를 partially observed.
RL 표기법은 state의 symbol로 를 사용하는데, 곳곳에서 observation, 로 표기하는게 기술적으로 더 적절하다. 특히, action을 agent가 어떻게 결정하는지에 대해 얘기할 때 그렇다. 종종 표기법에 signal을 주며 action이 state에 대해 조건부라는 것을 실제에서는 action은 observation에 대해 조건부이다. 왜냐하면 agent는 state에 접근할 수 없기 때문에.
다른 env들은 다른 종류의 action이 가능하다. 주어진 env에서 유효한 모든 action들은 action space라고 부른다.
Atari나 Go는 discrete action spaces agent가 가능한 이동이 유한적인 경우
다른 env, robot이나 현실에서는 continous action space를 이용한다.
continous space에서 action들은 real-valued vector이다.
이러한 구별은 deep RL에서 꽤 난해한(pro-found) 결과를 가진다. 몇몇 알고리즘 종류들은 한 경우에만 직접 적용될 수 있는데, 다른 경우에는 상당 부분 재작업해야 한다.
policy는 agent가 어떤 action을 취할지 결정하는 규칙.
policy가 본질적으로 agent의 뇌이다. policy를 agent를 대체하는 것은 흔하지 않지만. 즉 policy가 reward를 최대화하도록 노력한다.
deep RL에서, parameterized policies(매개변수화된 정책)을 다루는데, 설정한 parameter(nn의 weight와 bias)에 의존한 계산가능한 함수로써 출력값을 내놓는 policies들을 다룬다. 이는 몇 최적화 알고리즘을 통해 action을 바꾸는 것을 조정할 수 있다.
이 policy의 parameter를 , 로 표현할 수 있는데, policy 기호로 아래 기입할 수 있다.
pi_net = nn.Sequential(
nn.Linear(obs_dim, 64),
nn.Tanh(),
nn.Linear(64, 64),
nn.Tanh(),
nn.Linear(64, act_dim)
)
이는 MLP network에서 64 크기의 hidden layer 2개와 tanh 활성화 함수로 구성되는데, obs가 numpy array인데 observations의 batch를 포함한다면, pi_net은 batch의 action을 얻는데 사용될 수 있다.
obs_tensor = torch.as_tensor(obs, dtype=torch.float32)
actions = pi_net(obs_tensor)
deep RL에서 stochastic policies의 가장 흔한 종류는 2가지가 있는데
stochastic policies를 사용과 학습에 있어 2가지 핵심 계산이 중요하다.
1. policy로부터 action들을 sampling하기
2. 특정 action에 대한 log likelihood(가능도)를 계산
Categrocial Policies
discrete action들을 classifier하는 것이다.
categorical policy를 classifier와 같은 방법으로 neural network를 구성
input은 observation이며, 몇개의(convolution and dense) layer가 따라온다. 그 후 마지막 fc layer를 통해 각 action에 대응되는 숫자(logit)으로 준다. 이 때 logit를 확률로 변환하는 softmax 함수가 따른다.
Sampling