Open utterances-bot opened 2 months ago
도움 많이 되었습니다!! 그런데 이해가 가지 않는 부분이 있는데, Importance Sampling을 사용하지 않고도 off-policy가 달성되는 이유가 뭔가요?
@asdfGuest 안녕하세요. 좋은 질문 감사드립니다. SAC가 off-policy actor-critic 알고리즘이기 때문에 critic network와 actor network 업데이트를 위한 목적함수가 있습니다. 두 경우를 나눠서 설명드리도록 하겠습니다. 그 전에 $(s, a, r, s')$을 replay buffer에서 샘플링한 transition이라고 하겠습니다. 여기서 행동 $a$는 어떤 behavior policy $\beta(\cdot|s)$에서 샘플링되었다고 하겠습니다.
Critic 네트워크 업데이트를 위한 TD learning
Actor 네트워크 업데이트를 위한 policy gradient (reparametrization 없는 policy gradient)
위 내용이 이해가 잘 안 되신다면, 조금 더 쉬운 경우인 DQN은 off-policy 알고리즘인데 왜 importance sampling을 하지 않을까에 대하여 고민해보시면 좋습니다. 우선, Q-learning의 목표는 optimal action value function을 근사하는 것입니다. 이를 위하여 다음 optimal action value function의 성질을 이용할 것입니다.
$$Q^{*}(s, a) = r + \gamma \mathbb{E}{S'\sim p(\cdot|s, a)} \left[ \max\{a'} Q^{*}(S', a') \right].$$
여기서 주목할 점은 우변 기댓값에서 확률변수 (random variable)는 $S'$ 밖에 없다는 것입니다. 그리고 $S'$은 현재 정책과 상관 없이 주어진 $(s, a)$에 대한 $p(\cdot|s, a)$에서 샘플링되는 것이고요. 한편, replay buffer 안의 $(s, a, r, s')$에서 $s'$이 딱 $p(\cdot|s, a)$에서 샘플링된 것이죠. 즉, 확률변수 $S'$의 관측값 $s'$을 정확히 갖고 있는 상황이라서 importance sampling이 필요 없습니다.
다시 DQN으로 돌아오자면, DQN에서는 Q-network $Q_\theta$을 정의하고, 모든 $(s, a)$에 대해서 위 등식에서 좌변을 우변으로 근사시키는 방식으로 Q-network를 업데이트시킵니다. 한편, replay buffer에서 샘플링한 transition $(s, a, r, s')$이라고 할 때, 행동 $a$는 behavior policy에 의해 만들어진 것이며, target policy인 행동가치함수에 대한 greedy policy이 만들어 낸 행동이 아닙니다.
하지만, 아래 업데이트 식에서 행동 $a$가 사용되는 부분은 행동가치함수의 입력값이기 때문에 target 정책을 따를 필요가 없습니다. 따라서 행동 $a$에 대해서는 importance sampling이 필요 없습니다. 그리고 다음 행동 $a'$은 정상적으로 greedy policy를 따라서 샘플링되었기 때문에 target 정책을 따르고 있습니다. 따라서 importance sampling을 적용하지 않아도 됩니다.
$$\sum{(s, a, r, s') \in \mathcal{D}}(r + \gamma \max{a'} Q(s', a') - Q(s, a))^2$$
지금까지는 행동 $a$에 대해서 importance sampling 해주지 않아도 된다고 말씀을 드렸습니다. 하지만, replay buffer 안에 저장된 $s$들의 분포와 현재 정책의 따랐을 때 만들어지는 상태들의 분포 $d^{\pi_\phi}$의 분포가 엄연히 다를 것입니다. 기댓값을 더 정확하게 근사하기 위해서는 상태 $s$들이 $d^{\pi_\phi}$을 따라야 하고, 그렇지 못하면 importance sampling을 해줘야 합니다. 하지만, replay buffer 안에 $s$의 분포나 $d^{\pi_\phi}$의 분포나 계산하는 것이 불가능하기 때문에 그 부분은 그냥 bias로 받아들이게 됩니다.
저는 개인적으로 CS285 Lec6의 3번 째 강의에서 이를 잘 설명하고 있다고 생각합니다.
자세한 답변 감사합니다! 말씀해주신 내용은 어느정도 이해한것 같은데, 추가로 궁금한 점이 있습니다. 제가 이해한 바로는 off-policy 알고리즘에서 q-function을 학습시킬때, 1-step td는 가능한데, GAE나 n-step td 같이 사전에 계산을 해놔야 하는 방법들은 타겟 q 값에 old policy가 관여(?)하니까 사용할 수 없는 건가요?
@asdfGuest GAE를 사용하는 것은 못 봤습니다. 하지만 $n$-step return은 DQN 계열 및 SAC 계열 모두에서 많이 사용됩니다. 다만, 이때는 제가 위에서 설명한 것들과 다르게 $n$-step trajectory가 모두 old policy로부터 생성된 것이고, 현재 정책의 것으로 바꿀 수도 없습니다. 따라서 importance sampling이 필요한 것이 맞습니다. 하지만 구현에서는 IS를 해주지 않습니다. 이론적 오류를 감수하고 사용하는 것 같습니다. ]
참고로 구현에서는 replay buffer 안에 데이터를 집어넣을 때, $(s_t, a_t, rt, s{t+1})$ 대신 queue 자료구조에 $n$개 trajectory를 유지하며 $(s_t, at, G{t:t+n}, s_{t+n})$을 저장하고, 이것을 데이터로 사용합니다.
[강화학습] Soft Actor-Critic 논문 리뷰 - 재야의 숨은 초보
[강화학습] Soft Actor-Critic 논문 리뷰
https://hiddenbeginner.github.io/rl/2022/11/06/sac.html