Jekyll2021-06-16T10:16:58+09:00https://sylim2357.github.io/feed.xml펭긴새’s LyfLyf펭긴새sylim2357@gmail.com[Paper Review] Reinforcement Learning and Control as Probabilistic Inference: Tutorial and Review2021-01-18T00:00:00+09:002021-01-18T08:00:00+09:00https://sylim2357.github.io/paper%20review/rl-as-inference<p>제발 틀린거 있으면 피드백 주세요.</p>
<p>Arxiv <a href="https://arxiv.org/abs/1805.00909">링크</a></p>
<p>Levine이 쓴 리뷰논문. 강화학습의 제어문제를 확률적 추론 문제로 해결하는 방법을 보여주었다. Soft Q-Learning이나 Soft Actor-Critic 모두 확률적 추론 프레임워크 하에서 아주 자연스럽게 정의되는 알고리즘임을 알 수 있다. Levine이 진행하는 UC Berkeley의 CS285 19강에서도 같은 내용을 다루고 있어서 논문과 해당 학습자료를 참고하여 리뷰글을 작성한다. 기가 맥힌다. 시작.</p>
<h1 id="introduction">Introduction</h1>
<p>강화학습 문제에서 시스템을 확률 그래프 모델로 표현할 수 있긴 하지만 그 확률 그래프 모델에서 추론을 진행하는 것 자체는 강화학습 문제를 푸는 것으로 연결되지 않는다. 보상의 개념이 외생변수로 취급되기 때문이다. 이 논문에서는 보상의 개념을 확률 그래프 모델에 포함하여 정책을 찾아내는 것을 추론 문제로 정의할 수 있게 하였다. 이러한 형태로 정의한다면 강화학습 문제를 일반화한 최대 엔트로피 강화학습 문제가 된다. 또한, 이 문제를 푸는 것은 결정적인 시스템에서는 exact 확률 추론과 동치이고 확률적인 시스템에서는 변분적 추론과 동치임을 보였다.</p>
<h1 id="the-decision-making-problem-and-terminology">The Decision Making Problem and Terminology</h1>
<p>먼저 강화학습에서 쓰이는 용어 정리이다. 상태를 \(\bold{s}\in\mathcal{S}\)로, 행동을 \(\bold{a}\in\mathcal{A}\)로 표현하고, 시스템의 역학 정보를 \(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\)로(상태 \(\bold{s}_t\)에서 행동 \(\bold{a}_t\)를 취했을 때 \(\bold{s}_{t+1}\)로 전이할 확률) 표현한다. 유한 시간 MDP를 고려하자. 보상함수는 \(r(\bold{s}_t,\bold{a}_t)\)라고 표기하고, 이 강화학습 문제를 푼다는 것은 기대 보상을 최대화하는 정책을 찾는 것, 또는 이 정책의 파라미터를 찾는 것으로 정의한다. 정책은 \(p(\bold{a}_{t}\mid\bold{s}_t,\theta)\)라고 표기한다. 상태 \(\bold{s}_t\)에서 \(\theta\)라는 파라미터로 정의된 함수가 알려주는 상태 \(\bold{a}_t\)를 취할 확률이다. 강화학습 문제를 푸는 것은 아래와 같이 표기할 수 있다.</p>
\[\theta^\star=\arg\underset{\theta}{\max}\sum\limits^T_{t=1}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim p(\bold{s}_t,\bold{a}_t\mid\theta)}[r(\bold{s}_t,\bold{a}_t)]\]
<p>위 식에서 기댓값은 궤적의 확률분포 \(p(\tau)\) 에서 취해진다. 에피소드가 끝날때까지 방문했던 상태와 행동의 확률분포이다.</p>
\[p(\tau)=p(\bold{s}_1,\bold{a}_1,\dots\bold{s}_T,\bold{a}_T\mid\theta)=p(\bold{s}_1)\prod\limits^T_{t=1}p(\bold{a}_t\mid\bold{s}_t,\theta)p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\]
<p>정책 \(p(\bold{a}_t\mid\bold{s}_t,\theta)\)을 \(\pi_\theta(\bold{a}_t\mid\bold{s}_t)\)로 표기하기도 한다.</p>
<h1 id="the-graphical-model">The Graphical Model</h1>
<p><strong>보상에 대한 정보를 가지고 있는 최적성 변수를 도입해서 RL 문제를 일반화하는 PGM을 만들자.</strong></p>
<p>위에서 살펴본 제어 문제를 추론 문제로 정의하기 위해서는 <strong>최적 정책을 따랐을 때의 궤적이 가장 높은 확률로 발생하도록</strong> 확률 그래프 모형을 설계해야 한다. 즉, 사후 행동 조건부 확률분포 \(p(\bold{a}_t\mid\bold{s}_t,\theta)\)가 최적 정책을 가리키도록 해야 한다.</p>
<p><img src="/assets/images/rl-as-inference-01.png" alt="" /></p>
<p>만약 강화학습 문제를 (a)와 같이 상태와 행동으로만 정의하면 보상에 대한 정보가 없기 때문에 제어 문제를 풀기에는 부족하다. 따라서 \(\mathcal{O}_t\)라는 이진 변수를 도입한다. \(\mathcal{O}_t\)는 최적성을 나타내며, \(\mathcal{O}_t=1\)일 경우 \(t\)시점에서 에이전트가 처한 상황(상태와 행동)이 최적임을 나타낸다고 정의한다. 이 논문에서는 \(\mathcal{O}_t\)의 분포를 아래와 같이 정의한다.</p>
\[p(\mathcal{O}_t=1\mid\bold{s}_t,\bold{a}_t)=\text{exp}(r(\bold{s}_t,\bold{a}_t))\]
<p>임의적이라고 생각할 수도 있으나, 글을 따라가다보면 이 정의를 납득하게 될 것이다. 위의 정의에 따라 \(\mathcal{O}_{1:T}=1\)이 주어졌을 때 궤적의 사후분포를 생각해보자. (최적의 궤도가 샘플링될 확률이라고 이해하면 될 것 같다.)</p>
\[p(\tau\mid\mathcal{O}_{1:T}=1)\propto p(\tau,\mathcal{O}_{1:T}=1)=p(\bold{s}_1)\prod\limits^T_{t=1}p(\mathcal{O}_{1:T}=1\mid\bold{s}_t,\bold{a}_t)p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\\
=p(\bold{s}_1)\prod\limits^T_{t=1}\text{exp}(r(\bold{s}_t,\bold{a}_t))p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\\
=\Bigg[p(\bold{s}_1)\prod\limits^T_{t=1}p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\Bigg]\text{exp}\Bigg(\sum\limits^T_{t=1}r(\bold{s}_t,\bold{a}_t)\Bigg)\\
=p(\tau)\text{exp}\Bigg(\sum\limits^T_{t=1}r(\bold{s}_t,\bold{a}_t)\Bigg)\]
<p>간결한 표현을 위해서 \(\mathcal{O}_{t}=1\)을 \(\mathcal{O}_{t}\)로 나타낼 수 있다고 하자. 만약 시스템이 deterministic 하다면, \(p(\tau)\)는 0이나 1로 나타내어질 것이며, 가능한 궤적(\(p(\tau)=1\))에 한해서는 \(p(\tau\mid\mathcal{O}_{1:T})\)는 보상의 합과 지수적으로 비례하게 될 것이다. 즉, 보상을 많이 받을 수 있는 궤적의 확률이 높으며, 보상을 적게 받을수록 지수적으로 그 확률이 감소하게 된다. 최적성의 확률을 보상의 지수함수로 정의하게 됐을 때 얻는 이점이라고 할 수 있다.</p>
<h1 id="planning-as-inference">Planning as Inference</h1>
<p>위 확률 그래프 모형에서 3가지 추론을 진행할 수 있다.</p>
<ol>
<li>
<p><strong>Backward Messages</strong> \(\beta_t(\bold{s}_t,\bold{a}_t)=p(\mathcal{O}_{t:T}\mid\bold{s}_t,\bold{a}_t)\)</p>
<p>상태 \(\bold{s}_t\)에서 행동 \(\bold{a}_t\)를 택했을 때 이후 궤적이 최적일 확률</p>
</li>
<li>
<p><strong>Policy</strong> \(p(\bold{a}_t\mid\bold{s}_t,\mathcal{O}_{1:T})\)</p>
<p>최적의 정책. 상태 \(\bold{s}_t\)에 있고 최적의 궤적을 따라갈 때 행동 \(\bold{a}_t\)를 택할 확률</p>
</li>
<li>
<p><strong>Forward Messages</strong> \(\alpha_t(\bold{s}_t)=p(\bold{s}_t\mid\mathcal{O}_{1:t-1})\)</p>
<p>\(t-1\)까지 최적의 궤적을 따라서 \(\bold{s}_t\)를 방문하게 될 확률</p>
</li>
</ol>
<h2 id="backward-message">Backward Message</h2>
<p>먼저 backward message를 살펴보자.</p>
\[\beta_t(\bold{s}_t,\bold{a}_t)=p(\mathcal{O}_{t:T}\mid\bold{s}_t,\bold{a}_t)\\
=\int p(\mathcal{O}_{t:T},\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)d\bold{s}_{t+1}\\
=\int p(\mathcal{O}_{t+1:T}\mid\bold{s}_{t+1})p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)d\bold{s}_{t+1}\]
<p>Backward message를 미래 상태의 분포에 대해서 marginalize한 표현으로 쓰면 두번째 식이 나오고, \(\bold{s}_{t+1}\)에 대해서 조건을 주어서 \(\mathcal{O}_{t+1\dots T}\mid(\bold{s}_{t+1},\bold{s}_{t},\bold{a}_{t})=\mathcal{O}_{t+1\dots T}\mid\bold{s}_{t+1}\)인 점과 \(\mathcal{O}_t\)을 나머지 궤적으로부터 분리시키면 세번째 줄이 나온다.</p>
<p>근데 \(p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)\)는 \(\bold{s}_{t+1}\)에 의존하지 않기 때문에 밖으로 뺄 수 있고, \(p(\mathcal{O}_{t+1:T}\mid\bold{s}_{t+1})=\beta_{t+1}(\bold{s}_{t+1})\)이며, 적분 표현은 \(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\)의 분포를 따르는 \(\bold{s}_{t+1}\)에 대한 \(\beta_{t+1}(\bold{s}_{t+1})\)의 기댓값을 구하는 식이다. 즉,</p>
\[\beta_t(\bold{s}_t,\bold{a}_t)=p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[\beta_{t+1}(\bold{s}_{t+1})]\]
<p>특히, 적분 안에 있는 첫번째 표현 \(p(\mathcal{O}_{t+1:T}\mid\bold{s}_{t+1})=\beta_{t+1}(\bold{s}_{t+1})\)을 다음 스텝에서 취하는 행동 \(\bold{a}_{t+1}\)에 대해서 marginalize하면,</p>
\[p(\mathcal{O}_{t+1:T}\mid\bold{s}_{t+1})=\int p(\mathcal{O}_{t+1:T}\mid\bold{s}_{t+1},\bold{a}_{t+1})p(\bold{a}_{t+1}\mid\bold{s}_{t+1})d\bold{a}_{t+1}\]
<p>\(p(\mathcal{O}_{t+1:T}\mid\bold{s}_{t+1},\bold{a}_{t+1})=\beta_{t+1}(\bold{s}_{t+1},\bold{a}_{t+1})\)의 기댓값으로 표현할 수 있게 된다. \(t\)시점에서 보면</p>
\[\beta_t(\bold{s}_t)=\mathbb{E}_{\bold{a}_t\sim p(\bold{a}_t\mid\bold{s}_t)}[\beta_t(\bold{s}_t,\bold{a}_t)]\]
<p>여기서 참고할 부분은 \(p(\bold{a}_t\mid\bold{s}_t)\)가 정책을 나타내는 것이 아니라는 것이다. 정책은 optimality index \(\mathcal{O}\)에 조건부인 \(p(\bold{a}_t\mid\bold{s}_t,\mathcal{O}_{1:T})\)로 나타내기로 한 것을 생각하자. \(p(\bold{a}_t\mid\bold{s}_t)\)는 이 분포를 따라 결정했을 때 따르는 궤적이 굳이 옵티멀일 필요가 없는, 어떻게 보면 행동의 사전분포인 것이다. 따라서 일단은 균등분포라고 가정한다.</p>
<p>이제 \(t=T-1\dots1\)일 때 \(\beta_t(\bold{s}_t)\)와 \(\beta_t(\bold{s}_t,\bold{a}_t)\) 사이의 관계를 나타내는 위 두 개의 식을 가지고 번갈아서 순차적으로 계산하면 \(\beta_t(\bold{s}_t)\)와 \(\beta(\bold{s}_t,\bold{a}_t)\)를 구할 수 있게 된다.</p>
\[\text{For}\enspace t=T-1\enspace\text{to}\enspace1:\\
\quad\beta_t(\bold{s}_t,\bold{a}_t)=p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[\beta_{t+1}(\bold{s}_{t+1})]\\
\quad\beta_t(\bold{s}_t)=\mathbb{E}_{\bold{a}_t\sim p(\bold{a}_t\mid\bold{s}_t)}[\beta_t(\bold{s}_t,\bold{a}_t)]\]
<h2 id="policy">Policy</h2>
<p>다음은 정책에 대한 추론이다. \(p(\bold{a}_t\mid\bold{s}_t,\mathcal{O}_{1:T})\)로 표현하는 정책은 궤적이 최적일 때, 상태 \(\bold{s}_t\)에서 행동 \(\bold{a}_t\)를 취할 확률로 나타낼 수 있다.</p>
\[p(\bold{a}_t\mid\bold{s}_t,\mathcal{O}_{1:T})=\pi(\bold{a}_t\mid\bold{s}_t)\\
=p(\bold{a}_t\mid\bold{s}_t,\mathcal{O}_{t:T})\\
=\frac{p(\bold{a}_t,\bold{s}_t\mid\mathcal{O}_{t:T})}{p(\bold{s}_t\mid\mathcal{O}_{t:T})}\\
=\frac{p(\mathcal{O}_{t:T}\mid\bold{a}_t,\bold{s}_t)p(\bold{a}_t,\bold{s}_t)/p(\mathcal{O}_{t:T})}{p(\mathcal{O}_{t:T}\mid\bold{s}_t)p(\bold{s}_t)/p(\mathcal{O}_{t:T})}\\
=\frac{p(\mathcal{O}_{t:T}\mid\bold{a}_t,\bold{s}_t)}{p(\mathcal{O}_{t:T}\mid\bold{s}_t)}\frac{p(\bold{a}_t,\bold{s}_t)}{p(\bold{s}_t)}=\frac{\beta_t(\bold{s}_t,\bold{a}_t)}{\beta_t(\bold{s}_t)}p(\bold{a}_t\mid\bold{s}_t)\]
<p>상태 \(\bold{s}_t\)가 주어지면 \(t\)이전의 궤적에 대한 최적성은 상관 없다는 것과 간단한 베이즈 정리를 사용하면 위와 같이 나타낼 수 있다. 여기서 \(p(\bold{a}_t\mid\bold{s}_t)\)는 균등분포라고 가정하기로 했기 때문에 무시해도 괜찮다고 생각하면 (상수이다) 정책은 행동-상태 베타와 상태 베타의 비율로 이해할 수 있다.</p>
\[\pi(\bold{a}_t\mid\bold{s}_t)=\frac{\beta(\bold{s}_t,\bold{a}_t)}{\beta(\bold{s}_t)}\]
<p>다시 한번 정리하면, 최적 궤적를 만들었던 정책은 평균적으로 상태 \(\bold{s}_t\)에서 시작해서 최적 궤적을 따르게 될 확률 대비 상태 \(\bold{s}_t\)에서 행동 \(\bold{a}_t\)를 취했을 때 최적 궤적을 따르게 될 확률을 따라서 행동을 취하는 것이다.</p>
<p>\(\beta\)를 사용하여 \(Q\)와 \(V\)를 정의한 것을 대입해보면,</p>
\[\pi(\bold{a}_t\mid\bold{s}_t)=\text{exp}(Q_t(\bold{s}_t,\bold{a}_t)-V_t(\bold{s}_t))=\text{exp}(A_t(\bold{s}_t,\bold{a}_t))\]
<p>Advantage Function도 기존 강화학습에서 말하는 것과 똑같이 정의한다. 이제 정책은 위의 soft advantage가 변화함에 따라 지수적으로 바뀌는 확률에 따라 행동을 선택하게 된다. Advantage가 높은 행동을 지수적인 확률만큼 더 선택하게 되는 것이다. Make sense.</p>
<h2 id="forward-message">Forward Message</h2>
<p>일단 \(\alpha_1(\bold{s}_1)=p(\bold{s}_1)\)이라고 정의하고 나머지는 위에서 정의한 바와 같이 \(\alpha_t=p(\bold{s}_t\mid\mathcal{O}_{1:t-1})\)라고 하자. 이제 backward message 추론과 같이 수식을 풀어보자. 이번에는 미래가 아닌 과거 상태와 행동에 대해 marginalization을 진행한다. \(t\)시점의 상태나 행동은 그 이전까지 궤적의 최적성과는 독립이라는 것을 기억하자.</p>
\[\alpha_t(\bold{s}_t)=\int p(\bold{s}_t,\bold{s}_{t-1},\bold{a}_{t-1}\mid\mathcal{O}_{1:t-1})d\bold{s}_{t-1}d\bold{a}_{t-1}\\
=\int p(\bold{s}_t\mid\bold{s}_{t-1},\bold{a}_{t-1},\mathcal{O}_{1:t-1})p(\bold{a}_{t-1}\mid\bold{s}_{t-1},\mathcal{O}_{1:t-1})p(\bold{s}_{t-1}\mid\mathcal{O}_{1:t-1})d\bold{s}_{t-1}d\bold{a}_{t-1}\]
<p>시스템 역학 \(p(\bold{s}_t\mid\bold{s}_{t-1},\bold{a}_{t-1})=p(\bold{s}_t\mid\bold{s}_{t-1},\bold{a}_{t-1},\mathcal{O}_{1:t-1})\)이 알려져있다고 한다면 남은 것은 적분 안에 있는 두번째와 세번째 항이다.</p>
\[p(\bold{a}_{t-1}\mid\bold{s}_{t-1},\mathcal{O}_{t-1})p(\bold{s}_{t-1}\mid\mathcal{O}_{1:t-1})=\\
\frac{p(\mathcal{O}_{t-1}\mid\bold{s}_{t-1},\bold{a}_{t-1})p(\bold{a}_{t-1}\mid\bold{s}_{t-1})}{p(\mathcal{O}_{t-1}\mid\bold{s}_{t-1})}\frac{p(\mathcal{O}_{t-1}\mid\bold{s}_{t-1})p(\bold{s}_{t-1}\mid\mathcal{O}_{1:t-2})}{p(\mathcal{O}_{t-1}\mid\mathcal{O}_{1:t-2})}\\
=\frac{p(\mathcal{O}_{t-1}\mid\bold{s}_{t-1},\bold{a}_{t-1})p(\bold{a}_{t-1}\mid\bold{s}_{t-1})p(\bold{s}_{t-1}\mid\mathcal{O}_{1:t-2})}{p(\mathcal{O}_{t-1}\mid\mathcal{O}_{1:t-2})}\]
<p>\(p(\bold{s}_{t-1}\mid\mathcal{O}_{1:t-2})=\alpha_{t-1}(\bold{s}_{t-1})\)임을 생각하면 이제 알고있는 정보로 \(\alpha_t(\bold{s}_t)\)를 계산할 수 있게 된다. 여기서 상태 주변분포 \(p(\bold{s}_t\mid\mathcal{O}_{1:T})\)는 어떻게 계산할까? 전체 궤적이 최적일 때 상태 \(\bold{s}_t\)에 방문할 확률이다. \(\mathcal{O}_{t:T}\mid\bold{s}_t\)는 \(\mathcal{O}_{1:t-1}\)에 독립이라는 것을 사용하면,</p>
\[p(\bold{s}_t\mid\mathcal{O}_{1:T})=\frac{p(\bold{s}_t,\mathcal{O}_{1:T})}{p(\mathcal{O}_{1:T})}=\frac{p(\mathcal{O}_{t:T}\mid\bold{s}_t)p(\bold{s}_t,\mathcal{O}_{1:t-1})}{p(\mathcal{O}_{1:T})}\\
\propto p(\mathcal{O}_{t:T}\mid\bold{s}_t)p(\bold{s}_t\mid\mathcal{O}_{1:t-1})p(\mathcal{O}_{1:t-1})\propto\beta_t(\bold{s}_t)\alpha_t(\bold{s}_t)\]
<p>마지막에 \(p(\mathcal{O}_{1:t-1})\)은 상태 \(\bold{s}_t\)에 의존하지 않으므로 지금은 생각하지 않아도 된다. 즉, 상태 주변 분포는 forward message와 backward message의 곱으로 나타낼 수 있다.</p>
<p>지금까지 살펴본 것을 정리하면 아래 사진과 같다. 시작점(\(\bold{s}_1\))과 목표점(\(\bold{s}_T\))이 있을 때 forward/backward message가 전달하고자 하는 바를 나타내주고 있다. 노란색 부분은 backward message의 의미를 표현한다. 목표점을 기준으로 생각해보자. 미래 궤도의 최적성이 높은 상태 \(\bold{s}_t\)의 개수는 \(T\)시점에 가까워질수록 줄어들게 되고 (목표까지 시간이 없다!), 시간을 거슬러 올라갈수록 \(T\)시점에 목표점에 도달할 수 있는 상태 \(\bold{s}_t\)의 수는 늘 것이다. 파란색 부분은 forward message의 의미를 표현한다. 지금까지 궤도가 최적일 때 방문할 수 있는 \(\bold{s}_t\)의 개수는 반대로 시작점에 가까울수록 적을 것이다. \(\bold{s}_1\)에서 시작해서 \(\bold{s}_T\)에 도착할 때까지 상태 \(\bold{s}_t\)에 방문할 확률은 고로 forward message와 backward message의 교집합으로 나타나고, 수식으로는 그 두 확률을 곱한 것이다.</p>
<p><img src="/assets/images/rl-as-inference-02.png" alt="" /></p>
<h2 id="soft-values-and-inference-procedure">Soft Values and Inference Procedure</h2>
<p><strong>Backward Message Passing은 log space에서 Value Iteration의 soft 버전이다.</strong></p>
<p>Backward Message를 구하는 방법과 Value Iteration을 같이 두고 비교해보자.</p>
<ul>
<li>Backward Message</li>
</ul>
\[\text{For}\enspace t=T-1\enspace\text{to}\enspace1:\\
\quad\beta_t(\bold{s}_t,\bold{a}_t)=p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[\beta_{t+1}(\bold{s}_{t+1})]\\
\quad\beta_t(\bold{s}_t)=\mathbb{E}_{\bold{a}_t\sim p(\bold{a}_t\mid\bold{s}_t)}[\beta_t(\bold{s}_t,\bold{a}_t)]\]
<ul>
<li>Value Iteration</li>
</ul>
\[\text{Iterate}:\\
\quad Q(\bold{s},\bold{a})\leftarrow r(\bold{s},\bold{a})+\gamma\mathbb{E}[V(\bold{s}')]\\
\quad V(\bold{s})\leftarrow\text{max}_\bold{a}Q(\bold{s},\bold{a})\]
<p>비슷한 점을 찾을 수 있을까? 위 표현 그대로에서는 찾기 힘들 수도 있다. 하지만 약간 바꾸면 비슷한 점이 보일 것이다. 먼저 \(\beta\)의 정의를 잘 살펴보자. \(\beta_t(\bold{s}_t,\bold{a}_t)\)는 상태 \(\bold{s}_t\)에서 행동 \(\bold{a}_t\)를 취했을 때 따르게 되는 궤적이 최적일 확률이다. 이는 전통적인 강화학습에서 \(Q\)함수의 정의와 유사하다고 받아들일 수 있다. \(Q\)함수 \(Q(\bold{s}_t,\bold{a}_t)\)는 상태 \(\bold{s}_t\)에서 행동 \(\bold{a}_t\)를 취했을 때 얻는 할인된 보상 합의 기댓값이고, 보상을 많이 얻게 되면 최적일 확률이 높아지기 때문이다. 가치함수(\(V(\bold{s}_t)\)) 또한 비슷하게 생각할 수 있다. 따라서, soft Q-function, soft V-function을 정의해볼 수 있다. \(\beta\)를 정의한 확률이 보상의 exponential에 비례하기 때문에 \(\log\) 공간으로 보낸 것을 사용해서 정의해 보자.</p>
\[V_t(\bold{s}_t)=\log\beta_t(\bold{s}_t)\\
Q_t(\bold{s}_t,\bold{a}_t)=\log\beta_t(\bold{s}_t,\bold{a}_t)\]
<p>이 표현을 위에서 살펴본 backward message를 구하는 방법에 대입하면 아래와 같은 식을 얻을 수 있다.</p>
\[\text{For}\enspace t=T-1\enspace\text{to}\enspace1:\\
\quad Q_t(\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+\log\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[\exp(V_{t+1}(\bold{s}_{t+1}))]\\
\quad V_t(\bold{s}_t)=\mathbb{E}_{\bold{a}_t\sim p(\bold{a}_t\mid\bold{s}_t)}[\exp(Q_t(\bold{s}_t,\bold{a}_t))]=\log\int\exp(Q_t(\bold{s}_t,\bold{a}_t))d\bold{a}_t\]
<p>첫번째 표현은 정의를 그대로 대입하고 \(p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)=\text{exp}(r(\bold{s}_t,\bold{a}_t))\)임을 사용하면 바로 얻을 수 있는데, 시스템이 결정적이라고 가정한다면 \(\log\)와 \(\exp\)가 서로 상쇄되면서 \(Q_t(\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+V_{t+1}(\bold{s}_{t+1})\)이 된다. 정확히 Bellman backup 표현을 얻는 것이다.</p>
<p>이제 두번째 줄을 보자. 행동의 사전분포 \(p(\bold{a}_t\mid\bold{s}_t)\)가 균등분포라는 가정을 사용하여 얻을 수 있다. \(Q\)값이 크면 지수함수가 취해졌기 때문에 \(Q\)값 사이의 차이도 커질 것이고, 제일 큰 \(Q\)값이 \(\log\int\exp(Q_t(\bold{s}_t,\bold{a}_t))d\bold{a}_t\)을 dominate할 것이다. 즉, \(V_t(\bold{s}_t)\rightarrow\underset{\bold{a}_t}{\text{max}}\,Q_t(\bold{s}_t,\bold{a}_t)\)가 되는 것을 볼 수 있다. 어떠한 의미에서 ‘soft’max라고 할 수 있는 것이다. 뉴럴넷 모델링에서 자주 나오는 활성화함수 소프트맥스와는 용어는 같지만 다르다. 주의할 것. \(\text{max}\)오퍼레이터의 ‘soft’버전이라서 softmax라고 부르는 것이다. 이제 backward message와 value iteration을 다시 적어보자.</p>
<ul>
<li>Backward Message</li>
</ul>
\[\text{For}\enspace t=T-1\enspace\text{to}\enspace1:\\
\quad Q_t(\bold{s}_t,\bold{a}_t)\leftarrow r(\bold{s}_t,\bold{a}_t)+V_{t+1}(\bold{s}_{t+1})\\
\quad V_t(\bold{s}_t)\leftarrow\text{softmax}_\bold{a_t}Q_t(\bold{s}_t,\bold{a}_t)\]
<ul>
<li>Value Iteration</li>
</ul>
\[\text{Iterate}:\\
\quad Q(\bold{s},\bold{a})\leftarrow r(\bold{s},\bold{a})+\gamma\mathbb{E}[V(\bold{s}')]\\
\quad V(\bold{s})\leftarrow\text{max}_\bold{a}Q(\bold{s},\bold{a})\]
<p>둘 사이 유사성이 보일 것이다. Soft Q와 soft V 함수를 사용한다면 시스템 역학이 결정적이라는 가정 하에 backward message를 구하는 방법이 value iteration과 거의 동일해진다. \(Q\)와 \(V\)의 soft버전을 사용한다는 것과 Softmax를 쓰는 것이 차이점이다. 원래 강화학습 문제 정의에서 선형으로 정의되던 관계를 \(\exp\)공간으로 보내 곱하기 연산으로 잘 옮겨지게 PGM을 정의한 것이라고 볼 수 있을 것 같다. 2018년 NIPS Infer2Control에서 Levine의 발표자료를 참고하자.</p>
<p><img src="/assets/images/rl-as-inference-03.png" alt="" /></p>
<h2 id="optimization-problem">Optimization Problem</h2>
<p><strong>정책 찾기 문제는 \(D_{\text{KL}}(\hat{p}(\tau)\lVert p(\tau))\)를 최소화하는 문제이며, MaxEntRL을 푸는 문제와 동일하다.</strong></p>
<p>위에서 살펴본 정책을 얻는 추론 문제를 최적화 문제로 생각해보자. \(p(\bold{a}_t\mid\bold{s}_t,\mathcal{O}_{1:T})\)는 전체 궤적 \(p(\tau\mid\mathcal{O}_{1:T})\)를 각 \(s_t\)에 조건부 확률을 취하면 얻을 수 있다. 시스템이 결정적이면 궤도의 확률분포는 아래와 같이 나타낼 수 있음을 보았다.</p>
\[p(\tau\mid\mathcal{O}_{1:T}=1)\propto \mathbb{I}[p(\tau\neq0)]\text{exp}\Bigg(\sum\limits^T_{t=1}r(\bold{s}_t,\bold{a}_t)\Bigg)\]
<p>또한, 우리가 찾고자 하는 정책 함수가 \(\pi(\bold{a}_t\mid\bold{s}_t)\)라고 하면 이를 사용한 궤도는 아래와 같다.</p>
\[\hat{p}(\tau)\propto\mathbb{I}[p(\tau)\neq0]\prod\limits^T_{t=1}\pi(\bold{a}_t\mid\bold{s}_t)\]
<p>결국 위 두 개의 궤적 확률분포가 서로 최대한 가까워지게 하는 정책 함수를 찾는 문제이다. 시스템이 결정적이고 행동의 사전분포가 균등분포인 경우에는 추론을 마쳤을 때 위 두 표현이 완전히 같게 되기 때문이다. 정책의 곱으로 나타나있는 표현 \(\hat{p}(\tau)\)에 \(\pi\) 대신 \(\beta\)함수의 비율을 대입하고 backward message 식 두개를 사용해 구한 \(\beta\)함수 표현을 사용하면, 분모와 분자에 있는 \(\beta\)표현이 약분되어 없어지고 남는 것은 \(p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)\)들의 곱이다. 즉, \(D_{\text{KL}}(\hat{p}(\tau)\lVert p(\tau))=0\)이다. 그렇다면 <strong>정책을 구하는 추론 문제를 \(D_{\text{KL}}(\hat{p}(\tau)\lVert p(\tau))\)를 최소화하는 문제</strong>라고 받아들일 수 있다. 이제 목적함수 \(D_{\text{KL}}(\hat{p}(\tau)\lVert p(\tau))\) 의 정의를 쓰는 것으로 시작하여 수식을 정리해보자.</p>
\[D_{\text{KL}}(\hat{p}(\tau)\lVert p(\tau))=-\mathbb{E}_{\tau\sim\hat{p}(\tau)}[\log p(\tau)-\log\hat{p}(\tau)]\]
<p>양변에 음수를 곱하고 \(p(\tau)\)와 \(\hat{p}(\tau)\) 를 나타내는 식을 대입해보자.</p>
\[-D_{\text{KL}}(\hat{p}(\tau)\lVert p(\tau))\\
=\mathbb{E}_{\tau\sim\hat{p}(\tau)}\bigg[\log p(\bold{s}_1)+\sum\limits^T_{t=1}(\log p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)+r(\bold{s}_t,\bold{a}_t))\\
\qquad\qquad-\log p(\bold{s}_1)-\sum\limits^T_{t=1}(\log p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)+\log\pi(\bold{a}_t\mid\bold{s}_t))\bigg]\\
=\mathbb{E}_{\tau\sim\hat{p}(\tau)}\bigg[\sum\limits^T_{t=1}r(\bold{s}_t,\bold{a}_t)-\log\pi(\bold{a}_t,\bold{s}_t)\bigg]\\
=\sum\limits^T_{t=1}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\hat{p}(\bold{s}_t,\bold{a}_t)}[r(\bold{s}_t,\bold{a}_t)-\log\pi(\bold{a}_t\mid\bold{s}_t)]\\
=\sum\limits^T_{t=1}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\hat{p}(\bold{s}_t,\bold{a}_t)}[r(\bold{s}_t,\bold{a}_t)]+\mathbb{E}_{(\bold{s}_t)\sim\hat{p}(\bold{s}_t)}[\mathcal{H}(\pi(\bold{a}_t\mid\bold{s}_t))]\]
<p>마지막 줄은 엔트로피의 정의에 따라서 도출된다. 결과를 정리하면, 시스템이 결정적이고 행동 사전분포가 균등분포인 경우에 PGM을 정의하여 정책에 대한 추론을 진행하는 것은 강화학습에서 다루는 <strong>보상과 정책의 엔트로피를 최대화</strong>하는 것과 같다. 이런 식의 문제를 최대 엔트로피 강화학습 문제라고 한다.</p>
<h2 id="relaxation-of-assumptions">Relaxation of Assumptions</h2>
<p>지금까지 가정한 두 가지, 시스템이 결정적이라는 것과 행동의 사전분포가 균등분포라는 점을 완화해보자. 먼저 행동의 사전분포가 균등이 아닐 경우를 살펴본다. 더 이상 \(p(\bold{a}_t\mid\bold{s}_t)\)를 생략할 수 없다면 soft \(V\) function은 아래와 같이 될 것이다.</p>
\[V(\bold{s}_t)=\log\int\exp(Q_t(\bold{s}_t,\bold{a}_t)+\log p(\bold{a}_t\mid\bold{s}_t))d\bold{a}_t\]
<p>그럼 soft \(Q\) function을 아래와 같이 다르게 정의해보자.</p>
\[\tilde{Q}(\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+\log p(\bold{a}_t\mid\bold{s}_t)+\log\mathbb{E}[\exp(V(\bold{s}_{t+1}))]\]
<p>이제 \(\tilde{Q}\)를 사용하여 \(V\)를 표현할 수 있다.</p>
\[V(\bold{s}_t)=\log\int\exp(\tilde{Q}_t(\bold{s}_t,\bold{a}_t))d\bold{a}_t=\log\int\exp(Q_t(\bold{s}_t,\bold{a}_t)+\log p(\bold{a}_t\mid\bold{s}_t))d\bold{a}_t\]
<p>\(V\)와 \(\tilde{Q}\)를 가지고 위의 backward message구하는 반복문을 reproduce할 수 있게 된다. \(\tilde{Q}\)의 정의에서 \(\log p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+\log p(\bold{a}_t\mid\bold{s}_t)\)으로 두었기 때문이라고 이해할 수 있다. 행동의 사전분포는 보상함수를 통해 최적성에 녹아들게 된다. 따라서 행동의 사전분포가 균등분포라는 가정을 일반성을 잃지 않고 사용할 수 있는 것이다.</p>
<p>다음 부분에서는 시스템이 결정적이지 않고 확률적일 때 어떠한 접근법을 취해야 하는지 살펴본다.</p>
<h1 id="variational-inference-and-stochastic-dynamics">Variational Inference and Stochastic Dynamics</h1>
<p><strong>확률적 시스템에서는 위의 방법을 그대로 쓸 수 없다.</strong></p>
<p>만약 시스템 역학이 확률적이거나, 시스템 역학에 대한 정보가 없어서 확률적으로 추정을 해야하는 경우에는 위의 방식을 그대로 적용하기 힘들다. Backward message를 구하는 방법에서 첫 줄을 보자.</p>
\[Q_t(\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+\log\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[\exp(V_{t+1}(\bold{s}_{t+1}))]\]
<p>이 표현은 시스템이 결정적일 때는 일반 Bellman backup과 똑같았다. 하지만 시스템이 확률적일 때는 어떠한 일이 일어나는지 생각해보자. 쉬운 설명을 위해서 상태가 이산적이라고 가정한다. 10000개라고 하자. 만약 1개의 상태의 \(V\)값이 굉장히 크고 나머지 9999개 상태의 \(V\)값이 굉장히 작다면 \(\log\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[\exp(V_{t+1}(\bold{s}_{t+1}))]\)는 어떻게 될까? 만약 \(\log\)와 \(\exp\)이 없는 일반적인 강화학습 Bellman backup 표현일 때는 일반적으로 이 값이 작을 것이다. 9999개 상태의 작은 \(V\)값을 상쇄하고도 남을 만큼 1개 상태로 전이할 확률이 어마어마하게 크지 않은 이상 말이다. 물론 그 1개의 상태로 거의 확실히 전이한다면 \(V\)는 큰 값을 가지는 것이 마땅하다. 하지만 그렇지 않은 경우를 생각해보자. 만약 \(V\)값이 굉장히 큰 1개의 상태에 전이할 확률이 크지 않다면? \(\log\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[\exp(V_{t+1}(\bold{s}_{t+1}))]\)는 이러한 상황에서도 큰 값을 가지게 된다. \(\exp\)가 안에 들어있기 때문에 저 표현 자체를 dominate하는 것이다. 큰 문제이다. \(Q\)값이 optimistic하다고 표현한다. 왜 이런 일이 발생하는 것일까?</p>
<p>이유는 이 문제에 접근하는 가정과 과정이 확률적인 시스템에 부합하지 않기 때문이다. 시스템 역학이 확률적일 때 궤적의 확률분포를 써보자.</p>
\[p(\hat\tau)=p(\bold{s}_1\mid\mathcal{O}_{1:T})\prod\limits^T_{t=1}p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t,\mathcal{O}_{1:T})p(\bold{a}_t\mid\bold{s}_t,\mathcal{O}_{1:T})\]
<p>시스템 역학이 결정적일 때에는 역학 전이 분포 \(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)=p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t,\mathcal{O}_{1:T})\)이어야만 했다. 전이 방법이 한 가지밖에 존재하지 않기 때문이다. 하지만, 확률적 시스템에서는 그렇지 않기 때문에 <strong>초기 상태 분포와 시스템 전이 분포에 모두 \(\mathcal{O}\)가 조건부</strong>로 들어가 있는 것을 볼 수 있다. (\(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t,\mathcal{O}_{1:T})\neq p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\)) 하지만 \(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t,\mathcal{O}_{1:T})\)은 우리가 원하는 것이 아니다. 전이 분포는 궤적의 최적성과는 관계가 없어야 하는데, 최적을 가정하고 얻는 전이 분포의 식이 들어가 있다. 이대로 추론을 진행하면 오히려 <strong>전이 분포를 조작하는 효과</strong>가 있는 것이다.</p>
<h2 id="optimization-problem-1">Optimization Problem</h2>
<p><strong>확률적 시스템에서도 Backward Message Passing과 DP로 정책 찾기가 가능하다.</strong></p>
<p>간단하게 이 문제를 회피하기 위해서 \(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t,\mathcal{O}_{1:T})\)대신 \(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\)를 사용해서 궤적의 확률분포를 나타냈을 때 최적화 문제가 어떻게 바뀌는지 보자.</p>
\[p(\hat\tau)=p(\bold{s}_1\mid\mathcal{O}_{1:T})\prod\limits^T_{t=1}p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\pi(\bold{a}_t\mid\bold{s}_t)\]
<p>결정적 시스템일 때 방법을 그대로 적용하면 목적함수인 궤적간의 KL발산은 아래와 같은 꼴을 가지게 된다.</p>
\[-D_{\text{KL}}(\hat{p}(\tau)\lVert p(\tau))=\sum\limits^T_{t=1}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\hat{p}(\bold{s}_t,\bold{a}_t)}[r(\bold{s}_t,\bold{a}_t)+\mathcal{H}(\pi(\bold{a}_t\mid\bold{s}_t))]\]
<p>결정적 시스템일 때와 표현이 똑같지만, 이제는 시스템의 전이확률에 대해서 기댓값을 구해야 한다는 점이 추가되었다. 이 표현에서 동적계획법을 통해 확률적 시스템의 backward message를 도출해보자. 결정적인 시스템에서 backward message를 도출했을 때와 마찬가지로 \(T\)시점에서 뒤로 돌아갈것이다. \(\pi(\bold{a}_T\mid\bold{s}_T)\) 에 대해서 최적화해보자. 아래의 식을 최대화하는 것이다.</p>
\[\mathbb{E}_{(\bold{s}_T,\bold{a}_T)\sim\hat{p}(\bold{s}_T,\bold{a}_T)}[r(\bold{s}_T,\bold{a}_T)-\log\pi(\bold{a}_T\mid\bold{s}_T)]=\\
\mathbb{E}_{\bold{s}_T\sim\hat{p}(\bold{s}_T)}\bigg[-D_{\text{KL}}\bigg(\pi(\bold{a}_T\mid\bold{s}_T)\lVert\frac{1}{\exp(V(\bold{s}_T))}\exp(r(\bold{s}_T,\bold{a}_T))\bigg)+V(\bold{s}_T)\bigg]\]
<p>\(V(\bold{s}_T)=\log\int_{\mathcal{A}}\exp(r(\bold{s}_T,\bold{a}_T))d\bold{a}_T\)으로 정의하면 \(\exp(V(\bold{s}_T))\)는 \(\exp(r(\bold{s}_T,\bold{a}_T))\)의 정규화항이 된다. \(T\)시점의 행동에 대해서 정규화를 해주는 것이다. KL발산은 두 분포가 동일할 때 최소값을 가지므로 KL발산 안에 있는 두 항이 같다고 두면 아래와 같이 \(\pi(\bold{a}_T\mid\bold{s}_T)\)를 구할 수 있게 된다.</p>
\[\pi(\bold{a}_T\mid\bold{s}_T)=\exp(r(\bold{s}_T,\bold{a}_T)-V(\bold{s}_T))\]
<p>비슷하게, 각 \(t\)시점에 대해서 아래의 항을 최대화하는 정책 \(\pi(\bold{a}_t\mid\bold{s}_t)\)를 구하면 각 시점에서 정책을 구할 수 있게 된다.</p>
\[\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\hat{p}(\bold{s}_t,\bold{a}_t)}[r(\bold{s}_t,\bold{a}_t)-\log\pi(\bold{a}_t\mid\bold{s}_t)]+\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\hat{p}(\bold{s}_t,\bold{a}_t)}[\mathbb{E}_{\bold{s}_{t+1}\sim\hat{p}(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[V(\bold{s}_{t+1})]]\]
<p>첫번째 항은 \(T\)시점에서 본 목적함수와 같은 것이고, 두번째 항은 \(\pi(\bold{a}_t\mid\bold{s}_t)\)가 미래 궤적에 미치는 기여도를 나타내는 항이다. \(T\)시점에서 KL발산 항을 최소로(0으로) 만들면 \(V(\bold{s}_T)\)가 남는 것을 볼 수 있는데, 각 시점에서 이 \(V\)항이 쌓이기 때문에 이 두번째 항이 필요한 것이다. 목적함수가 조금 바뀌었으니 여기서 결정적 시스템에서와 마찬가지로 \(Q\)와 \(V\)함수를 정의하자. 뒤에 남는 \(V\)항까지 포함할 수 있는 정의이다.</p>
\[Q(\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[V(\bold{s}_{t+1})]\\
V(\bold{s}_t)=\log\int_{\mathcal{A}}\exp(Q(\bold{s}_t,\bold{a}_t))d\bold{a}_t\]
<p>Bellman backup과 동일한 표현을 또 얻었다. 이렇게 정의하면 새 목적함수는 아래와 같은 형태를 가지게 된다. (네 간단한 연산입니다.)</p>
\[\mathbb{E}_{\bold{s}_t\sim\hat{p}(\bold{s}_t)}\bigg[-D_{\text{KL}}\bigg(\pi(\bold{a}_t\mid\bold{s}_t)\lVert\frac{1}{\exp(V(\bold{s}_t))}\exp(Q(\bold{s}_t,\bold{a}_t))\bigg)+V(\bold{s}_t)\bigg]\]
<p>이제 KL항을 최소로 만들 수 있게 \(\pi(\bold{a}_t\mid\bold{s}_t)=\exp(Q(\bold{s}_t,\bold{a}_t)-V(\bold{s}_t))\)라고 두면 \(\mathbb{E}_{\bold{s}_t\sim\hat{p}(\bold{s}_t)}[V(\bold{s}_t)]\)항이 남게 된다. 동적계획법으로 \(T\)시점부터 대입하여 답을 구할 수 있게 되었다.</p>
<p>중요한 것은 이 풀이방법을 얻기 위해 정의한 \(Q\)와 \(V\)함수다. 확률적 시스템에서 문제가 되었던 백업 방법은 아래와 같았다.</p>
\[Q_t(\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+\log\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[\exp(V_{t+1}(\bold{s}_{t+1}))]\]
<p>전이확률 조작의 결과로 optimistic한 \(Q\)값이 계산된다는 점이었다. 반면 초기 상태 확률과 전이확률을 고정시킨 상태에서 얻은 백업 방법은 아래와 같다.</p>
\[Q(\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+\mathbb{E}_{\bold{s}_{t+1}\sim p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[V(\bold{s}_{t+1})]\]
<p>로그와 지수함수가 없어진 것을 볼 수 있다. 더이상 \(Q\)함수가 optimistic이 아니게 되어 문제가 사라졌다. 이번 부분에서는 최적화문제를 잘 정의하여 확률적 시스템의 문제를 해결하는 방법을 알아봤다면, 다음 부분에서는 확률적 시스템의 문제를 확률적 추론으로 해결하는 방법을 알아볼 것이다.</p>
<h2 id="control-as-variational-inference">Control as Variational Inference</h2>
<p><strong>확률적 시스템에서 정책을 찾는 문제는 변분적 추론으로 정의가 가능하며, 이 또한 \(D_{\text{KL}}(q(\tau)\lVert p(\mathcal{O}_{1:T},\tau))\)를 최소화하는 문제이고, 역시 MaxEntRL 문제를 푸는 것과 같다.</strong></p>
<p>확률적 시스템에서 마주하는 문제를 정리하면 아래와 같다.</p>
<ul>
<li>우리가 원하는 것: \(p(\bold{a}_t\mid\bold{s}_t,\mathcal{O}_{1:T})\)</li>
<li>우리가 원치 않는것: \(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t,\mathcal{O}_{1:T})\neq p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\)</li>
</ul>
<p>확률적 추론 프레임워크에서는 이 문제를 해결하기 위해 궤적의 확률분포를 근사하는 다른 함수를 찾을 것이다. 특히, 우리가 풀고자 하는 문제에 맞게 \(p(\bold{s}_{1:T},\bold{a}_{1:T}\mid\mathcal{O}_{1:T})\)와 비슷하지만 \(p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\)와 같은 전이함수를 가지는 함수 \(q(\bold{s}_{1:T},\bold{a}_{1:T})\)를 만들 것이다. 궤적의 확률분포를 나타내는 \(q(\bold{s}_{1:T},\bold{a}_{1:T})\)를 초기정책 확률분포, 전이 확률분포, 정책으로 분해할 것인데, 초기 상태 확률분포와 전이 확률분포는 시스템의 정보를 그대로 가져와서 고정할 것이다. 그리고 정책에 해당하는 확률분포로는 새로운 함수를 도입하면 전이 확률분포와 초기 상태 확률분포가 고정되어있어야 한다는 조건을 만족하게 된다.</p>
\[q(\bold{s}_{1:T},\bold{a}_{1:T})=q(\bold{s}_1)\prod_tq(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)q(\bold{a}_t\mid\bold{s}_t)\\
=p(\bold{s}_1)\prod_tp(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)q(\bold{a}_t\mid\bold{s}_t)\]
<p>이제 변분적 추론이 등장한다. 변분적 추론은 \(p(z\mid x)\)를 근사하는 \(q(z)\)를 찾을 때 주로 쓰였는데, 이 맥락에서는 \(x=\mathcal{O}_{1:T},z=(\bold{s}_{1:T},\bold{a}_{1:T})\)라고 하면 정확히 우리가 원하는 것을 이룰 수 있다는 걸 알 수 있다. 근사하고자 하는 궤적의 확률은 \(p(\bold{s}_{1:T},\bold{a}_{1:T}\mid\mathcal{O}_{1:T})\)이고 우리가 가지고 있는 것은 \(q(\bold{s}_{1:T},\bold{a}_{1:T})\)이기 때문이다. Variational lower bound를 구해보자.</p>
\[\log p(\mathcal{O}_{1:T})=\log\int\int p(\mathcal{O}_{1:T},\bold{s}_{1:T},\bold{a}_{1:T})d\bold{s}_{1:T}d\bold{a}_{1:T}\\
=\log\int\int p(\mathcal{O}_{1:T},\bold{s}_{1:T},\bold{a}_{1:T})\frac{q(\bold{s}_{1:T},\bold{a}_{1:T})}{q(\bold{s}_{1:T},\bold{a}_{1:T})}d\bold{s}_{1:T}d\bold{a}_{1:T}\\
=\log\mathbb{E}_{(\bold{s}_{1:T},\bold{a}_{1:T})\sim(q(\bold{s}_{1:T},\bold{a}_{1:T}))}[\frac{p(\mathcal{O}_{1:T},\bold{s}_{1:T},\bold{a}_{1:T})}{q(\bold{s}_{1:T},\bold{a}_{1:T})}]\\
\ge\mathbb{E}_{(\bold{s}_{1:T},\bold{a}_{1:T})\sim q(\bold{s}_{1:T},\bold{a}_{1:T})}[\log p(\mathcal{O}_{1:T},\bold{s}_{1:T},\bold{a}_{1:T})-\log q(\bold{s}_{1:T},\bold{a}_{1:T})]\\
=-D_{\text{KL}}(q(\tau)\lVert p(\mathcal{O}_{1:T},\tau))\]
<p>\(q(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)=p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\)임을 사용하면,</p>
\[\log p(\mathcal{O}_{1:T})\ge\\
\mathbb{E}_{(\bold{s}_{1:T},\bold{a}_{1:T})\sim q(\bold{s}_{1:T},\bold{a}_{1:T})}[\log p(\bold{s}_1)+\sum\limits^T_{t=1}\log p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)+\sum\limits^T_{t=1}\log p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)\\
\qquad\qquad\qquad-\log p(\bold{s}_1)-\sum\limits^T_{t=1}\log p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)-\sum\limits^T_{t=1}\log q(\bold{a}_t\mid\bold{s}_t)]\\
=\mathbb{E}_{(\bold{s}_{1:T},\bold{a}_{1:T})\sim q(\bold{s}_{1:T},\bold{a}_{1:T})}\bigg[\sum\limits_tr(\bold{s}_t,\bold{a}_t)-\log q(\bold{a}_t\mid\bold{s}_t)\bigg]\\
=\sum\limits_t\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim q(\bold{s}_t,\bold{a}_t)}[r(\bold{s}_t,\bold{a}_t)+\mathcal{H}(q(\bold{a}_t\mid\bold{s}_t))]\]
<p>익숙한 표현이 나왔다. 보상 뿐 아니라 정책의 엔트로피도 최대화하는 문제가 된 것이다. 결정적인 시스템뿐 아니라 확률적인 시스템에서도 같은 목적함수를 최대화하는 것이 확률적 추론을 통해 정책을 찾는 문제를 푸는 것이다. 그럼 이 문제를 어떻게 풀 수 있을까? 바로 위에서 살펴본 동적계획법 풀이에서 \(\pi\)자리에 \(q(\bold{a}_t\mid\bold{s}_t)\)를 넣으면 똑같은 방법으로 풀 수 있다. 정리하자면, 아래와 같은 ‘soft’ Value Iteration방법을 적용해서 \(Q\)와 \(V\)를 찾고, 동적계획법을 통해서 정책을 찾을 수 있다.</p>
\[\text{For}\enspace t=T-1\enspace\text{to}\enspace1:\\
\quad Q_t(\bold{s}_t,\bold{a}_t)\leftarrow r(\bold{s}_t,\bold{a}_t)+\mathbb{E}[V_{t+1}(\bold{s}_{t+1})]\\
\quad V_t(\bold{s}_t)\leftarrow\text{softmax}_\bold{a_t}Q_t(\bold{s}_t,\bold{a}_t)\]
<p>이 방법을 두 가지로 확장할 수 있다. 첫번째 줄을 \(Q_t(\bold{s}_t,\bold{a}_t)\leftarrow r(\bold{s}_t,\bold{a}_t)+\gamma\mathbb{E}[V_{t+1}(\bold{s}_{t+1})]\)로 써서 할인율을 감안하는 모델을 만들 수도 있고, 두 번째 줄에서 softmax의 정도를 나타내는 temperature parameter \(\alpha\)를 도입하여 \(\alpha\log\int\exp(\frac{1}{\alpha}Q_t(\bold{s}_t,\bold{a}_t))d\bold{a}_t\)로 바꾸면 얼마나 soft한 max를 취할 건지를 조정할 수도 있다. \(\alpha\)가 0에 가까워질수록 결정적인, \(\max\)오퍼레이터와 비슷하게 되고, \(\alpha\)가 1에 가까워질수록 soft해진다.</p>
<p>정리하면, <strong>\(q(\tau)\)와 \(p(\mathcal{O}_{1:T},\tau)\)의 거리를 좁히는 것은 ELBO를 최적화하는 것과 같으며, 이는 최대 엔트로피 강화학습 문제를 푸는것과 같다</strong>.</p>
<h1 id="approximate-inference-with-function-approximation">Approximate Inference with Function Approximation</h1>
<p><strong>Soft Q-Learning, Soft PG, Soft Actor-Critic 모두 이 철학을 가지고 있었다!</strong></p>
<p>앞서 동적계획법을 사용해 Soft \(Q\)와 soft \(V\)함수를 구하는 법을 알아보았다. 이번에는 함수 근사 방법을 활용하여 고차원이나 연속적인 도메인, 혹은 시스템 역학이 알려지지 않은 상황에서도 사용할 수 있는 실용적인 알고리즘을 살펴볼 것이다. 일반 강화학습 문제에서 제시되었던 Q-Learning, Policy Gradients, Actor-Critic방법의 soft한 버전이라고 생각하면 될 것이다.</p>
<h2 id="soft-q-learning">Soft Q-Learning</h2>
<p>가장 직관적으로 생각할 수 있는 적용방안은 일반 강화학습 문제에서 정의하는 Q-Learning에 softmax를 적용하는 방법일 것이다. 함수근사를 사용한 일반 Q-Learning알고리즘은 아래와 같다.</p>
\[\phi\leftarrow\phi+\alpha\nabla_\phi Q_\phi(\bold{s},\bold{a})(r(\bold{s},\bold{a})+\gamma V(\bold{s}')-Q_\phi(\bold{s},\bold{a}))\\
V(\bold{s}')=\underset{\bold{a}'}{\max}Q_\phi(\bold{s}',\bold{a}')\]
<p>당연히 최적 정책은 각 상태에서 제일 높은 \(Q\)값을 가지는 행동을 택하는 것이 된다. 여기서 자연스럽게 \(\max\)를 \(\text{soft}\max\)로 바꾸어서 생각하자.</p>
\[\phi\leftarrow\phi+\alpha\nabla_\phi Q_\phi(\bold{s},\bold{a})(r(\bold{s},\bold{a})+\gamma V(\bold{s}')-Q_\phi(\bold{s},\bold{a}))\\
V(\bold{s}')=\text{soft}\underset{\bold{a}'}{\max}Q_\phi(\bold{s}',\bold{a}')=\log\int\exp(Q_\theta(\bold{s}',\bold{a}'))d\bold{a}'\]
<p>여기서 최적의 정책은 앞서 살펴본 것처럼 \(\pi(\bold{a}\mid\bold{s})=\exp(Q_\phi(\bold{s},\bold{a})-V(\bold{s}))=\exp(A(\bold{s},\bold{a}))\)이 되고, Soft Q-Learning이 도출된다.</p>
<p>Soft Q-Learning을 유도하는 다른 방법은 Value Iteration에서 Q-Learning으로 넘어가는 방법을 그대로 적용하는 것이다. 먼저, 아래와 같이 backward message를 구할 수 있음을 떠올리자.</p>
\[\text{For}\enspace t=T-1\enspace\text{to}\enspace1:\\
\quad Q_t(\bold{s}_t,\bold{a}_t)\leftarrow r(\bold{s}_t,\bold{a}_t)+\mathbb{E}[V_{t+1}(\bold{s}_{t+1})]\\
\quad V_t(\bold{s}_t)\leftarrow\text{softmax}_\bold{a_t}Q_t(\bold{s}_t,\bold{a}_t)\]
<p>이제 \(Q\)함수를 근사하기 위해 \(Q_\theta\)를 도입하고 TD방법을 사용해서 루프 안에 있는 첫번째 줄을 바꿔주면 똑같은 알고리즘인 Soft Q-Learning을 유도할 수 있다. 물론, 이 알고리즘을 바로 사용할 수 있는 것은 아니다. Softmax부분을 계산하기 위해서 적분이 들어갈 뿐 아니라 정책에서 행동을 샘플하는 것 모두 쉬운 일은 아니기 때문이다. Soft Q-Learning <a href="https://arxiv.org/abs/1702.08165">논문</a>에서는 이 문제를 importance sampling과 Stein variational gradient descent을 사용하여 해결하려고 하였다.</p>
<p>Deep Q network를 사용하는 만큼 Target network 등 분산을 줄이려는 기법을 가미하면 알고리즘이 완성된다.</p>
<h2 id="maximum-entropy-policy-gradients">Maximum Entropy Policy Gradients</h2>
<p>다음으로, Evidence Lower Bound를 variational distribution \(q(\tau)\)에 대해서 최대화하는 방법을 생각할 수 있다. 위에서 정의한 문제대로 생각하면 \(q(\tau)\)는 \(q(\bold{s}_1),q(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t),q(\bold{a}_t\mid\bold{s}_t)\)로 나눌 수 있는데, 초기 상태분포와 전이분포는 \(p(\bold{s}_1),p(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)\)와 동일하게 두기로 했으므로 우리가 바꿀 수 있는 것은 \(q(\bold{a}_t\mid\bold{s}_t)\)밖에 없다. 즉, 정책 \(q(\bold{a}_t\mid\bold{s}_t)\)를 바꾸어가면서 ELBO를 최대화할 수 있는 것이다. Policy Gradient와 같은 접근법이다! 자연스럽게 ELBO식을 목적함수로 정하고 \(q_\theta(\bold{a}_t\mid\bold{s}_t)\)를 파라미터 \(\theta\)를 가지는 뉴럴넷으로 모델링한 뒤, \(\theta\)를 바꿔가면서 최적화를 진행하자.</p>
\[J(\theta)=\sum\limits^T_{t=1}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim q(\bold{s}_t,\bold{a}_t)}[r(\bold{s}_t,\bold{a}_t)-\mathcal{H}(q_\theta(\bold{a}_t\mid\bold{s}_t))]\]
<p>이제 Policy Gradient와 비슷하게 \(J\)의 그래디언트를 구하자.</p>
\[\nabla_\theta J(\theta)=\sum\limits^T_{t=1}\nabla_\theta\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim q(\bold{s}_t,\bold{a}_t)}[r(\bold{s}_t,\bold{a}_t)+\mathcal{H}(q_\theta(\bold{a}_t\mid\bold{s}_t))]\\
=\sum\limits^T_{t=1}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim q(\bold{s}_t,\bold{a}_t)}\bigg[\nabla_\theta\log q_\theta(\bold{a}_t\mid\bold{s}_t)\bigg(\sum\limits^T_{t'=t}r(\bold{s}_{t'},\bold{a}_{t'})-\log q_\theta(\bold{a}_{t'}\mid\bold{s}_{t'})-1\bigg)\bigg]\\
=\sum\limits^T_{t=1}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim q(\bold{s}_t,\bold{a}_t)}\bigg[\nabla_\theta\log q_\theta(\bold{a}_t\mid\bold{s}_t)\bigg(\sum\limits^T_{t'=t}r(\bold{s}_{t'},\bold{a}_{t'})-\log q_\theta(\bold{a}_{t'}\mid\bold{s}_{t'})-b(\bold{s}_{t'})\bigg)\bigg]\]
<p>Policy Gradient에서 상태에만 의존하는 함수를 더하거나 빼도 그래디언트 추정량이 불편이기 때문에 엔트로피를 미분한 것에서 나온 -1을 함수 \(b(\bold{s}_{t'})\)로 바꿀 수 있는 것이다. 잘 보면 그래디언트가 일반 Policy Gradient와 비슷한 것을 알 수 있다. 유일한 차이점은 매 \(t'\)시점마다 보상에 더해지는 \(-\log q_\theta(\bold{a}_{t'}\mid\bold{s}_{t'})\)항이다. 현재 정책 하에서 해당 행동의 로그확률을 빼준다는 것인데, 결국은 정책의 엔트로피를 최대화하기 위해 존재하는 항이다.</p>
<h2 id="maximum-entropy-actor-critic">Maximum Entropy Actor-Critic</h2>
<p>마지막으로 Actor-Critic기법에 확률적 추론을 적용해보자. 먼저, MaxEnt PG방법에서 찾는 \(q(\bold{a}_t\mid\bold{s}_t)\)의 이론적인 최적값은 아래와 같다는 것을 생각해보자.</p>
\[q^\star(\bold{a}_t\mid\bold{s}_t)=\frac{1}{Z}\exp\bigg(\mathbb{E}_{q(\bold{s}_{t+1:T},\bold{a}_{t+1:T}\mid\bold{s}_t,\bold{a}_t)}\bigg[\sum\limits^T_{t'=t}\log p(\mathcal{O}_{t'}\mid\bold{s}_{t'},\bold{a}_{t'})-\sum\limits^T_{t'=t+1}\log q(\bold{a}_{t'}\mid\bold{s}_{t'})\bigg]\bigg)\]
<p>\(D_{\text{KL}}(q(\tau)\lVert p(\mathcal{O}_{1:T},\tau))=0\)으로 만들어주는 \(q({\tau})\)의 표현을 쓴 다음 상태 \(\bold{s}_t\)에 조건식을 취하면 행동 \(\bold{a}_t\)는 이전 상태에는 독립이지만 미래 상태/행동에는 의존적이게 되기 때문이다. 이제 기댓값 안에 들어가있는 부분에 대해서 \(t\)시점만 밖으로 빼면 아래와 같은 표현을 얻을 수 있다.</p>
\[\log p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)+\mathbb{E}_{q(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}\bigg[\mathbb{E}\bigg[\sum\limits^T_{t'=t+1}\log p(\mathcal{O}_{t'}\mid\bold{s}_{t'},\bold{a}_{t'})-\log q(\bold{a}_{t'}\mid\bold{s}_{t'})\bigg]\bigg]\]
<p>이제 \(V\)와 \(Q\)를 정의하자.</p>
\[V(\bold{s}_t)=\mathbb{E}\bigg[\sum\limits^T_{t'=t+1}\log p(\mathcal{O}_{t'}\mid\bold{s}_{t'},\bold{a}_{t'})-\log q(\bold{a}_{t'}\mid\bold{s}_{t'})\bigg]\\
=\mathbb{E}_{q(\bold{a}_t\mid\bold{s}_t)}[\log p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)-\log q(\bold{a}_t\mid\bold{s}_t)+\mathbb{E}_{q(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[V(\bold{s}_{t+1})]]\\
Q(\bold{s}_t,\bold{a}_t)=\log p(\mathcal{O}_t\mid\bold{s}_t,\bold{a}_t)+\mathbb{E}_{q(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[V(\bold{s}_{t+1})]\]
<p>이렇게 정의하면 \(V(\bold{s}_t)=\mathbb{E}_{q(\bold{a}_t\mid\bold{s}_t)}[Q(\bold{s}_t,\bold{a}_t)-\log q(\bold{a}_t\mid\bold{s}_t)]\)라는 관계가 성립하고 \(q^\star\)는</p>
\[q^\star(\bold{a}_t\mid\bold{s}_t)=\frac{\exp(Q(\bold{s}_t,\bold{a}_t))}{\log\int_\mathcal{A}\exp(Q(\bold{s}_t,\bold{a}_t))d\bold{a}_t}\]
<p>으로 표현할 수 있게 된다. 여기서 \(Q\)와 \(V\)는 모두 최적 정책 \(q^\star\)가 아닌 현재 정책에 대해서 정의되어 있으나, 수렴하게 되면 \(q=q^\star\)가 되면서 아래와 같이 된다.</p>
\[V(\bold{s}_t)=\mathbb{E}_{q(\bold{a}_t\mid\bold{s}_t)}[Q(\bold{s}_t,\bold{a}_t)-\log q(\bold{a}_t\mid\bold{s}_t)]\\
=\mathbb{E}_{q(\bold{a}_t,\bold{s}_t)}\bigg[Q(\bold{s}_t,\bold{a}_t)-Q(\bold{s}_t,\bold{a}_t)+\log\int_\mathcal{A}\exp(Q(\bold{s}_t,\bold{a}_t))d\bold{a}_t\bigg]\\
=\log\int_\mathcal{A}\exp(Q(\bold{s}_t,\bold{a}_t))d\bold{a}_t\]
<p>앞에서 보았던 soft \(V\)함수를 만든 것이다. 방금 뭘 한거냐면, backward message passing을 통해서 \(Q\)와 \(V\)를 찾아 이론적인 최적 정책을 찾을 수 있다는 것을 보인 것이다. Actor-Critic알고리즘을 만드는 데 한발짝 다가선 것이다.</p>
<p>하지만 실제로 KL발산을 0으로 만들 수 있는 정책을 실용적으로 만들 수 없을 것이다. 만약 어떠한 모델 family안에 있는 정책만 찾을 수 있다고 한다면, 한 시점 \(t\)에 대해서 ELBO를 구한 뒤에 그래디언트를 사용하여 최적화를 진행할 수 있을 것이다. 그럼 \(q(\bold{s}_t\mid\bold{a}_t)\)에 대해서 ELBO를 써보자.</p>
\[\mathbb{E}_{\bold{s}_t\sim q(\bold{s}_t)}[\mathbb{E}_{\bold{a}_t\sim q(\bold{a}_t\mid\bold{s}_t)}[Q(\bold{s}_t,\bold{a}_t)-\log q(\bold{a}_t\mid\bold{s}_t)]]\]
<p>이 표현의 그래디언트는 아래와 같다.</p>
\[\mathbb{E}_{\bold{s}_t\sim q(\bold{s}_t)}[\mathbb{E}_{\bold{a}_t\sim q(\bold{a}_t\mid\bold{s}_t)}[\nabla\log q(\bold{a}_t\mid\bold{s}_t)(Q(\bold{s}_t,\bold{a}_t)-\log q(\bold{a}_t\mid\bold{s}_t)-b(\bold{s}_t))]]\]
<p>앞서 MaxEnt PG에서 살펴본 바와 동일하다. 몬테카를로 방법인 \(r\)대신 \(Q\)함수를 썼다는 점이 다른 점이다. 그 말은 <strong>전통적인 Actor-Critic의 soft버전</strong>으로 받아들일 수 있다는 뜻이다. MaxEnt PG보다 변동성이 적은 방법이다. 여기서 좀 더 실용적인 알고리즘으로 만들기 위해서 \(Q\)와 \(V\)함수를 학습하는 절차를 포함시킨다. 파라미터를 활용해서 \(Q_\phi\)와 \(V_\psi\)라고 쓴다면,</p>
\[\mathcal{E}(\phi)=\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim q(\bold{s}_t,\bold{a}_t)}\Big[\Big(r(\bold{s}_t,\bold{a}_t)+\mathbb{E}_{q(\bold{s}_{t+1}\mid\bold{s}_t,\bold{a}_t)}[V_\psi(\bold{s}_t)]-Q_\phi(\bold{s}_t,\bold{a}_t)\Big)^2\Big]\\
\mathcal{E}(\psi)=\mathbb{E}_{\bold{s}_t\sim q(\bold{s}_t)}\Big[\Big(\mathbb{E}_{\bold{a}_t\sim q(\bold{a}_t\mid\bold{s}_t)}[Q_\phi(\bold{s}_t,\bold{a}_t)-\log q(\bold{a}_t\mid\bold{s}_t)]-V_\psi(\bold{s}_t)\Big)^2\Big]\]
<p>이 두 목적함수를 최소화하는 \(\phi\)와 \(\psi\)를 찾으면 될 것이다. 물론 여기에서도 target network기법을 사용하여 target network를 고정할 수 있겠다. 이 논문에서는 \(V_\psi\)를 따로 학습하는 방법이 나와 있는데, 해당 알고리즘 논문의 최신판에서는 \(Q_\phi\)만 학습하고 \(V\)는 \(V(\bold{s}_t)=\mathbb{E}_{q(\bold{a}_t\mid\bold{s}_t)}[Q(\bold{s}_t,\bold{a}_t)-\log q(\bold{a}_t\mid\bold{s}_t)]\)를 통해 \(Q_\phi\)로부터 계산해서 사용한다.</p>
<p>결국 structured variational approximation 프레임워크에서 Actor-Critic 방법을 만들었다. 이 알고리즘이 바로 <a href="https://sylim2357.github.io/paper%20review/sac">Soft Actor Critic</a>이다.</p>
<h1 id="my-conclusion">My conclusion</h1>
<p>정말 길고 오래 걸린 논문 정리. 내용이 상당히 많지만 인사이트가 넘쳤다. 계속 읽으면서 알게 된 내용을 추가해야겠다. 완벽히 짚고 넘어가지 못한 세부적인 사항이 있을 수도 있으니 누구든 제발 틀린 것 있으면 피드백 주세요.</p>
<h1 id="reference">Reference</h1>
<p>Soft Q Learning <a href="https://arxiv.org/pdf/1702.08165.pdf">arxiv</a></p>
<p>Soft Actor-Critic <a href="https://arxiv.org/pdf/1812.05905.pdf">arxiv</a></p>
<p>Levine at 2018 NIPS Infer2Control <a href="https://www.youtube.com/watch?v=IAJ1LywY6Zg">Video</a></p>
<p>University of Waterloo CS588 Lecture: <a href="https://cs.uwaterloo.ca/~ppoupart/teaching/cs885-spring20/slides/cs885-module2.pdf">Slides</a> <a href="https://www.youtube.com/watch?fbclid=IwAR0qlhcj_A3CznaqGYx6_xE-fzXAwf8WWO7R0D0hZpy5pvpX_8iGkgxBdnY&v=ZsW0LCPPWHU&feature=youtu.be">Video</a></p>
<p>UC Berkeley CS285 Lecture: <a href="http://rail.eecs.berkeley.edu/deeprlcourse/static/slides/lec-19.pdf">Slides</a> <a href="https://www.youtube.com/watch?v=MzVlYYGtg0M&list=PL_iWQOsE6TfURIIhCrlt-wj9ByIVpbfGc&index=83&t=954s">Video</a></p>
<p>Yuchen Lu’s <a href="http://jackhaha363.github.io/talk/control_as_inf/slides.pdf">Slides</a></p>펭긴새sylim2357@gmail.comLevine, Sergey. "Reinforcement learning and control as probabilistic inference: Tutorial and review." arXiv preprint arXiv:1805.00909 (2018).[Paper Review] Efficient Exploration via State Marginal Matching2021-01-01T00:00:00+09:002021-01-01T08:00:00+09:00https://sylim2357.github.io/paper%20review/smm<p>Arxiv <a href="https://arxiv.org/abs/1906.05274">링크</a></p>
<p>새해 복 많이 받으세요. 역시 새해는 강화학습과 함께.</p>
<p>Levine, Xing의 팀이 낸 논문. 강화학습에서 풀고자하는 큰 문제 중 하나인 ‘탐색’을 체계적으로 수행하기 위한 독특한 문제로 정의함. 상태 사전분포에 최대한 가깝게 탐색할 수 있는 법을 학습하는 ‘State Marginal Matching’ (이하 SMM)을 제안함.</p>
<h1 id="introduction">Introduction</h1>
<p>강화학습에서 흔히 일어나는 딜레마는 exploration-exploitation trade off이다. 지금까지 얻은 정보를 바탕으로 최적이라고 생각하는 행동을 계속 함으로써 보상을 늘려나가는 결정이 exploitation (착취)이고, 혹시라도 더 높은 보상을 받을 수 있는 상황이 있을 수도 있기 때문에 새로운 정보를 수집하려고 다양한 행동을 취하고 다양한 상태에 도달하려고 하는 결정이 exploration (탐색)이다. 둘 사이에는 적당한 균형이 중요한데, 탐색의 경우는 수행하기 비싼 경우가 많기 때문에 최대한 효율적으로, 적은 시도를 통해 최대한의 정보를 얻을 수 있는 방법이 연구되고 있다. 이 논문도 해당 문제를 해결하려는 시도이다.</p>
<p>가장 기본적인 탐색 방법은 이미 널리 알려진 \(\epsilon\)-greedy방법일 것이다. 적은 \(\epsilon\)의 확률로 랜덤한 행동을 취하고 나머지 \(1-\epsilon\)의 확률로는 현재 최적이라고 생각하는 행동을 취하는 방법이다. 이외에도 더 체계적인 탐색 방법이 제안되었다. Intrinsic motivation방법(<a href="https://arxiv.org/abs/1509.08731">논문 링크</a>)은 외부 보상 신호가 없을 때 비지도 방식으로 정책을 학습하는 방법인데, 에이전트에 내재된 보상을 생성하고 그것을 달성하기 위한 행동을 결정하면서 나중에 실제 보상 신호가 들어왔을 때 효율적으로 수행할 수 있게 한다.</p>
<p>이 논문에서 주장하는 기존 방법의 문제점은 크게 두 가지이다. 먼저, ‘좋은 탐색’이 무엇인지 제대로 수치화할 수 없다는 것이다. 잘 정의된 최적화 문제를 해결하면서 탐색을 하는 것이 아니기 때문에 탐색하는 행동을 제대로 이해할 수 없다는 것이 문제이다. 또한, 탐색의 질을 평가할 수 없기 때문에 알고리즘간 비교가 어려운 것이 이 분야의 발전을 저해한다고 주장한다. 두번째는 기존 탐색 방법은 한 가지 과업을 수행하는 데만 도움을 주기 때문에 다양한 과업으로 일반화가 어렵다는 점이다.</p>
<p>이 논문에서 제안하는 SMM은 상태 사전 확률분포가 주어졌을 때 에이전트가 방문한 상태의 분포가 그 사전분포와 최대한 가깝게 하는 정책을 학습하는 방법이다. 체계적인 학습을 가능하게 할뿐 아니라 미래에 수행해야 하는 task와 관련하여 상태에 대한 사전 지식을 주입할 수 있다는 장점이 있다. 예를 들어 에이전트가 꼭 따라야 할 제약조건을 반영한다거나, 상대적으로 중요한 task를 수행하기 위해 더 많은 경험이 필요한 상태에 가중치를 주는 방식으로 사전 지식을 활용해 사전 확률분포를 만들 수 있다. 에이전트는 주어진 사전 확률분포와 최대한 동일하게 자신이 방문할 상태의 빈도를 맞추는 정책을 학습해야 한다. 만약 사전 지식을 넣지 않는다면 상태의 사전분포는 균등분포가 되어서 SMM의 목표는 주변 상태 엔트로피 (Marginal State Entropy) \(\mathcal{H}[s]\)를 최대화하는 문제가 되며, 에이전트가 모든 상태를 방문하도록 유도한다. 이 탐색 알고리즘을 학습하는 데는 외부의 보상 함수가 필요하지 않다. 어떠한 task가 주어지냐에 상관 없는 탐색 알고리즘인 것이다.</p>
<p>즉, <strong>제대로 정의된 최적화 문제를 해결함으로써 ‘탐색 정책’이라는 함수를 학습</strong>하는 방법을 제안한다. 이를 통해 탐색을 평가하고, 분산시키고, 이해할 수 있다.</p>
<h1 id="state-marginal-matching">State Marginal Matching</h1>
<p>이 논문에서 제안하는 SMM을 이해하기 전에 prediction error기반 탐색 기법과 그 문제점을 살펴보자. Prediction error기반 탐색 기법은 특정 예측 모델의 성능을 기반으로 하나의 전이로부터 최대 정보를 얻는 정책을 학습하는 방법이다. 예를 들어서 다음 상태를 얼마나 예측할 수 있었느냐를 기반으로 정보량을 측정할 수도 있고 (다음 상태를 예측하기 힘들었으면 얻은 정보량이 많은 것으로 본다), 이전 상태와 다음 상태가 주어졌을 때 어떠한 행동을 취했을지를 얼마나 잘 예측했냐를 기반으로 정보량을 측정할 수도 있다. 하지만 이 방법은 하나의 탐색 정책으로 수렴하지 않는다.</p>
<p>예를 들어서, Pathak et al.의 ICM에서 정의한 목적함수를 따라가면 모델이 수렴했을 때 모든 상태에 대해서 에러가 0이 되어서 탐색을 계속 하는 것에 대한 추가 보상이 없어지게 된다. 즉, 수렴했을 때 탐색에 관련된 목적함수 항은 정책에 아무런 영향을 끼치지 못한다. SMM은 목적함수를 최적화하는 방식으로 얻어진 탐색 정책이 존재해서 그 탐색 정책을 따라서 탐색을 효율적으로 수행할 수 있음을 보였다.</p>
<p>SMM은 상태 주변 분포를 가장 잘 재구성할 수 있는 정책을 학습하는 것을 목표로 한다. 구해진 정책을 따라가면 상태의 사전분포와 최대한 비슷한 확률로 상태를 방문하는 것이다. 먼저 상태 주변 분포를 정의해보자.</p>
<p>행동 \(a\)를 취할 수 있는 정책 \(\pi_\theta\in\Pi\triangleq\{\pi_\theta\mid\theta\in\Theta\}\)가 있고, 이 정책이 정의되는 전이분포 \(p(s_{t+1}\mid s_t,a_t)\)와 초기 상태 분포 \(p_0(s)\)를 가지고 있는 길이 \(T\)의 MDP(마르코프 결정 과정)가 있다고 하자. 먼저, 앞에서 정의된 요소들로 상태를 생성할 수 있는 분포를 얻을 수 있음을 생각하자. 초기 분포에서 초기 상태를 뽑고 정책에서 행동을 뽑아 전이분포에 넣으면 다음 상태를 얻을 수 있기 때문이다.</p>
<p>State Marginal Distribution(상태 주변 분포) \(\rho_\pi(s)\)를 다음과 같이 정의한다. 해당 정책이 상태 \(s\)를 방문할 확률이다.</p>
\[\rho_\pi(s)\triangleq\mathbb{E}_{\substack{s_1\sim p_0(S),\\a_t\sim\pi_\theta(A\mid s_t)\\ s_{t+1}\sim p(S\mid s_t,a_t)}}\Bigg[\frac{1}{T}\sum\limits^T_{t=1}\mathbb{I(s_t=s)}\Bigg]\]
<p>상태에 대한 사전분포 \(p^*(s)\)가 주어졌을 때, SMM의 목적은 \(p^*(s)\)와 가장 가까운 \(\rho_\pi(s)\)를 만드는 \(\pi\)를 구하는 것이다. 가까움의 정도는 KL발산으로 측정한다. 목적함수를 아래와 같이 적을 수 있다.</p>
\[\underset{\pi\in\Pi}{\text{min}}\,D_{\text{KL}}(\rho_\pi(s)\lVert p^*(s))\triangleq \underset{\pi\in\Pi}{\text{max}}\,\mathbb{E}_{\rho_\pi(s)}\log p^*(s)+\mathcal{H}_\pi[s]\]
<p>마지막 표현을 최대화하는 것은 pseudo-reward인 \(r(s)\triangleq\log p^*(s)-\log\rho_\pi(s)\)를 최대화하는 것과 같다고 생각할 수 있다. 지금 정책 \(\pi\)를 따르고 있기 때문에 기댓값을 근사할 수 있기 때문이다. 이 보상함수의 의미는 사전분포에 비해서 많이 방문한 상태에 도달했을 때는 패널티를 주고, 사전분포에 비해 적게 방문한 상태에 도달했을 때는 보상을 주는 것이다. 하지만 이 보상함수는 강화학습의 목표라고 하기 어려운데, 정책이 바뀌면 보상함수도 바뀌기 때문이다. 상태 엔트로피인 두 번째 항을 regularizer라고 생각하면, 이 regularizer가 없을 때는 정책이 \(p^*(s)\)의 최빈값(mode)에 수렴하게 된다. 두번째 항이 있음으로써 적절한 탐색을 하는 것이며, 행동에 대한 조건부 항이 없기 때문에 <strong>행동에 대한 탐색이 아닌 상태에 대한 탐색</strong>이 이루어진다. 진정한 의미의 탐색이라고 할 수 있다.</p>
<p>여기까지가 바닐라 SMM이라고 한다면, target distribution이 멀티모달일 경우에는 Mixture Model 구조를 활용하여 다른 버전을 제안할 수 있다. 멀티모달 \(p^*(s)\)일 경우에는 각 모드에 해당하는 분포를 따로 학습 한 후에 다시 합치는 방안이 학습하기 더 쉬울 것이다. 이를 위해 잠재변수 \(z\)를 사용한다. \(\rho_{\pi_z}(s)\)를 잠재변수 \(z\)가 주어졌을 때 정책의 상태 분포라고 한다면, 사전분포 \(p(z)\)가 주어졌을 때 각 \(z\)에 해당하는 정책 \(\pi_z\)의 혼합 상태 주변 분포는 아래와 같이 나타낼 수 있다.</p>
\[\rho_{\pi}(s)=\int_{\mathcal{Z}}\rho_{\pi_z}(s)p(z)dz=\mathbb{E}_{z\sim p(z)}[\rho_{\pi_z}(s)]\]
<p>베이즈 정리를 사용하고 위에서 보여준 KL발산 최소화 식을 다시 써본다면 목적함수는 다음과 같이 바뀌게 된다.</p>
\[\underset{\substack{\pi_z\\z\in\mathcal{Z}}}{\text{max}}\,\mathbb{E}_{\substack{p(z),\\\rho_{\pi_z}(s)}}[r_z(s)]\\
r_z(s)\triangleq\log p^*(s)-\log\rho_{\pi_z}(s)+\log p(z\mid s)-\log p(z)\]
<p>각 항이 나타내는 의미는 다음과 같다. 에이전트가 target distribution에 맞는 상태를 방문해야하고, 에이전트가 지금까지 방문하지 않은 상태를 방문해야 하며, 다른 \(z\)를 따르는 에이전트와 충분히 구별가능해야하고, \(z\)공간에서도 충분히 탐색이 이루어져야 한다는 것을 나타낸다. 이전 연구에서도 상호정보량(Mutual Information)을 사용하여 이와 비슷한 방식을 취했는데, 제일 다른 점은 바로 두번째 항인 \(-\log\rho_{\pi_z}(s)\)를 포함시킨 것이다. 완전히 새로운 상태를 방문했을 때 부여되는 보상인데, 위에서 언급한 상태에 대한 탐색과도 연관 되어있는 이 항 때문에 과거 기법에 비해서 월등한 성능을 자랑할 수 있었다고 주장한다.</p>
<h1 id="a-practical-algorithm">A Practical Algorithm</h1>
<p>이제 위에서 제안한 최적화 문제를 어떻게 해결할 것인가를 살펴본다. 핵심 내용은 게임이론을 사용한 접근법을 취했다는 것이다. 정책함수가 바뀜에 따라 보상함수도 바뀌기 때문에 순환적인 의존성이 있어서 게임이론적 접근법이 충분히 말이 된다.</p>
<p>상태 주변 분포 \(\rho_\pi(s)\)를 근사하는 모수 모델 \(q_\psi(s)\in Q\triangleq\{q_\psi\mid\psi\in\Psi\}\)를 만들어서 각 \(\pi\in\Pi\)마다 \(D_{\text{KL}}(\rho_\pi(s)\lVert q(s))=0\)를 만족시키는 \(q\in Q\)가 있다고 한다면 아래의 등식이 성립한다.</p>
\[\underset{\pi}{\text{max}}\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log\rho_\pi(s)]\\=\underset{\pi}{\text{max}}\,\underset{q}{\text{min}}\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log q(s)]\]
<p>위의 식을 보이기 위해 아래 식을 따라가보자.</p>
\[\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log q(s)]=\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log q(s)-\log\rho_\pi(s)+\log\rho_\pi(s)]\\=\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log \rho_\pi(s)]+\mathbb{E}_{\rho_\pi(s)}[\log\rho_\pi(s)-\log q(s)]\\=\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log \rho_\pi(s)]+D_{\text{KL}}(\rho_\pi(s)\lVert q(s))\]
<p>이제 \(\text{maxmin}\)목적함수를 써보자.</p>
\[\underset{\pi}{\text{max}}\,\underset{q}{\text{min}}\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log q(s)]\\=\underset{\pi}{\text{max}}\Big(\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log \rho_\pi(s)]+\underset{q}{\text{min}}\,D_{\text{KL}}(\rho_\pi(s)\lVert q(s))\Big)\]
<p>첫번째 항은 \(q\)가 없기 때문에 \(\text{min}\)이 두번째 항에만 취해졌다. 또한, 위의 가정을 사용하면 \(\underset{q}{\text{min}}\,D_{\text{KL}}(\rho_\pi(s)\lVert q(s))=0\)을 만족하는 \(q\)를 대입할 수 있다. 즉,</p>
\[=\underset{\pi}{\text{max}}\Big(\mathbb{E}_{\rho_\pi(s)}[\log p^*(s)-\log \rho_\pi(s)]\Big)\]
<p>이 됨을 알 수 있다. 이 최대-최소 문제를 푸는 것은 stationary 내쉬 균형을 찾는 것과 같은 문제이다. 여기에서 두 player는 \(\pi\)를 찾으려는 정책 player와 \(q\)를 찾으려고는 분포 player가 된다. 이 문제를 해결하는 데는 fictitious play의 개념을 도입하여 내쉬 균형을 유한시간안에 찾는 알고리즘을 사용한다. 각 iteration마다 한 player는 상대방의 전략의 historical average를 보고 (상대의 전략을 historical average로 고정한다는 뜻이다) 그에 대응하는 최고의 수를 두는 것이다. 분포와 정책의 historical average를 \(\bar\rho_m(s)\triangleq\frac{1}{m}\sum^m_{i=1}\rho_{\pi_i}(s)\)이고 \(\bar q_m(s)\triangleq\frac{1}{m}\sum^m_{i=1}q_i(s)\)라고 정의한다면 아래와 같은 fictitious play방식으로 최적화를 진행한다.</p>
\[q_{m+1}\leftarrow\text{arg}\underset{q}{\text{max}}\mathbb{E}_{s\sim\bar\rho_m(s)}[\log q(s)]\\
\pi_{m+1}\leftarrow\text{arg}\underset{q}{\text{max}}\mathbb{E}_{s\sim\rho_\pi(s)}[\log p^*(s)-\log \bar q_m(s)]\]
<p>정책 \(\pi_1,\cdots,\pi_m\)으로 이루어진 Historical Average Policy \(\bar\pi(a\mid s)\)는 각 반복 단계에 해당하는 정책 중 랜덤으로 하나를 샘플한 것이다. 각 에피소드가 시작할 때 \(\pi_i\sim\text{Unif}[{\pi_1,\cdots\pi_m}]\)에 따라서 정책을 하나 샘플링 하고 그 정책을 에피소드가 끝날 때까지 따라간다.</p>
<p>이 방법을 정리한 알고리즘은 다음과 같다.</p>
<p><img src="/assets/images/smm-01.png" alt="" /></p>
<p>Fictitious Play를 활용한 최적화 방법을 Mixture Model로 확장시킬 수 있다. Mixture Model에는 잠재변수 \(z\)가 개입하여 상태 분포와 정책이 각 \(z\)마다 하나씩 존재한다는 것을 떠올리자. 먼저 \(q_z^{(m)}(s)\)를 사용하여 각 정책 \(\pi_z\)의 상태 주변 분포를 근사한다. 그 다음 판별자 \(d^{(m)}(z\mid s)\)를 학습한다. 이 판별자는 상태 \(s\)에 방문할 정책 \(\pi_z\)를 판별하는 역할을 맡는다. 어떠한 상태를 방문했느냐를 보고 어떠한 잠재변수를 사용하고 있는지 판단할 수 있어야 한다는 의미이다. 마지막으로 강화학습을 사용하여 앞서 정의한 Mixture Model 문제의 목적함수 \(r_z(s)\)를 최대화하는 정책 \(\pi_z\)을 각각 업데이트한다.</p>
<p>여기서 눈여겨봐야할 것은 판별함수 \(d(z\mid s)\)인데, 실제 분포함수의 하한을 정해준다는 것을 Jensen’s Inequality를 통해서 알 수 있다.</p>
\[\mathbb{E}_{\substack{s\sim\rho_{\pi_z(s)}\\z\sim p(z)}}[\log d(z\mid s)]\leq\mathbb{E}_{\substack{s\sim\rho_{\pi_z(s)}\\z\sim p(z)}}[\log p(z\mid s)]\]
<p><a href="http://aivalley.com/Papers/MI_NIPS_final.pdf">Agakov 2004</a>에서 발췌한 설명이다.</p>
<p><img src="/assets/images/smm-02.png" alt="" /></p>
<p>완성된 알고리즘은 아래와 같다. \(z\)를 1부터 \(n\)까지로 정한 것을 주의하자.</p>
<p><img src="/assets/images/smm-03.png" alt="" /></p>
<h1 id="prediction-error-exploration-is-approximate-state-marginal-matching">Prediction-Error Exploration is Approximate State Marginal Matching</h1>
<p>이 부분에서는 기존 방법 중 prediction error기반 알고리즘이 SMM과 어떠한 관계가 있는지, 왜 다른 알고리즘보다 SMM이 우수한 성적을 냈는지 비교를 할 것이다. 정리하자면 기존 방법들을 시간에 따라서 평균내본다면 SMM과 거의 비슷한 목적함수를 최적화하지만, 목적함수에서 상태 분포에 대한 regularization이 없다는 점과 최적화할 때 게임이론에 기반한 historical average기법을 사용하지 않는다는 점이 가장 큰 차이점이다.</p>
<h2 id="objectives">Objectives</h2>
<p>먼저 기존 방법과 목적함수의 차이를 보자. 만약 SMM의 분포 모델이 VAE이고 \(p^*(s)\)이 균등분포라면 SMM의 목적함수는 prediction error방법들에서 사용하는 목적함수와 비슷해진다.</p>
\[\underset{\pi}{\text{max}}\,\underset{\psi}{\text{min}}\mathbb{E}_{\rho_\pi(s)}[\lVert f_\psi(s_t)-s_t\rVert^2_2]+R_\pi(\psi)\]
<p>\(f_\psi\)는 오토인코더고 \(R_\pi(\psi)\)는 데이터 분포 \(\rho_\pi(s)\)에 대한 VAE의 KL 페널티이다. (\(\rho_\pi(s)\)와 VAE 사이의 KL발산) Prediction error 방법 RND에서 사용하는 목적함수는 다음과 같다.</p>
\[\underset{\pi}{\text{max}}\,\underset{\psi}{\text{min}}\mathbb{E}_{\rho_\pi(s)}[\lVert f_\psi(s_t)-e(s_t)\rVert^2_2]\]
<p>\(e(\cdot)\)은 랜덤하게 초기화된 뉴럴넷 인코더이다. Forward model에 대한 predictive error를 준 모델의 경우에는 다음과 같다. 다음 상태를 예측하는 성능에 보너스를 준다.</p>
\[\underset{\pi}{\text{max}}\,\underset{\psi}{\text{min}}\mathbb{E}_{\rho_\pi(s)}[\lVert f_\psi(s_t,a_t)-s_{t+1}\rVert^2_2]\]
<p>Inverse Model에서 유도된 탐색 알고리즘의 목적함수는 아래와 같다. 지금과 다음 상태를 가지고 택한 행동을 예측하는 것에 보너스를 주는 것이다.</p>
\[\underset{\pi}{\text{max}}\,\underset{\psi}{\text{min}}\mathbb{E}_{\rho_\pi(s)}[\lVert f_\psi(s_t,s_{t+1})-a_t\rVert^2_2]\]
<p>결국 \(R(\psi)\)의 존재가 제일 큰 차이점을 만든다고 볼 수 있다. SMM이 수렴한 이후에도 계속해서 탐색을 하는 이유이다.</p>
<h2 id="optimization">Optimization</h2>
<p>Prediction error모델과 SMM의 큰 차이점 중 하나는 \(\text{max}\,\text{min}\)목적함수를 어떻게 최적화하냐에 있다. Prediction error모델의 경우에는 모델과 정책에 대해서 번갈아가면서 최적을 찾았다. Greedy한 방법이다. 하지만 가위바위보의 경우에서도 볼 수 있듯 greedy하게 최적화를 진행하면 수렴하지 않을 수도 있고, 이 논문에서 실제로 진행한 실험에서도 수렴하지 않는 모습을 볼 수 있었다.</p>
<p>반대로 SMM은 historical average를 사용한다. 정책의 historical average를 보고 모델을 업데이트 하고, 모델의 historical average를 보고 정책을 업데이트 하는 것이다. 이런 방식의 fictitious play는 수렴하는 것이 증명되어있다.</p>
<p>Prediction error방법은 수렴하는 것이 증명되어있지는 않지만 복잡한 task를 나름 잘 수행하는 것처럼 보이는데, 잘 살펴보면 목적함수를 학습하는 과정에서 탐색이 이루어져 결국 모든 상태를 방문하게 된다. 즉, prediction error방법에서 학습하는 중에 만들어지는 정책의 historical average를 보면 상당히 탐색을 잘 하는 정책이 되는 것이다. Prediction error방법에서 만들어진 replay buffer는 다양한 경험에 대한 정보를 담고 있는 것으로 생각할 수 있다. 결론적으로 prediction error방법에 fictitious play방식의 최적화를 이용한 historical average를 사용하면 탐색 성능의 향상을 볼 수 있다.</p>
<h2 id="others">Others</h2>
<p>Prediction error방법 이외에도 탐색 알고리즘을 찾는 시도가 있어 소개한다. 먼저, meta-RL방식으로 접근하는 방식이 있는데, SMM과의 차이점은 downstream task를 염두해두었냐에 대한 차이이다. Meta-RL은 downstream task의 보상함수 분포를 사용하여 어떻게 탐색하면 downstream task를 잘 수행할까에 초점을 맞췄다면 SMM은 downstream task가 주어지기 전에 탐색 정책을 학습할 수 있다.</p>
<p>다른 방식에는 정책 엔트로피를 높이는 방식이 있다. MaxEnt RL이라고 불리는데, SMM과의 차이점은 상태가 아니라 행동에 초점을 둔다는 것이다. 다양한 행동을 취하면 탐색을 한다고 생각하는 것인데, 어떻게 보면 맞는 말이지만 탐색이 진정으로 원하는 것은 다양한 상태를 방문하는 것이기 때문에 완벽히 목적이 일치한다고 보긴 힘들다. Levine의 2018년 리뷰 논문에도 잘 정리되어 있듯, MaxEnt RL은 강화학습 trajectory의 likelihood를 exponential reward로 정의하였을 때 그래프 모델에서 추론을 진행하는 것과 같은 것이다. Trajectory의 분포가 결국은 상태의 분포를 도출해내긴 하지만 trajectory에 대해서 적분한다는 것이 쉽지 않아서 intractable 문제가 되어버린다는 단점이 있다.</p>
<p>또한 Inverse RL이나 Imitation learning 등에서 사용된, 정책과 보상함수를 번갈아서 최적화하는 adversarial 기술이 적용되었다.</p>
<h1 id="my-conclusion">My Conclusion</h1>
<p>드디어 강화학습에도 프리트레인 모델의 시대가 열린 것인가?! Off-policy 방식에서 behaviour policy로 사용할 수도 있고 활용 방안은 정말 많을 것 같다. 근데 구현은 언제?</p>펭긴새sylim2357@gmail.comLee, Lisa, et al. "Efficient exploration via state marginal matching." arXiv preprint arXiv:1906.05274 (2019).[Paper Review] Soft Actor-Critic Algorithms and Applications2020-12-31T00:00:00+09:002020-12-31T08:00:00+09:00https://sylim2357.github.io/paper%20review/sac<p>Arxiv <a href="https://arxiv.org/abs/1812.05905">링크</a></p>
<p>버클리와 구글에서 쓴 논문. 보통 액터-크리틱 기법은 온폴리시로 학습되지만, 이 논문에서는 오프폴리시 액터-크리틱 기법을 소개하고 최대 엔트로피를 적용했다. Soft Actor-Critic (SAC)을 소개한 <a href="https://arxiv.org/abs/1801.01290">이전 논문</a>의 리패키지 에디션이다.</p>
<h1 id="introduction">Introduction</h1>
<blockquote>
<p>Our method is, to our knowledge, the first off-policy actor-critic method in the maximum entropy reinforcement learning framework.</p>
</blockquote>
<p>모델-프리 심층강화학습 기법이 실제 문제에 적용되는 데 크게 두가지 걸림돌이 있다. 먼저는 sample inefficiency라고 하는 문제로, 정책을 학습하는 데에 필요한 샘플 (경험)의 갯수가 환경의 복잡도에 대해서 기하급수적으로 많이 필요하다는 것이다. 또 하나는 이 기법이 하이퍼파라미터에 대해서 상당히 불안정하다는 것이다. 로보틱스 등 환경과 무한정으로 상호작용하기 힘든 실제 문제 상황에서는 특히나 큰 문제점으로 작용한다.</p>
<p>샘플 비효율성은 온폴리시 기법에서 특히 문제가 된다. 해당 정책을 따라서 상호작용을 하여 얻은 정보는 그 정책을 업데이트 하는 순간 쓸모가 없어지기 때문이다. 즉, 정책을 업데이트 하는 주기마다 새로운 정보가 지속적으로 필요하게 된다. 반면 오프폴리시 기법은 상호작용 데이터를 모아두었다가 정보를 추출할 수 있어 샘플 효율성에 이득이 있으나, 가치함수 근사방법으로 쓰는 뉴럴넷 등의 복잡한 함수는 하이퍼파라미터의 조정에 민감하게 반응한다는 단점을 가지고 있다. 특히 연속적인 상태/행동 도메인에서는 더 큰 문제가 된다.</p>
<p>샘플 효율성과 하이퍼파라미터 민감성을 둘 다 잡기 위해서 이 논문은 최대 엔트로피 방법 기반의 오프폴리시 기법인 Soft Actor-Critic을 제안한다. 오프폴리시이기 때문에 샘플 효율성이 뛰어나고, 최대엔트로피 기반의 방법이기 때문에 학습의 안정성을 확보할 수 있다.</p>
<p>저자는 SAC가 아래의 세 부분으로 이루어져 있다고 설명한다.</p>
<ol>
<li>
<p>정책과 가치를 학습하는 액터-크리틱 기반의 구조</p>
</li>
<li>
<p>샘플 효율성을 위한 오프폴리시 기법</p>
</li>
<li>
<p>안정성과 exploration을 위한 최대 엔트로피의 적용</p>
</li>
</ol>
<p>오프폴리시 액터-크리틱 기법은 이번이 처음은 아니다, DDPG (Deep Deterministic Policy Gradient)의 경우에는 Q함수를 사용하여 오프폴리시를 이루었고, 이 Q함수를 최대화하는 deterministic action 함수를 학습하는 형태로 액터-크리틱을 구현하였다. 하지만, SAC는 stochastic actor를 사용하고 정책의 엔트로피를 최대화시키는 방안을 적용하여서 안정적인 학습과 나은 exploration을 얻었으며, 벤치마크 성능도 DDPG를 능가하였다.</p>
<h1 id="preliminaries">Preliminaries</h1>
<h2 id="notation">Notation</h2>
<p>사용될 표기법과 가정을 알아본다.</p>
<p>MDP \((\mathcal{S},\mathcal{A}, p, r)\)이 있다고 하자. 상태 공간 \(\mathcal{S}\)과 행동 공간 \(\mathcal{A}\)는 연속이고, 상태 전이 확률 \(p:\mathcal{S}\times \mathcal{S}\times\mathcal{A}\rightarrow[0,\infin)\)은 현재 상태 \(\bold{s}_t\in\mathcal{S}\)와 행동 \(\bold{a}_t\in\mathcal{A}\)가 주어졌을 때 다음 상태 \(\bold{s}_{t+1}\in\mathcal{S}\)로 전이될 확률을 나타낸다고 하자. 보상 \(r:\mathcal{S}\times\mathcal{A}\rightarrow[r_{min},r_{max}]\)은 각 전이에서 발생되며 유계이다. 또한 \(\rho_{\pi}(\bold{s}_t)\)와 \(\rho_{\pi}(\bold{s}_t,\bold{a}_t)\)는 정책 \(\pi(\bold{a}_t\mid\bold{s}_t)\)를 따를 때 생성되는 경로에서 \(\bold{s}_t\)와 \((\bold{s}_t,\bold{a}_t)\)가 나타날 marginal probability를 나타낸다.</p>
<h2 id="maximum-entropy-reinforcement-learning">Maximum Entropy Reinforcement Learning</h2>
<p>보통 강화학습의 목표는 기대 보상의 합 \(\sum_{t}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\rho_{\pi}}[r(\bold{s}_t,\bold{a}_t)]\)을 최대화시키는 정책 \(\pi(\bold{a}_t\mid\bold{s}_t)\)을 찾는 것이다. 이것을 일반화시킨 최대 엔트로피 강화학습은 <strong>목표함수에 정책의 엔트로피를 포함시킨다.</strong> 즉, 기대 보상을 최대화시킬 뿐 아니라 각 상태에서 택하는 정책의 엔트로피 또한 최대화해야하는 것이다. 최대 엔트로피 최적 정책은 아래와 같이 표현할 수 있다.</p>
\[\pi^*=\text{arg}\underset{\pi}{\text{max}}\sum\limits_{t}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\rho_{\pi}}[r(\bold{s}_t,\bold{a}_t)+\alpha\mathcal{H}(\pi(\cdot\mid\bold{s}_t))]\]
<p>\(\mathcal{H}(\pi(\cdot\mid\bold{s}_t))\)는 정책 \(\pi\)를 따랐을 때 상태 \(\bold{s}_t\)에서 택할 행동의 확률분포의 엔트로피를 나타내는 것이다. 일반적으로 기대 보상의 합을 최대화시키려고 하면 정책은 deterministic해지려는 경향이 있기 때문에, 엔트로피를 최대화시키라는 목표와 상충된다. 높은 엔트로피를 갖기 위해서는 취할 수 있는 행동에 최대한 공평한 확률을 부여해야하기 때문이다. <strong>보상은 뾰족한 정책을, 엔트로피는 평평한 정책을 만드려고 하는 것이다.</strong> 즉, 엔트로피 항 앞에 있는 \(\alpha\)라는 하이퍼파라미터는 (temperature parameter라고 불린다.) 정책의 랜덤성을 결정짓는다. \(\alpha=0\)일 경우에는 전통적인 강화학습 문제로 돌아갈 수 있다. Infinite horizon문제일 경우 discount factor \(\gamma\)를 적용해야 하는데, 아래와 같이 formulate될 수 있다.</p>
\[J(\pi)=\sum\limits^{\infin}_{t=0}\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\rho_\pi}\Bigg[\sum\limits^{\infin}_{l=t}\gamma^{l-t}\mathbb{E}_{\bold{s}_l\sim p,\bold{a}_l\sim \pi}[r(\bold{s}_t,\bold{a}_t)+\mathcal{H}(\pi(\cdot\mid\bold{s}_t))\mid\bold{s}_t,\bold{a}_t]\Bigg]\]
<p>풀어서 설명하면, 모든 상태-행동 쌍에서 시작할 때 얻게 되는 기대 보상과 엔트로피를 할인하여 합한 것을 시작 상태-행동 분포에 따라서 기댓값을 구한 것의 합이다. 현재 정책 \(\pi\) 하의 상태-행동 쌍은 분포 \(\rho_{\pi}\)를 따른다.</p>
<p>이와 같이 최대 엔트로피를 강화학습 목표에 적용했을 때 얻는 이점이 크게 세 가지가 있다. 첫 번째로, 일반 강화학습 목표를 최대화하려고 할 때보다 더 탐험을 많이 하면서 가망이 없어보이는 행동은 과감히 포기한다. 현재 최적이라고 생각하지는 않지만 가능성이 있어보이는 행동을 취할 확률이 높아진다는 것이다. 둘째로, 최적에 가까운 행동을 여러개 찾는 효과를 보게 된다.</p>
<p>정리하자면, 정책의 엔트로피를 최대화하는 동시에 보상도 챙겨야 하기 때문에 <strong>기대 보상이 높을 것 같은 행동을 여러 개 찾아내어 비슷한 확률을 배정하고, 기대 보상이 낮을 것 같은 행동들은 일찍이 포기</strong>해버리는 결과를 보게 된다. 마지막으로는 학습 속도의 개선이 있었다고 한다.</p>
<h2 id="soft-q-learning">Soft Q-Learning</h2>
<p>저자가 쓴 이전 <a href="https://arxiv.org/abs/1702.08165">논문</a>에서도 엔트로피 기반 강화학습이 사용되었다. 하지만 이전 논문은 Q학습에 analogous한 soft Q-Learning을 제시함으로서 \(Q^*_{soft}\)와 \(V^*_{soft}\)을 찾는 부분이 포함되어 있다. \(Q_{soft}\)와 \(V_{soft}\)는 아래에서 정의할 것이나, 우리가 알고있는 가치함수에 정책의 엔트로피를 더한 것이라고 생각하면 된다. Soft Q-Learning 논문에서 정의한 \(Q^*_{soft}\)와 \(V^*_{soft}\), 이를 바탕으로 정의한 soft Bellman Equation 모두 최적을 잘 찾아간다고 증명되었으나, 모든 가치 기반 기법이 그렇듯 Q값을 과대추측하는 경향이 있다. Positive bias가 있는 것이다. Bellman backup에서 Jensen’s Inequality를 사용하면 아래와 같은 식을 도출할 수 있다.</p>
\[⁍\]
<p>윗줄에 나와있는 \(\text{max}\,\mathbb{E}\)표현이 실제 Q값이고, 아랫줄에 있는 표현이 업데이트를 통해 얻는 값이다. 즉, 실제 구하고자하는 값의 상한으로 Q를 업데이트하고 있는 것이다. 업데이트가 진행될수록 오차는 쌓이게 된다. 이를 해결하기 위해서 SAC에서는 clipped double Q-trick이라고 불리는 방법을 사용한다. Double Q-Learning에서 사용한 방법을 연속적인 행동 도메인으로 확장시킨 것이라고 생각하면 된다.</p>
<p>또한, soft Q-Learning에서는 정책함수에 에너지 기반 함수를 사용한다. \(exp(-\mathcal{E}(\bold{s}_t,\bold{a}_t))\)라고 표기되는 정책함수는 intractable하기 때문에 함수 근사와 행동 샘플링하는 데에 애를 먹어야 한다. Soft Q-Learning에서는 이 때문에 Stein Variational Gradient Descent를 활용해 함수 근사를 진행하고 샘플링을 위해서도 근사적인 방법을 사용하였다. 오차가 있는 것은 물론 연산량도 늘어난다. Soft Actor-Critic에서는 정책함수를 tractable하게 유지하면서 최대한 직접적으로 근사하려고 하였다.</p>
<h1 id="model">Model</h1>
<h2 id="soft-policy-iteration">Soft Policy Iteration</h2>
<blockquote>
<p>We instead evaluate the Q-function of the current policy and update the policy through an off-policy gradient update.</p>
</blockquote>
<p>Soft Q-Learning때와 마찬가지로 Soft Policy Iteration을 정의한다. 기존 policy iteration처럼 policy evaluation과 policy improvement 단계로 이루어져 있다. 행동이 countable finite이고 정책이 parameterized density인 경우를 가정하여 먼저 살펴본다.</p>
<p><strong>Policy Evaluation step</strong>에서는 최대 엔트로피 목표를 최대화하는 정책 \(\pi\)를 따랐을 때의 가치를 계산한다. \(\pi\)가 고정되어있다고 가정하고 soft Q-value 업데이트를 하면 \(Q^{\pi}\)를 얻을 수 있다. 이때 사용하는 Bellman backup operator \(\mathcal{T}^{\pi}\)는 아래와 같이 주어진다.</p>
\[\mathcal{T}^{\pi}Q(\bold{s}_t,\bold{a}_t)\triangleq r(\bold{s}_t,\bold{a}_t)+\gamma\,\mathbb{E}_{\bold{s}_{t+1}\sim p}[V(\bold{s}_{t+1})]\newline V(\bold{s}_t)=\mathbb{E}_{\bold{a}_t\sim\pi}[Q(\bold{s}_t,\bold{a}_t)-\alpha \log\pi(\bold{a}_t\mid\bold{s}_t)]\]
<p>Bellman Operator는 전통적인 강화학습과 같은 대신 soft value function \(V(\bold{s}_t)\)에 엔트로피 항이 추가된 것을 볼 수 있다. Statement를 정리하자면,</p>
<p><strong>Lemma 1</strong>. 위와 같이 정의된 soft Bellman backup operator \(\mathcal{T}^{\pi}\)가 있고, \(\lvert\mathcal{A}\rvert<\infin\)인 경우에 함수 \(Q^0:\mathcal{S}\times\mathcal{A}\rightarrow\mathbb{R}\)가 있다고 하자. \(Q^{k+1}=\mathcal{T}^\pi Q^k\)라고 한다면 \(Q^k\)의 수열은 \(Q^\pi_{soft}\) (\(\pi\)에서의 soft Q값)으로 수렴한다.</p>
<p>\(r_\pi(\bold{s}_t,\bold{a}_t)\triangleq r(\bold{s}_t,\bold{a}_t)+\mathbb{E}_{\bold{s}_{t+1}\sim p}[\mathcal{H}(\pi(\cdot\mid\bold{s}_{t+1}))]\)이라고 정의하고 아래와 같은 업데이트를 진행한다면 일반 policy evaluation에서 보인 것과 같은 결과를 보일 수 있다.</p>
\[Q(s,a)\leftarrow r_\pi(s,a)+\gamma\,\mathbb{E}_{\bold{s}_{t+1}\sim p,\,\bold{a}_{t+1}\sim \pi}[Q(\bold{s}_{t+1},\bold{a}_{t+1})]\]
<p>\(\mid\mathcal{A}\mid<\infin\)은 엔트로피를 적용한 보상 \(r_\pi\)가 유계이기 위해 필요한 조건이다. 즉, soft Q value는 아래와 같이 정의된다고 이해할 수 있다.</p>
\[Q^\pi(\bold{s}_t,\bold{a}_t)=r(\bold{s}_t,\bold{a}_t)+\mathbb{E}_{(\bold{s}_{t+1},\bold{a}_{t+1},\dots)\sim p_\pi}\bigg[\sum\limits^{T}_{l=1}r(\bold{s}_{t+l},\bold{a}_{t+l})-\alpha\log\pi(\bold{a}_{t+l}\mid\bold{s}_{t+l})\bigg]\]
<p><strong>Policy Improvement step</strong>에서는 soft Q function의 exponential과 비례하게 정책을 업데이트 한다. 이렇게 할 경우 각 업데이트 단계마다 더 나은 정책을 얻게 되며, tractable한 정책을 얻기 위해 parameterized distribution family \(\Pi\)에 속하는 정책만을 고려한다. 각 단계마다 \(\Pi\)에 속한 정책 중 soft Q function과 가장 가까운 것으로 정책을 업데이트 한다. 위에서 본 \(J\)를 전개해보면 아래와 같이 나온다.</p>
\[J(\pi)=\mathbb{E}_{(\bold{s}_0,\bold{a}_0)}[Q^\pi(\bold{s}_0,\bold{a}_0)-\alpha\log\pi(\bold{a}_0\mid\bold{s}_0)]\newline=-\mathbb{E}_{\bold{s}_0}\bigg[\text{D}_\text{KL}\bigg(\pi(\cdot\mid\bold{s}_0)\Bigg\|\text{exp}\bigg(\frac{1}{\alpha}Q^\pi(\bold{s}_0,\cdot)\bigg)\bigg)\bigg]+constant\]
<p>위의 KL발산을 줄이는 정책을 찾는 것이 목표함수를 최대화하는 것과 같은 효과이다. 즉, 아래와 같은 목표를 얻을 수 있다.</p>
\[\pi_{\text{new}}=\text{arg}\underset{\pi'\in\Pi}{\text{min}}\,\text{D}_\text{KL}\Bigg(\pi'(\cdot\mid\bold{s}_t)\Bigg\|\frac{\text{exp}(\frac{1}{\alpha}Q^{\pi_{\text{old}}}(\bold{s}_t,\cdot))}{Z^{\pi_{\text{old}}}(\bold{s}_t)}\Bigg)\]
<p>\(Z^{\pi_{\text{old}}}\)는 분포를 normalizing해주는 표현으로, intractable하지만 그래디언트에 기여하는 바가 없기 때문에 무시해도 괜찮다. 이 내용을 정리하면,</p>
<p><strong>Lemma 2</strong>. \(\pi_{\text{old}}\in\Pi\)이고 위와 같이 정의된 \(\pi_{\text{new}}\)가 있다고 하자. \(\lvert\mathcal{A}\rvert<\infin\)일 때 모든 \((\bold{s}_t,\bold{a}_t)\in\mathcal{S}\times\mathcal{A}\)에 대해서 \(Q^{\pi_{\text{new}}}(\bold{s}_t,\bold{a}_t)\geq Q^{\pi_{\text{old}}}(\bold{s}_t,\bold{a}_t)\)가 성립한다.</p>
<p>위에서 살펴본 Policy Evaluation이랑 Policy Improvement을 번갈아서 적용하면 최적의 정책을 찾을 수 있다. Soft Policy Iteration이라고 이름붙인 이 기법을 정리하면 아래와 같다.</p>
<p><strong>Theorem 1</strong>. 어떠한 \(\pi\in\Pi\)에 Policy Evaluation과 Policy Improvement을 적용하면 \(\lvert\mathcal{A}\rvert<\infin\)일 때 모든 \((\bold{s}_t,\bold{a}_t)\in\mathcal{S}\times\mathcal{A}\)에 대해서 \(Q^{\pi^*}(\bold{s}_t,\bold{a}_t)\geq Q^{\pi}(\bold{s}_t,\bold{a}_t)\)을 만족하는 \(\pi^*\in\Pi\)에 수렴한다.</p>
<p>위의 정리가 성립하기 위해서는 countable finite하다는 tabular setting이 있어야만 한다. 실제 문제에 적용하기 위해서는 continuous domain에 적용해야 하고, 최적 값에 수렴할때까지 두 방법을 사용하는 것은 연산량이 너무 많기 때문에 Soft Actor Critic이라는 실용적인 알고리즘을 제안한다.</p>
<h2 id="soft-actor-critic">Soft Actor-Critic</h2>
<p>Policy Evaluation과 Policy Improvement를 적용하는 것은 수렴할때까지 너무 오랜 시간이 걸리기 때문에 soft Q함수와 soft policy함수를 나타내는 function approximator를 각각 만든 후 각 함수를 번갈아서 피팅한다. Soft Q함수는 \(\theta\)라는 파라미터를 가지는 뉴럴넷 \(Q_\theta(\bold{s}_t,\bold{a}_t)\)로 근사하고, soft 정책함수는 \(\phi\)를 파라미터로 가지는 tractable 분포 \(\pi_{\phi}(\bold{a}_t,\bold{s}_t)\)로 근사한다. 정책함수는 가우시안을 따르게 만들고, 평균과 공분산을 뉴럴넷으로 모델링한다.</p>
<p><strong>Soft Q-function</strong>은 Soft Bellman residual을 최소화하는 방향으로 학습한다. 손실함수는 아래와 같다.</p>
\[J_Q(\theta)=\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim \mathcal{D}}\bigg[\frac{1}{2}(Q_\theta(\bold{s}_t,\bold{a}_t)-(r(\bold{s}_t,\bold{a}_t)+\gamma\mathbb{E}_{\bold{s}_{t+1}\sim p}[V_{\bar\theta}(\bold{s}_t)]))^2\bigg]\]
<p>위 식의 그래디언트를 계산하면 아래와 같은 식이 나온다.</p>
\[\hat\nabla_\theta J_Q(\theta)=\nabla_\theta Q_\theta(\bold{s}_t,\bold{a}_t)\bigg(Q_\theta(\bold{s}_t,\bold{a}_t)-(r(\bold{s}_t,\bold{a}_t)+\gamma(Q_{\bar\theta}(\bold{s}_t,\bold{a}_t)-\alpha\log(\pi_\phi(\bold{a}_t\mid\bold{s}_t)))\bigg)\]
<p>여기서 target부분에 \(\bar\theta\)가 들어가있는 것을 볼 수 있는데, 이전 스텝들에서 얻은 \(\theta\)의 exponentially moving average를 사용한 것이다. 안정적인 학습을 위해 사용되었다.</p>
<p><strong>Soft Policy function</strong>은 <em>**</em>위에서 본 KL발산 표현을 줄이는 방향으로 학습된다. 손실함수는 아래와 같다. 각 상태에 대해서 KL발산을 줄여야 하기 때문에 기댓값이 두 개 들어간 것을 볼 수 있다. KL발산의 정의를 사용하여 전개하면 쉽게 얻을 수 있다.</p>
\[J_\pi(\phi)=\mathbb{E}_{\bold{s}_t\sim \mathcal{D}}[\mathbb{E}_{\bold{a}_t\sim\pi_\phi}[\alpha\log\pi_\phi(\bold{a}_t\mid\bold{s}_t)-Q_\theta(\bold{s}_t,\bold{a}_t)]]\]
<p>Target으로 쓰이는 함수가 Q함수이기 때문에, \(\pi\)또한 Q처럼 뉴럴넷으로 모델링하여 같은 방식으로 학습하는게 편할 것이다. Reparameterization trick을 사용하여 \(\bold{a}_t=f_\phi(\epsilon_t;\bold{s}_t)\)로 모델링한다. 가우시안에서 샘플링한 노이즈 \(\epsilon_t\)를 포함하는 뉴럴넷이다. 이제 손실함수는 다음과 같이 표현될 수 있다.</p>
\[J_\pi(\phi)=\mathbb{E}_{\bold{s}_t\sim \mathcal{D},\epsilon_t\sim\mathcal{N}}[\alpha\log\pi_\phi(f_\phi(\epsilon_t;\bold{s}_t)\mid\bold{s}_t)-Q_\theta(\bold{s}_t,f_\phi(\epsilon_t;\bold{s}_t))]\]
<p>\(\pi_\phi\)는 \(f_\phi\)로 나타낼 수 있다. 이제 위 식의 그래디언트를 아래와 같이 근사한다.</p>
\[\hat\nabla_\phi J_\pi(\phi)=\nabla_\phi\alpha\log(\pi_\phi(\bold{a}_t\mid\bold{s}_t))+(\nabla_{\bold{a}_t}\alpha\log(\pi_\phi(\bold{a}_t\mid\bold{s}_t))-\nabla_{\bold{a}_t}Q(\bold{s}_t,\bold{a}_t))\nabla_\phi f_\phi(\epsilon_t;\bold{s}_t)\]
<p>\(\bold{a}_t\)는 \(f_\phi(\epsilon_t;\bold{s}_t)\)의 값을 사용한다. \(\hat\nabla_\phi J_\pi(\phi)\)는 실제 그래디언트의 불편추정량이다.</p>
<p>이전 SAC논문에서는 soft value function을 추정하는 모델이 하나 더 있었으나 불필요하다고 판단되어서 이번 논문에서는 빠졌다. Soft Actor-Critic에서 나오는 모든 \(\mathcal{D}\)는 replay memory에서 샘플링해서 하는 것으로 offline학습이 가능하다.</p>
<p>여기까지 내용이 첫 SAC <a href="https://arxiv.org/abs/1801.01290">논문</a>에서 다룬 내용이다. 하이퍼파라미터에 대해서 상당히 강건하다는 결론을 냈었는데 유일한 단점이 바로 \(\alpha\), temperature parameter에 대해서는 민감하게 반응한다는 것이었다. stochasticity를 조금만 낮추어도 뾰족한 정책이 나오고, 조금만 높여도 평평한 정책이 나왔기 때문이다. 이 문제를 해결하고자 이 논문에서는 아래와 같이 하이퍼파라미터 \(\alpha\)도 최적화 문제를 품으로서 학습하는 전략을 취했다.</p>
<h2 id="automating-entropy-adjustment-for-maximum-entropy-rl">Automating Entropy Adjustment for Maximum Entropy RL</h2>
<p>최대 엔트로피 강화학습 문제의 목표는 정책의 엔트로피를 포함한다. 매번 행동을 내리고 보상을 받을 때마다 정책은 업데이트 되는데, 그말인즉슨 정책이 업데이트 될 때마다 정책의 엔트로피가 바뀌고 강화학습 문제의 목표 또한 바뀐다는 것이다. Temperature parameter \(\alpha\)를 정하기 어려운 이유가 여기에 있는 것이다. 애초에 랜덤성을 고정시킨다는 것이 안좋은 생각이다.</p>
<p>강화학습 문제의 목표를 새로 정의함으로서 다른 접근법을 취한다. 결국 원하는 것은 매 단계마다 결정을 내릴 때 기대 보상을 최대화 하고 싶은 것은 맞으나, 어느 정도의 엔트로피 제약조건을 고려하고 싶은 것이기 때문이다. 따라서, 강화학습 문제를 아래와 같은 제약 최적화 문제로 정의할 수 있다.</p>
\[\underset{\pi_0}{\text{max}}\,\mathbb{E}_{\rho_\pi}\bigg[\sum\limits^{T}_{t=0} r(\bold{s}_t,\bold{a}_t)\bigg] \\ \text{s.t.} \quad \mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\rho_\pi}[-\log(\pi_t(\bold{a}_t\mid\bold{s}_t))]\geq\mathcal{H}\quad\forall t\]
<p>\(\mathcal{H}\)라는 엔트로피 하한을 만족하면서 기대 보상 합을 최대화하라는 것이다. Fully Observed MDP에서는 deterministic한 정책이 최적이기 때문에 하한 \(\mathcal{H}\)의 존재 자체가 tight한 조건을 주는 것이라고 이해할 수 있다. 이제 거꾸로 풀어 들어가는 동적계획법 접근을 취해서 기대보상 합을 최대화시키는 문제를 재귀적으로 전개해보자.</p>
\[\underset{\pi_0}{\text{max}}\bigg(\mathbb{E}[r(\bold{s}_t,\bold{a}_t)]+\underset{\pi_1}{\text{max}}\bigg(\mathbb{E}[\dots]+\underset{\pi_T}{\text{max}}\,\mathbb{E}[r(\bold{s}_T,\bold{a}_T)]\bigg)\bigg)\]
<p>위와 같은 식이 될 것이다. 마지막 제약 최적화문제를 생각해보자.</p>
\[\underset{\pi_T}{\text{max}}\,\mathbb{E}_{(\bold{s}_t,\bold{a}_t)\sim\rho_\pi}[r(\bold{s}_T,\bold{a}_T)]\\ \text{s.t.}\quad\mathbb{E}_{(\bold{s}_T,\bold{a}_T)\sim\rho_\pi}[-\log(\pi_T(\bold{a}_T\mid\bold{s}_T))]\geq\mathcal{H}\]
<p>쌍대변수 \(\alpha_T\)를 소개하여 강한 쌍대성 원리를 적용하게 되면 위의 목적함수는 아래와 같이 된다.</p>
\[\underset{\alpha_T\geq0}{\text{min}}\,\underset{\pi_T}{\text{max}}\,\mathbb{E}[r(\bold{s}_T,\bold{a}_T)-\alpha_T\log\pi(\bold{a}_T\mid\bold{s}_T)]-\alpha_T\mathcal{H}\]
<p>목적함수가 선형이고 제약함수가 엔트로피에 대해서 볼록이기 때문에 가능한 것이다. 여기서 얻을 수 있는 최적 정책은 \(\alpha_T\)가 주어졌을 때의 최적 정책 \(\pi^*_T(\bold{a}_T\mid\bold{s}_T;\alpha_{T})\)이다.</p>
<p>이젠 \(T-1\)번째의 제약 최적화 문제를 생각해보자. \(T\)와 \(T-1\)번째 정책의 엔트로피 제약조건을 고려했을 때 아래의 목적을 이루는 것이다.</p>
\[\underset{\pi_{T-1}}{\text{max}}\bigg(\mathbb{E}[r(\bold{s}_{T-1},\bold{a}_{T-1})]+\underset{\pi_T}{\text{max}}\,\mathbb{E}[r(\bold{s}_T,\bold{a}_T)]\bigg)\]
<p>여기서 아래와 같은 soft Q-function 표현을 위에 대입하고 쌍대성 원리를 다시 적용하면,</p>
\[Q^*_t(\bold{s}_t,\bold{a}_t;\pi^*_{t+1:T},\alpha^*_{t+1:T})=\mathbb{E}[r(\bold{s}_t,\bold{a}_t)]+\\ \qquad \qquad \qquad \qquad \qquad \qquad \mathbb{E}_{\rho_\pi}[Q^*_{t+1}(\bold{s}_{t+1},\bold{a}_{t+1})-\alpha^*_{t+1}\log\pi^*_{t+1}(\bold{a}_{t+1}\mid\bold{s}_{t+1})]\]
\[\underset{\pi_{T-1}}{\text{max}}\bigg(\mathbb{E}[r(\bold{s}_{T-1},\bold{a}_{T-1})]+\underset{\pi_T}{\text{max}}\,\mathbb{E}[r(\bold{s}_T,\bold{a}_T)]\bigg)\\=\underset{\pi_{T-1}}{\text{max}}\bigg(Q^*_{T-1}(\bold{s}_{T-1},\bold{a}_{T-1})-\alpha^*_T\mathcal{H}(\pi^*_T)\bigg)\\=\underset{\alpha_{T-1}\geq0}{\text{min}}\,\underset{\pi_{T-1}}{\text{max}}\bigg(\mathbb{E}[Q^*_{T-1}(\bold{s}_{T-1},\bold{a}_{T-1})]-\mathbb{E}[\alpha_{T-1}\log\pi(\bold{a}_{T-1}\mid\bold{s}_{T-1})]-\alpha_{T-1}\mathcal{H}\bigg)-\alpha^*_{T}\mathcal{H}(\pi^*_T)\]
<p>이러한 문제로 다시 만들 수 있으며, 바로 위에서 다룬 \(T\)번째 최적화 문제를 푸는것과 동일한 형태가 된다. 결국 \(\alpha\)를 어떻게 구할 수 있느냐.</p>
\[\alpha^*_{t}=\text{arg}\underset{\alpha_t}{\text{min}}\mathbb{E_{\bold{a}_t\sim\pi^*_t}}[-\alpha_t\log\pi^*_t(\bold{a}_t\mid\bold{s}_t;\alpha_t)-\alpha_t\bar\mathcal{H}]\]
<p>매 단계의 최적화 문제를 풀 때마다 위와 같은 식의 \(\alpha\)를 구하면 된다는 것을 알 수 있다. 마지막 문제부터 풀어서 제일 바깥쪽에 있는 문제까지 계산해낼 수 있는 것이다.</p>
<h2 id="practical-algorithm">Practical Algorithm</h2>
<p>종합하여 알고리즘을 살펴보자.</p>
<p><img src="/assets/images/sac-01.png" alt="" /></p>
<p>먼저, 앞서 설명한 가치기반 알고리즘의 고질적인 문제점인 value overestimation을 해결하기 위해서 soft Q-function을 두 개를 사용하였다. 두 개의 Q함수를 각각 \(J_Q(\theta_i)\)를 최소화하는 방향으로 업데이트 하면서 두 함수 중 최소값을 반환하는 함수를 Q함수 학습에 필요한 그래디언트를 구하는 부분과 정책함수 학습에 사용한다.</p>
<p>또한, 위에서 설명한 \(\alpha\)를 구하는 이론적인 방법은 사실 현실적이지 않다. 몇 개의 최적화 문제를 풀어야 하는지 생각해보면 알 수 있다. 대신, dual gradient descent라는 기법을 사용한다. 라그랑지안을 원문제 변수와 쌍대문제 변수에 대해서 각각 수렴할때까지 번갈아서 경사하강을 실시하는 방법이다. \(\alpha\)에 대해서 경사하강을 실시해야 한다는 말이기도 한데, 아래의 손실함수를 사용하여 \(\alpha\)를 학습한다.</p>
\[J(\alpha)=\mathbb{E}_{\bold{a}_t\sim\pi_t}[-\alpha\log\pi_t(\bold{a}_t\mid\bold{s}_t)-\alpha\bar\mathcal{H}]\]
<p>결국 위에 나와있는 알고리즘을 보면, 현재 정책을 따라가면서 상호작용 정보를 얻는 단계와 replay buffer에서 샘플링한 batch를 통해 function approximator들을 업데이트하는 단계를 번갈아서 진행한다.</p>
<h1 id="my-conclusion">My Conclusion</h1>
<p>오랜만에 최적화랑 강화학습 전반에 대해서 다시 복습해야 이해할 수 있는 논문이었던 것 같다.</p>펭긴새sylim2357@gmail.comHaarnoja, Tuomas, et al. "Soft actor-critic algorithms and applications." arXiv preprint arXiv:1812.05905 (2018).[Paper Review] Addressing Function Approximation Error in Actor-Critic Methods2020-12-29T00:00:00+09:002020-12-29T08:00:00+09:00https://sylim2357.github.io/paper%20review/td3<p>Arxiv <a href="https://arxiv.org/abs/1802.09477">링크</a></p>
<p>TD3 논문. 가치기반 강화학습 알고리즘에서 overestimation bias가 발생하는 현상은 널리 알려진 사실이며 많은 연구가 진행된 부분이다. 이 overestimation bias는 가치함수를 근사하는 함수근사 방법에서 발생하는 오차가 중첩된다는 점과 TD-Learning을 통해 진행되는 bootstrapping이 주 원인이다. 이 논문에서는 Actor-Critic 기법에서도 가치기반 기법에서 나타나는 overestimation bias가 똑같이 나타나는 것을 발견하여 이를 해결하고 분산을 줄이고자 한다. DPG에서 일어나는 overestimation bias를 기반으로 DPG 알고리즘을 개선하는 방안을 제안한다.</p>
<h1 id="introduction">Introduction</h1>
<p>가치기반 기법의 일종인 Q-Learning을 생각해보자. Tabular setting에서 Q-Learning은 Q값을 추정하는 데에 미래 Q값의 최댓값을 사용한다. 근데 Q값이라는 것 자체가 approximation이기 때문에 부정확하고, 부정확한 값의 최댓값을 사용하는 것은 가장 큰 노이즈를 채택하는 것과 같다. 계속해서 overestimation이 생기는 것이다. 게다가 Q값을 추정하기 위해 이전 단계에서 추정한 Q값을 사용하는 bootstrapping이 진행된다. 추정치를 사용하여 추정하기 때문에 에러가 계속해서 쌓인다.</p>
<p>이 논문은 강화학습 알고리즘, 특히 actor-critic기법에서 발생하는 overestimation bias와 high variance문제를 해결하기 위해 TD3 (Twin Delayed Deep Deterministic) policy gradient algorithm을 제안한다.</p>
<h1 id="background">Background</h1>
<p>먼저 Actor-Critic을 복습할 것이다. 이를 위해 강화학습의 목적을 생각하자. 아래 목적 함수 (기대 보상) 를 최대화시키는 정책 \(\pi_\phi\)를 찾는 것이 목적이다. \(\phi\)는 정책의 파라미터이다.</p>
\[J(\phi)=\mathbb{E}_{s_i\sim p_\pi,a_i\sim\pi}[R_0]\]
<p>Actor-critic 기법에서는 정책을 찾기 위해 \(J(\phi)\)를 증가시키는 방향으로 \(\phi\)를 바꾸어간다. Deterministic action을 가정했을 때, \(\nabla_\phi J(\phi)\)는 아래와 같이 나타낼 수 있다. (DPG논문에서 보인 Deterministic Policy Gradient)</p>
\[\nabla_\phi J(\phi)=\mathbb{E}_{s\sim p_\pi}[\nabla_\phi\pi_\phi(s)\nabla_aQ^\pi(s,a)\mid _{a=\pi(s)}]\]
<p>\(Q^\pi(s,a)=\mathbb{E}_{s\sim p_\pi,a_i\sim\pi}[R^t\mid s,a]\)는 상태 \(s\)에서 행동 \(a\)를 택한 후 정책 \(\pi\)를 따라갔을 때의 기대 보상이다. Actor는 \(\nabla_\phi J(\phi)\)의 방향으로 정책을 업데이트 하고, Critic은 \(Q^\pi\)를 업데이트 한다.</p>
<h1 id="overestimation-bias">Overestimation Bias</h1>
<p>Discrete action 상황에서 Q-Learning을 생각해보면 Q값을 추정하는데 쓰이는 타겟은 \(y=r+\gamma\,\underset{a'}{\text{max}}\,Q(s',a')\)으로 나타낼 수 있다. \(Q\)값에 에러 \(\epsilon\)이 있다고 생각하면 타겟에도 그 에러가 전달이 되는데, 에러가 들어간 \(Q\)값의 최댓값을 생각해보면 에러가 없는 \(Q\)값의 최댓값에 비해 크다는 것을 알 수 있다. 즉, \(\mathbb{E}_\epsilon[\underset{a'}{\text{max}}(Q(s',a')+\epsilon)]\geq\underset{a'}{\text{max}}\,Q(s',a')\)인 것이다. \(\epsilon\)의 기댓값이 0이어도 \(\text{max}\)를 취하기 때문에 에러가 계속해서 쌓이게 된다. 여기까지가 지금까지 충분히 연구된 Q-Learning에서의 overestimation bias이다. 이 논문에서는 이 아이디어를 actor-critic으로 확장한다.</p>
<h2 id="overestimation-bias-in-actor-critic">Overestimation Bias in Actor-Critic</h2>
<p>Actor-Critic기법에서 정책은 Actor가 Policy Gradient에 따라서 정책의 파라미터를 조정하면서 찾아진다. 정책 \(\pi\)와 그 파라미터 \(\phi\)가 있을 때, 이 파라미터가 어떻게 업데이트 되는지에 따라서 \(\phi_{\text{approx}}\)과 \(\phi_{\text{true}}\)를 정의할 것이다. 먼저 \(\phi_{\text{approx}}\)은 Policy Gradient에 사용되는 \(Q\)함수로 \(\text{max}\)를 통해 추정한 \(Q_\theta\)을 사용한 파라미터라고 정의한다. 반대로 \(\phi_{\text{true}}\)는 ‘true value function’인 \(Q^\pi\)를 통해서 업데이트 된 파라미터라고 정의한다. \(Q^\pi\)는 우리가 실제로 알 수 없는 이론적인 값을 말한다. 아래와 같이 쓸 수 있다.</p>
\[\phi_{\text{approx}}=\phi+\frac{\alpha}{Z_1}\mathbb{E}_{s\sim p_\pi}[\nabla_\phi\pi_\phi(s)\nabla_aQ_\theta(s,a)\mid_{a=\pi_\phi(s)}]\]
\[\phi_{\text{true}}=\phi+\frac{\alpha}{Z_2}\mathbb{E}_{s\sim p_\pi}[\nabla_\phi\pi_\phi(s)\nabla_aQ^\pi(s,a)\mid_{a=\pi_\phi(s)}]\]
<p>두 파라미터의 다른 점은 어떠한 \(Q\)값을 사용하느냐 (우리가 추정한 값인지 실제 값인지)와 learning rate을 normalize해주는 \(Z\)값 뿐이다. \(Z\)는 \(Z^{-1}\lVert\mathbb{E}[\cdot]\rVert=1\)이 되게 설정한 인위적인 값이다. \(Z\)가 없는 일반적인 케이스에도 아래의 내용이 성립하나 좀 더 간단한 논리 전개를 위해 \(Z\)를 활용한다. 또한, 어떠한 \(\phi\)업데이트를 사용하냐에 따라 업데이트된 파라미터를 사용하는 정책을 \(\pi_{\text{approx}}\)와 \(\pi_{\text{true}}\)라고 하자.</p>
<p>먼저, \(\pi_{\text{approx}}\)와 \(\pi_{\text{true}}\)의 추정 value 값, 즉 \(Q_\theta(s,\pi_{\text{approx}})\)와 \(Q_\theta(s,\pi_{\text{true}})\)를 생각해보자. \(\phi_{\text{approx}}\)는 \(Q_\theta\)를 최대화하는 방향으로 업데이트 되기 때문에 업데이트하는 스텝 사이즈를 충분히 작게 한다면 \(\phi_{\text{true}}\)를 사용한 것보다 \(\phi_{\text{approx}}\)를 사용한 정책의 추정치를 더 높게 할 수 있음을 알 수 있다. \(\phi_{\text{true}}\)는 \(Q_\theta\)가 아니라 \(Q^\pi\)를 최대화 하는 방향으로 업데이트된 값이기 때문이다. 즉,</p>
\[\exist\epsilon_1:\alpha\le\epsilon_1\Rightarrow \mathbb{E}[Q_\theta(s,\pi_{\text{approx}}(s))]\ge\mathbb{E}[Q_\theta(s,\pi_{\text{true}}(s))]\]
<p>비슷하게 \(\pi_{\text{approx}}\)와 \(\pi_{\text{true}}\)의 실제 value 값, 즉 \(Q^\pi(s,\pi_{\text{approx}})\)와 \(Q^\pi(s,\pi_{\text{true}})\)를 생각하면 반대의 표현을 얻을 수 있다.</p>
\[\exist\epsilon_2:\alpha\le\epsilon_2\Rightarrow \mathbb{E}[Q^\pi(s,\pi_{\text{true}}(s))]\ge\mathbb{E}[Q^\pi(s,\pi_{\text{approx}}(s))]\]
<p>이제 가치기반 기법에서 overestimation bias를 생각하면 \(\pi_{\text{true}}\)의 실제 value와 추정 value 사이의 대소관계를 알 수 있다. \(\mathbb{E}[Q_\theta(s,\pi_{\text{true}}(s))]\ge\mathbb{E}[Q^\pi(s,\pi_{\text{true}}(s))]\) 이라고 한다면, 이제 \(\alpha\)를 위의 \(\epsilon_1\)이나 \(\epsilon_2\)보다 작게 잡으면 새로운 부등식을 얻는다.</p>
\[\exist\epsilon_1,\epsilon_2:\alpha\le\text{min}(\epsilon_1,\epsilon_2)\Rightarrow \\
\mathbb{E}[Q_\theta(s,\pi_{\text{approx}}(s))]\ge\mathbb{E}[Q^\pi(s,\pi_{\text{approx}}(s))]\]
<p>Actor-Critic에서의 overestimation bias이다! Iteration을 거듭하면 위 에러가 critic에 계속해서 쌓이게 되고, 그 critic에 기반하여 정책을 만드는 actor 또한 최적이 아닌 정책을 만들게 된다. 이게 반복되면 피드백 루프가 생기는데, suboptimal action이 suboptimal critic에 의해서 고평가받게 되고, 다음 정책이 해당 suboptimal action을 선택하는 방향으로 업데이트되는 결론이 나오기 때문에 계속해서 안좋은 방향으로 나아가는 것이다.</p>
<h2 id="clipped-double-q-learning-for-actor-critic">Clipped Double Q-Learning for Actor-Critic</h2>
<p><strong>과대평가보다는 과소평가가 낫다. \(Q\)함수 2개를 사용해서 작은 놈을 사용하자.</strong></p>
<p>지금까지 overestimation bias를 해결하기 위한 방법이 많이 제시되었으나 actor-critic setting에서는 별로 쓸모가 없었고, 해당 논문은 Double Q-Learning에서 제안한 방법을 조금 변형해서 모든 actor-critic 기법에서 critic에 가할 수 있는 방안을 새로 제안한다.</p>
<p>기본적으로 가치기반 기법에서 overestimation이 이루어지는 이유는 action을 선택하는 데에 쓰이는 함수와 그 action을 사용하여 value를 추정하는 함수가 같기 때문이다. 같은 함수는 같은 오차를 가지고 있기 때문에 중첩이 일어나는 것이다. 이 말은 \(\text{max}\,Q(s,a)\)의 \(a\)를 <strong>선택</strong> (greedy update)하는 부분에 쓰이는 \(Q\)함수와 value를 <strong>평가</strong>하는데 쓰이는 \(Q\)함수를 분리하면 overestimation 현상이 완화될 수 있다는 것이다. Levine의 강의자료를 참고하면 아래와 같다.</p>
<p><img src="/assets/images/td3-01.png" alt="" /></p>
<p>Double DQN에서는 (Double Q-Learning 이후에 나온 논문이다. 헷갈리지 말자.) 평가에 타겟 네트워크를 사용하였고 선택에 현재 네트워크를 사용하였다. 타겟 네트워크는 일정 스텝마다 현재 네트워크를 복사하여 freeze한 것임을 생각하면, 타겟과 현재 네트워크 간의 관계가 없다고 할 수는 없지만 이정도로만 분리해도 overestimation bias가 잡히는 모습을 볼 수 있다. (타겟에 대해서는 다음 부분에서 다룬다. 굳이 선택과 평가에 쓰이는 \(Q\)를 현재와 타겟 네트워크로 둘 필요는 없다. 그저 타겟 네트워크가 필요해서 만들어놓고 보니까 \(Q\)가 두개 생겨서 그 두개를 쓰는 것일뿐.)</p>
<p>Actor-Critic에서도 이와 같이 평가와 선택을 분리한다. Critic을 학습하기 위한 타겟을 만들 때 타겟 정책이 아닌 현재 정책 (\(\pi_\phi\)) 을 사용하는 것이다. 아래와 같다.</p>
\[y=r+\gamma Q_{\theta'}(s',\pi_\phi(s'))\]
<p>하지만 실제로 actor-critic에서 정책이 빠르게 업데이트 되지 않으면 타켓 네트워크와 현재 네트워크가 너무 비슷하여 각각의 함수를 따로 두어 추정치를 계산하는 것에 큰 메리트가 없다. 그렇기 때문에 Double Q-Learning에서 처음에 제안되었던 아래 식을 사용한다.</p>
\[y_1=r+\gamma Q_{\theta'_2}(s',\pi_{\phi_1}(s'))\\
y_2=r+\gamma Q_{\theta'_1}(s',\pi_{\phi_2}(s'))\]
<p>\(y_1\)은 \(Q_{\theta_1}\)를 업데이트 할 때 쓰이는 타겟인데, \(y_1\)을 표현하는 식 안에 \(Q_{\theta'_2}\)가 들어있는 것을 볼 수 있다. \(Q_{\theta'_2}\)는 \(Q_{\theta_2}\)를 주기적으로 복사하거나 \(\theta_2\)를 이동평균적으로 업데이트 하여 만들어지는데, 사실 이 값이 \(Q_{\theta_1}\)에 완벽히 독립적이라고 하기는 힘들다. \(Q_{\theta_2}\)를 업데이트 하는 데에도 \(Q_{\theta_1}\)의 값이 영향을 미치고, 결국 같은 replay buffer 데이터셋을 활용하여 학습되기 때문이다. 따라서, 만약 어떤 상태 \(s\)에 대해서 안그래도 overestimation bias가 있는 \(Q_{\theta_1}\)보다 더 큰 값의 \(Q_{\theta_2}\)가 사용된다면 정책을 정확히 평가할 수 없다. \(Q_{\theta_2}(s,\pi_{\phi_1}(s))\gt Q_{\theta_1}(s,\pi_{\phi_1}(s))\)일 때 \(Q_{\theta_2}\)가 사용되는 경우를 말하는 것이다.</p>
<p>이 문제를 해결하기 위해 타겟을 취할 때 \(Q_{\theta_1}\)과 \(Q_{\theta_2}\) <strong>둘 중 작은 것</strong>을 사용하는 방법을 취한다. Clipped Double Q-Learning이라고 명명한 이 방법은 아래와 같이 표현할 수 있다.</p>
\[y_1=r+\gamma\,\underset{i=1,2}{\text{min}}\,Q_{\theta'_{i}}(s',\pi_{\phi_1}(s'))\]
<p>따로 학습된 \(Q\)함수의 최솟값을 취하는 과정에서 underestimation bias가 생길 수는 있으나 overestimation bias보다는 훨씬 낫기 때문에 이 방법을 사용한다. (overestimation bias와는 다르게 underestimation bias는 iteration이 진행될 때 에러가 전파되지는 않는다. 정책은 높은 value만 택하기 때문이다.)</p>
<p>실제로 구현할 때 \(y_1=y_2\)라고 놓으면 정책을 하나만 (\(Q_{\theta_1}\)에 대해서) 학습해도 된다. 만약 \(Q_{\theta_2}\lt Q_{\theta_1}\)이면 Double DQN과 같은 꼴이 되어서 overestimation bias가 완화되고, \(Q_{\theta_2}\lt Q_{\theta_1}\)인 상황이면 \(Q_{\theta_1}\)을 추정하는 데 \(Q_{\theta_2}\)의 정보가 쓰여서 Double Q-Learning에서 설명하는 상황이 되어 overestimation bias가 완화된다.</p>
<p>Clipped Double Q-Learning을 사용하면 또 하나의 장점이 있는데, 바로 분산이 줄어든다는 것이다. 계속해서 말하는 function approximation error를 하나의 확률변수로 보았을 때, 확률변수의 분산이 증가할수록 확률 변수 집합의 최솟값의 기댓값이 줄어드는 성질을 생각해보자. Error의 분산이 클수록 최솟값이 작아져서 결국에는 정책의 선택을 못받게 된다. 즉, \(\text{min}\) operator가 있기 때문에 \(Q\)함수는 error의 분산이 적은 value 추정치를 가지는 state를 더 선호하게 될 것이다.</p>
<h1 id="addressing-variance">Addressing Variance</h1>
<p>분산을 통해 만들어진 overestimation bias를 줄이는 것 이외에도 분산 자체를 줄이는 시도를 했다. 분산이 큰 추정치는 그래디언트를 업데이트 하는 데 노이즈를 주어서 학습을 방해한다. 이 부분에서는 각 update iteration마다 발생하는 에러를 줄이는 것의 중요성과 타겟 네트워크-에러 간의 관계를 다룬다. 나아가 분산을 줄일 수 있는 Actor-Critic 알고리즘을 제안한다.</p>
<h2 id="accumulating-error">Accumulating Error</h2>
<p>TD-Learning은 bootstrapping을 사용하기 때문에 에러가 중첩되는 문제점이 있다. 추정치를 사용해서 추청하기 때문이다. 각 단계에서 발생하는 에러가 작더라도 반복되면 상당히 큰 에러가 되기 때문에 큰 문제가 될 수 있다. 뿐만 아니라, 추정치 자체를 함수 근사 방법으로 추정하기 때문에 에러가 더 심각해진다. 함수 근사 방법을 사용하면 Bellman equation을 완벽히 만족하지 못하고 residual이 항상 남게 된다. 이 residual을 TD-error \(\delta(s,a)\) 라고 부른다.</p>
\[\delta(s,a)=r+\gamma\mathbb{E}[Q_\theta(s',a')]-Q_\theta(s,a)\]
<p>\(Q_\theta\)에 대한 식으로 정리해서 하나의 time step을 추가로 전개하면 아래와 같음을 보일 수 있다.</p>
\[Q_\theta(s_t,a_t)=r_t+\gamma\mathbb{E}[Q_\theta(s_{t+1},a_{t+1})]-\delta_t\\
=r_t+\gamma\mathbb{E}[r_{t+1}+\gamma\mathbb{E}[Q_\theta(s_{t+2},a_{t+2})-\delta_{t+1}]]-\delta_t\\
=\mathbb{E}_{s_t\sim p_\pi,a_i\sim\pi}\Big[\sum\limits^{T}_{i=t}\gamma^{i-t}(r_i-\delta_i)\Big]\]
<p>Bootstrapping을 사용한다면 value 추정치인 \(Q_\theta\)는 기대 보상을 추정한다기 보다는 기대 보상에서 할일된 미래 TD-error의 기댓값을 뺀 값을 근사하는 것이다. 즉, \(Q_\theta\)의 분산은 기대 보상과 TD-error의 분산에 의해 결정된다. 특히 \(\gamma\)가 큰 경우에는 iteration이 진행될 때마다 분산이 계속 쌓인다. 게다가 미니배치 단위로 그래디언트 업데이트를 하기 때문에 에러가 전체 데이터에서 줄어든다는 보장도 없다. Overestimation 문제를 위에서 어느 정도 해결했다면, 이 부분에서는 TD-error의 분산을 해결하는 법을 살펴보자.</p>
<h2 id="target-networks-and-delayed-policy-updates">Target Networks and Delayed Policy Updates</h2>
<p><strong>Critic이 충분히 정신 차릴때까지 기다렸다가 Actor를 업데이트하자.</strong></p>
<p>앞서 계속 말했던 타겟 네트워크에 대한 설명이다. 타겟 네트워크는 \(Q\)함수 추정을 안정화하는 데 효과적인 방법이다. 가치함수를 근사할 때 쓰이는 뉴럴넷 모델은 함수가 복잡해서 최적화하기가 쉽지 않다. 작은 그래디언트 스텝을 따라서 조금씩 함수값을 줄이는 방향으로 최적화를 진행하는데, 이 때 목적함수가 고정되어 있어도 최적화하기란 상당히 힘들다. 하지만 강화학습에서 매 그래디언트 스텝이 진행될 때마다 목적함수가 바뀐다면 학습이 굉장히 불안해지고 수렴하지 않을 수도 있다. 아래의 식을 최소화할 때를 생각해보자.</p>
\[r+\gamma Q_\theta(s',a')-Q_\theta(s,a)\]
<p>위 식을 최소화 하는 목적은 \(Q(s,a)\)를 \(r+\gamma Q_\theta(s',a')\)에 최대한 가깝게 만드는 것이다. \(Q_\theta(s,a)\)부분을 피팅한다고 생각하면 된다. 거리를 좁히고 싶은 두 값 모두에 \(Q_\theta\)라는 같은 함수가 들어가는 것을 알 수 있다. 따라서 그래디언트 스텝을 따라 업데이트를 한번 할 때마다 타겟 함수와 값이 달라진다. 이 문제를 완화하기 위해서 target network를 사용한다. Target network는 위 함수에서 피팅하는 ‘목적’이 되는 \(r+\gamma Q_\theta(s',a')\)에 해당하는 함수가 변하지 않게, 또는 변하더라도 천천히 변하도록 고정하는 기법을 말한다. 목표가 덜 변하는 것이 학습을 안정적으로 만들기 때문이다.</p>
<p>Target network를 만들 때는 주로 이동평균 기법과 copy and freeze 방법이 사용된다. 전자는 그래디언트 스텝이 진행되는 궤도를 따라서 파라미터를 이동평균한 함수를 목적함수로 사용하는 것이고, 후자는 몇 그래디언트 스텝 주기마다 목적함수를 업데이트 하는 것이다. 둘 다 타겟을 안정화한다는 점에서는 맥락이 같다.</p>
<p>만약 이 target network가 없다면 value 추정치의 큰 분산으로 인해 정책 업데이트가 불안정해진다는 단점이 있다. 특히, actor와 critic 사이의 관계를 들여다볼 수 있는데, actor가 만드는 정책의 질이 좋지 않을 때 overestimation으로 인해서 critic의 value 추정치가 발산하게 되고, critic이 만드는 value 추정치가 정확하지 않으면 이를 기반으로 결정을 내리는 actor의 정책이 악화된다.</p>
<p>그렇다면 Actor-Critic에서 target network의 이점을 최대한 활용하는 방법은 무엇일까. Target network를 사용하여 value estimate을 업데이트 하면 매 업데이트 스텝마다 발생하는 에러가 줄어들게 된다는 점을 생각하면 에러가 좀 진정이 될 때 까지는 target network를 고정시킨 상태에서 value estimate을 계산하고 어느정도 value estimate이 학습된 후에는 정책을 업데이트 하는 방식을 생각해 볼 수 있을 것이다. 이 방법이 본 논문이 제안하는 delayed policy update이다.</p>
<h2 id="target-policy-smoothing-regularization">Target Policy Smoothing Regularization</h2>
<p><strong>Action value의 값을 스무딩하자.</strong></p>
<p>Deterministic 정책의 단점은 state당 1개의 action밖에 할당하지 못하기 때문에 action-value estimate의 오차에 민감하게 반응하며 과대평가된 action value에 오버피팅하기 쉽다는 것이다. 따라서 critic이 value estimate을 업데이트 할 때 타겟의 분산이 커지는 결과를 맞게 된다. Regularization을 통해서 이를 해결하고자 한다.</p>
<p>SARSA에서 영감을 받은 이 regularization 방식을 target policy smoothing이라고 부르며, 비슷한 행동은 비슷한 value를 가져야 한다는 게 기본 아이디어이다. \(Q_\theta\)를 \(r+\mathbb{E}_\epsilon[Q_{\theta'}(s',\pi_{\phi'}(s')+\epsilon)]\)에 피팅함으로써 target action 주변 지역에도 피팅되게 하고 value estimate을 스무딩한다. 실제로 구현할 때는 action을 샘플링 할 때 target policy에서 선택한 action에 \(\epsilon\)을 더한 값을 사용해서 미니배치 단위로 평균을 낸다. 수식으로 표현하면 아래와 같다.</p>
\[y = r+\gamma Q_{\theta'}(s',\pi_{\phi'}(s')+\epsilon)\\
\epsilon\sim \text{clip}(\mathcal{N}(0,\sigma),-c,c)\]
<p>clip은 c와 -c 사이의 값만을 \(\epsilon\)으로 취한다는 뜻으로, action의 근처라는 것을 보장하기 위해서 사용한다. Expected SARSA의 경우에도 target policy에 노이즈를 추가하여 off-policy 방법으로 value estimate이 계산된다. 이런식으로 추정된 value는 스무딩이 되었기 때문에 더 안전한 행동을 유도한다고 알려져있다.</p>
<p>이제 알고리즘을 정리하면 아래와 같다.</p>
<p><img src="/assets/images/td3-02.png" alt="" /></p>
<h1 id="my-conclusion">My Conclusion</h1>
<p>SAC와 더불어 나름 최신 알고리즘이라고 쓰이는 TD3를 공부했다. 구현은 언제할런지..</p>펭긴새sylim2357@gmail.comFujimoto, Scott, Herke Van Hoof, and David Meger. "Addressing function approximation error in actor-critic methods." arXiv preprint arXiv:1802.09477 (2018).[Paper Review] Deterministic Policy Gradient Algorithms2020-12-17T00:00:00+09:002020-12-17T08:00:00+09:00https://sylim2357.github.io/paper%20review/dpg<p>Arxiv <a href="http://proceedings.mlr.press/v32/silver14.pdf">링크</a></p>
<p>Silver!가 쓴 논문. Deterministic Policy Gradient를 제안한다. Policy Gradient는 stochastic policy에 대해서만 존재한다고 믿고 있었는데 Silver는 이 논문을 통해서 deterministic policy에 대해서도 정의될 수 있음을 보였다. 새로 제안하는 내용 자체도 공부할만 하지만 Policy Gradient을 잘 정리한 논문이라서 PG를 리뷰하는 차원에서도 도움이 된 논문이다.</p>
<h1 id="introduction">Introduction</h1>
<p>Policy Gradient는 action space가 연속일 때 주로 사용되는데, 이전까지는 stochastic policy에서만 정의되던 PG를 deterministic policy에서도 정의했다. 그 뿐 아니라 deterministic policy gradient가 action-value의 그래디언트를 따르는 model-free 형식으로 나타낼 수 있음을 보였다. Deterministic policy는 state가 주어졌을 때 어떠한 action을 취해야 하는지가 정해져있으므로 어떠한 정책의 state value를 추정하고싶으면 state space에서 고른 탐색을 하는 것으로 충분하다. Stochastic policy의 경우에는 state뿐 아니라 action space에서도 고르게 탐색을 해야 하는 것을 생각해보면 전자가 더 효율적이라는 것을 알 수 있다.</p>
<p>하지만 deterministic policy는 충분한 탐색이 힘들다는 단점이 있다. State value를 추정하기 위해서는 여러 state에서의 경험이 필요한데 action이 정해져있으니 다양한 정보가 쌓이지 않는 것이다. 따라서 이 논문에서는 off-policy방식을 사용하여 탐색을 한다. 이와 관련된 exploration-exploitation에 대해서 본 논문은 아래와 같이 정리하고 있다.</p>
<blockquote>
<p>충분한 탐색을 위해 stochastic behaviour policy를 사용하여 action을 정하고, DPG의 효율성을 위해 deterministic한 target policy를 학습한다.</p>
</blockquote>
<p>Action-value함수 추정을 위해 DPG를 이용한 off-policy actor-critic 알고리즘을 유도하고, 추정한 action-value함수의 그래디언트 방향으로 policy parameter를 업데이트하는 방식이다.</p>
<h1 id="background">Background</h1>
<h2 id="preliminaries">Preliminaries</h2>
<p>여타 표기는 기존 강화학습의 표기와 동일하지만, 몇가지 다르게 쓰이는 점이 있어 소개한다. 먼저 \(t\)스텝부터 시작해서 받은 discounted 보상의 합은 \(r^\gamma_t=\sum^\infin_{k=t}\gamma^{k-t}r(s_k,a_k)\)으로 표기한다. 또한, 정책 \(\pi\)를 따랐을 때 상태 \(s\)에서 \(t\) 스텝을 거쳐 \(s'\)에 도달할 확률을 \(p(s\rightarrow,t,\pi)\)로 표현한다. 자연스럽게 \(s'\)에 있을 확률을 discount한 것을 \(\rho^\pi(s')\coloneqq \int_\mathcal{S}\sum^\infin_{t=1}\gamma^{t-1}p_1(s)p(s\rightarrow s',t,\pi)\,ds\)라고 표현한다. \(s\)가 시작 상태일 확률(\(p_1(s)\))에 대해서 \(s'\)에 도달할 수 있는 확률을 평균낸 것이다. 그렇다면 강화학습 문제의 목표는 아래와 같이 정의가 된다. \(\mathcal{A}=\mathbb{R}^m\)이고 \(\mathcal{S}\)은 \(\mathbb{R}^d\)의 컴팩트한 부분집합이라고 가정하자.</p>
\[J(\pi_\theta)=\int_\mathcal{S}\rho^{\pi}(s)\int_\mathcal{A}\pi_\theta(s,a)r(s,a)\,da\,ds=\mathbb{E}_{s\sim\rho^\pi,a\sim\pi_\theta}[r(s,a)]\]
<p>정책 \(\pi\)를 따랐을 때 모든 상태에서 얻을 수 있는 평균 보상이다.</p>
<h2 id="stochastic-policy-gradient-theorem">Stochastic Policy Gradient Theorem</h2>
<p>Stochastic policy gradient method는 목적함수의 그래디언트 \(\nabla_\theta J(\pi_\theta)\)의 방향으로 정책의 파라미터를 업데이트 하는 방법이다. 여기에서 중요하게 쓰이는 정리는 stochastic policy gradient theorem인데, 아래와 같다.</p>
\[\nabla_\theta J(\pi_\theta)=\int_\mathcal{S}\rho^\pi(s)\int_\mathcal{A}\nabla_\theta\pi_\theta(a\mid s)Q^\pi(s,a)\,da\,ds\\=\mathbb{E}_{s\sim \rho^\pi,a\sim\pi_\theta}[\nabla_\theta\log\pi_\theta(a\mid s)Q^\pi(s,a)]\]
<p>목적함수의 그래디언트를 구하는 데 시작 상태의 분포가 들어가지 않는 점이 인상적인 부분이다. 이 정리에서 나오는 \(Q^\pi(s,a)\)를 쉽게 알수가 없어서 여러 추정 방식을 사용한다. 예를 들어, REINFORCE에서는 샘플에서 얻을 수 있는 \(r^\gamma_t\)로 \(Q^\pi(s_t,a_t)\)를 추정하여 \(Q^\pi\)를 Monte-Carlo방식으로 추정한다.</p>
<h2 id="stochastic-actor-critic-algorithm">Stochastic Actor-Critic Algorithm</h2>
<p>Policy Gradient Theorem은 actor-critic algorithm에서 주로 사용된다. Actor는 위에서 정의한 \(\nabla_\theta J(\pi_\theta)\)의 방향으로 \(\pi_\theta(s)\)의 파라미터 \(\theta\)를 업데이트하여 적당한 policy를 찾아간다. \(Q^\pi\)의 추정을 위해서 \(Q^w(s,a)\)라는 모델을 따로 만든다. Critic은 TD-learning같은 policy evaluation을 사용하여 \(Q^w(s,a)\approx Q^\pi(s,a)\)을 달성하려고 한다.</p>
<p>\(\nabla_\theta J(\pi_\theta)\)에 \(Q^\pi\)대신 \(Q^w\)를 사용하면 bootstrapping의 효과가 있기 때문에 bias가 생길 수 있다. 하지만 이 function approximator가 compatible하다면 bias가 없다는 것이 Sutton에 의해서 증명되었다. Compatible하다는 것은 아래와 같은 두 가지 조건을 만족하는 approximator를 뜻한다.</p>
<ol>
<li>\(Q^w(s,a)=\nabla_\theta\log\pi_\theta(a\mid s)^\top w\), 즉 stochastic policy \(\nabla_\theta\log\pi_\theta(a\mid s)\)의 feature에 대해서 선형적인 approximator여야 한다.</li>
<li>파라미터 \(w\)를 찾는 방식이 \(\epsilon^2(w)=\mathbb{E}_{s\sim\rho^\pi,a\sim\pi_\theta}[(Q^w(s,a)-Q^\pi(s,a))^2]\)를 최소화하는 방향이어야 한다.</li>
</ol>
<p>하지만 <a href="http://incompleteideas.net/papers/SSM-unpublished.pdf">Sutton 2000</a>에 따르면 위의 두 가정을 모두 만족시키는 approximator는 REINFORCE알고리즘과 동일한 결과를 가지게 된다. \(r^\gamma_t\)를 사용하는 것과 똑같은 것이다. 따라서, 2번 조건은 TD-learning 등 policy evaluation을 사용할 때 주로 완화된다.</p>
<h2 id="off-policy-actor-critic">Off-Policy Actor-Critic</h2>
<p>Off-policy 기법에서는 behaviour policy와 target policy가 따로 존재한다. On-policy방법으로 진행하면 state과 action에서 고른 정보를 얻기 힘들기 때문에 다양한 시도를 하는 behaviour policy를 따로 두는 것이다. 이제 강화학습 문제의 목표는 조금 바뀌게 된다. 우리가 구하고자 하는 target policy가 optimal policy임을 생각하자. Target policy의 value function의 평균을 구하고자하는 것은 이전과 같지만, 탐색을 하는 정책이 달라졌기 때문에 state distribution을 behaviour policy에 따라야 하는 것이다.</p>
\[J_\beta(\pi_\theta)=\int_\mathcal{S}\rho^\beta(s)V^\pi(s)\,ds\\
=\int_\mathcal{S}\int_\mathcal{A}\rho^\beta(s)\pi_\theta(a\mid s)Q^\pi(s,a)\,da\,ds\]
<p><a href="https://arxiv.org/abs/1205.4839">Degris 2012</a>에서는 위 목표함수의 그래디언트를 아래와 같이 근사하였다.</p>
\[\nabla_\theta J_\beta(\pi_\theta)\approx\int_\mathcal{S}\int_\mathcal{A}\rho^\beta(s)\nabla_\theta\pi_\theta(a\mid s)Q^\pi(s,a)\,da\,ds = \\ \mathbb{E}_{s\sim\rho^\beta,a\sim\beta}[\frac{\pi_\theta(a\mid s)}{\beta_\theta(a\mid s)}\nabla_\theta\log\pi_\theta(a\mid s)Q^\pi(s,a)]\]
<p>\(\nabla_\theta Q^\pi(s,a)\)에 해당하는 항을 스킵하면 위와 같은 식을 얻을 수 있다. Degris가 제안한 off-policy actor-critic에서 critic은 off-policy하게 gradient temporal-difference learning을 활용하여 state-value function \(V^v(s)\approx V^\pi(s)\)를 근사한다. Actor 또한 off-policy로 \(\nabla_\theta J_\beta(\pi_\theta)\)을 근사한 위의 식을 활용하여 policy parameter \(\theta\)를 업데이트한다. 문제가 되는 \(Q^\pi(s,a)\)는 TD error \(\delta_t=r_{t+1}+\gamma V^v(s_{t+1})-V^v(s_t)\) 로 근사한다. Actor와 critic 둘 다에서 importance sampling ratio \(\frac{\pi_\theta(a\mid s)}{\beta_\theta(a\mid s)}\)가 사용되었는데, action이 target policy \(\pi\)가 아닌 \(\beta\)에서 샘플링되었기 때문에 그 비율을 맞춰주는 역할을 한다.</p>
<h1 id="gradients-of-deterministic-policies">Gradients of Deterministic Policies</h1>
<h2 id="action-value-gradients">Action-Value Gradients</h2>
<p>Generalized Policy Iteration framework는 Policy Evaluation과 Policy Improvement 단계로 이루어져 있다. Policy Evaluation에서는 주어진 정책 하에서 각 상태-행동 value function을 추정하는 단계이며, Monte-Carlo방식이나 TD방식 등이 사용된다. Policy Improvement에서는 추정된 state-action value function을 기반으로 최적의 정책을 찾는다. 행동이 finite한 경우에는 행동을 하나씩 보면서 기대 보상이 제일 큰 행동을 취하는 방식으로 policy를 만들면 되겠지만, (greedy maximisation) action space가 연속인 경우에도 이런 방식을 쓰기 위해서는 매 Policy Improvement step마다 (non-) convex optimization 문제를 풀어야 하기 때문에 상당히 비효율적이다.</p>
<p>따라서 \(Q\)를 최대화하는 것보다 \(Q\)의 그래디언트의 방향으로 정책을 업데이트 하는 방법을 사용한다. 정확하게는 정책 파라미터 \(\theta^{k+1}\)를 \(\nabla_\theta Q^{\mu^k}(s,\mu_\theta(s))\)
방향으로 업데이트 하는 것이다. 각 state마다 다른 그래디언트를 반환할 것이기 때문에 state distribution에 대해서 평균을 취한다.</p>
\[\theta^{k+1}=\theta^k+\alpha\mathbb{E}_{s\sim\rho^{\mu^k}}[\nabla_\theta Q^{\mu^k}(s,\mu_\theta(s))]\]
<p>Chain rule을 취하면 action에 대한 action-value의 그래디언트와 policy parameter에 대한 policy의 그래디언트로 나누어지는 것을 볼 수 있다.</p>
\[\theta^{k+1}=\theta^k+\alpha\mathbb{E}_{s\sim\rho^{\mu^k}}\Big[\nabla_\theta\mu_\theta(s)\nabla_a Q^{\mu^k}(s,a)\Big|_{a=\mu_\theta(s)} \Big]\]
<p>이렇게 정책을 바꾸면, 그 정책에 따라서 state distribution \(\rho^\mu\)또한 변하게 되어서 위의 업데이트 방식이 올바르지 못하다고 생각할 수 있지만, stochastic policy gradient과 마찬가지로 state distribution에 의존하지 않는 그래디언트 표현식을 도출할 수 있다.</p>
<h2 id="deterministic-policy-gradient-theorem">Deterministic Policy Gradient Theorem</h2>
<p>이제 제대로 DPG를 정의한다. 아래와 같이 정의된 강화학습 문제의 목적함수가 있다고 하자.</p>
\[J(\mu_\theta)=\mathbb{E}[r^\gamma_1\mid\mu]\\
=\int_\mathcal{S}\rho^\mu(s)r(s,\mu_\theta(s))\,ds=\mathbb{E}_{s\sim\rho^\mu}[r(s,\mu_\theta(s))]\]
<p><strong>Theorem 1</strong>. MDP가 regularity condition을 만족한다면 deterministic policy gradient가 존재하고, 아래와 같이 나타낼 수 있다.</p>
\[\nabla_\theta J(\mu_\theta)=\int_\mathcal{S}\rho^\mu(s)\nabla_\theta\mu_\theta(s)\nabla_aQ^\mu(s,a)\mid_{a=\mu_\theta(s)}ds \\ =\mathbb{E}_{s\sim\rho^\mu}[\nabla_\theta\mu_\theta(s)\nabla_aQ^\mu(s,a)\mid_{a=\mu_\theta(s)}]\]
<p>여기서 제안하는 regularity condition은 state distribution, policy, reward과 그 도함수가 모든 파라미터에 대해서 연속임을 가정하는 것이다.</p>
<h2 id="limit-of-the-stochastic-policy-gradient">Limit of the Stochastic Policy Gradient</h2>
<p>Stochastic policy에 결정적인 부분과 확률적인 부분이 있다고 한다면, 확률적인 부분을 줄이면 줄일수록 deterministic policy에 가까워진다는 생각을 할 수 있다. 이 논문에서는 stochastic policy \(\pi_{\mu_\theta,\sigma}\)를 deterministic policy \(\mu_\theta\)와 분산 \(\sigma\)로 나누어서 생각한다. 이 방식으로 \(\sigma\rightarrow0\)일 때 stochastic policy gradient가 deterministic policy gradient에 수렴한다는 것을 증명하였다.</p>
<p><strong>Theorem 2</strong>. MDP가 regularity condition을 만족하고 \(\nu_\sigma\)가 regular data approximation, \(\sigma\)가 분산을 조정하는 파라미터일 때 \(\pi_{\mu_\theta,\sigma}(a\mid s)=\nu_\sigma(\mu_\theta(s),a)\)인 stochastic policy \(\pi_{\mu_\theta,\sigma}\)가 있다고 하면 아래와 같은 등식이 성립한다.</p>
\[\underset{\sigma\downarrow0}{\lim}\nabla_\theta J(\pi_{\mu_\theta,\sigma})=\nabla_\theta J(\mu_\theta)\]
<p>좌변은 stochastic policy gradient, 우변은 deterministic policy gradient를 나타낸다.</p>
<p>stochastic policy의 분산이 작아져서 0이 되면 그 그래디언트가 deterministic policy gradient에 수렴하는 것을 보인 것이다.</p>
<p>위 두 정리에 대한 증명은 <a href="http://proceedings.mlr.press/v32/silver14-supp.pdf">여기</a>에서 볼 수 있다. 내용이 길어서 여기서는 생략하지만 좋은 인사이트를 얻을 수 있다.</p>
<h1 id="deterministic-actor-critic-algorithm">Deterministic Actor-Critic Algorithm</h1>
<p>Deterministic Policy Gradient를 정의했으니, actor-critic 알고리즘에 DPG를 적용한다.</p>
<h2 id="on-policy-deterministic-actor-critic">On-Policy Deterministic Actor-Critic</h2>
<p>Deterministic policy에 on-policy방식으로 actor-critic을 진행하면 탐색이 제한되기 때문에 제대로 value function approximation이 힘들어질 수 있으나, 일단 적용 가능성을 위해 on-policy deterministic A-C알고리즘을 만든다.</p>
<p>Stochastic A-C와 마찬가지로, actor는 위에서 정의한 deterministic policy gradient에 따라서 policy parameter \(\theta\)를 업데이트 하고, critic은 on-policy기법인 SARSA를 사용하여 action-value function을 근사한다. 알고리즘은 아래와 같다.</p>
\[\delta_t=r_t+\gamma Q^w(s_{t+1},a_{t+1})-Q^w(s_t,a_t)\\
w_{t+1}=w_t+\alpha_w\delta_t\nabla_w Q^w(s_t,a_t)\\
\theta_{t+1}=\theta_t+\alpha_\theta\nabla_\theta\mu_\theta(s_t)\,\nabla_aQ^w(s_t,a_t)\mid_{a=\mu_\theta(s)}\]
<h2 id="off-policy-deterministic-actor-critic">Off-Policy Deterministic Actor-Critic</h2>
<p>탐색을 높이기 위해서 off-policy A-C를 제안한다. Deterministic target policy \(\mu_\theta(s)\)와 stochastic behaviour policy \(\beta(a\mid s)\)를 나누어서 생각한다. Stochastic off-policy A-C때와 마찬가지로 강화학습 문제의 목표함수를 다음과 같이 정의한다.</p>
\[J_\beta(\mu_\theta)=\int_\mathcal{S}\rho^\beta(s)V^\mu(s)\,ds=\int_\mathcal{S}\rho^\beta(s)Q^\mu(s,\mu_\theta(s))\,ds\]
<p>Stochastic Policy Gradient때와 마찬가지로 \(\nabla_\theta Q^{\mu_\theta}(s,a)\)항을 스킵하면 아래와 같이 목표함수의 그래디언트를 근사할 수 있다.</p>
\[\nabla_\theta J_\beta(\mu_\theta)\approx\int_\mathcal{S}\rho^\beta(s)\nabla_\theta\mu_\theta(a\mid s)Q^\mu(s,a)\,ds\\
=\mathbb{E}_{s\sim \rho^\beta}[\nabla_\theta\mu_\theta(s)\nabla_aQ^\mu(s,a)\mid_{a=\mu_\theta(s)}]\]
<p>A-C알고리즘에서 actor는 위의 그래디언트 방향으로 policy parameter를 업데이트하고, critic은 off-policy기법인 Q-Learning을 통해서 action-value function을 근사한다. 전체적인 알고리즘은 아래와 같다.</p>
\[\delta_t=r_t+\gamma Q^w(s_{t+1},\mu_\theta(s_{t+1}))-Q^w(s_t,a_t)\\
w_{t+1}=w_t+\alpha_w\delta_t\nabla_w Q^w(s_t,a_t)\\
\theta_{t+1}=\theta_t+\alpha_\theta\nabla_\theta\mu_\theta(s_t)\,\nabla_aQ^w(s_t,a_t)\mid_{a=\mu_\theta(s)}\]
<p>또한, \(a_t\)는 \(\beta\)에서 샘플링되지만 action-value function은 이 policy에서 off-policy하게 업데이트 된다는 것을 알 수 있다. Q-Learning target \(\delta\)가 \(\mu\)에서 나온 action을 기반으로 만들어지기 때문이다. \(\mu\)는 target policy이자 optimal policy를 학습하는 것이므로 첫줄의 \(Q^w(s_{t+1},\mu_\theta(s_{t+1}))\)는 \(\underset{a}{\text{max}}Q\)를 근사하는 것이라고 생각할 수 있다.</p>
<p>정책이 deterministic하기 때문에 action distribution에서 취해지는 적분이 필요가 없어지게 되어 actor에서 importance sampling이 필요가 없다. 비슷하게 Q-Learning을 사용하기 때문에 critic에서도 importance sampling이 필요가 없는 것을 알 수 있다.</p>
<h2 id="compatible-function-approximation">Compatible Function Approximation</h2>
<p>앞서 stochastic policy gradient 에서 compatible function에 대해서 살펴보았다. 이 부분에서는 deterministic policy gradient에서 \(Q^w\)가 compatible하기 위해 필요한 조건을 알아보고 compatible한 함수로 DPG A-C알고리즘을 만든다. 그래디언트에 영향을 주지 않고 \(\nabla_aQ^\mu\) 대신 사용할 수 있는 \(\nabla_aQ^w\)로 DPG A-C알고리즘을 만드는 것이다.</p>
<p><strong>Theorem 3</strong>. \(\nabla_\theta J_\beta(\theta)=\mathbb{E}[\nabla_\theta\mu_\theta(s)\,\nabla_aQ^w(s,a)\mid_{a=\mu_\theta(s)}]\)인 \(\mu_\theta(s)\)에 \(Q^w(s,a)\)가 compatible하기 위해서는 아래와 같은 조건을 만족해야 한다.</p>
<ol>
<li>
\[\nabla_aQ^w(s,a)\mid_{a=\mu_\theta(s)}=\nabla_\theta\mu_\theta(s)^\top w\]
</li>
<li>\(\epsilon(s;\theta,w)=\nabla_aQ^w(s,a)\mid_{a=\mu_\theta(s)}-\nabla_aQ^\mu(s,a)\mid_{a=\mu_\theta(s)}\)일 때 파라미터 \(w\)는 \(MSE(\theta,w)=\mathbb{E}[\epsilon(s;\theta,w)^\top\epsilon(s;\theta,w)]\)를 최소화한다.</li>
</ol>
<p>먼저, deterministic policy \(\mu_\theta(s)\)에 대해서 \(Q^w(s,a)=(a-\mu_\theta(s))^\top\nabla_\theta\mu_\theta(s)^\top w+V^v(s)\)의 형태로 표현할 수 있는 compatible 함수가 있다는 것을 알 수 있다. \(V^v(s)\)는 action과 상관 없는 state-value함수를 나타내는 함수로써, state feature \(\phi(s)\)의 선형결합 \(v^\top\phi(s)\) 등을 사용할 수 있다.</p>
<p>위와 같이 \(Q^w\)를 정의했을 때 각 항의 의미를 살펴보자. 먼저 두번째 항은 상태 \(s\)의 value함수이다. 첫번째 항은 \(s\)에서 \(\mu_\theta(s)\) 대신 \(a\)라는 행동을 취했을 때 얻는 <em>Advantage</em>의 의미를 가지고 있다. Advantage항은 파라미터에 대해서 선형임을 알 수 있다. \(\phi(s,a)\overset{def}{=}\nabla_\theta\mu_\theta(s)(a-\mu_\theta(s))\)라고 두면 Advantage \(A^w(s,a)=\phi(s,a)^\top w\)로 나타낼 수 있기 때문이다. 파라미터가 \(A\)에만 들어가기 때문에 \(Q^w\)는 Theorem 3의 첫번째 조건을 만족한다. 사실 선형함수로 \(Q^w\)를 나타낸다는 것 자체가 적절하지 않을 수도 있으나, (선형함수근사를 하면 근사치가 수렴하지 않을 수도 있다.) 국지적으로 보면 괜찮다고 한다. 특히, deterministic policy에서 아주 작은 deviation이 있을 때의 advantage를 알고 싶을 때 \(A^w(s,\mu_\theta(s)+\delta)=\delta^\top\nabla_\theta\mu_\theta(s)^\top w\)처럼 표현할 수 있다.</p>
<p>이제 Theorem 3의 두 번째 조건을 보자. \(Q^w\)의 그래디언트와 \(Q^\mu\)의 그래디언트를 피팅하는 회귀문제로 볼 수 있다. \(Q^w\)를 선형함수로 두었으므로 그 그래디언트는 \(\phi\)라고 생각할 수 있다. 하지만 \(Q^\mu\)를 실제로 얻기는 힘드므로 stochastic policy gradient의 경우와 마찬가지로 두 번째 조건은 완화하여 SARSA나 Q-Learning같은 policy evaluation method를 사용하게 된다.</p>
<p>결과적으로 Compatible Off-Policy Deterministic Actor Critic 알고리즘은 \(\phi(s,a)=a^\top\nabla_\theta\mu_\theta(s)\)라고 정의하여 \(Q^w\)를 만들고 Q-Learning을 통해서 action-value를 추정한다. 알고리즘은 다음과 같다.</p>
\[\delta_t=r_t+\gamma Q^w(s_{t+1},\mu_\theta(s_{t+1}))-Q^w(s_t,a_t)\\
\theta_{t+1}=\theta_t+\alpha_\theta\nabla_\theta\mu_\theta(s_t)(\nabla_\theta \mu_\theta(s_t)^\top w_t)\\
w_{t+1}=w_t+\alpha_w\delta_t\phi(s_t,a_t)\\
v_{t+1}=v_t+\alpha_v\delta_t\phi(s_t)\]
<p>이외에도, 이 논문은 선형함수근사를 활용한 Off-policy Q-learning이 발산할 수도 있다는 사실 때문에 gradient TD방식을 적용한 알고리즘을 제안하고 Natural Policy Gradient방식에 DPG를 적용한 것을 보여주기도 하였다. 특히, Natural Policy Gradient는 Fisher Information metric이 최대가 되게 하는 그래디언트 방향으로 정책을 업데이트 하는데, deterministic policy을 사용하는 경우 기존 방법에서 정책의 분산을 0으로 줄였을 때 나타나는 metric을 사용하는 것을 보여주었다.</p>
<h1 id="my-conclusion">My Conclusion</h1>
<p>Policy Gradient에 대한 리뷰를 할 수 있었던 아주 좋은 논문이다. 최근에는 DPG를 쓰지 않는 방향으로 연구가 진행되고있으나 연구의 흐름을 읽기에 좋은 클래식인거같다.</p>펭긴새sylim2357@gmail.comSilver, David, et al. "Deterministic policy gradient algorithms." 2014.[Paper Review] Transformer-xl: Attentive language models beyond a fixed-length context2020-12-04T00:00:00+09:002020-12-04T16:00:00+09:00https://sylim2357.github.io/paper%20review/transformer-xl<p>Arxiv <a href="https://arxiv.org/abs/1901.02860">링크</a></p>
<p>카네기랑 구글에서 낸 논문. 기존 트랜스포머의 인풋 시퀀스 길이가 고정되어야 한다는 단점을 보완하였다. XL for extra long. Shijak.</p>
<h1 id="introduction">Introduction</h1>
<p>잘나가던 트랜스포머에 무슨 문제가 있던 걸까. 언어 모델링에서 전통적으로 쓰이던 RNN은 gradient-vanishing/explosion 등 시퀀스 길이가 길어지면 문제가 많은 모델이었다. 물론 LSTM이나 클리핑 등 여러 시도가 있긴 했으나 같은 구조의 모델이 계속해서 쓰인다는 특성상 어쩔 수 없는 단점이다. 트랜스포머는 이 부분을 획기적으로 해결하는 모습을 보여주었다. Self-attention을 사용하여 인풋 토큰의 의미를 알아내기 위해 시퀀스 내의 다른 토큰 중 어디에 ‘attend’해야하는지를 학습하게 하였고, 큰 성공을 거두었다.</p>
<p>하지만 이 트랜스포머도 결국에는 RNN처럼 ‘시퀀스 길이’에서 단점을 드러낸다. (물론 둘의 단점은 다른 맥락이다.) 트랜스포머는 구조의 특성상 인풋 시퀀스의 길이가 고정되어있다. 만약 트랜스포머가 기대하는 시퀀스의 길이보다 짧은 데이터가 들어온다면 끝부분을 0으로 패딩해주면 그만이지만, 데이터의 길이가 더 길 경우에는 문제가 생긴다. 긴 데이터를 트랜스포머 인풋 길이에 맞게 잘라 여러 조각을 만든 다음 순차적으로 모델에 넣을 수 밖에 없는 것인데, 조금만 생각해보면 최선이 아니라는 것을 알게 될 것이다. 인간은 한 문장을 한번에 읽고 이해한다. 하나의 문장을 여러 조각으로 나눈 다음 각 조각을 각기 다른 사람에게 주고 이해하라고 하면 잘 작동될 리가 없는 것과 마찬가지이다. 이 논문에서는 ‘조각’을 ‘segment’라고 칭한다.</p>
<p>특히, 언어 모델은 문장을 만들어내거나 예측해야 하는 목적을 가지고 있는데, 문장이 중간에 잘리면 ‘segment’가 새로이 시작되는 부분에서 문제가 심각하다. 문장의 앞부분에 대한 배경이 없기 때문이다. 이런 문제를 논문에서는 ‘context fragmentation’이라고 한다. 문맥이 조각난다는 의미이다.</p>
<p>그뿐만 아니라, 트랜스포머는 모델을 사용할 때에도 (evaluation phase) 인풋 길이가 넘어가는 순간부터 한 토큰을 출력할때마다 모든 인풋에 대해서 모델 연산을 해야한다. 효율적이지 않은 것은 사실이다.</p>
<p>Transformer-XL이 어떻게 이 문제를 해결하는지 살펴봅시다.</p>
<h1 id="model">Model</h1>
<p>토큰 시퀀스 \(\bold{x}=(x_1,\dots,x_T)\)가 있을 떄, 언어모델은 이 토큰의 결합확률분(\(P(\bold{x})\))를 추정하는 것으로 이해할 수 있는데, 언어이다 보니 순서가 중요하다. 즉, 자기회귀적(autoregressive)으로 분해를 하여 생각한다. \(P(\bold{x})=\prod_tP(x_t\mid\bold{x}_{<t})\) 이기 때문에, 결국 조건부 항을 각각 추정하면 결합확률분포를 추정할 수 있게 된다. 뉴럴넷을 이용해 \(\bold{x}_{<t}\)를 정해진 길이의 벡터(hidden state)로 표현하고, 단어 임베딩과 곱해져서 나온 로짓을 소프트맥스에 넣어서 다음 토큰을 예측하는 방식이다.</p>
<p>트랜스포머에 순환형 구조를 더하고 이를 가능하게 하기 위한 새로운 positional embedding방식을 제안한다. 먼저 바닐라 트랜스포머 모델부터 보자.</p>
<h2 id="vanilla-transformer">Vanilla Transformer</h2>
<p>이상적으로, 임의의 시퀀스를 정해진 길이의 hidden state로 임베딩하기 위해서는 엄청 긴 시퀀스를 한번에 트랜스포머에 넣어야 하기 때문에 메모리와 연산량이 무한으로 많이 필요하다. 하지만 실제로는 그렇지 않기 때문에 앞서 살펴본대로 시퀀스를 조각내서 모델에 넣는다. 이렇게 할 경우, 조각 사이에서 정보 공유가 불가능하다. 이 때문에 일어나는 문제가 크게 두 가지가 있다.</p>
<p>첫 번째는 토큰 간의 의존성을 나타낼 수 있는 시퀀스 길이가 일정 값 이하로 제한된다는 것이다. RNN의 vanishing gradient 현상을 타개하기 위해 제안된 트랜스포머지만 결국에는 RNN과 비슷하게 순차적으로 연산을 진행해야 하는 때가 있고, 트랜스포머 모델 구조를 낭비하는 결과로 이어진다. 두 번째로, 시퀀스 길이가 길면 모델이 받아들일 수 있는 길이를 기준으로 입력 시퀀스를 잘라서 넣기때문에 문장이 중간에 잘려서 들어가게 되고, 앞에서 언급한 context fragmentation 현상이 일어나게 된다.</p>
<p>Evaluation phase에도 한 토큰을 예측하기 위해 모델 입력의 최댓값에 해당하는 토큰들을 모두 사용하여 연산을 진행하게 되어서 상당히 비효율적이다.</p>
<p>이 두 가지 문제를 해결하기 위해 제안된 두 가지 요소가 아래 내용이다.</p>
<h2 id="segment-level-recurrence-with-state-reuse">Segment-Level Recurrence with State Reuse</h2>
<p>트랜스포머 모델은 고정된 길이의 인풋밖에 받아들이지 못하기 때문에 recurrence개념을 도입한다. 먼저, 인풋을 조각낸 다음 각 조각을 트랜스포머에 넣어 hidden state를 계산한다. 다음 조각이 트랜스포머에 들어가서 연산이 진행될 때 이전 조각의 hidden state가 쓰이는 구조이다. RNN과 비슷하다. \(\bold{h}^{n}_{\tau}\in\mathbb{R}^{L\times d}\)가 \(\tau\)번째 조각 \(\bold{s}_{\tau}\)의 \(n\)번째 레이어 hidden state라고 하면,</p>
\[\tilde\bold{h}^{n-1}_{\tau+1}=[SG(\bold{h}^{n-1}_{\tau})\circ\bold{h}^{n-1}_{\tau+1}],\newline \bold{q}^{n}_{\tau+1}, \bold{k}^{n}_{\tau+1}, \bold{v}^{n}_{\tau+1},= \bold{h}^{n-1}_{\tau+1}\bold{W}^\top_{q}, \tilde\bold{h}^{n-1}_{\tau+1}\bold{W}^\top_{k}, \tilde\bold{h}^{n-1}_{\tau+1}\bold{W}^\top_{v}\newline \bold{h}^{n}_{\tau+1}=\text{Transformer}(\bold{q}^{n}_{\tau+1}, \bold{k}^{n}_{\tau+1}, \bold{v}^{n}_{\tau+1})\]
<p>위와 같이 \(\tau+1\)번째 조각에 대한 \(n\)번째 레이어 hidden state가 계산된다. Key와 value벡터를 구할 때 이전 hidden state와 지금 hidden state를 이어붙인 행렬을 사용하는 것이 다른점이다. 이 hidden state는 크기를 보면 알 수 있듯 각 토큰에 대한 정보를 저장하고 있다. 각 원소가 그 위치의 토큰을 나타낸다고 이해하면 된다.</p>
<p>이런 방식으로 모델은 매번 두 개 조각에 대한 정보를 처리하게 되는데, 직전 조각의 hidden state에는 그 전 조각에 대한 정보도 담겨있기 때문에 긴 시퀀스의 의존성까지 모델링이 가능하다는 주장이다. 또한, RNN과는 다르게 \(n\)번째 레이어의 hidden state는 이전 조각의 전 레이어(\(n-1\)번째)의 hidden state의 정보를 활용한다. 각 레이어마다 hidden state가 있어서, 레이어의 개수에 따라서 얼마나 긴 시퀀스에 대한 정보를 모델링할 수 있는지가 결정된다.</p>
<p>이 방법을 사용하면 evaluation phase에서도 연산적인 이점이 작용한다. 모든 연산을 처음부터 다 수행하는게 아니라 이전 조각에 대한 정보는 hidden state에 캐시하여 저장하고 있기 때문이다.</p>
<h2 id="relative-positional-encodings">Relative Positional Encodings</h2>
<p>트랜스포머에서는 토큰의 위치 정보를 모델에 반영하기 위해서 positional encoding을 수행하여 토큰에 더해준다. 기존 트랜스포머는 시퀀스 길이가 정해져있기때문에 토큰의 ‘절대적 위치’를 기반으로 positional encoding을 수행하면 됐었다. 하지만 이제는 다르다. 기존 Positional encoding 행렬 \(\bold{U}\in \mathbb{R}^{L_{max}\times d}\)가 있다고 하면, (\(L_{max}\)는 모델이 받을 수 있는 최대 시퀀스 길이이다) 이 행렬을 그대로 적용할 경우</p>
\[\bold{h}_{\tau+1}=f(\bold{h}_{\tau},\bold{E}_{\bold{s}_{\tau+1}}+\bold{U}_{1:L})\newline \bold{h}_{\tau}=f(\bold{h}_{\tau-1},\bold{E}_{\bold{s}_{\tau}}+\bold{U}_{1:L})\]
<p>처럼 나타낼 수 있다. \(\bold{E}_{\bold{s}_{\tau}} \in \mathbb{R}^{L \times d}\)는 \(\bold{s}_{\tau}\)의 임베딩을 나타내는 행렬이다. 위에서 볼 수 있듯, positional encoding을 그대로 쓰게된다면 \(\bold{E}_{\bold{s}_{\tau}}\)와 \(\bold{E}_{\bold{s}_{\tau+1}}\)에 동일한 positional encoding이 적용되는 문제가 발생한다. 토큰이 어떠한 조각에서 왔는지에 대한 정보가 손실되는 것이다.</p>
<p>이를 해결하기 위해서 absolute positional encoding이 아니라 relative positional encoding을 사용한다. 이전에도 relative positional encoding을 사용하려는 시도는 있었는데, 이 논문은 조금 다른 방향으로 구현한다. 이전 연구들은 positional encoding을 인풋에 직접적으로 적용하였으나 Transformer-XL에서는 이 정보를 각 레이어의 어텐션 스코어에 주입하는 방식을 택했다. Relative positional encoding \(\bold{R}\in \mathbb{R}^{L_{max}\times d}\)를 만든다. 각 행 \(i\)는 은 쿼리 입장에서 봤을 때 키가 \(i\)만큼 떨어져있을 때 적용되어야 할 temporal 정보이다. 이 방법을 사용하면 위에서 제기된 문제를 해결할 수 있다. 어느 조각에서 나온 토큰인지 구별할 수 있게 된다.</p>
<p>수식을 살펴보자. 기존 positional encoding을 적용한 트랜스포머의 셀프 어텐션을 전개하면 아래와 같은 식이 된다.</p>
\[\text{A}^{\text{abs}}_{i,j}=\underbrace{\bold{E}^\top_{x_i}\bold{W}^\top_{q}\bold{W}_{k}\bold{E}_{x_j}}_\text{(a)}+\underbrace{\bold{E}^\top_{x_i}\bold{W}^\top_{q}\bold{W}_{k}\bold{U}_{j}}_\text{(b)}+\underbrace{\bold{U}^\top_{i}\bold{W}^\top_{q}\bold{W}_{k}\bold{E}_{x_j}}_\text{(c)}+\underbrace{\bold{U}^\top_{i}\bold{W}^\top_{q}\bold{W}_{k}\bold{U}_{j}}_\text{(d)}\]
<p>이제 relative positional encoding을 적용한 식을 보자.</p>
\[\text{A}^{\text{rel}}_{i,j}=\underbrace{\bold{E}^\top_{x_i}\bold{W}^\top_{q}\bold{W}_{k,E}\bold{E}_{x_j}}_\text{(a)}+\underbrace{\bold{E}^\top_{x_i}\bold{W}^\top_{q}\bold{W}_{k,R}\bold{R}_{i-j}}_\text{(b)}+\underbrace{u^\top\bold{W}_{k,E}\bold{E}_{x_j}}_\text{(c)}+\underbrace{v^\top\bold{W}_{k,R}\bold{R}_{i-j}}_\text{(d)}\]
<p>크게 변화를 준 것이 세 가지 있다.</p>
<p>먼저, (b)와 (d)에 나오는 absolute positional encoding을 모두 relative positional encoding으로 바꿔준다.</p>
<p>다음으로는 쿼리의 위치 정보에 해당하는 \(\bold{U}^\top_{i}\bold{W}^\top_{q}\)를 하나의 벡터로 바꾸어 주는 것이다. Relative positional encoding을 쓴다는 것은 쿼리의 관점에서 key와 value를 바라본다는 의미이기 때문에 쿼리의 위치정보는 고정되는 것이 맞기 때문이다. (c)에 있는 쿼리는 \(u\in \mathbb{R}^d\)로, (d)에 있는 쿼리는 \(v\in \mathbb{R}^d\)로 두었다.</p>
<p>마지막으로, key의 weight matrix \(\bold{W}_{k}\)를 \(\bold{W}_{k,E}\)와 \(\bold{W}_{k,R}\)로 분리했다. 각각 임베딩에 관련된 항과 위치에 관련된 항에 들어가는 weight matrix이다.</p>
<p>직관적으로 의미를 부여해보면, (a)는 단어의 의미를 나타내는 부분, (b)는 단어의 의미에 관련된 위치 정보를 나타내는 부분, (c)는 시퀀스의 전체적인 의미를 나타내는 부분, (d)는 시퀀스의 위치정보를 나타내는 부분이다.</p>
<p>결론적으로 종합해보면 Transformer-XL은 아래와 같은 식으로 정리할 수 있다.</p>
\[\tilde\bold{h}^{n-1}_{\tau}=[SG(\bold{m}^{n-1}_{\tau})\circ\bold{h}^{n-1}_{\tau}],\newline \bold{q}^{n}_{\tau}, \bold{k}^{n}_{\tau}, \bold{v}^{n}_{\tau},= \bold{h}^{n-1}_{\tau}{\bold{W}^{n}_{q}}^\top, \tilde\bold{h}^{n-1}_{\tau}{\bold{W}^{n}_{k,E}}^\top, \tilde\bold{h}^{n-1}_{\tau}{\bold{W}^{n}_{v}}^\top\newline \bold{A}^{n}_{\tau,i,j}={\bold{q}^{n}_{\tau,i}}^\top\bold{k}^{n}_{\tau,j}+{\bold{q}^{n}_{\tau,i}}^\top\bold{W}^{n}_{k,R}\bold{R}_{i-j}\newline+u^\top\bold{k}_{\tau,j}+v^\top\bold{W}^{n}_{k,R}\bold{R}_{i-j}\newline\bold{a}^{n}_{\tau}=\text{Masked-Softmax}(\bold{A}^{n}_{\tau})\bold{v}^{n}_{\tau}\newline\bold{o}^{n}_{\tau}=\text{LayerNorm}(\text{Linear}(\bold{a}^{n}_{\tau})+\bold{h}^{n-1}_{\tau})\newline\bold{h}^{n}_{\tau}=\text{Positionwise-Feed-Forward}(\bold{o}^{n}_{\tau})\]
<p>메모리에 \(m\)을 쓴 것은 메모리의 길이를 임의로 정할 수 있기 때문이다. 구현할 때는 \(\bold{W}^{n}_{k,R}\bold{R}_{i-j}\)의 연산이 상당히 복잡하기 때문에 \(i-j\)가 일정 범위 이내의 값만을 가진다는 것에 착안하여 효율적인 계산법을 제안했다. 논문의 appendix에 나와있는데, 간단한 행렬 연산을 한 뒤 인덱스를 바꿔주는 계산법을 사용하였다.</p>
<h1 id="conclusion">Conclusion</h1>
<p>오랜만에 제대로 읽은 NLP논문인데 활용할 수 있는 곳이 많을 것 같다!</p>펭긴새sylim2357@gmail.comDai, Zihang, et al. "Transformer-xl: Attentive language models beyond a fixed-length context." arXiv preprint arXiv:1901.02860 (2019).[Paper Review] Meta-Learning Symmetries by Reparameterization2020-11-23T00:00:00+09:002020-11-23T16:00:00+09:00https://sylim2357.github.io/paper%20review/meta-learning-symmetries-by-reparam<p><a href="https://arxiv.org/abs/2007.02933">Arxiv</a> 링크</p>
<p>삼성 ai fair에서 첼시 핀이 설명해준 논문. 2021년 ICLR에 제출했다고 한다. 내가 바보같은 질문 했는데도 잘 대답해준 첼시 님짱. 논문도 진짜 멋있음. 이게 논문이지.</p>
<p>논문을 읽기 전에 알아야하는 내용이 생각보다 많다. Meta-Learning, Equivariance, Group Action 중 하나라도 익숙하지 않은게 있다면 처음부터 다 읽는 것을 추천하고, 모두 다 알고 있다고 생각한다면 Encoding and Learning Equivariance부터 읽으면 된다. 시작합시다.</p>
<p>task-specific 뉴럴넷 아키텍쳐를 디자인할 필요 없이 데이터를 통해서 모델의 equivariance를 학습하는 방법을 제안함. Reparameterization을 통해서 NN 레이어를 ‘구조’와 ‘값’에 해당하는 두 부분으로 나누었고, meta-learning framework를 적용하여 모델이 가져야 할 equivariance는 ‘구조’에 해당하는 부분이, task-specific한 파라미터 값은 ‘값’에 해당하는 부분이 각각 학습하게 함으로써 사람의 개입을 최소화하려고 함. 멋있쥬.</p>
<p>미리 알아야 하는 개념이 몇가지 있다. 메타러닝, equivariance, reparameterization 등이다. 하나씩 살펴보기로 하자.</p>
<ul>
<li>Meta-Learning</li>
</ul>
<p>메타러닝은 학습하는 방법을 학습하는 것이다. 즉, 파라미터의 초기값, 러닝레이트 등의 하이퍼파라미터를 학습하여 (메타학습) 실제 모델 학습을 진행하거나 메타데이터를 이용하여 학습 방법을 학습한다.</p>
<ul>
<li>Equivariance</li>
</ul>
<p>아래에서 더 정확하고 엄밀히 다룰 것이나, 직관적으로 설명하자면, 함수가 ‘equivariant’하다, 혹은 함수가 ‘equivariant map이다’라고 하는 것은 함수를 통과하기 전 인풋의 transformation이 함수를 통과하고 난 결과의 transformation과 같다는 이야기이다. 예를 들자면, CNN에 인풋을 90도 회전시켜서 넣으면 통과한 feature map 또한 90도 회전하여 나온다는 것으로 이해할 수 있다.</p>
<ul>
<li>Reparameterization</li>
</ul>
<p>함수값을 구하기 위해 주어진 파라미터를 그대로 사용하는 것이 아니라 같은 결과를 내는 다른 파라미터를 사용하는 것을 말한다. 예를 들면 정규분포값을 샘플링할 때 평균과 분산이 주어지면 그 정규분포를 만들어서 샘플링하기보다는 표준정규분포에서 샘플링한 후 평균만큼 이동하고 분산만큼 scale해주는 방법을 많이 사용하는 것을 생각하면 된다.</p>
<h1 id="introduction">Introduction</h1>
<p>뉴럴넷 모델은 특정한 translation에 대해서 equivariant한 경우가 많은데, CNN의 경우 인풋이 뒤집히거나 회전되면 아웃풋도 똑같이 뒤집히거나 회전되는 것을 볼 수 있다. 이미지나 음성 데이터에서 어떠한 피쳐 정보를 학습할 수 있을지 생각해봤을 때 translation equivariant한 모델 구조를 사용하는 것은 상당히 데이터의 특성에 잘 맞는 선택이라고 볼 수 있다. 하지만 이러한 데이터의 구조를 알아내는 것이 항상 쉬운 것은 아니다. 또한, 그 구조를 알아냈다고 하더라도 뉴럴넷 모델에 반영하는 것은 또 다른 어려운 문제인 것이다. 보통 현업에서는 모델 구조에 이 사항을 반영하기 어렵기 때문에 data augmentation을 통해 모델 파라미터를 변화시켜서 equivariance를 학습하게 한다. 이 논문에서는 data augmentation을 사용하지 않고 모델 내부에서 equivariance를 학습하여 적용하는 방법을 제안한다.</p>
<p>Equivariance를 잡아내기 위해서는 모델 내부의 파라미터의 공유 패턴 (paramter sharing pattern)을 학습해야 한다. 이를 위해서 뉴럴넷 레이어를 ‘파라미터 공유 패턴’ (구조) 과 실제 파라미터값 (값)으로 나누어서 각각을 따로 학습하게 한다.</p>
<h2 id="preliminaries">Preliminaries</h2>
<p>먼저 알아야 할 개념들. MAML을 계승한 메타러닝 알고리즘, 군과 군 작용, equivariance (등가성질) 에 대해서 더 자세히 알아보자.</p>
<ul>
<li>Gradient-Based Meta-Learning</li>
</ul>
<p>Task distribution \(p(\mathcal{T})\)가 있다고 하면 각 task는 training/validation 데이터셋 {\(\mathcal{D}^{tr}_{i}, \mathcal{D}^{val}_{i}\)} 을 갖는다. MAML에서 제안하는 메타러닝 프레임워크에는 내부 룹과 외부 룹이 있다. 파라미터 \(\theta\), 손실함수 \(\mathcal{L}\), 러닝레이트 \(\alpha\)를 가지는 모델이 있을 때 내부 룹에서는 task-specific 데이터셋을 가지고 \(\theta\)를 찾는다. 우리가 보통 알고있는 모델 학습 과정이라고 생각하면 된다. 학습하는 방법은 그레디언트 기반 업데이트 알고리즘을 사용한다. 수식으로는 \(\theta'=\theta-\alpha\nabla_{\theta}\mathcal{L}(\theta,\mathcal{D}^{tr})\) 이렇게 표현할 수 있다. 외부 룹에서는 validation set을 사용하여 \(\theta\)의 초기값을 학습한다. 위에서 정의한 \(\theta'\)를 사용했을 때 손실함수값을 최소화시키는 방향으로 업데이트를 진행하는 것이다. 즉, 외부의 메타러닝 룹에서는 \(\theta \leftarrow \theta-\eta\frac{d}{d\theta}\mathcal{L}(\theta',\mathcal{D}^{val})\)을 사용한다. MAML에서는 이와같이 \(\theta\)의 초기값을 설정하는 것에 중점을 두었지만 다른 하이퍼파라미터를 찾는 것도 비슷한 프레임워크를 사용할 수 있다. 이 논문에서는 Gradient-Based Meta-Learning방법을 사용하여 파라미터 공유 패턴을 학습한다.</p>
<ul>
<li>군과 군 작용</li>
</ul>
<p>수학에서 대칭성이나 equivariance는 추상대수학의 군과 군 작용 분야에서 주로 다루어진다. 여기서 정의하는 군이란 결합법칙이 성립하는 이진연산에 대하여 닫혀있는 집합 (\(G\)) 을 일컫는데, 이 집합 안에 항등원이 존재해야 하며 모든 원소는 역원을 가지고 있어야 한다. 예를 들자면 \((\mathbb{Z}, +)\)가 있을 수 있다.</p>
<p>군 \(G\)는 집합 \(X\)에 ‘작용’ 할 수 있는데 (Group \(G\) can act on a set \(X\)), 그 작용 (action) \(\rho:G\rightarrow Aut(X)\)은 각 \(g\in G\)에서 \(X\)의 transformation으로 매핑해주는 함수이다. 여기서 \(\rho\)는 준동형사상(homomorphism, \(\rho(gh)=\rho(g)\rho(h) \enspace \forall g,h\in G\)) 이어야 하고, \(Aut(X)\)란 \(X\)에 대한 자기동형사상이다. 자기동형사상이란 \(X\) 자신에서 자신으로 매핑하는 전단사 준동형사상 (bijective homomorphism) 이며, 어떤 대상의 ‘대칭성’을 나타낸다고 이해하면 된다.</p>
<p>정리하자면 \(\rho\)는 \(G\)에 있는 어떠한 원소를 받으면 ‘사상’을 출력해주는 것인데, 이 사상은 자기동형사상이기 때문에 \(\rho\)를 통하면 \(G\)에 있는 원소가 \(X\)가 가지고 있는 하나의 ‘대칭성’을 반환해준다고 생각할 수 있는 것이다. 만약 \(X\)가 군이 아니라 집합이면, 자기동형사상은 전단사를 만족하기만 하면 된다. 이 경우에도 대칭성을 나타낸다.</p>
<p>이 논문에서는 어떤 \(g\in G\) 에 대해서 \(gx\coloneqq\rho(g)(x)\) 라고 줄여쓰기로 한다. 군 작용의 간단한 예시는 자기 자신에게 작용하는 것이다. 위에서 \(X=G\)라고 놓으면 된다. \((\mathbb{Z},+)\)의 경우에는 어떤 \(g,x\in \mathbb{Z}\)에 대해서 작용 \(gx=g+x\)로 정의해보자. \(g\)가 들어가면 \(\rho(g)(\cdot) = g+\cdot\) 이라는 자기동형사상을 얻는 것이다. (람다 노테이션을 쓴다면 \(\rho(g)=\lambda x.x+g\)) 정수가 찍혀진 수선이 \(g\)만큼 수평이동한 것이라고 생각하면 된다. 수평이동하는 정도는 어떠한 정수든 될 수 있다는 것을 떠올리자.</p>
<p>만약 군 \(G\)가 벡터 공간 \(V\)에 작용한다면 그 작용을 표현 (representation)이라고 하고, \(\pi:G\rightarrow GL(V)\)로 나타낸다. \(GL(V)\)는 벡터공간 \(V\)의 일반선형군 (General Linear Group) 이며, 가역 선형변환이 이루는 군이다. (Invertible Linear Maps on \(V\)) 벡터가 이산적이라면 벡터의 원소는 이산적인 인덱스를 가지고 있고, 만약 정수에서 정의된 군 작용이 있다고 하면 이를 벡터의 인덱스로 확장시킬 수 있다. 자연스럽게 이 군 표현은 \((\pi(g)v)[i]\coloneqq v[g^{-1}i]\)로 나타낼 수 있다. 벡터의 원소는 정수값을 가지고 있기 때문에 위에서 정의한 것을 그대로 가져오게 된다면 \((\pi(g)v)[i]=v[g^{-1}i]=v[i-g] \enspace\forall g,i\in\mathbb{Z}\)가 된다.</p>
<p>즉, 위에서 ‘정수가 찍혀진 수선이 수평이동’ 한 것을 벡터의 인덱스로 가져오게 되면 ‘벡터의 인덱스를 이동’하는 것으로 확장시킬 수 있는 것이다. \(g\)가 1이라면 해당 ‘군 표현’을 사용하여 \([0,1,2,3,0,0]\)을 \([0,0,1,2,3,0]\)이런 식으로 옮기는 것이다.</p>
<ul>
<li>등가성질 (equivariance)과 합성곱(Convolution)</li>
</ul>
<p>등가성질</p>
<p>함수가 어떤 변환에 대해서 등가성을 가진다 (A function is equivariant to a transformation)이라고 하면, 함수의 인풋을 변환하는 것과 함수의 아웃풋을 변환하는 것이 똑같은 것을 일컫는다. 여기서 말하는 ‘변환’이 어떤 것인지 살펴보는 것이 필요하다. 이를 위해서 위에서 짚어본 군 작용의 개념이 등장한다.</p>
<p>뉴럴넷 레이어를 주로 볼 것이기 때문에 뉴럴넷 레이어 \(\phi:\mathbb{R}^n\rightarrow \mathbb{R}^m\)을 예시로 들어보자. \(\mathbb{R}^n\)과 \(\mathbb{R}^m\) 각각에 작용하는 군 \(G\)의 두 표현 \(\pi_1,\pi_2\)가 있다고 생각하자. \(\phi\)의 인풋은 \(n\)차원, 아웃풋은 \(m\)차원이기 때문에 \(\pi_1(g)\)와 \(\pi_2(g)\)는 각각 인풋과 아웃풋에 가해지는 변환을 나타내는 것이라고 생각하면 된다. 다시 한번 정리하자면, \(g\)가 들어오기 전 \(\pi_1\)이나 \(\pi_2\)는 \(g\)를 변환으로 매핑해주는 ‘표현’이고, \(g\)가 들어온 \(\pi_1(g)\)나 \(\pi_2(g)\)는 \(GL(V)\)에 속하는 ‘변환’이 되는 것이다. 이제 등가성질을 좀 더 엄밀히 정의할 수 있게 되었다.</p>
<p>뉴럴넷 레이어 \(\phi\), 벡터공간에 작용하는 군 \(G\), 그 표현 \(\pi_1\)과 \(\pi_2\)가 있을 때, 어떤 \(g\in G, v\in \mathbb{R}^n\)에 대해서\(\phi(\pi_1(g)v)=\pi_2(g)\phi(v)\)를 만족시키면, \(\phi\)는 그 변환에 대해서 \(G\)-등가성 (\(G\)-equivariant)이라고 한다.</p>
<p>만약 \(\pi_2\equiv id\) 이면 (\(g\)가 무엇이 들어오든 ‘인풋을 그대로 반환해주는 변환’으로 매핑한다.) \(\phi(\pi_1(g)v)=\phi(v)\)가 되며, 이를 불변성 (invariance)라고 한다. 즉, 불변성은 등가성의 특이 케이스인 것이다. (Invariance is a type of equivariance)</p>
<p>합성곱</p>
<p>딥러닝 모델은 뉴럴넷 레이어를 여러 층 쌓은 것이기 때문에 함수합성으로 이루어진다고 볼 수 있다. 함수합성 자체는 등가성질을 만족하며, 점별 연산인 활성화함수들 또한 등가성실을 만족하기 때문에 이 논문에서는 하나의 linear layer에 대해서 등가성질을 살펴본다.</p>
<p>군-합성곱(Group Convolution)에 대해서 알아보자. 이는 우리가 흔히 알고 있는 합성곱을 일반화한 것이다. 군 \(G\)에 대해서 \(G\)-합성곱 (\(G\)-Convolution)은 각 \(g\in G\)에 대해서 합성곱의 필터를 변환시킨 다음 인풋과 변환된 팔터를 내적하는 것이라고 생각하면 된다. 일반적인 ‘합성곱 뉴럴넷’에서 쓰이는 합성곱은 필터를 ‘이동’시킨것이다. 아래의 그림을 보면 알 수 있다. CNN 필터를 적용하는 것을 모두 펴서 행렬곱으로 인식하면 이해가 빠를 것이다. 파라미터 값의 위치를 이동시켜서 weight matrix 를 만들 수 있기 떄문에 아래에 있는 1-D 합성곱 신경망은 ‘이동’이라는 변환에 등가성질이 있는 것이다.</p>
<p><img src="/assets/images/meta-learning-symmetries-by-reparam-01.png" alt="" /></p>
<p><a href="https://arxiv.org/abs/1802.03690">Kondor and Trivedi, 2018</a>에 따르면 linear layer \(\phi\) 가 어떤 군 작용에 대해서 등가성이기 위해서는 iff 그 layer가 군 합성곱이어야 한다는 것을 증명하였다. 즉, \(G\)-등가성 레이어는 인풋 \(v\in \mathbb{R}^n\)을 필터 \(\psi\in\mathbb{R}^n\)를 사용하여 합성해야 한다는 것을 말한다. 정리하자면, 유한 군 \(G=\{g_1,\cdots g_m\}\)이 있다고 할 때</p>
\[\phi(v)[j]=(v\star\psi)[j]=\sum_i{v[i](\pi(g_j)\psi)[i]}=\sum_i{v[i]\psi[g^{-1}_{j}i]}\]
<p>으로 나타낼 수 있는 것이다. 여기서 \(\star\)는 합성곱을 나타낸 것이다. 이 논문에서는 fully connected layer등 많이 쓰이고 있는 레이어의 파라미터 공유 패턴을 학습하는 방법을 소개한다. 이 파라미터 공유 패턴을 통하여 군 합성곱을 표현할 수 있고, 즉 등가성 레이어가 만들어지게 된다.</p>
<h1 id="encoding-and-learning-equivariance">Encoding and Learning Equivariance</h1>
<p>Mea-Learning Symmetries by Reparameterization (MSR)이라는 방법을 제안함.</p>
<h2 id="learnable-parameter-sharing">Learnable Parameter Sharing</h2>
<p>위에서 본 것처럼 파라미터가 한칸씩 이동한 특정 ‘공유패턴’을 따르는 경우 FC Layer는 위치에 등가한 (equivariant to translation) 합성곱 신경망을 구현할 수 있었다. 이것을 일반화시키면 다른 ‘공유패턴’을 사용한다면 다른 ‘변환에 등가’한 레이어를 만들 수 있을 것이다. 하지만 다른 ‘변환’을 알지 못하기 때문에 reparamterzation을 통하여 이를 학습한다.</p>
<p>Weight matrix \(W\in\mathbb{R}^{m\times n}\) 을 가지고 있는 FC Layer \(\phi:\mathbb{R}^n\rightarrow \mathbb{R}^m\) 는 인풋 \(x\)가 들어왔을 떄 \(\phi(x)=Wx\)로 정의된다. 만약 bias term을 넣고 싶다면 인풋 \(x\)에 값을 1로 가지는 차원을 하나 추가할 수도 있다. 통계학에서 design matrix를 만들 때처럼 말이다. 여기서 reparameterzation을 실시한다. Weight matrix \(W\)를 ‘symmetry matrix’ \(U\)와 \(k\)개의 ‘filter parameter’를 가지는 벡터 \(v\)로 행렬분해를 하는 것이다. 초반에 언급한 ‘구조’에 해당하는 것이 \(U\)이고 ‘값’에 해당하는 것이 \(v\)이다. 행렬분해를 진행하는 방법은 아래와 같다. 사실 아래 내용은 전통적으로 고유값 등을 사용하는 행렬분해보다는 기초적인 연산이라고 생각될 수 있으나 논리적인 연산법이다.</p>
\[\text{vec}(W)=Uv\quad v\in\mathbb{R}^k,\,U\in\mathbb{R}^{mn\times k}\]
<p>결과인 \(\text{vec}(W)\in\mathbb{R}^{mn}\)을 reshape하여 처음에 구하고자 하였던 weight matrix \(W\in\mathbb{R}^{m\times n}\)로 만든다. 이 논문에서는 1차원 벡터 \(\text{vec}(W)\)를 행으로 잘라서 reshape을 진행하였다. 직관적으로 \(U\)는 \(W\)가 가지고 있는 파라미터 ‘공유패턴’을 학습하게 될 것으로 기대할 수 있다.</p>
<p>이 ‘symmetry matrix’는 층당 \(mnk\) 의 엔트리 수를 가져 상당히 큰 편이기 때문에 이 논문에서는 Kronecker factorization을 사용하여 계산 시간을 줄였다. 뿐만 아니라, 모든 equivariance를 다 학습하게 하는 것은 비효율적일 수 있기 때문에 우리가 미리 알고 있는 equivariance는 사람의 개입을 통해 모델에 주입시키고 사람이 개입하지 않은 나머지 equivariance를 학습하게 할 수도 있다. 예를 들면 위에서 weight matrix를 만드는 과정에서 weight matrix 대신 convolution filter를 학습하게 한다면, translation equivariance를 미리 모델에 주입시키는 것과 같은 효과이다. 모델에 특정 equivariance에 대한 bias를 주는 대신 파라미터 수가 획기적으로 줄게 되는 것이다. 만약 이미지 데이터를 다루고 있다면 tranlation equivariance는 모델이 필수적으로 학습해야 하는 것이기 때문에 좋은 성능을 효율적으로 달성할 수 있게 할 것이다.</p>
<h2 id="parameter-sharing-and-group-convolution">Parameter Sharing and Group Convolution</h2>
<p>Symmetry matrix \(U\)를 잘 선택한다면 \(v\)라는 필터를 사용하는 어떠한 group convolution도 나타낼 수 있게 된다. 이 논문은 같은 내용의 아래 proposition을 증명하였다.</p>
<p>Proposition1. 유한 군 \(G=\{g_1\cdots g_m\}\)이 있을 때, 모든 \(v\in \mathbb{R}^n\)에 대하여 \(\text{vec}(W)=U^Gv\) 를 weight로 가지는 레이어가 인풋 \(x\in\mathbb{R}^n\)에 가해지는 \(G\)-합성곱을 나타낼 수 있게 하는 \(U^G\in \mathbb{R}^{mn \times n}\)이 존재한다. 또한, 위에서 언급한 \(U^G\)가 주어졌을 때 어떤 \(v\in\mathbb{R}^n\)에 대하여 weight matrix \(\text{vec}(W)=U^Gv\)를 통해 어떠한 \(G\)-합성곱도 표현될 수 있다.</p>
<p>즉, \(U\)는 각 \(g\in G\)에 대응되는 대칭변환 \(\pi(g)\)에 대한 정보를 저장할 수 있고, \(G\)-합성곱 중에 어떠한 필터 ‘공유패턴’을 가져야 하는지를 알아낼 수 있다. 예를 들어서 \(G\)를 Permutation group \(S_2\)로 지정했다고 생각하자. \(S_2\)는 두 객체의 순서를 바꾸지 않는 것과 바꾸는 것, 두개의 원소로 이루어진 군이다.</p>
<p><img src="/assets/images/meta-learning-symmetries-by-reparam-02.png" alt="" /></p>
<p>순서를 바꾸지 않는 것과 바꾸는 것 두 변환은 \(\pi(e)\)와 \(\pi(g)\)로 각각 나타내어졌으며, 행렬의 형태로 표현한다면 symmetry matrix상단과 하단에 나와있는 것 처럼 두 원소의 위치에 대한 변환으로 나타내어질 것이다. 이 ‘구조’에 해당하는 행렬이 \(U\)가 되는 것이다. 여기에 ‘값’에 해당하는 \(v\)가 곱해진다. 위와 같이 만약 ‘올바른’ \(U^G\)가 주어진다면 \(v\)는 \(G\)-합성곱에서 합성곱 필터가 될 것이다. 즉 구조와 값에 해당하는 파라미터를 Meta-Learning 프레임워크에 적용하여 외부 룹과 내부 룹에서 각각을 학습하는 형태를 떠올릴 수 있는 것이다. 모델을 학습할때 ‘올바른’ 파라미터 초기값이 주어진다면 최적의 파라미터를 학습할 수 있다는 것과 겹쳐서 생각해보자.</p>
<h2 id="meta-learning-equivariances">Meta-Learning Equivariances</h2>
<p>메타러닝은 여러 task가 공유하는 구조를 학습하는 것이라고 이해할 수 있다. 이 task의 분포 \(p(\mathcal{T})\)가 있을 때 이 분포는 특정 대칭성을 포함하고 있다고 생각한다. 즉, 각 task별로 만들어진 모델들은 특정 equivariance를 공유하고 있다고 생각하는 것이다. 이미지를 예로 들면 위치 등가성질이 이미지 분류 문제나 이미지 생성 문제, 이미지 segmentation문제를 푸는 각각의 모델에 모두 녹아져있다고 생각하는 것과 같은 것이다. 합리적인 가정이라고 할 수 있다. 이 공유되는 equivariance를 찾기 위해서 앞서 살펴본 Gradient Based Meta-Learning 프레임워크를 사용한다. 아래의 그림에 대략적인 설명이 되어있다.</p>
<p><img src="/assets/images/meta-learning-symmetries-by-reparam-03.png" alt="" /></p>
<p>\(L\)개의 레이어를 가진 네트워크가 있다고 하면 각 레이어의 symmetry matrix와 필터 파라미터를 한데 모아 \(\bold{U},\bold{v}\leftarrow\{U^1,\cdots U^L\},\{v^1,\cdots,v^L\}\)라고 하자. 위에서 논의한 바대로 task와 관계없이 공유되는 특성을 알고싶지 때문에 symmetry matrix는 \(p(\mathcal{T})\)에 따라서 변하지 않아야 한다. 즉, \(\mathcal{T}_i\sim p(\mathcal{T})\)를 따라서 반복되는 ‘내부 룹’ 에서는 \(\bold{U}\)를 고정한 채 task에 맞는 데이터셋을 사용해서 \(\bm{v}\)만을 업데이트 하는 것이다.</p>
\[\bold{v}'\leftarrow \bold{v}-\alpha\nabla_{\bold{v}}\mathcal{L}(\bold{U},\bold{v},\mathcal{D}^{tr}_i)\]
<p>메타학습을 진행하는 ‘외부 룹’에서는 위에서 정의한 \(\bold{v}'\)를 사용했을 때의 validation loss를 계산하여 \(\bold{U}\)를 업데이트 한다. 당연히 \(\bold{U}\)이외에도 \(\bold{v}\)의 초기값 등의 하이퍼파라미터를 여기 ‘외부 룹’에서 학습하는 것도 가능하다.</p>
\[\bold{U}\leftarrow \bold{U}-\eta\frac{d}{d\bold{U}}\mathcal{L}(\bold{U},\bold{v}',\mathcal{D}^{val}_i)\]
<p>위와 같은 메타학습이 끝난 후에는 \(\bold{U}\)를 고정시킨 후 새로운 task \(\mathcal{T}_k\sim p(\mathcal{T})\)에 대해서 ‘내부 룹’ 만을 사용하여 \(\bold{v}\)만을 학습시킨다.\(\bold{U}\)와 \(\bold{v}\)를 분리했기 때문에 각 레이어에서 학습해야 하는 파라미터의 개수가 줄어들었고, 일반화성능의 개선을 기대할 수도 있다.</p>
<h1 id="experiments">Experiments</h1>
<p>이 모델을 가지고 여러 실험을 해봤는데, 그 중 재밌었던 것을 소개하려고 한다. Data Augmentation과 관련된 실험이다. Data Augmentation이란 모델에게 불변성(invariance)을 심어주기 위해서 일부러 인풋을 여러가지로 변환시키는 것을 의미한다. 인풋은 변환되었으나 아웃풋 결과가 같다면 모델은 해당 변환에 대해서 불변성을 갖게 될 것이다. 하지만 로보틱스 등의 task의 경우에는 data augmentation이 테스트타임에서 불가능할 수가 있다. 그렇기 때문에 첼시는 메타학습시에만 data augmentation을 하여 모델이 invariance를 잘 잡아내는지 보았다. 위에서 invariance는 equivariance의 일종이라고 했다. MSR을 사용하면 둘 다 잡아내어야 하는 것이 맞다.</p>
<p>MSR을 이용하여 메타학습시에는 data augmentation을 통해 모델에 equivariance를 학습하게 한 다음 메타테스트때에는 data augmentation 없이 학습을 진행시키는 실험을 한 것이다. 자세히 살펴보자면, 각 task는 학습과 검증셋, \(\mathcal{T}_i=\{\mathcal{D}^{tr}_i,\mathcal{D}^{val}_i\}\)을 가지고 있는데, data augmentation을 \(\mathcal{D}^{tr}\)에만 적용하여 새로운 데이터셋을 만든 것이다.(\(\hat{\mathcal{T}}=\{\mathcal{D}^{tr}_i,\hat\mathcal{D}^{val}_i\}\)) 즉, 메타러닝 모델은 <strong>augment가 되어있지 않은 데이터를 학습하여 augment가 되어있는 검증셋에서 성능을 평가받아야 하고, 이 과정에서 MSR을 사용해 equivariance를 모델에 주입시키겠다</strong>는 것이다. 학습시에는 augmented data를 보지 않았으니 equivariance를 직접적으로 경험한 것이 아니다.</p>
<p>결과는 세팅에 따라 차이가 있지만 MSR의 장점이 여러모로 있다고 주장한다.</p>
<h1 id="discussion">Discussion</h1>
<p>멋쟁이 첼시는 앞으로 연구주제도 던져주는데, 확실히 연산량이 신경쓰였나보다. ‘구조’뿐 아니라 어떻게 효율적으로 해당 구조를 계산해야 하는지를 학습하는 것도 필요할 것이라고 한다. 또한, task-specific equivariance에 대해서도 연구가 더 필요하다는 생각이다.</p>
<h1 id="my-conclusion">My Conclusion</h1>
<p>첼시님짱 진짜 짱멋있다. 아래는 바보같은 내 질문과 천사같이 답해준 첼시님.
<img src="/assets/images/meta-learning-symmetries-by-reparam-04.png" alt="" /></p>펭긴새sylim2357@gmail.comZhou, Allan, Tom Knowles, and Chelsea Finn. "Meta-learning symmetries by reparameterization." arXiv preprint arXiv:2007.02933 (2020).[Paper Review] Efficiently Sampling Functions from Gaussian Process Posteriors2020-11-10T00:00:00+09:002020-11-10T10:40:00+09:00https://sylim2357.github.io/paper%20review/efficiently-sampling-gp-posterior<p><a href="https://arxiv.org/abs/2002.09309">Arxiv</a> 링크</p>
<p>ICML2020에 임페리얼(!) 이랑 UCL의 Marc Deisenroth와 연구진이 투고한 논문. 갑자기 GP에 꽂혀서 읽어보게 됨. GP Posterior로 나타내어지는 분포에서 실질적으로 tangible한 함수를 효율적으로 샘플링하는 방법을 제안함. 시작</p>
<h1 id="introduction">Introduction</h1>
<p>GP는 데이터를 잘 나타낼 수 있는 함수의 분포를 추정하는 방식이다. 인풋 데이터를 하나의 랜덤 변수로 생각하여 각 데이터쌍의 관계를 모델링하는 형식으로 진행된다. Covariance function으로 GP prior를 정의하고 트레이닝 데이터의 정보를 함수에 포함시켜서 GP posterior 분포를 만든다. 이 때 결과물은 함수의 분포라는 것이 중요한 점이다. Prior/Posterior 개념과 함수 분포의 개념이 함께 등장하기 때문에 GP를 Weight Space, Function Space 양쪽 시각에서 다 바라볼 수 있다. 이 부분은 GP의 교과서인 <a href="http://www.gaussianprocess.org/gpml/">Gaussian Processes for Machine Learning</a>를 보면 잘 공부할 수 있다.</p>
<p>대부분의 경우 베이지안 방식을 활용하여 얻은 함수 분포는 해석적으로 계산이 불가능한 경우가 많기 때문에 몬테카를로 기법을 사용하지만 GP는 해석적으로 분포를 알아낼 수 있다. 정규성에 대한 가정이 들어가있기 때문이다. 하지만, GP를 통해 결정을 내려야 할때는 (강화학습 등) 분포 자체보다는 분포에서 얻은 명확한 함수를 얻는 것이 더 도움이 된다.</p>
<p>GP 사후분포에서 함수를 찾아내는 것은 trivial한 문제가 아니며, 나이브하게 샘플링을 하는 것은 통계적인 특성을 잘 반영하겠지만 연산량이 상당하다는 문제가 있다. 반대로, 연산량을 줄이는 방법들은 함수를 GP 사후분포에 맞게 샘플링하기가 힘들다는 단점이 있다. 이 논문에서는 GP사후분포에서 함수를 샘플링하는 여러 방법을 비교하고 서로의 단점을 보완하여 효율적인 함수 샘플링 방법을 제안하고 있다. 간략히 설명하면, GP사후분포를 prior와 update로 분해하여 각 항에 맞는 함수 샘플링 방식을 적용한다.</p>
<h1 id="sampling-gp">Sampling GP</h1>
<h2 id="gp-recap">GP Recap</h2>
<p>\(\mathcal{X} \subseteq \mathbb{R}^d\)의 정의역을 가지는 알려지지 않은 함수 \(f: \mathcal{X} \rightarrow \mathbb{R}\)를 생각하자. 또한, 이 함수에서 도출된 \(n\)개의 가우시안 학습 데이터 \(y_i=f(x_i)+\epsilon_i\), \(\epsilon_i\sim \mathcal{N}(0,\sigma^2)\)가 있다고 생각하자.</p>
<p>GP란 임의의 유한한 포인트 \(\bold{X}_*\subseteq\mathcal{X}\)에 대해서 랜덤 벡터 \(\bm{f}_*=f(\bold{X}_*)\)가 가우시안 분포를 따르는 랜덤 함수 \(f\)를 말한다. GP는 평균함수 \(\mu\) 와 공분산함수 \(k\) 로 정의될 수 있는데, \(f\sim\mathcal{GP}(\mu,k)\)라고 한다면 \(\bm{f}_*\sim\mathcal{N}(\bm{\mu}_*,\bold{K}_{*,*})\)는 커널 \(k\)로 정의되는 공분산함수 \(\bold{K}_{*,*}=k(\bold{X}_*,\bold{X}_*)\)를 가지는 다변량 정규분포를 따른다. 흔히 하듯 평균함수를 0이라고 가정하고, 공분산함수는 정상성을 만족한다고 가정하자.</p>
<p>\(n\)개의 포인트 \(\bm{y}\)를 관찰한 후 \(\bold{X}_*\) 에서 정의되는 GP사후분포는 \(\bm{f}_*\mid\bm{y}\sim\mathcal{N}(\bm{m}_{*\mid n},\bold{K}_{*,*\mid n})\)이 된다. 여기서 평균함수와 공분산함수는 아래와 같다.</p>
\[\bm{m}_{*\mid n}=\bold{K}_{*,n}(\bold{K}_{n,n}+\sigma^2\bold{I})^{-1}\bm{y}\]
\[\bold{K}_{*,*\mid n}=\bold{K}_{*,*}-\bold{K}_{*,n}(\bold{K}_{n,n}+\sigma^2\bold{I})^{-1}\bold{K}_{n,*}\]
<p>위 식의 derivation은 <a href="https://www.youtube.com/watch?v=4vuweopUd_o&list=PLbhbGI_ppZIRPeAjprW9u9A46IJlGFdLn&index=37&ab_channel=AAILabKaist">문일철교수님의 유튜브 비디오</a>에 보면 설명이 되어 있다. Joint Normal Distribution을 이용한 선형대수 식 전개를 거치면 된다.</p>
<h2 id="naive-sampling">Naive Sampling</h2>
<p>위와 같은 \(\bm{f}_*\mid\bm{y}\) 를 샘플링하기 위해서 보통은 표준정규분포 변수를 샘플링한 후 평균과 분산을 이용하여 transform한다. 표준정규분포를 가지는 변수를 \(\zeta\sim\mathcal{N}(0,\bold{I})\)이라 할 때 아래와 같이 샘플링한다.</p>
\[\bm{f}_*\mid\bm{y}=\bm{m}_{*\mid n}+\bold{K}^{1/2}_{*,*\mid n}\zeta\]
<p>행렬에 1/2를 씌운 것은 촐레스키분해 등 행렬의 제곱근을 나타내는 것이다. 분명 위와 같이 샘플링하는 것은 이론적으로 완벽하고 수치적인 오류도 없을 것이다. 하지만, \(\bold{K}^{1/2}_{*,*\mid n}\)을 계산하는 것에 벌써 \(\mathcal{O}(*^3)\)의 연산량이 들어간다. 테스트 데이터가 많을수록 역수를 취해야하는 행렬이 커지기 때문에 무척 비효율적이게 되는 것이다. 지금까지 제안된 효율적인 샘플링 기법을 살펴보자.</p>
<h2 id="function-space-approximations-to-gps">Function-space approximations to GPs</h2>
<p>앞서 GP를 함수분포의 관점에서 볼 수 있다고 했다. 이 관점에서 자연스럽게 나온 샘플링 기법은 <strong>Sparse GP</strong>이다. 실제 학습 데이터 대신, 데이터의 특성을 잘 반영하는 새로운 점(pseudo inputs)을 가지고 GP 학습을 진행한다.</p>
<p>자세히 설명하면, 적절하게 정의한 inducing locations \(\bold{Z}=\{z_{1},\dots,z_{m}\}\) 에서 함수가 어떠한 특성 \(\bm{u}=f(\bold{Z})\) 을 가지는지를 기반으로 함수를 추정한다. 함수의 값을 계산해야 하는 점의 개수 \(m\)이 학습 데이터 개수보다 훨씬 적기 때문에 Sparse GP라는 이름이 붙은 것이다. 관련 논문의 <a href="http://www.gatsby.ucl.ac.uk/~snelson/SPGP_up.pdf">링크</a>이다.</p>
<p>\(\bm{y}\)에 직접 조건을 걸기보다는 데이터의 특성을 잘 나타낼 수 있는 inducing distribution \(q(\bm{u})\)를 정의하고 이를 활용한다. \(q\)를 어떻게 정의하는지에 대한 연구는 따로 이루어져 있으나, 이와 상관없이 \(\bm{u}\sim q(\bm{u})\)라고 일 때 어떻게 Sparse GP 샘플링이 이루어지는지 살펴보자.</p>
<p>사후분포를 다음과 같이 근사한다.</p>
\[p(\bm{f}_*\mid\bm{y})\approx\int_{\mathbb{R}^m}p(\bm{f_*}\mid\bm{u})q(\bm{u})d\bm{u}\]
<p>이 때 \(\bm{u}\sim\mathcal{N}(\bm{\mu_{u}},\bold{\Sigma}_\bm{u})\)이라면 위의 적분을 해석적으로 수행할 수 있으며, 가우시안 평균/공분산 함수를 얻을 수 있다. 식은 다음과 같다.</p>
\[\bm{m}_{*\mid m}=\bold{K}_{*,m}\bold{K}^{-1}_{m,m}\bm{\mu}_{m}\]
\[\bold{K}_{*,*\mid m}=\bold{K}_{*,*}+\bold{K}_{*,m}\bold{K}^{-1}_{m,m}(\bold{\Sigma}_\bm{u}-\bold{K}_{m,m})\bold{K}^{-1}_{m,m}\bold{K}_{m,*}\]
<p>사용하는 데이터의 수가 적기 때문에 트레이닝은 \(\mathcal{O}(\tilde{n}m^2)\)의 시간 복잡도를 가지고 있다. (\(\tilde{n}\lt n\)은 알고리즘마다 다른 배치 사이즈이다) 이전의 \(\mathcal{O}(n^3)\) 보다 훨씬 개선된 것이다. 하지만 이는 학습시간의 복잡도를 개선시킨 것이지, 샘플링의 복잡도를 개선한 것은 아니다. 샘플링의 복잡도는 위에서 진행한 나이브한 방식과 똑같다.</p>
<p>Function-space approximation은 학습은 효율적이지만 샘플링이 비효율적이다.</p>
<h2 id="weight-space-approximations-to-gps">Weight-space approximations to GPs</h2>
<p>GP를 접근하는 다른 시각에서는 함수 \(f\)를 기저함수의 가중합으로 생각한다. 즉, 커널 \(k\)가 피쳐맵 \(\varphi:\mathcal{X}\rightarrow\mathcal{H}\) 을 가지고 있는 RKHS (Reproducing Kernel Hilbert Space)를 정의한다고 볼 수 있는 것이다. \(\mathcal{H}\)가 separable하다면 커널 \(k\)가 정의하는 내적을 아래와 같이 근사할 수 있는것이다. 아래의 \(\bm{\phi}\)는 유한차원 피쳐맵 \(\bm{\phi}:\mathcal{X}\rightarrow\mathbb{R}^l\)이다.</p>
\[k(\bm{x},\bm{x}')=\langle\varphi(\bm{x}),\varphi(\bm{x}')\rangle_{\mathcal{H}}\approx\bm{\phi}(\bm{x})^\top\bm{\phi}(\bm{x})\]
<p>정상성을 가진 공분산 함수에 대해서는 유한차원 피쳐맵은 random Fourier features로 만들어질 수 있다. Bochner Theorem에 따르면 stationary kernel과 spectral density는 Fourier dual이기 때문이다. 추가 설명은 이 <a href="https://www.hiit.fi/wp-content/uploads/2018/04/Spectral-Kernels-S12.pdf">링크</a>에 있다. 이것을 샘플링에 이용한다.</p>
<p>\(\bm{\theta}_i\)를 spectral density에 비례하게 샘플링하고 \(\tau_j\sim U(0,2\pi)\)로 샘플링하여 \(\phi_i(\bm{x})=\sqrt{\frac{2}{l}}cos(\bm{\theta}_i^\top\bm{x}+\tau_i)\)를 만든다. 이제 Bayesian Linear Model을 아래와 같이 정의함으로서 \(l\)차원의 GP approximation을 만들게 된다.</p>
\[f(\cdot)=\sum^{l}_{i=1}w_i\phi_i(\cdot),\qquad w_i\sim\mathcal{N}(0,1)\]
<p>이제 \(f\)는 marginally Gaussian인 랜덤 함수가 되었고, \(w\)의 분포에 따라서 \(f\)의 분포의 모양 또한 정해지는 것이다. \(w\)의 사후분포 또한 가우시안이 되는데, \(\bm{w}\mid\bm{y}\sim\mathcal{N}(\bm{\mu}_{\bm{w}\mid n},\Sigma_{\bm{w}\mid n})\)라고 한다면 적률은</p>
\[\bm{\mu}_{\bm{w}\mid n}=(\bold{\Phi}^\top\bold{\Phi}+\sigma^2\bold{I})^{-1}\bold{\Phi}^\top\bm{y}\]
\[\Sigma_{\bm{w}\mid n}=(\bold{\Phi}^\top\bold{\Phi}+\sigma^2\bold{I})^{-1}\sigma^2\]
<p>여기서 \(\bold{\Phi}=\phi(\bold{X})\)는 \(n\times l\) 피쳐 행렬이다. 어쨌든 위의 적률을 구하기 위해 <a href="https://en.wikipedia.org/wiki/Woodbury_matrix_identity">Woodbury matrix identity</a>를 사용하면 \(\mathcal{O}(min\{l,n\}^3)\) 의 복잡도가 필요하다. \(\Sigma^{1/2}_{\bm{w}\mid n}\)을 \(\mathcal{O}(l^3)\)이나 들여가며 계산해야 했던 것보다 더 휴욜적인 것이다. 또한, 이 방법은 basis를 샘플링하는 것이기 때문에 특정 포인트에서의 예측 결과를 얻는 것이 아니라 실제 함수를 얻는 방법이다. 한번 함수를 샘플링 한 후에는 임의의 테스트 포인트에 대해서 추가적인 샘플링 연산이 필요하지 않다는 말이다.</p>
<p>하지만 효율적인 만큼 성능이 마냥 좋지많은 않은데, Fourier basis function을 사용하는 것은 stationary GP일 경우에는 상당히 좋지만 그렇지 않을 경우 성능이 확연히 떨어지는 것이다. 일반적으로 stationary라고 부르기 힘든 GP사후분포에 대해서는 variance starvation이라는 현상에 의해 학습 \(n\)이 증가할수록 외삽 예측이 ill-behaving이 된다.</p>
<h2 id="break">Break</h2>
<p>위에서 설명한 두 non-naive방식을 정리해보자. Function-space approximation을 기반으로 한 sparse GP방법을 사용할 경우 학습 데이터의 양 \(n=\mid\bm{X}\mid\)에 대해서는 효율적이지만 테스트 포인트의 개수 \(*=\mid\bm{X_*}\mid\)에 대해서는 비효율적으로 스케일된다. 거꾸로, Weight-space approximation을 기반으로 한 Fourier features방법을 사용할 경우 \(*\)에 대해서는 잘 스케일하지만 학습 데이터 개수 \(n\)이 증가하면 예측오차가 커지게 된다. 이 논문은 위 두 방법을 효과적으로 섞는 방법을 제안한다.</p>
<h1 id="proposed-sampling-method">Proposed Sampling Method</h1>
<h2 id="matherons-rule">Matheron’s Rule</h2>
<p>\(\bm{a}\)와 \(\bm{b}\)가 조인트 가우시안 확률분포이면, 양변에 평균과 공분산을 계산하는 것으로 아래의 등식이 참임을 보일 수 있다.</p>
\[(\bm{a}\mid\bm{b}=\bm{\beta}) \overset{d}{=}\bm{a}+Cov(\bm{a},\bm{b})Cov(\bm{b},\bm{b})^{-1}(\bm{\beta}-\bm{b})\]
<p>즉, Matheron’s Rule이 말하고자 하는 것은 조건부 확률변수 \(\bm{a}\mid\bm{b}\)은 사전분포 \(p(\bm{a},\bm{b})\)를 나타내는 항과 \(\bm{b}=\bm{\beta}\)를 관찰함으로서 생기는 사전분포에 대한 오차를 나타내는 항으로 나누어질 수 있다는 것이다. 다른말로 하자면 \(\bm{a}\mid\bm{b}\)를 샘플링하기 위해서는 사전분포에서 \(\bm{a}\)와 \(\bm{b}\)를 동시에 샘플한 후에 위의 식과 같이 \(\bm{\beta}-\bm{b}\)의 잔차를 \(\bm{a}\)에 업데이트 해주는 방식으로 진행할 수 있는 것이다. 이를 GP에 적용하자면,</p>
<p>\(f\sim\mathcal{GP}(0,k)\)이고 marginal \(\bm{f}_m=f(\bm{Z})\)일 때 \(\bm{f}_m=\bm{u}\)에 조건부 과정은 in distribution으로 아래를 만족한다.</p>
\[(f\mid\bm{u})(\cdot)\overset{d}{=}f(\cdot)+k(\cdot,\bold{Z})\bold{K}^{-1}_{m,m}(\bm{u}-\bm{f}_m)\]
<p>Matheron’s Rule에서 설명한 것과 같이 사후분포=사전분포+업데이트 형식인 것이다. 이런 식으로 함수를 샘플링 하는 것을 pathwise update라고 한다. 사후분포를 sample path별로 업데이트 하는 것이기 때문에 사후 공분산 행렬을 explicitly 구할 필요가 없고, 이것이 효율적인 샘플링의 주요한 요소가 된다.</p>
<h2 id="pathwise-updates-in-sampling-methods">Pathwise updates in sampling methods</h2>
<p>위에서 본 세가지 샘플링 방식을 Pathwise update방식으로 나타내면 아래와 같다.</p>
<p>Exact GP: \(\bm{f}_*\mid\bm{y}\overset{d}{=}\bm{f}_*+\bold{K}_{*,n}(\bold{K}_{n,n}+\sigma^2\bold{I})^{-1}(\bm{y}-\bm{g}-\epsilon)\)</p>
<p>Sparse GP: \(\bm{f}_*\mid\bm{u}\overset{d}{=}\bm{f}_*+\bold{K}_{*,m}\bold{K}_{m,m}^{-1}(\bm{u}-\bm{f}_m)\)</p>
<p>Weight-space GP: \(\bm{w}\mid\bm{y}\overset{d}{=}\bm{w}+\bold{\Phi}^\top(\bold{\Phi}\bold{\Phi}^\top+\sigma^2\bold{I})^{-1}(\bm{y}-\bold{\Phi}\bm{w}-\epsilon)\)</p>
<p>Exact GP의 경우 \(\bm{f}_*\)와 \(\bm{f}\)를 사전분포에서 샘플링한 후 노이즈 \(\epsilon\sim\mathcal{N}(\bm{0},\sigma^2\bold{I})\)와 \(\bm{f}\)를 결합하여 \(\bm{y}\)의 사전분포에서 \(\bm{f}+\epsilon\)이 샘플링되도록 진행되고, Sparse GP의 경우 \(\bm{f}_*\)와 \(\bm{f}_m\)을 사전분포에서 샘플링 한 후 \(\bm{u}\sim q(\bm{u})\)를 따로 샘플링한다. Weight-space GP는 초기 weight vector \(\bm{w}\sim\mathcal{N}(0,\bold{I})\)의 업데이트를 함으로서 진행된다.</p>
<p>위와 같이 Pathwise update방식으로 샘플링을 진행하는 것 자체는 그렇게 효율적이지는 않지만, 각 방법의 비효율이 어느 항에서 기인하는지 알 수 있다. Sparse GP의 경우에는 \(\mathcal{O}(*^3)\)이 사전분포에서 발생하는 것을 볼 수 있다. 오히려 업데이트 부분은 \(*\)에 대해서 선형이다. Weight-space Gp에서는 부정확성이 업데이트항에서 발생하는 것을 알 수 있다. stationary 사전분포는 괜찮지만 그렇지 않은 학습 데이터의 부정확한 표현 때문이다.</p>
<h2 id="pathwise-updates-with-decoupled-bases">Pathwise updates with decoupled bases</h2>
<p>각 샘플링 방법이 가지는 장점만을 섞으면 더 효율적인 샘플링 방법이 탄생한다. 사전분포에 해당하는 항은 Fourier basis \(\phi_i(\cdot)\)를 기반으로 한 weight-space 방법을 쓰고, 업데이트에 해당하는 항은 inducing location과 kernel basis \(k(\cdot,\bm{z}_j)\) 를 기반으로 한 function-space 방법을 쓰는 것이다. 아래와 같은 sampling 방법을 <strong>Decoupled Sparse DP Approximation</strong>, 혹은 DSGP라고 부르기로 한다.</p>
\[(f\mid\bm{u})(\cdot)\overset{d}{\approx}\sum^l_{i=1}w_i\phi_i(\cdot)+\sum^m_{j=1}v_jk(\cdot,\bm{z}_j)\]
<p>\(\bm{v}=\bold{K}^{-1}_{m,m}(\bm{u}-\bold{\Phi}\bm{w})\)이다. 이 표현에서 exact GP로 넘어가기 위해서는 \(\bold{\Phi}\bm{w}\)에다가 노이즈 \(\epsilon\sim\mathcal{N}(0,\sigma^2\bold{I})\)를 더하고, \(\bold{Z},\bm{u},\bold{K}^{-1}_{m,m}\)을 \(\bm{X,y,}(\bold{K}_{n,n}+\sigma^2\bold{I})^{-1}\)로 바꾸면 된다.</p>
<p>다시 정리하자면, \(k\)가 stationary하다는 가정이 있기 때문에, \(\bm{w}\)가 정규선형분포를 가지는 \(l\)차 베이지안 선형모델 \(f(\cdot)=\bm{\phi}(\cdot)^\top\bm{w}\)를 사용하는 것이 사전분포를 잘 나타내는 방법이라고 할 수 있다. 또한, kernel basis \(k(\cdot,\bm{z}_j)\)가 inducing locations \(\bm{z}_j\in\bold{Z}\)와 일대일 관계에 있기 때문에 업데이트 부분을 잘 나타낼 수 있다.</p>
<p>단계별로 알아보면, (i) \(f\)를 weight-space prior를 통해 샘플링하고, (ii) \(\bm{u}\sim q(\bm{u})\)를 통해 얻은 샘플로 \(\bm{u}-f(\bm{Z})\) 잔차를 계산해 업데이트 부분을 구한다. 마지막으로는 (iii) 그 두개를 더하여 정의역 \(\mathcal{X}\)전반에 대해서 사후함수를 얻을 수 있게 되는 것이다. 해당 단계가 아래의 사진에 나와있다. 왼쪽이 prior, 중간이 update, 오른쪽이 posterior이다.</p>
<p><img src="/assets/images/efficiently-sampling-gp-posterior-01.png" alt="sampling-from-dsgp" /></p>
<p>직관적으로 생각하면 업데이트 항이 \(\bm{u}-f(\bold{Z})\)만큼 ‘correcting’한다는 의미는 사후분포의 평균의 의미를 포함하는 것이다. 사전분포 \(f\) 대신에 사전분포의 기댓값 \(\mathbb{E}[f]\)를 생각한다면 DSGP가 \(\mathbb{E}[f\mid\bm{u}]\)가 되는 것이다. 업데이트항은 커널 basis로 나타내어지기 때문에 기댓값을 취한다면 Sparse GP의 posterior의 기댓값과 일치하게 되는 것이다. 즉, DSGP에서는 학습 데이터 (혹은 inducing points)가 늘어남에 따라서 well-behaving이 되고 불확실성도 낮아지는 것이다. 거꾸로 생각하면 데이터를 제거할수록 prior에 가까워지는 것이다.</p>
<p>복잡도를 살펴보면 테스트 데이터 \(\bold{X}_*\)에 따라서 선형적으로 스케일되기 때문에 훨씬 효율적으로 샘플링할 수 있다. 또한, \(\bm{x}\)에 대해서 pathwise differentiable하기 때문에 GP의 극값을 생각하는 데에도 도움이 많이 된다.</p>
<h2 id="error-bounds">Error bounds</h2>
<p>샘플링 수식의 해석적 특징을 살펴봄으로써 DSGP의 사전분포의 퀄리티를 평가한다. GP들 사이의 2-Wasserstein distance를 계산하는데, 몬테카를로 세팅에서 유용한 평가지표가 된다. Wasserstein distance가 Lipschitz 연속인 함수와 그 근사치 사이의 오차에 대한 상한을 제시해 주기 때문이다. 또한, exact GP와 유한차원 근사치 사이의 2-Wasserstein distance는 유한이기 때문에 평가 비교에도 유용한 것이다. 다음과 같은 proposition이 성립힌다.</p>
<p><strong>Proposition 1.</strong> \(\mathcal{X}\subseteq\mathbb{R}^d\)가 컴펙트하고 stationary kernel \(k\)가 \(f\sim\mathcal{G}(0,k)\)가 almost surely 연속일 수 있게 regular하다고 가정하자. 또한, \(f\mid\bm{y}\)는 \(f\)의 사후분포라고 하고, \(f^{(s)}\)와 \(f^{(d)}\)는 각각 sparse GP 랑 DSGP에 해당하는 함수라고 하자. DSGP의 사전분포의 근사치는 \(f^{(w)}\)라고 하자. \(W_{w,L^2(\mathcal{X})}\)와 \(W_{2,C(\mathcal{X})}\)는 각각 \(L^2(\mathcal{X})\)와 supremum norm을 가지는 연속 함수 공간 \(C(\mathcal{X})\)에서의 2-Wasserstein distance이라고 할 때,</p>
\[W_{2,L^2(\mathcal{X})}(f^{(d)},f\mid\bm{y})\leq \newline W_{2,L^2(\mathcal{X})}(f^{(s)},f\mid\bm{y})+C_1W_{2,C(\mathcal{X})}(f^{(w)},f)\]
<p>위 부등식을 살펴보면 DSGP 샘플의 오차는 DSGP를 이루는 두개의 항의 오차로 깔끔히 분리되는 것을 볼 수 있다. 첫번째 항은 sparse posterior의 오차이고 두번째 항은 error in the prior이다. 특히, error in the prior는 inducing distribution \(q(\bm{u})\)이 아닌 inducing locations \(\bold{Z}\)을 통해서 posterior로 전이된다.</p>
<p>다음으로는 DSGP의 적률을 살펴본다. DSGP의 기대값이 sparse GP의 기대값과 같기 때문에 sparse GP의 오차가 posterior 공분산에 미치는 영향에 대해서 살펴본다. prior를 근사하기 위해 random Fourier function을 사용하는데, 이 오차는 \(l\)차항의 basis \(\phi\)에 의해 결정된다. \(\phi\)는 \(\tau\sim U(0,2\pi)\)와 \(\bm{\theta}\sim s(\bm{\theta})\)에 의해 주어진다.(\(s(\cdot)\)은 \(k\)의 normalised spectral density를 나타낸다.)</p>
<p><strong>Proposition 2</strong> 앞선 Proposition에 이어서, \(k^{(f\mid\bm{y})},k^{(w)},k^{(s)},k^{(d)}\)가 각각 \(f\mid\bm{y},f^{(w)},f^{(s)},f^{(d)}\)의 공분산함수라고 하고, 연속 함수의 supremum norm을 \(\lVert\cdot\rVert_{C(\mathcal{X^2})}\)이라고 하고, \(C_2\)와 \(C_3\)를 상수라고 한다면 아래가 성립한다. \(C_3=m[1+\lVert\bold{K}^{-1}_{m,m}\rVert_{C(\mathcal{X}^2)}\lVert k\rVert_{C(\mathcal{X}^2)}]^2\)이고 \(C_2\)는 Sutherland and Schneider (2015)에 나온다.</p>
\[\mathbb{E}_\phi\lVert k^{(d)}-k^{(f\mid\bm{y})}\rVert_{C(\mathcal{X^2})}\newline\leq\lVert k^{(s)}-k^{(f\mid\bm{y})}\rVert_{C(\mathcal{X^2})}+\frac{C_2C_3}{\sqrt{l}}\]
<p>DSGP와 마찬가지로, posterior 사후분포의 공분산함수는 sparse GP의 공분산함수 \(k^{(s)}\)와 prior의 근사치의 공분산함수 \(k^{(w)}\)에 관련된 항으로 나누어질 수 있다. Prior의 근사치에서 발생된 오차는 RFF를 사용하기 때문에 나타나는 오차이며, basis function의 수 \(l\)이 증가하는 것과는 무관한 속도로 decay한다. 공분산함수를 몬테카를로 근사할 때 RFF의 성격을 반영한다고 볼 수 있다. 실제로는 학습 데이터 개수 \(n\)이 데이터의 차원 \(d\)보다 더 빠르게 증가하는데, RFF방법만 사용한다면 variance starvation이 있어 별로 이득이 없지만 DSGP는 variance starvation 현상이 없어서 차원에 상관없는 수렴속도가 확실히 장점으로 작용하는 것이다.</p>
<h1 id="my-conclusion">My Conclusion</h1>
<p>실험을 몇 개 한 결과도 있었지만 잘 나왔겠지. 개인적으로 Rasmussen & Williams를 보면서 GP 공부를 하고 있었는데 최근에 ICML에 논문이 나와서 바로 읽어봤다. GP는 역사가 오래된 것 같은데 최근까지도 꾸준히 관심을 받는 모델같다. 굉장히 로컬리 근사하면서도 분포에 대한 가정을 잃지 않는 모델인 것 같아서 재밌는거같다. 이론대로 샘플링을 시도하는 건 상당히 비효율적이기 때문에 실생활에 쓰이려면 이 논문과 같은 샘플링 기법을 새로 개발해야 한다는 것도 매력적이다. 역시 이론은 쓸모없어야 제맛이지!</p>펭긴새sylim2357@gmail.comBWilson, James T., et al. "Efficiently sampling functions from Gaussian process posteriors." arXiv preprint arXiv:2002.09309 (2020).Reinforcement Learning Specialization (UAlberta)2020-08-30T00:00:00+09:002020-08-30T10:00:00+09:00https://sylim2357.github.io/coursera%20course%20review/rl-specialization<p><a href="https://www.coursera.org/account/accomplishments/specialization/5KBUM6VFSQLY">My Certi</a></p>
<h1 id="개요">개요</h1>
<ul>
<li>내용: 강화학습의 기초와 응용 전반을 공부할 수 있는 Specialisation.</li>
<li>Institution: University of Alberta</li>
<li>Workload : 4 Courses, 4~5 Wks a course, 4-6hrs a week</li>
</ul>
<h1 id="장점">장점</h1>
<ul>
<li>Adam White, Martha White 현재 강화학습 분야에서 핫한 교수님들의 강의</li>
<li>강화학습의 대부 Sutton의 연구실에서 직접 제작한 영상</li>
<li>강화학습의 바이블 Reinforcement Learning: An Introduction을 따라감</li>
<li>Richard Sutton, Andy Barto, David Silver, Emma Brunskill 등 다양한 강화학습 연구진들의 short talk을 감상할 수 있음</li>
<li>알고리즘을 직접 구현할 수 있는 기회, 강화학습 환경에 대한 설정은 아름답게 해놓음</li>
</ul>
<h1 id="단점">단점</h1>
<ul>
<li>본인들 연구실에서 개발한 RL Glue를 사용함 (Gym이 아님)</li>
<li>최근 강화학습 알고리즘, 특히 Policy-Based 알고리즘 강의가 부족함</li>
<li>Specialisation이 길어서 끈기가 필요함</li>
</ul>
<h1 id="총평">총평</h1>
<p>머신러닝 인강에 Andrew Ng 의 Machine Learning이 있는 것처럼 강화학습을 공부하고 싶을 때 꼭 들어야 하는 클래식 강의가 될 것만 같다. 대가들의 강의를 직접 듣는 것도 벅찬데 퀄리티조차 좋아서 감동함. 과제도 이상한 것 없이 잘 돌아감. 기본적으로 Sutton & Barto를 따라가기 때문에 이 책의 일독과 구현이 목표인 사람에게 특히 추천.</p>펭긴새sylim2357@gmail.com★★★★★[Paper Review] VQ-WAV2VEC: Self-Supervised Learning of Discrete Speech Representations2020-05-28T00:00:00+09:002020-05-27T18:35:00+09:00https://sylim2357.github.io/paper%20review/vq-wav2vec<p><a href="https://arxiv.org/pdf/1910.05453.pdf">링크</a></p>
<p><a href="https://sylim2357.github.io/paper%20review/wav2vec/">wav2vec</a>의 후속 연구입니다.</p>
<h2 id="aim-discretisation--wav2vec">AIM: Discretisation + Wav2Vec</h2>
<p>Wav2vec이 잘났다고 주장하던 사람들이 바로 새로운 것을 들고옴. discretisation을 기존 모델에 추가한 것인데, 왜 이것을 하려고 할까? 저자들은 wav2vec이 quantised output을 반환한다면 이 반환값으로 <strong>기존 NLP에서 쓰이는 모델의 인풋</strong> 으로 쓰일 수 있을 것이라고 한다. 확실히 대부분의 NLP 모델은 이산값을 인풋으로 받고 있기는 한데.. 잘 되는지 봅시다.</p>
<h2 id="overview">Overview</h2>
<p>Wav2vec framework에서 discretisation을 더한 모델. 아래 그림을 보면 된다.</p>
<p><img src="/assets/images/vq-wav2vec-01.png" alt="vq-wav2vec" /></p>
<p>기존의 wav2vec은 \(\mathcal{X}\mapsto\mathcal{Z}\mapsto\mathcal{C}\)의 구조로 되어있었다. Vq-Wav2vec은 여기 중간에 \(\mathcal{Z}\mapsto\hat{\mathcal{Z}}\)을 추가한다. Latent Representation을 나타내는 \(\mathcal{Z}\)는 이전 몇 frame의 raw audio를 나타내는 저차원 표현이었는데, \(\hat{\mathcal{Z}}\) 라는 discrete 공간으로의 transformation을 한번 추가하면서 논문에서 추구하는 오디오 파일의 discrete representation을 이룰 수 있었다. 즉, 고정된 오디오 시그널의 representation인 것이다.</p>
<p>이산화를 이루기 위하여 논문은 Gumbel-Softmax approach와 online k-means clustering 방법을 사용한다. 여기서 나온 아웃풋을 버트와 같이 이미 널리 쓰이고 있는 NLP모델의 인풋으로 사용하는 예시도 보여주고 있다.</p>
<h2 id="background">Background</h2>
<p><a href="https://arxiv.org/pdf/1904.05862.pdf">Wav2vec</a>과 <a href="https://arxiv.org/pdf/1810.04805.pdf">BERT</a>에 대한 이해가 필요하다. 논문은 링크에 걸어 두었는데 간략히 소개하면,</p>
<p><strong>Wav2vec</strong> 은 self-supervised context-prediction task를 word2vec과 같은 loss를 최소화하는 방식으로 해결하면서 오디오 데이터의 representation을 학습하는 모델이다. Latent space를 학습하는 encoder network과 context space를 학습하는 context network(본 논문에서는 aggregation network라 칭함)으로 이루어져 있다. 자세한 부분은 <a href="https://sylim2357.github.io/paper%20review/wav2vec/">Wav2vec을 다룬 블로그 포스트</a>나 논문을 참고하면 된다.</p>
<p><strong>BERT</strong> 는 NLP문제를 풀기 위한 pre-trained모델로, 양방향 트랜스포머 네트워크를 사용하여 텍스트 데이터의 representation을 학습한다. BERT는 크게 두가지 문제를 풀면서 학습이 진행되는데, 글에서 랜덤하게 가려진 단어를 맞춰야 하는 MLM (Masked Language Modelling)과 주어진 두 문장이 실제 글에서 순차적으로 등장한 문장들인지를 맞춰야 하는 NSP (Next Sentence Prediction)문제가 그것이다.</p>
<p>여기서 말하는 representation은 흔히들 알고 있는 임베딩이라고 생각하면 되고, 생소하다면 <a href="https://tutorials.pytorch.kr/beginner/nlp/word_embeddings_tutorial.html">이 글</a>을 읽으면 된다.</p>
<h2 id="model">Model</h2>
<p>모델 구조는 wav2vec과 거의 동일하다. 다만 \(\mathcal{X}\mapsto\mathcal{Z}\mapsto\mathcal{C}\)로 이어지는 공간 변환 중간에 discrete space를 하나 추가하여 아래와 같이 된다.</p>
\[\mathcal{X}\mapsto\mathcal{Z}\mapsto\mathcal{\hat{Z}}\mapsto\mathcal{C}\]
<p>한번 더 정리하면, \(f: \mathcal{X}\mapsto\mathcal{Z}\)는 raw audio에서 feature extraction을 통한 latent space 학습을 하는 과정, quantization module이라고 불리는 \(q: \mathcal{Z}\mapsto\hat{\mathcal{Z}}\)은 discrete representation을 학습하는 과정, 마지막 \(g: \hat{\mathcal{Z}}\mapsto\mathcal{C}\)는 context를 뽑아내는 과정이다.</p>
<p>더 자세히 들어가자면, wav2vec에서는 약 30ms의 오디오가 \(f\)를 통해 \(z\)로 표현이 되었다. 각 \(z\)는 10ms의 stride를 가지고 있다. 이제는 그 \(z\)가 \(q\)를 통해서 <strong>이산 인덱스(discrete index)</strong> 로 표현이 되는 것이다. 각 인덱스는 \(z\)의 reconstruction인 \(\hat{z}\)에 매핑되어 있는 형태이다.</p>
<p><strong>즉, \(q\)가 \(z\)를 받으면 \(z\)를 어떠한 하나의 인덱스로 변환을 하고, 따로 저장하고 있는 map에서 그 인덱스에 해당하는 새로운 representation(\(\hat{z}\))을 찾아 반환한다는 뜻이다.</strong></p>
<p>그 map은 codebook이라고 불리는 \(V \times d\)차원의 행렬으로, \(V\)는 representation의 개수(\(\hat{z}\)의 개수), \(d\)는 각 \(\hat{z}\)의 차원을 의미한다. \(q\)가 \(z\)를 받으면, Gumbel-Softmax나 online k-means중 한가지 방법을 사용하여 \(z\)를 인덱스로 바꾸고, 그 인덱스에 해당하는 \(\hat{z}\)을 \(V\)개 중에서 찾아 반환하는 형태이다.</p>
<p>이 다음은 wav2vec과 동일하다. \(\hat{z}\)을 \(g\)에 넣어 \(c\)가 반환되면 그 \(c\)와 positive, negative sample들을 가지고 모델을 학습하는 것이다.</p>
<h3 id="quantization-module">Quantization Module</h3>
<p>Gumbel-Softmax와 online k-means에 대한 설명.</p>
<p><strong>Gumbel-Softmax</strong> 는 categorical latent representation을 표현하기 위해 쓰이는 기법이며, 원핫 벡터를 계산하기 위한 argmax의 미분 가능한 approximation이다. 인풋 \(z\)가 들어오면 FC, ReLU, FC를 순차적으로 거친 후 \(V\)차원의 logit 벡터 l을 반환한다. Inference시에는 \(l\)의 원소 중 가장 큰 원소에 해당하는 인덱스를 사용하는 것이다. 학습시에는 \(j\)번째 원소의 확률은 아래와 같이 표현된다.</p>
\[p_j=\frac{exp(l_j+v_j)/\tau}{\sum^{V}_{k=1}exp(l_k+v_k)/\tau}\]
<p>\(v = -log(-log(u))\), \(u~Uniform(0,1)\)이며, \(\tau\)는 Gumbel-Softmax에서 temperature라고도 불리는 하이퍼파라미터이지만, 파라미터로 놓고 학습을 통해서 정해지게 실험한 케이스도 있다고 한다. \(\tau>0\)일 때에 Gumbel-Softmax는 미분가능하며, backprop을 할 때 유용한 성질을 제공해준다. \(\tau\)에 대한 자세한 설명은 <a href="https://arxiv.org/pdf/1611.01144.pdf">이 논문</a>을 참고하면 되고, 간단한 설명은 아래와 같다. (해당 논문에서 발췌)</p>
<p><img src="/assets/images/vq-wav2vec-02.png" alt="gumbel_softmax" /></p>
<p>정리를 하면, forward pass에서는 \(i = argmax_j(p_j)\)인 것이고, backprop할 때는 Gumbel-Softmax를 그대로 미분하여 쓰면 된다.</p>
<p><strong>Online k-means</strong> 는 또다른 인덱스 선택 방식을 미분가능하게 표현한 것이다. Codebook에서 \(d\)차원짜리 representation을 반환 할 때, 인풋 \(z\)와 유클리디안 거리가 가장 가까운 \(\hat{z}\)을 반환하는 방식이다. Online k-means와 연결 되어있는 encoder network의 gradient를 구하기 위해서 dL_wav2vec/dz_hat을 사용하는데, k-means를 사용하기 위해서는 loss가 아래와 같이 된다.</p>
\[\mathcal{L}=\sum^{K}_{k=1}\mathcal{L}^{wav2vec}_k+\big( \lVert sg(z)-\hat{z} \lVert^2 + \gamma\lVert z-sg(\hat{z}) \lVert^2 \big)\]
<p>여기서 \(sg\)는 forward pass 에서는 입력을 그대로 반환하는 identity인데, gradient는 0을 반환하는 ‘stop gradient’ operator 이다. 위의 식에서 첫번째 항은 future prediction task를 위해 쓰이는 항으로 backprop할 때 codebook의 변화는 없다. 하지만, 두번째 항은 codebook의 벡터를 encoder output과 가까이 만들어주고, 세번째 항은 encoder output이 k-means의 centroid (codeword)와 가깝게 만들어 주는 역할을 하게 되는 것이다. 즉, \(sg(z)\)를 미분하면 0이기 때문에 두번째 항은 codebook을 바꿔주고, 세번째 항은 encoder network를 바꿔준다고 생각하면 된다.</p>
<p>그림 설명은 아래와 같다.</p>
<p><img src="/assets/images/vq-wav2vec-03.png" alt="quantisation" /></p>
<p><strong>Implementation details</strong></p>
<p>실제로 위에 있는 것처럼 naive하게 구현을 하면 mode collapsing이 생기게 된다. 다시 말하면, \(V\)개의 임베딩 중 실제로 쓰이는 것은 몇개가 안된다는 뜻한다. 보통은 codebook의 초기화를 바꾼다거나 regularisation을 추가로 하는 등의 방법이 있는데, 이 논문에서는 \(z\)를 일대일로 quantise하지 않고, \(z\)를 partition하여 각 partition을 독립적으로 일대일로 quantize하는 방법을 사용하고 있다.</p>
<p>먼저 \(z\)벡터(\(d\)차원)를 여러개의 group으로 나눈다(partitioning). 총 G개의 그룹이 있다고 한다면, \(z\)는 \(G \times (frac{d}{G})\)차원의 행렬이 되는 것이다. 그렇다면 \(z\)를 나타내기 위해서는 인덱스가 \(G\)개 필요하게 된다. 또 한가지 생각해야 하는 부분은 해당 partition이 여러 \(z\)에 걸쳐서 공유되게 세팅할 수도 있다는 것이다. 이 경우에는 codebook의 차원은 \(V \times \frac{d}{G}\)가 되는 것이다. 만약 공유를 안한다면 \(V \times G \times \frac{d}{G}\)의 차원을 가지고 있었을 겁니다. Partition을 공유한다면 \(\frac{d}{G}\)차원의 벡터를 조합하여 \(z\)를 만드는 것이고, 공유하지 않는다면 \(z\) 1개에 \(G\)개의 group이 각각 필요하게 되는 것이기 때문이다. 실제로는 공유하게 만들어 놓은 것이 성능이 좋았다고 한다.</p>
<h2 id="experiment">Experiment</h2>
<p>Wav2vec때와 비슷하게 downstream model을 사용하였는데, 한가지 다른점이 있다면 바로 BERT의 사용이다. Vq-wav2vec은 discrete output을 내놓기 때문에 BERT와 같이 discrete input을 받아야 하는 모델과 같이 쓰이기 편하다.</p>
<p>그래서, vq-wav2vec의 학습이 끝난 후에 그 아웃풋을 BERT에 넣어서 BERT module을 학습시켰는데, 기존 BERT의 학습과 다른 점 두가지를 적용했다. 한가지는 NSP를 사용하지않고 MLM만 사용했다는 점이고, 두번째는 MLM에서 연속적인 토큰을 mask했다는 점이다. vq-wav2vec의 아웃풋이 약 10ms의 오디오를 임베딩 한 토큰이기 때문에 mask를 discontinuous하게 했을 경우 너무 쉬운 문제가 되어버려서, 랜덤하게 5%의 확률로 시작 토큰을 정해서 약 10개(100ms 정도)의 토큰에 mask를 씌워 MLM을 학습한 것이다.</p>
<h3 id="data">Data</h3>
<p>vq-wav2vec과 BERT모두 960시간의 Librispeech데이터를 사용하여 학습하였고, 학습이 끝난 후 vq-wav2vec은 총 345M개의 토큰을 반환하는 모델이 되었다. 다른 실험 세팅에서는 100시간이 39.9M개의 토큰으로 discretized되는 것도 있었다. 역시 wav2vec과 마찬가지고 TIMIT과 WSJ에 대해서 evaluation을 진행하였다.</p>
<h3 id="training-details">Training Details</h3>
<ol>
<li>Vq-wav2vec
Fairseq를 사용해 구현하였으며 총 34x10^6개의 파라미터를 가지는 모델이다. Encoder network는 512채널을 가지는 CNN 레이어 8층을 쌓았고, 커널 사이즈는 (10,8,4,4,4,1,1,1), 스트라이드는 (5,4,2,2,2,1,1,1)이어서 총 스트라이드는 160이 된다. 각 레이어는 CNN 후에 droupout과 instance normalization, ReLU가 적용되었다. Context network (aggregation network)는 512채널의 12층 레이어로, 스트라이드 1, 커널 사이즈는 2부터 시작하여 다음 층으로 갈때마다 1개씩 늘어가는 구조이다. Encoder network와 다른 detail은 똑같지만, context network에는 block 사이에 skip connection을 사용하였다.
Wav2vec과 비슷하게, future step을 나타내는 K는 8로, negative sample의 수는 10개로 지정하였으며, learning rate은 초반 500 step까지는 늘다가 그 후부터 cosine schedule에 따라 10^-6까지 감소하게 만들었다. 배치 사이즈는 10개이며, 150k frame에 맞게 인풋 데이터를 잘라 넣었다. 모든 모델은 GPU 8개로 학습되었다.</li>
<li>Gumbel-Softmax Models
그룹의 개수는 2개(G=2), 각 그룹당 latent representation은 320개(V=320)으로, Gumbel-Softmax의 첫 FC가 반환하는 벡터는 총 640차원(320*2)이다. 각 그룹마다 한개의 원핫 벡터를 반환하고, 첫 70%의 스텝에서 temperature tau는 2부터 0.5까지 감소시켰고 그 후에는 0.5로 고정시켰다. 960시간의 데이터에 학습이 완료되고 난 후에는 13.5k의 codewords로 이루어진 codebook이 만들어졌다. (\(V^G\)=102k개가 총 가능한 codeword 수)</li>
<li>k-means Models
위와 똑같이 G=2, V=320으로 두었으며, full Librispeech에서 학습했을 시 23k의 unique codewords가 나왔다. gamma는 0.25로 고정시켰다. (van den Oord, 2017을 참고)</li>
<li>BERT
<ol>
<li>Bert base
768차원 네트워크가 12개가 있고, 내부 FFN은 3072차원이고 attention head는 12개를 가져갔다. 각 token은 10ms의 오디오 데이터를 임베딩한다.</li>
<li>BERT small
작은 모델은 512차원 네트워크를 사용하였고, FFN 크기는 2048, attention head는 8개를 사용하였다.</li>
</ol>
</li>
<li>Acoustic Model
Wav2vec과 마찬가지로 downstream task를 위한 모델로, WSJ에서 학습시킨 4-gram KenLM모델과 character-based convolutional language model을 사용했다.</li>
</ol>
<h2 id="results">Results</h2>
<p><img src="/assets/images/vq-wav2vec-04.png" alt="result1" /></p>
<p><img src="/assets/images/vq-wav2vec-05.png" alt="result2" /></p>
<p>BERT와 함께 쓸 것이 아니면 굳이 vq-wav2vec을 wav2vec 대신 쓸 필요는 없다. 논문에서 나온 결과도 BERT의 힘을 빌렸을 때 vq-wav2vec이 더 좋은 결과를 냈다고 한다. Gumbel과 k-means모두 wav2vec과 vanilla로 맞붙었을 때는 졌다.</p>
<h1 id="my-conclusion">My Conclusion</h1>
<p>애초에 quantize를 할때 정보손실이 많이 일어나는 것 같습니다. 그 정보손실을 감수하면서까지 quantize를 하는 이유는 BERT와 같이 다른 NLP모델과의 hybrid를 위해서 인 것 같은데요, 그럴 일이 없고 그냥 audio embedding이 필요한 상황엔 wav2vec을 쓰는게 더 나을 수도 있겠습니다.</p>펭긴새sylim2357@gmail.comBaevski, Alexei, Steffen Schneider, and Michael Auli. "vq-wav2vec: Self-supervised learning of discrete speech representations." arXiv preprint arXiv:1910.05453 (2019).