<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>manfromearth1 님의 블로그</title>
    <link>https://manfromearth1.tistory.com/</link>
    <description>manfromearth1 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 1 Jul 2026 21:25:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>manfromearth1</managingEditor>
    <item>
      <title>Advantage-Weighted Regression: Simple and Scalable Off-Policy Reinforcement Learning</title>
      <link>https://manfromearth1.tistory.com/124</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;강화학습 논문을 읽을 때는 단순히 objective나 update rule만 따라가는 것으로는 부족하다. 특히 어떤 문제를 해결하려고 등장했는지, 다시 말해 &lt;span&gt;&lt;i&gt;motivation&lt;/i&gt;&lt;/span&gt; 을 이해하는 것이 중요하다. AWR(Advantage-Weighted Regression) 역시 마찬가지다. 이 논문은 단순히 새로운 actor-critic 변형을 제안하는 것이 아니라,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;좋은 행동 데이터가 이미 존재할 때, policy가 data distribution을 벗어나지 않는 선에서 얼마나 공격적으로 업데이트해야 하는가?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 질문에서 출발한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 강화학습 알고리즘들은 exploration을 통해 더 나은 행동을 찾는 데 강점을 가진다. 하지만 실제 환경에서는 무작정 새로운 행동을 시도하는 것이 위험하거나 비용이 클 수 있다. 또한 demonstration, replay buffer, offline trajectory처럼 이미 수집된 데이터를 효율적으로 활용하고 싶은 상황도 많다. AWR은 이러한 맥락에서, return이 높았던 행동을 더 강하게 imitation하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 Method를 확인해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Method&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 언급했듯이, AWR은 expected reward를 직접적으로 최대화하는 것이 아닌 expected improvement $\eta(\pi)=J(\pi)-J(\mu)$를 최대화한다. 여기서 $\mu$는 sampling policy인데, 자세한 내용은 이후에 다루도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Expected improvement는 다음과 같이 advantage에 관한 term으로 표현될 수 있다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIvKsn/dJMcagFF0lx/2lcRPg5goHka7RL9Mkq2Z0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIvKsn/dJMcagFF0lx/2lcRPg5goHka7RL9Mkq2Z0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIvKsn/dJMcagFF0lx/2lcRPg5goHka7RL9Mkq2Z0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIvKsn%2FdJMcagFF0lx%2F2lcRPg5goHka7RL9Mkq2Z0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;41&quot; data-origin-width=&quot;1768&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $\mathcal R$은 $\mu$를 따를 때 state s에서 action a를 할 때의 return이며, $V^\mu$는 $\mu$를 따르는 확률분포 하에서의 $\mathcal R$의 평균이다. 다만 $d_\pi$를 구하는 것이 사실상 불가능하기 때문에 논문에서는 다음과 같은 proxy를 도입하며:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1376&quot; data-origin-height=&quot;164&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHI5ep/dJMcajoJEuB/AHuHYCyr0XrkzwaZbfDUEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHI5ep/dJMcajoJEuB/AHuHYCyr0XrkzwaZbfDUEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHI5ep/dJMcajoJEuB/AHuHYCyr0XrkzwaZbfDUEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHI5ep%2FdJMcajoJEuB%2FAHuHYCyr0XrkzwaZbfDUEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;48&quot; data-origin-width=&quot;1376&quot; data-origin-height=&quot;164&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d_\pi$와 $d_\mu$가 크게 차이나지 않도록 다음과 같은 constrained policy optimization을 만들게 된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1390&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NHnWc/dJMcagMrsMk/ZhiLs3dGBnSJcH7EEPYJZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NHnWc/dJMcagMrsMk/ZhiLs3dGBnSJcH7EEPYJZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NHnWc/dJMcagMrsMk/ZhiLs3dGBnSJcH7EEPYJZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNHnWc%2FdJMcagMrsMk%2FZhiLs3dGBnSJcH7EEPYJZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;97&quot; data-origin-width=&quot;1390&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 형태를 Lagrange 식으로 풀다보면 강화학습을 공부하는 사람이라면 꽤 자주 보는&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bH8qk8/dJMcacJ2KFA/hIr1uojC8ztIijqbKKGo9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bH8qk8/dJMcacJ2KFA/hIr1uojC8ztIijqbKKGo9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bH8qk8/dJMcacJ2KFA/hIr1uojC8ztIijqbKKGo9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbH8qk8%2FdJMcacJ2KFA%2FhIr1uojC8ztIijqbKKGo9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;64&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같은 형태가 나오며, 실제 optimal policy를 얻기 위해서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;268&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nQj50/dJMcadPCfqw/OQkVafiYB1CUiaR1HZkcUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nQj50/dJMcadPCfqw/OQkVafiYB1CUiaR1HZkcUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nQj50/dJMcadPCfqw/OQkVafiYB1CUiaR1HZkcUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnQj50%2FdJMcadPCfqw%2FOQkVafiYB1CUiaR1HZkcUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;106&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;268&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 최종적인 derivation이 일어나게 된다. 여기까지가 single sampling policy $\mu$를 바탕으로 한 최적화 방법이었고, 논문은 좀 더 generalized된 mixture of policies에 대한 policy improvement를 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Experience Replay and Off-Policy Learning&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화하는 대상은 같지만, 실제로는 업데이트마다의 policy가 매번 다르기 때문에 single sampling policy $\mu$를 단순히 가정하기는 어렵다. 그렇다고 on-policy의 최대 약점인 sample inefficiency를 그대로 안고 갈 수는 없다. 각 iteration step i마다의 policy를 $\pi_i$라 하고, replay buffer에서 policy $\pi_i$의 샘플이 나올 확률을 $w_i$라 하자. 이렇게 policy가 전부 다 다르더라도 여전히 기댓값의 선형성 때문에 다음과 같은 식으로 나타낼 수 있다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2626&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KKAtP/dJMcabK9tZ5/P4a1IvKPAKYy82UgLkyNM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KKAtP/dJMcabK9tZ5/P4a1IvKPAKYy82UgLkyNM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KKAtP/dJMcabK9tZ5/P4a1IvKPAKYy82UgLkyNM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKKAtP%2FdJMcabK9tZ5%2FP4a1IvKPAKYy82UgLkyNM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;60&quot; data-origin-width=&quot;2626&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시나 $d_\pi$를 직접 최적화하지 못하지만, 또 기댓값의 선형성 때문에 다음과 같이 근사할 수 있다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2316&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7eQ73/dJMcaiDrNkj/HhaDaaoxX42u41hRsKK1E0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7eQ73/dJMcaiDrNkj/HhaDaaoxX42u41hRsKK1E0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7eQ73/dJMcaiDrNkj/HhaDaaoxX42u41hRsKK1E0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7eQ73%2FdJMcaiDrNkj%2FHhaDaaoxX42u41hRsKK1E0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;76&quot; data-origin-width=&quot;2316&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Constrained policy optimization을 하게 되면 아래와 같이 된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1744&quot; data-origin-height=&quot;662&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/be6r7C/dJMcaicqsS1/ofMBSew1LHumuKMPKnQTZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/be6r7C/dJMcaicqsS1/ofMBSew1LHumuKMPKnQTZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/be6r7C/dJMcaicqsS1/ofMBSew1LHumuKMPKnQTZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbe6r7C%2FdJMcaicqsS1%2FofMBSew1LHumuKMPKnQTZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;228&quot; data-origin-width=&quot;1744&quot; data-origin-height=&quot;662&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡해보이지만, 사실 알고리즘은 간단하다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnp3qU/dJMcagFF3uw/2lQBoloEeybHOnFzYUpnik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnp3qU/dJMcagFF3uw/2lQBoloEeybHOnFzYUpnik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnp3qU/dJMcagFF3uw/2lQBoloEeybHOnFzYUpnik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdnp3qU%2FdJMcagFF3uw%2F2lQBoloEeybHOnFzYUpnik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1736&quot; height=&quot;530&quot; data-origin-width=&quot;1736&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\mathcal R$은 MC return으로 계산된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>논문 리뷰/RL</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/124</guid>
      <comments>https://manfromearth1.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 25 May 2026 23:00:55 +0900</pubDate>
    </item>
    <item>
      <title>PolicyFlow: Policy Optimization with Continuous Normalizing Flow in Reinforcement Learning</title>
      <link>https://manfromearth1.tistory.com/123</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;전통적인 강화학습에서는 연속 행동 공간(continuous action domain)에서 확률적 정책(stochastic policy)을 학습할 때, 정책의 parameterization을 보통 Gaussian distribution으로 둔다. 예를 들어 상태 &lt;span&gt;s&lt;/span&gt;가 주어졌을 때 정책은&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$a \sim \mathcal N(\mu_\theta(s), \Sigma_\theta(s))$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같이 표현되며, policy gradient나 PPO/TRPO 계열 알고리즘은 이 Gaussian likelihood를 기반으로 정책을 업데이트한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 parameterization은 계산이 안정적이고 likelihood 및 entropy를 쉽게 계산할 수 있다는 장점이 있다. 특히 reparameterization trick과 결합했을 때 gradient estimation이 효율적이며, 고차원 연속 제어 문제에서도 비교적 안정적으로 동작한다는 이유로 오랫동안 표준적인 선택으로 사용되어 왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 Gaussian policy는 표현 가능한 action distribution의 형태가 제한적이다. 특히 하나의 상태에서 여러 행동 mode를 동시에 유지해야 하거나, 탐색 과정에서 서로 떨어진 action region을 함께 고려해야 하는 경우에는 단일 Gaussian의 unimodal 구조가 제약으로 작용할 수 있다. 이러한 한계는 offline RL이나 imitation learning에서 mode averaging 문제로 더 명확히 드러나지만, online RL에서도 복잡한 exploration 구조를 표현하는 데에는 부족할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 관점에서 flow-based policy는 Gaussian policy를 대체한다기보다, Gaussian policy가 제공하는 계산적 편의성을 어느 정도 유지하면서 더 유연한 action distribution을 표현하려는 시도로 볼 수 있다. 단순 Gaussian을 복잡한 invertible transformation으로 확장함으로써, multimodal하거나 highly non-Gaussian한 action distribution을 표현할 수 있다는 점에서 주목받고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러한 점에서 본 논문은 continuous normalizing flow(CNF)를 policy parameterization에 도입하여, 기존 Gaussian policy보다 더 expressive한 action distribution을 구성하고자 한다. 구체적으로는 latent variable &lt;span&gt;z&lt;/span&gt;를 base distribution에서 샘플링한 뒤, 이를 flow dynamics를 통해 변환하여 action distribution의 평균을 생성한다. 이후 해당 평균 주변에서 Gaussian sampling을 수행함으로써, 기존 정책 최적화 기법과의 호환성을 유지하면서도 multimodal하거나 highly non-Gaussian한 정책 분포를 표현할 수 있도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 본 논문은 flow를 직접 density estimator로 사용하는 대신, flow가 생성한 representation 위에 conditional Gaussian policy를 정의하는 구조를 사용한다. 이를 통해 복잡한 flow 기반 표현력을 활용하면서도, PPO 계열 알고리즘에서 필요한 likelihood ratio 계산을 보다 안정적으로 수행할 수 있도록 설계하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Main Method&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문의 핵심은 &lt;span&gt;&lt;b&gt;Gaussian policy의 평균 &lt;/b&gt;$\mu_\theta(s)$&lt;/span&gt;&lt;span&gt;&amp;nbsp;를 단순한 neural network output으로 두는 대신, &lt;/span&gt;&lt;span&gt;&lt;b&gt;continuous normalizing flow의 terminal output &lt;/b&gt;$\phi_1(z;s)$&lt;/span&gt;&lt;span&gt; 로 정의하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 Gaussian policy는 보통&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$a \sim \mathcal N(\mu_\theta(s), \sigma^2)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처럼 상태 &lt;span&gt;s&lt;/span&gt;에서 하나의 평균을 만들고, 그 주변에서 action을 샘플링한다. 반면 이 논문에서는 먼저 latent variable&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$z \sim p_z(z)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 샘플링한 뒤, &lt;span&gt;z&lt;/span&gt;&lt;span&gt;를 상태 &lt;/span&gt;&lt;span&gt;s&lt;/span&gt;&lt;span&gt;에 조건화된 flow를 통해 이동시킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\frac{d}{dt}\phi_t(z;s) = v_t(\phi_t(z;s);s), \qquad \phi_0(z;s)=z$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $v_t$는 neural network로 parameterize된 velocity field다. 이 ODE를 $t=0$부터 $t=1$까지 적분하면 terminal point&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\phi_1(z;s)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 얻는다. 논문은 이 값을 action distribution의 평균으로 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$a=\phi_1(z;s)+n, \qquad n\sim \mathcal N(0,\sigma^2)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 &lt;span&gt;z&lt;/span&gt;&lt;span&gt;가 고정되면 action은&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\pi(a\mid z,s) = \mathcal N(a;\phi_1(z;s),\sigma^2)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 따른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 실제 policy는 &lt;span&gt;z&lt;/span&gt;를 모르는 상태에서 action만 보는 분포이므로, &lt;span&gt;z&lt;/span&gt;에 대해 적분한 marginal distribution이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\pi(a\mid s) = \int \pi(a\mid z,s)p_z(z)\,dz$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 전체 policy는 하나의 Gaussian이 아니라, 여러 z가 만드는 Gaussian들의 연속 mixture가 된다. 이 때문에 기존 Gaussian policy보다 더 복잡한 multimodal action distribution을 표현할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 PPO-style objective를 쓰려면 importance ratio가 필요하다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\frac{\pi(a\mid z,s)} {\hat\pi(a\mid z,s)}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $\hat\pi$는 rollout을 생성한 old policy이고, $\pi$는 현재 업데이트하려는 new policy다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히 계산하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\frac{ \mathcal N(a;\phi_1(z;s),\sigma^2) }{ \mathcal N(a;\hat\phi_1(z;s),\hat\sigma^2) }$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 &lt;span&gt;$\phi_1(z;s)$&lt;/span&gt;와 $\hat\phi_1(z;s)$를 얻으려면 각각 ODE를 끝까지 풀어야 한다. 특히 학습 중에 new flow $\phi_1$에 대해 gradient까지 흘리려면 비용이 크고 불안정해진다. 그래서 논문은 ratio를 직접 계산하지 않고 근사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 관찰은 Gaussian likelihood ratio가 shift-invariant하다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\frac{ \mathcal N(a;\phi_1,\sigma^2) }{ \mathcal N(a;\hat\phi_1,\hat\sigma^2) } = \frac{ \mathcal N(a-\hat\phi_1;\phi_1-\hat\phi_1,\sigma^2) }{ \mathcal N(a-\hat\phi_1;0,\hat\sigma^2) }$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 중요한 것은 new terminal point 자체가 아니라,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\delta\phi_1(z;s) = \phi_1(z;s)-\hat\phi_1(z;s)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이다. 이는 old flow의 terminal point에서 new flow가 얼마나 이동했는지를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &lt;span&gt;$\delta\phi_1$&lt;/span&gt;도 정확히 계산하려면 new ODE를 풀어야 한다. 그래서 논문은 terminal shift $\delta\phi_1$를 직접 계산하지 않고, velocity field의 차이로 근사한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;old flow의 시작점은 &lt;span&gt;z&lt;/span&gt;&lt;span&gt;, 끝점은 &lt;/span&gt;&lt;span&gt;$\hat\phi_1$&lt;/span&gt;&lt;span&gt;다. 이 둘을 잇는 직선 경로를&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$x_t=(1-t)z+t\hat\phi_1(z;s)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 정의한다. 그리고 이 경로 위에서 new velocity와 old velocity의 차이를 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\delta v_t(x_t;s) = v_t(x_t;s)-\hat v_t(x_t;s)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직관적으로는, &lt;b&gt;terminal output의 차이&lt;/b&gt;를 직접 계산하는 대신, &lt;b&gt;중간 경로에서의 velocity 차이&lt;/b&gt;로 대체하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 importance ratio를 다음과 같이 근사한다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\rho = \frac{ \mathcal N(a-\hat\phi_1(z;s); v_t(x_t;s,\theta)-\hat v_t(x_t;s), \sigma^2) }{ \mathcal N(a-\hat\phi_1(z;s);0,\hat\sigma^2) }$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 학습 시에는 new flow의 ODE를 끝까지 적분할 필요가 없다. 대신 $t\sim Unif[0,1]$를 샘플링하고, interpolation point $x_t$에서 velocity field만 평가하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서는 이렇게 proxy로 importance ratio를 계산하는 것에 대해서, approximate bound를 제시함으로써 정당성을 확인하니 확인해보면 좋을 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1942&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cF37U2/dJMcag6G95a/7fIKK4XO5tbkym7nmJbEE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cF37U2/dJMcag6G95a/7fIKK4XO5tbkym7nmJbEE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cF37U2/dJMcag6G95a/7fIKK4XO5tbkym7nmJbEE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcF37U2%2FdJMcag6G95a%2F7fIKK4XO5tbkym7nmJbEE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1942&quot; height=&quot;542&quot; data-origin-width=&quot;1942&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Policy Entropy Regularization&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PPO나 SAC 같은 알고리즘에서는 정책 entropy를 키워 exploration을 유도하는 것이 일반적이다. Gaussian policy에서는 entropy가 닫힌형태로 계산된다. 예를 들어 diagonal Gaussian의 경우 entropy는 분산만 알면 바로 계산할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 flow-based policy에서는 상황이 더 복잡하다. 정책 분포가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\pi(a\mid s) = \int \mathcal N(a;\phi_1(z;s),\sigma^2)p_z(z)\,dz$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같은 implicit mixture 형태를 가지기 때문에, 전체 policy entropy&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\mathcal H(\pi(\cdot\mid s))$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 직접 계산하기 어렵다. 정통 CNF 방식으로 density를 계산하려면 divergence trace를 ODE와 함께 적분해야 하므로 계산 비용도 커진다. 따라서 기존 방식처럼 policy entropy를 직접 계산해서 regularization하는 것은 이 구조에서는 부담스럽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 논문은 Brownian motion에서 영감을 받은 entropy regularizer를 제안한다. 핵심 아이디어는 entropy를 직접 계산하지 않고, &lt;span&gt;&lt;b&gt;flow trajectory가 자연스럽게 퍼지는 방향으로 velocity field를 유도하는 것&lt;/b&gt;&lt;/span&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Brownian motion은 시간이 지날수록 particle들이 공간상에 퍼지는 확산 과정이다. 이때 확률밀도 $p_t(x)$는 heat equation을 따른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\frac{\partial p_t(x)}{\partial t} = \nabla_x^2 p_t(x)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편 flow로 induced되는 density의 변화는 continuity equation으로 표현된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\frac{\partial p_t(x)}{\partial t} = -\nabla_x\cdot(p_t(x)v_t(x))$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 velocity field를&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$v_t(x) = -\nabla_x\log p_t(x)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 두면 continuity equation이 heat equation과 연결된다. 즉, negative score 방향의 velocity field는 density를 퍼뜨리는 확산적 움직임과 관련된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 관찰을 이용해 논문은 learned velocity field가 reference flow의 negative score 방향을 따르도록 regularization한다. 다만 score&lt;span&gt;&amp;nbsp;$\nabla_x\log \hat p_t(x_t;s)$&lt;/span&gt;를 직접 계산하기 어렵기 때문에, reference velocity field $\hat v_t$와 score 사이의 관계를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\nabla_x\log \hat p_t(x_t;s) = \frac{1}{1-t} \left( t\hat v_t(x_t;s)-x_t \right)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 negative score는 대략&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$-\nabla_x\log \hat p_t(x_t;s) = \frac{1}{1-t} \left( x_t-t\hat v_t(x_t;s) \right)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 현재 velocity &lt;span&gt;v$v_t(x_t;s,\theta)$&lt;/span&gt;가 이 방향과 비슷해지도록 만들고 싶다. 하지만 위 식은 $t\to 1$일 때 $1/(1-t)$ 때문에 불안정해진다. 그래서 논문은 양변에 $1-t$를 곱한 형태로 regularizer를 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\eta_t(x_t;s,\theta) = (1-t)v_t(x_t;s,\theta) - \left( x_t-t\hat v_t(x_t;s) \right)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 값을 작게 만드는 항을 objective에 추가한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$-w_b \|\eta_t(x_t;s,\theta)\|_2^2$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최대화 objective이므로 음수 부호가 붙는다. 즉 $\eta_t$가 작아질수록 objective가 커진다. 결과적으로 learned velocity field는 reference flow의 negative score 방향과 정렬된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직관적으로 말하면, 이 regularizer는 flow가 좁은 영역으로 collapse하지 않고 Brownian motion처럼 퍼지는 방향을 갖도록 유도한다. 그래서 여러 latent &lt;span&gt;z&lt;/span&gt;에서 출발한 trajectory들이 비슷한 action mode로 몰리는 것을 완화하고, 더 넓은 action region을 탐색하게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 논문은 terminal Gaussian noise의 entropy도 함께 regularization한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$\frac{w_g}{2} \sum_{i=1}^d \log(2\pi e\sigma_i^2)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 action을&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$a=\phi_1(z;s)+n, \qquad n\sim\mathcal N(0,\sigma^2)$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 샘플링할 때 들어가는 Gaussian noise &lt;span&gt;n&lt;/span&gt;의 entropy다. 이 항은 분산이&amp;nbsp;너무 작아져 deterministic policy처럼 되는 것을 막고, terminal action sampling 단계에서도 stochasticity를 유지하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 최종 regularizer는 두 부분으로 구성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$J_{\text{Reg}}(\theta,\sigma) = \mathbb E \left[ -w_b\|\eta_t(x_t;s,\theta)\|_2^2 + \frac{w_g}{2} \sum_{i=1}^d \log(2\pi e\sigma_i^2) \right]$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 항은 flow trajectory 자체가 퍼지는 방향을 갖게 만들고, 두 번째 항은 terminal Gaussian noise의 entropy를 키운다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체적으로 PolicyFlow의 학습 objective는 PPO-style clipped surrogate와 Brownian regularizer의 합이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$J_{\text{Flow}} + J_{\text{Reg}}$$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 이 방법은 다음 두 가지를 동시에 달성하려고 한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;PPO처럼 advantage가 높은 action의 probability를 증가시킨다.&lt;/li&gt;
&lt;li&gt;Flow trajectory가 collapse하지 않고 다양한 action mode를 유지하도록 한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정리하면, Brownian regularizer는 &lt;span&gt;&lt;b&gt;정책 entropy를 직접 계산하지 않고도, flow의 velocity field를 확산적인 방향으로 유도하여 exploration과 trajectory diversity를 증가시키는 장치&lt;/b&gt;&lt;/span&gt;다. 다만 논문에서도 말하듯이 이것은 엄밀한 Brownian dynamics의 exact derivation은 아니고, rectified flow에서 알려진 velocity-score 관계를 policy flow에 가져온 practical regularization으로 보는 것이 정확하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Experiment는 굳이 확인하지 않도록 하겠다. 꽤 복잡해서 이렇게까지 해야 하나 싶기는 한데... 아무튼 여기서 마무리하겠다!&lt;/p&gt;</description>
      <category>논문 리뷰/RL</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/123</guid>
      <comments>https://manfromearth1.tistory.com/123#entry123comment</comments>
      <pubDate>Mon, 25 May 2026 15:12:31 +0900</pubDate>
    </item>
    <item>
      <title>One-step Diffusion with Distribution Matching Distillation 논문 리뷰</title>
      <link>https://manfromearth1.tistory.com/122</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2348&quot; data-origin-height=&quot;812&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzh2Vl/dJMcaja5Qf7/96LV6dxW5RA0ktn9up6ra0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzh2Vl/dJMcaja5Qf7/96LV6dxW5RA0ktn9up6ra0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzh2Vl/dJMcaja5Qf7/96LV6dxW5RA0ktn9up6ra0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzh2Vl%2FdJMcaja5Qf7%2F96LV6dxW5RA0ktn9up6ra0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2348&quot; height=&quot;812&quot; data-origin-width=&quot;2348&quot; data-origin-height=&quot;812&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Offline RL에서 One-step distillation을 이용한 policy optimization을 2026 Neurips에 제출하며 꽤 성공적으로 마친 후, Generative Modeling 분야에도 내 아이디어를 적용할 수 있지 않을까 하면서 최근 Distillation으로 one-step generative model을 만드는 방법들을 찾고 있다. 바로 논문의 핵심 아이디어를 확인해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;N-step Diffusion 모델을 바탕으로 1-step generative model을 만드는 방법으로, 본 논문에서는 &lt;b&gt;Distribution Matching&lt;/b&gt;과 &lt;b&gt;Pointwise Regression&lt;/b&gt;을 둔다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Distribution Matching&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yC7s6/dJMcaayzKEo/l9hHFw6MpnKlKGlaIWO0G1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yC7s6/dJMcaayzKEo/l9hHFw6MpnKlKGlaIWO0G1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yC7s6/dJMcaayzKEo/l9hHFw6MpnKlKGlaIWO0G1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyC7s6%2FdJMcaayzKEo%2Fl9hHFw6MpnKlKGlaIWO0G1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;134&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $p_{\text{fake}}$는 one-step generator가 만들어내는 데이터에 대한 확률분포이고, $p_{\text{real}}$은 실제 data distribution을 의미한다. KL divergence를 낮춘다는 것은 두 확률분포가 일치하게 만든다는 것이니, 해당 수식은 one-step generator의 output이 실제 data에 가깝도록 하는 것으로 보면 되겠다. Gradient의 flow는 다음과 같다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEez75/dJMcai4mh79/Njpqj7WBNojY21bOy73aiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEez75/dJMcai4mh79/Njpqj7WBNojY21bOy73aiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEez75/dJMcai4mh79/Njpqj7WBNojY21bOy73aiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEez75%2FdJMcai4mh79%2FNjpqj7WBNojY21bOy73aiK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;206&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로는 우리가 실제 데이터에 관한 distribution은 얻을 수 없기에, $s_{\text{real}}(x)$는 pretrain된 N-step diffusion 모델을 이용한다. $s_{\text{fake}}$의 경우 one-step generator을 cloning하는 N-step diffusion 모델이다. 이상적인 경우라면 real/fake distribution의 score를 정확히 계산할 수 있다면 Eq. (2)의 gradient를 직접 구할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 manifold assumption에 따라, one-step generator가 만들어내는 데이터 $x'$에 관한 score는 학습이 덜 된 경우, &lt;b&gt;실제 데이터를 바탕으로 pretrain이 되어 있는 N-step diffusion model이 $x'$에 대해 내는 확률값이 0에 가깝기 때문에, gradient 자체가 지나치게 불안정해질 수 있다.&lt;/b&gt; 따라서 본 논문은 시점 $t$에서의 score, 즉 Gaussian Noise가 추가된 상태(논문에서는 perturbation이라 한다)의 score 비교를 통해 해당 loss를 계산한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;966&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PZohl/dJMcadhKPq6/IU9Nx5I5CrR5c58Y9sKpO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PZohl/dJMcadhKPq6/IU9Nx5I5CrR5c58Y9sKpO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PZohl/dJMcadhKPq6/IU9Nx5I5CrR5c58Y9sKpO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPZohl%2FdJMcadhKPq6%2FIU9Nx5I5CrR5c58Y9sKpO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;363&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;966&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github Repo에서 코드를 확인하고 대충 정리해봤으니 참고해보자:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1778921477345&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;z = sample_noise()                              # z ~ N(0, I)
x0 = G(z)                                       # one-step generated sample

t = sample_timestep()                           # sample diffusion noise level
eps = sample_noise()                            # Gaussian perturbation

xt = alpha(t) * x0 + sigma(t) * eps             # diffuse fake sample

eps_real = RealDM(xt, t, cond)                  # approx real score
eps_fake = FakeDM(xt, t, cond)                  # approx fake score

x0_real = pred_x0(xt, eps_real, t)              # denoised prediction from real DM
x0_fake = pred_x0(xt, eps_fake, t)              # denoised prediction from fake DM

grad = (x0 - x0_real) - (x0 - x0_fake)          # approx s_real - s_fake
grad = normalize(grad)                          # stabilize scale

target = stopgrad(x0 - grad)                    # desired update direction
loss = mse(x0, target)                          # generator loss

update(G, loss)                                 # update one-step generator&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Pointwise Regression&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1550&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRksCA/dJMcagFzNEb/KySmDWlz9iQ1VgqMn60lhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRksCA/dJMcagFzNEb/KySmDWlz9iQ1VgqMn60lhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRksCA/dJMcagFzNEb/KySmDWlz9iQ1VgqMn60lhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRksCA%2FdJMcagFzNEb%2FKySmDWlz9iQ1VgqMn60lhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;111&quot; data-origin-width=&quot;1550&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$y$는 pretrain된 N-step generative model이 생성한 데이터이고, 추가 학습을 하지 않기 때문에 caching을 할 수 있다. Loss 자체는 LPIPS MSE Loss를 사용하는데, Pixel 단위 Loss를 사용하는 것은 difference를 L2 ball 안에 가두겠다는 의미라서, 전체적인 색감만 맞추지 유의미한 학습이 불가능하게 된다. 따라서 sementic을 보존하고 있는 LPIPS loss를 사용하는 것이 합리적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 Pointwise regression의 장점은, same input-same output 원칙을 두기 때문에 teacher의 diversity를 지킬 수 있다는 것이 첫 번째이고, one-step generator의 output을 따라해야 하는 fake N-step diffusion model에 가해지는 nonstationary problem을 완화시킬 수 있다는 점이 두 번째이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 단점은, same input-same output 원칙이 지나치게 엄격하다는 것이다. 비유를 해보면 누군가에게 가르쳐주는 것(distillation)은 좋지만, 사고의 흐름까지 정확하게 따라하도록(pointwise regression) 하면 그 가르침 자체가 살짝 아쉬워질 것이다. DMD2 논문에서 해당 pointwise regression을 폐기한 것은 그러한 단점에서 비롯하기는 하나, 필자는 그래도 그 장점이 있는데 단점 하나 때문에 폐기해버리고 복잡한 아키텍처를 가져가야하나 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 pseudocode를 보면서 마무리하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XGwtZ/dJMcagMk7Cb/XCn4Tsuyu5NOgeXy9QnBqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XGwtZ/dJMcagMk7Cb/XCn4Tsuyu5NOgeXy9QnBqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XGwtZ/dJMcagMk7Cb/XCn4Tsuyu5NOgeXy9QnBqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXGwtZ%2FdJMcagMk7Cb%2FXCn4Tsuyu5NOgeXy9QnBqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;455&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따로 추가적으로 리뷰할 내용은 없어서, 여기서 마치도록 하겠다!&lt;/p&gt;</description>
      <category>논문 리뷰/CV</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/122</guid>
      <comments>https://manfromearth1.tistory.com/122#entry122comment</comments>
      <pubDate>Sat, 16 May 2026 18:24:17 +0900</pubDate>
    </item>
    <item>
      <title>Guided Flow Policy: Learning from High-Value Actions in Offline Reinforcement Learning 논문 리뷰</title>
      <link>https://manfromearth1.tistory.com/121</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Flow Q-learning(FQL) 논문의 후속 연구들 중 하나이다. 내가 하고 있는 연구에서 적당히 잘 참고할 것이 있는 것 같아 논문을 가져오게 되었다. 우선 FQL이 어떤 형태인지부터 알아보자:&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Flow Q Learning&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 actor loss만 이해하는 것만으로도 어느 정도는 충분하다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfZlS0/dJMcabp85eJ/O4gMVEOR2REfvj03MikHDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfZlS0/dJMcabp85eJ/O4gMVEOR2REfvj03MikHDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfZlS0/dJMcabp85eJ/O4gMVEOR2REfvj03MikHDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfZlS0%2FdJMcabp85eJ%2FO4gMVEOR2REfvj03MikHDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;59&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Actor-constrained offline RL이다. 다만 그 constraint를 이전에는 dataset action과의 divergence(L2, KL 등)으로 두면서 동시에 Q를 최적화하는 문제였다면, FQL은 dataset action이 아닌 N-step flow policy의 action과 one-step flow target policy의 L2 loss를 제약으로 두면서 Q를 maximize하는 문제로 치환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 supervised learning보다 teacher distillation이 더 좋은 성능을 낸다는 것은 잘 알려진 사실이며, 이러한 smooth target을 바탕으로 학습한 target policy는 좋은 성능을 낸다는 것이 잘 알려져 있다. 다만 문제는 constraint coefficient에 정말 많은 부담을 가지고 있는 구조이고, 실제로 논문의 저자 또한 해당 방법이 하이퍼패러미터에 민감함을 인정한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEUQHY/dJMcaiitfS4/X48axw4tXXJhpSxqDGGFH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEUQHY/dJMcaiitfS4/X48axw4tXXJhpSxqDGGFH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEUQHY/dJMcaiitfS4/X48axw4tXXJhpSxqDGGFH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEUQHY%2FdJMcaiitfS4%2FX48axw4tXXJhpSxqDGGFH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;253&quot; data-origin-width=&quot;902&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이 리뷰의 필자가 관련하여 실험을 많이 해본 결과 alpha 튜닝을 정말 잘 해야 하는 것은 맞지만 동시에 이 문제점을 해결하기 위해서는 hyperparameter 개수를 늘려서 위험요소를 분산시켜 복잡도를 증가하는 일밖에 당장은 없다고 생각한다. 마치 에너지 보존의 법칙이라고 해야 하나? 동시대에서 나오는 연구에서 혁신이 나오지 않는 이상 사실 복잡도를 늘리고 튜닝 난이도를 줄이거나, 복잡도를 줄이고 튜닝 난이도를 높이는 트레이드오프가 계속 나오는 것만 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 논문인 Guided Flow Policy(GFP)가 이 문제를 어떻게 해결하는지 알아보자:&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Guided Flow Policy&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1774&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xvFn3/dJMcafF4afz/T2qRTcdzbhkN5UjUh4vTKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xvFn3/dJMcafF4afz/T2qRTcdzbhkN5UjUh4vTKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xvFn3/dJMcafF4afz/T2qRTcdzbhkN5UjUh4vTKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxvFn3%2FdJMcafF4afz%2FT2qRTcdzbhkN5UjUh4vTKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;265&quot; data-origin-width=&quot;1774&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;FQL에서 Behavior cloning actor는 BC만 하는 구조였다면 GFP에서는 아래와 같이 value-aware BC를 한다:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1804&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WJaow/dJMcagyaT97/kUsWL4k0HzR8u7zKfEcGq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WJaow/dJMcagyaT97/kUsWL4k0HzR8u7zKfEcGq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WJaow/dJMcagyaT97/kUsWL4k0HzR8u7zKfEcGq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWJaow%2FdJMcagyaT97%2FkUsWL4k0HzR8u7zKfEcGq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;222&quot; data-origin-width=&quot;1804&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 난 이게 다라고 생각한다. actor loss에서 Q에다도 coefficient로 normalization을 달았는데... 이거는 너무 benchmark task에 overfit된 방법이 아닐까 한다. 물론 다양한 벤치마크에서 성능을 냈지만... 그렇게 잘 낸 것인지는 솔직히 모르겠고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 value-aware BC는 꽤 괜찮아보이기는 한다. 물론 해당 방식과 같이 적용하면 collapse되는 문제는 있지만 그러한 엔지니어링적인 문제는 충분히 튜닝으로 해결할 수 있지 않을까 싶고! 나는 target policy가 내는 action을 target으로 삼아서 pseudo BC(가중치 0.1 정도)를 생각했는데, 이런 방법도 있을텐데 너무 생각이 짧았던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mF2Lf/dJMcadVJozQ/j3POpdgEikKkqaMfdH6qAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mF2Lf/dJMcadVJozQ/j3POpdgEikKkqaMfdH6qAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mF2Lf/dJMcadVJozQ/j3POpdgEikKkqaMfdH6qAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmF2Lf%2FdJMcadVJozQ%2Fj3POpdgEikKkqaMfdH6qAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;471&quot; data-origin-width=&quot;1038&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘은 위와 같이 단순한 형태이다. 논문에서는 action-value function의 target를 다음과 같은 추가적인 형태도 보여준다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2486&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCvuEy/dJMcahcNqnG/k0DyIHxSi2XfKCjrDuJL2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCvuEy/dJMcahcNqnG/k0DyIHxSi2XfKCjrDuJL2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCvuEy/dJMcahcNqnG/k0DyIHxSi2XfKCjrDuJL2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCvuEy%2FdJMcahcNqnG%2Fk0DyIHxSi2XfKCjrDuJL2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;47&quot; data-origin-width=&quot;2486&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 위와 관해서 비슷한 애로사항이 있었는데, 기본적으로 BC policy로 Q를 학습하면 underestimation 때문에 학습에 발전이 별로 없고, target policy로 TD backup을 하면 또 이런 action을 내놓고 평가를 하는(일반적으로 좋은 액션을 내놓는 것과 다르게) 방식에 target policy의 stationary distribution 내부에 없는 action의 경우 정확도가 떨어지는 일들이 있었던 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 대한 문제 해결이라고 보면 된다. 다만 음... 1/2로 그냥 퉁쳐버린 것이 그렇게 좋은 선택일지도 모르겠고, 사실 어디나 trade-off라 튜닝 자체에 관한 의지를 두지 않은 것이라 보면 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로, 논문에서는 이렇게 두는 경우 몇몇 테스크에서 substantial performance increase가 있었음을 언급한다. 이후에 살펴보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;1418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9BOxY/dJMcahw7wRc/lFRz5yQQqVWtVt1KUfBKAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9BOxY/dJMcahw7wRc/lFRz5yQQqVWtVt1KUfBKAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9BOxY/dJMcahw7wRc/lFRz5yQQqVWtVt1KUfBKAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9BOxY%2FdJMcahw7wRc%2FlFRz5yQQqVWtVt1KUfBKAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1790&quot; height=&quot;1418&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;1418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능은 괜찮게 나온다. Value-aware BC policy도 성능이 잘 나오는 것으로 보아 co-evolve할 수 있는 구조가 조금 마음에 든다. 좀만 손 잘 보면 Off-policy 알고리즘으로도 만들 수 있지 않을까??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 언제든지 GFP는 co-evolve하고자 하는 의도와 다르게 같이 무너질 가능성도 충분히 있기 때문에 이 부분에 대한 문제점이 있었을텐데 failure mode를 왜 다루지 않았는지에 대해서는 다소 의아한 부분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론은 flow-policy는 co-evolve할 수 있는 구조로 작용을 할 수 있어 큰 장점을 지닌다는 것이다. 표현학습에서 하는 서커스를 강화학습의 관점에서 다시 풀어서, 조만간 혁신이 한 단계 일어나지 않을까 싶다는 기대는 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1598&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmnHlH/dJMcabcyXGh/T61gK3BHKOiOuHKnOW7mt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmnHlH/dJMcabcyXGh/T61gK3BHKOiOuHKnOW7mt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmnHlH/dJMcabcyXGh/T61gK3BHKOiOuHKnOW7mt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmnHlH%2FdJMcabcyXGh%2FT61gK3BHKOiOuHKnOW7mt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;212&quot; data-origin-width=&quot;1598&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Bellman(사실은 TD) target를 어떻게 두는가에 관한 실험 결과이다. 그런데 &quot;몇몇&quot; 테스크라, 항상 믿을만하지는 않다. 앞서 언급한대로 tradeoff임을 더 잘 알아두도록 하는 것이 좋을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문 리뷰는 여기서 마치도록 하겠다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>논문 리뷰/RL</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/121</guid>
      <comments>https://manfromearth1.tistory.com/121#entry121comment</comments>
      <pubDate>Mon, 30 Mar 2026 16:58:04 +0900</pubDate>
    </item>
    <item>
      <title>Offline Reinforcement Learning with Implicit Q-Learning 논문 리뷰</title>
      <link>https://manfromearth1.tistory.com/120</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Summary&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IQL(Implicit Q-Learning)은 dataset support 위에서의 Bellman optimality를 근사하면서, OOD(Out-of-Distribution) action을 직접적으로 평가하지 않도록 만드는 Q-learning 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IQL이 다른 Offline RL과 어떻게 다른지에 대해서 알아보기 위해, 우선 다른 대표적인 offline RL 방법론의 연구들을 살펴보고 IQL이 어떻게 문제를 풀고자 했는지 알아보도록 하자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Preliminaries&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Offline Reinforcement Learning&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Offline RL은 Online RL과 달리 환경과 상호작용할 수 없기 때문에, 이미 주어진 데이터셋만을 이용해 정책을 학습해야 한다. 이때 중요한 능력 중 하나는 &lt;span&gt;&lt;b&gt;stitching&lt;/b&gt;&lt;/span&gt;이다. 즉, 데이터셋에 존재하는 여러 부분적인 trajectory 조각들을 조합하여, 데이터에는 직접 존재하지 않는 더 나은 trajectory를 구성할 수 있어야 한다. 아래 그림은 이러한 stitching의 개념을 직관적으로 보여준다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;986&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PkvXp/dJMcagLEIfl/wGNp7swLr8qDYTOoYnk9K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PkvXp/dJMcagLEIfl/wGNp7swLr8qDYTOoYnk9K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PkvXp/dJMcagLEIfl/wGNp7swLr8qDYTOoYnk9K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPkvXp%2FdJMcagLEIfl%2FwGNp7swLr8qDYTOoYnk9K0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;341&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;986&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간 선과 파란 선이 Offline Dataset이라고 했을 때, 사실 가장 효율적인 trajectory는 따로 있음(주황 선)을 알 수 있다. 이렇게 Offline Data에서 sub-optimal한 trajectory들을 잘 이어붙여서 optimal에 도달할 필요가 있다. 이렇게 Policy improvement라는 단 하나의 목표만 가진다면 Offline RL이 크게 어려운 문제가 아닐 것이다. &lt;span&gt;그러나 실제 Offline RL의 어려움은, 데이터셋에 존재하지 않는 &lt;/span&gt;&lt;b&gt;Out-of-Distribution(OOD) 영역에 대한 value estimation이 매우 부정확해질 수 있다는 점&lt;/b&gt;&lt;span&gt;에 있다. &lt;/span&gt;특히 Q-learning 기반 방법에서는 policy improvement를 위해 unseen action의 value를 평가하게 되는데, 이 과정에서 함수 근사기는 데이터셋 밖 영역으로 값을 **과도하게 외삽(extrapolation)**하게 되고, 이는 심각한 성능 저하로 이어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 Offline RL의 핵심 문제는, &lt;b&gt;데이터를 벗어나지 않으면서도(policy constraint / safety) &lt;/b&gt;&lt;span&gt;동시에 &lt;/span&gt;&lt;b&gt;더 나은 행동을 구성하는 것(stitching / improvement)&lt;/b&gt;&lt;span&gt; 사이의 trade-off를 어떻게 다루느냐에 있다. 이에 대해서 알려진 방법으로, Value를 conservative하게 만들거나(ex: CQL), Actor을 conservative하게 제어하거나(ex: TD3-BC), 혹은 두 가지를 전부 다 제어하는 방식(ex: BRAC)을 사용한다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Te2hJ/dJMcaiinlJD/qVxYqr9gz5uXUx1fNWsvK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Te2hJ/dJMcaiinlJD/qVxYqr9gz5uXUx1fNWsvK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Te2hJ/dJMcaiinlJD/qVxYqr9gz5uXUx1fNWsvK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTe2hJ%2FdJMcaiinlJD%2FqVxYqr9gz5uXUx1fNWsvK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;113&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 본 논문이 이 방식들에 대해서 제기하는 문제는, &lt;span&gt;이러한 접근들이 여전히 &lt;/span&gt;&lt;b&gt;policy improvement와 distributional safety 사이의 trade-off를 근본적으로 해결하지 못한다는 점&lt;/b&gt;&lt;span&gt;이다. &lt;/span&gt;Policy를 데이터 분포 근처로 강하게 제한할 경우, 학습된 정책은 behavior policy에서 크게 벗어나지 못해 충분한 성능 향상을 이루지 못한다. 반대로, 이러한 제약을 완화하면 unseen action에 대한 value estimation이 불안정해지며, 함수 근사기의 외삽 오류로 인해 성능이 급격히 저하될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IQL은 이러한 문제를 당연히 완전히 해결하지는 못하지만, OOD action을 직접적으로 평가하지 않는 방식으로 문제를 재정의함으로써, 기존 방법들에서 나타나던 불안정성을 완화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;논문 리뷰를 하는 필자 입장에서 조금 더 강조하고 싶은 것은, IQL은 Action 혹은 Value constrained method가 근본적으로 가지는 문제를 해결하지는 못하며, Offline RL의 문제를 풀고자 하는 하나의 방법론이라고 생각하는 정도면 충분할 것이다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Implicit Q-Learning&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IQL이 결국 하고자 하는 것은 다음과 같은 loss function을 최적화하는 것이다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2030&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvV8Nb/dJMcaiJpELd/Lv9lntctGsSw0e37bE5jvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvV8Nb/dJMcaiJpELd/Lv9lntctGsSw0e37bE5jvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvV8Nb/dJMcaiJpELd/Lv9lntctGsSw0e37bE5jvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvV8Nb%2FdJMcaiJpELd%2FLv9lntctGsSw0e37bE5jvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;780&quot; height=&quot;101&quot; data-origin-width=&quot;2030&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $\pi_\beta$는 dataset policy로, offline data를 의미한다. IQL이 하고자 하는 것은, dataset에 존재하는 action들로만 target Q를 만들겠다는 것이다. 그런데 여기서 한 가지 문제점이 존재한다. 바로 max는 $O(N)$ operator이라는 점이다. 이것이 문제가 되는 이유는, &lt;b&gt;매 iteration step마다 Batch size &amp;times; N만큼의 연산이 필요해서 비효율적일 수 있는 방식&lt;/b&gt;이기 때문이다. 더 중요한 문제는 아무리 데이터셋 내부에 존재하는 action이라고 하더라도 max 연산자를 사용하여 타겟을 만드는 것은 overestimation error를 만들게 되어 학습의 불안정성을 증폭시킬 수 있다. 이에 대해서 IQL은 Expectile Regression이라는 방법으로 문제를 해결하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Expectile Regression&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 살펴본 것처럼, IQL은 max 연산을 직접 사용하지 않으면서도 dataset support 위에서 높은 value를 근사하고자 한다. 이를 위해 사용하는 핵심 도구가 바로 Expectile Regression이다. 우선 간단한 질문부터 생각해보자:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 값들의 집합이 있을 때, &quot;좋은 값&quot;을 대표하는 하나의 값을 고르려면 어떻게 해야 하는가?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;평균(mean): 모든 값을 동일하게 반영 &amp;rarr; 지나치게 보수적&lt;/li&gt;
&lt;li&gt;최대값(max): 가장 큰 값만 사용 &amp;rarr; 불안정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 원하는 것은 그 중간이다. 큰 값들을 더 강조하면서도, 완전히 하나의 값에만 의존하지 않는 방식인 것이다. 이 역할을 하는 것이 expectile이다. Expectile은 다음과 같은 최적화 문제의 해로 정의된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5MZWW/dJMcaivSS5c/3ZCoAEVBmssmEDkZ8dZeqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5MZWW/dJMcaivSS5c/3ZCoAEVBmssmEDkZ8dZeqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5MZWW/dJMcaivSS5c/3ZCoAEVBmssmEDkZ8dZeqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5MZWW%2FdJMcaivSS5c%2F3ZCoAEVBmssmEDkZ8dZeqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;67&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 loss $L_2^\tau$는 다음과 같다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d5SRUO/dJMcacWKROS/91fZhcVKR6nXMWkwR5MwHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d5SRUO/dJMcacWKROS/91fZhcVKR6nXMWkwR5MwHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d5SRUO/dJMcacWKROS/91fZhcVKR6nXMWkwR5MwHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd5SRUO%2FdJMcacWKROS%2F91fZhcVKR6nXMWkwR5MwHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;80&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 loss의 핵심은 비대칭성에 있다. $x &amp;gt; m$인 경우, weight는 $\tau$로 반영되고, 반대의 경우 $1-\tau$로 반영된다. 만약 $\tau$가 0.5인 경우 양쪽이 동일해지므로 평균이 되며, 0.5보다 큰 경우 upper tail을 강조하여 1로 다가갈수록 max에 가까워지는 효과가 있다. 결국 IQL은 다음과 같은 loss function을 최적화한다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2300&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dF9zEw/dJMb99TgVws/kk2gdB6Rg61anyyKHvM650/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dF9zEw/dJMb99TgVws/kk2gdB6Rg61anyyKHvM650/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dF9zEw/dJMb99TgVws/kk2gdB6Rg61anyyKHvM650/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdF9zEw%2FdJMb99TgVws%2Fkk2gdB6Rg61anyyKHvM650%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;780&quot; height=&quot;54&quot; data-origin-width=&quot;2300&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 expectile을 TD target에 직접 적용할 경우, 환경의 transition stochasticity까지 함께 반영되는 문제가 발생한다. 즉, 특정 action이 실제로 좋은 것이 아니라, 우연히 좋은 상태로 transition된 &amp;ldquo;lucky sample&amp;rdquo;일 수도 있음에도 불구하고, 높은 target value로 반영될 수도 있는,&lt;b&gt; action quality + transition randomness&lt;/b&gt;가 섞인 형태가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 IQL은 action에 대한 variability와 환경의 stochasticity를 분리한다. 먼저, 상태 &lt;span&gt;s&lt;/span&gt;에서 dataset action들에 대한 Q 값의 expectile을 통해 value function &lt;span&gt;V(s)&lt;/span&gt;를 학습하고, 이후 이를 이용하여 Q-function을 TD 방식으로 업데이트한다. 이러한 구조를 통해 IQL은 action의 질을 반영하면서도, transition에서 발생하는 randomness로 인한 불안정성을 효과적으로 완화한다. 아래의 문구를 확인하자:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1780&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2kiGV/dJMcajhfonH/IDgNDkndp3egLhoQqovt81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2kiGV/dJMcajhfonH/IDgNDkndp3egLhoQqovt81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2kiGV/dJMcajhfonH/IDgNDkndp3egLhoQqovt81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2kiGV%2FdJMcajhfonH%2FIDgNDkndp3egLhoQqovt81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1780&quot; height=&quot;764&quot; data-origin-width=&quot;1780&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Policy extraction은 Advantage-weighted regression을 수행한다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2218&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EYt2r/dJMcah4RcZS/52cQWAOyJRLVS7SEw1dYbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EYt2r/dJMcah4RcZS/52cQWAOyJRLVS7SEw1dYbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EYt2r/dJMcah4RcZS/52cQWAOyJRLVS7SEw1dYbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEYt2r%2FdJMcah4RcZS%2F52cQWAOyJRLVS7SEw1dYbk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;37&quot; data-origin-width=&quot;2218&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘은 다음과 같다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dm0BFJ/dJMcafMLbIE/oZLSQ100FuIyWpSzfWeRvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dm0BFJ/dJMcafMLbIE/oZLSQ100FuIyWpSzfWeRvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dm0BFJ/dJMcafMLbIE/oZLSQ100FuIyWpSzfWeRvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdm0BFJ%2FdJMcafMLbIE%2FoZLSQ100FuIyWpSzfWeRvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;475&quot; data-origin-width=&quot;644&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로, 논문에서 IQL 방식 또한 policy improvement를 보장할 수 있음을 보이는데, 나중에 확인해보면 좋겠다. 사실 실험 결과는 엄청 드라마틱하게 좋지는 않지만, 하나의 접근 방법으로 생각해보면 될 것 같다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;1216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dijtPR/dJMcadaft9d/TnVkNMCgt947QUKZibQlr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dijtPR/dJMcadaft9d/TnVkNMCgt947QUKZibQlr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dijtPR/dJMcadaft9d/TnVkNMCgt947QUKZibQlr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdijtPR%2FdJMcadaft9d%2FTnVkNMCgt947QUKZibQlr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1748&quot; height=&quot;1216&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;1216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이만 논문 리뷰를 마치도록 하겠다.&lt;/p&gt;</description>
      <category>논문 리뷰/RL</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/120</guid>
      <comments>https://manfromearth1.tistory.com/120#entry120comment</comments>
      <pubDate>Mon, 23 Mar 2026 21:43:51 +0900</pubDate>
    </item>
    <item>
      <title>ROFORMER: ENHANCED TRANSFORMER WITH ROTARY POSITION EMBEDDING 논문 리뷰</title>
      <link>https://manfromearth1.tistory.com/119</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Summary&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer 기반 모델에서 위치 정보(position encoding)는 필수적이지만, 기존 방법들은 중요한 한계를 가진다. Absolute position embedding은 단순히 위치 벡터를 더하는 방식으로, 토큰 간 상대적 관계(relative position)를 충분히 반영하지 못한다. 반면, 기존 relative position 방법들은 attention 구조를 수정하거나 여러 항을 추가해야 하므로 &lt;span&gt;&lt;b&gt;구조가 복잡해지고 일반성이 떨어지는 문제&lt;/b&gt;&lt;/span&gt;가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 이러한 한계를 해결하기 위해 Rotary Position Embedding (RoPE)을 제안한다. RoPE는 위치 정보를 벡터에 더하는 대신, &lt;span&gt;&lt;b&gt;위치에 따라 embedding을 회전시키는 방식&lt;/b&gt;&lt;/span&gt;을 사용한다. 이를 통해 self-attention 계산에서 두 토큰의 상호작용이 자연스럽게 상대 위치 (n&amp;minus;m)에 의존하도록 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 접근은 별도의 복잡한 설계 없이도 다음과 같은 장점을 제공한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상대 위치 정보를 구조적으로 반영&lt;/li&gt;
&lt;li&gt;시퀀스 길이에 대한 일반화 가능성&lt;/li&gt;
&lt;li&gt;토큰 간 거리가 멀어질수록 attention이 감소하는 특성&lt;/li&gt;
&lt;li&gt;linear attention과의 호환성&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로 RoPE는 Transformer의 위치 인코딩을 &lt;span&gt;&lt;b&gt;additive 방식에서 multiplicative 변환으로 재해석&lt;/b&gt;&lt;/span&gt;하며, 더 단순하면서도 효과적인 대안을 제시한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Preliminaries&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Positional Encoding에 대해 살펴보자. Transformer에서 Self-attention은 기본적으로 입력 토큰들의 순서를 고려하지 않기 때문에, 위치 정보를 별도로 주입해야 한다. 이를 위해 기존 접근 방식은 additive 방식의 positional encoding이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIx8Zb/dJMcahDKDlY/5yZEcFs4GFQUGfB1HmWzL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIx8Zb/dJMcahDKDlY/5yZEcFs4GFQUGfB1HmWzL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIx8Zb/dJMcahDKDlY/5yZEcFs4GFQUGfB1HmWzL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIx8Zb%2FdJMcahDKDlY%2F5yZEcFs4GFQUGfB1HmWzL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;405&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 방식은 이렇게 만들어진 positional encoding을 바탕으로 각 토큰 embedding에 위치 정보를 더해준다. 아래 attention is all you need 논문의 figure을 참고하자:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;988&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nUU3I/dJMcabcsUwq/ol8KjytzLUrXd6YVzv9bz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nUU3I/dJMcabcsUwq/ol8KjytzLUrXd6YVzv9bz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nUU3I/dJMcabcsUwq/ol8KjytzLUrXd6YVzv9bz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnUU3I%2FdJMcabcsUwq%2Fol8KjytzLUrXd6YVzv9bz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;644&quot; data-origin-width=&quot;614&quot; data-origin-height=&quot;988&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 이러한 additive 방식은 위치 정보가 단순히 추가되는 것에 그치지 않고, self-attention 과정에서 content 정보와 강하게 결합되어 버린다는 한계를 가진다. 구체적으로, attention score는 query, key가 positional encoding에 반영된 내적의 형태로 정의된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ypq2F/dJMcafMKTgp/LJcBH6C9w6CeyzCbE3kAp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ypq2F/dJMcafMKTgp/LJcBH6C9w6CeyzCbE3kAp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ypq2F/dJMcafMKTgp/LJcBH6C9w6CeyzCbE3kAp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fypq2F%2FdJMcafMKTgp%2FLJcBH6C9w6CeyzCbE3kAp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1690&quot; height=&quot;104&quot; data-origin-width=&quot;1690&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 여기서 첫 번째 항은 $x_m$과 $x_n$ 순수한 content 간의 상호작용이며, $p_m$과 $p_n$의 위치 간 상호작용이 존재해 경우에 따라 상대 위치 정보를 일부 반영할 수 있다. 그러나 문제는 다음 두 항이다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cN9WXF/dJMcai3G1AT/696HNm89T1j5cDMtXpWqXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cN9WXF/dJMcai3G1AT/696HNm89T1j5cDMtXpWqXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cN9WXF/dJMcai3G1AT/696HNm89T1j5cDMtXpWqXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcN9WXF%2FdJMcai3G1AT%2F696HNm89T1j5cDMtXpWqXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;53&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 항들은 토큰의 내용과 위치가 서로 결합된 형태로 나타나며, attention score가 더이상 단순 상대 위치에만 의존하지 않게 된다. 즉, additive 방식에서는 위치 정보가 독립적인 구조로 반영되지 않고 content와 혼합된 형태로 attention에 영향을 미치게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해 다음과 같은 문제가 발생한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상대 위치 정보를 명확하게 해석하기 어려움&lt;/li&gt;
&lt;li&gt;위치와 내용이 분리되지 않아 학습이 비효율적일 수 있음&lt;/li&gt;
&lt;li&gt;attention이 구조적으로 relative position을 따르지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과적으로, 모델은 상대 위치를 직접적으로 활용하는 것이 아니라 여러 혼합된 항들을 통해 이를 간접적으로 학습해야 하기 때문에 혼란이 발생하게 된다. 위치 정보를 학습하는 BERT의 방법도 존재는 하지만, 이는 context length 밖의 context에 대해서는 extrapolation error가 일어난다는 취약점이 존재한다. 이러한 한계를 극복하기 위해, 이후 연구들은 relative position encoding을 도입하여 attention이 직접적으로 m&lt;span&gt; - n&lt;/span&gt;에 의존하도록 만들고자 하였다. 그러나 이러한 방법들 역시 attention 구조를 수정하거나 추가적인 항을 도입해야 하므로, 구조적인 복잡성이 증가하는 문제가 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 맥락에서, 본 논문은 위치 정보를 단순히 더하는 것이 아닌 token representation 자체를 변환하는(multiplicative) 방식으로 접근한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Rotationary Positional Embedding (RoPE)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문에서 결국 도달하고자 하는 것은 다음과 같다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pLAmc/dJMcah4QVz1/gxySDi1ykZD3c3dhXHjXcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pLAmc/dJMcah4QVz1/gxySDi1ykZD3c3dhXHjXcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pLAmc/dJMcah4QVz1/gxySDi1ykZD3c3dhXHjXcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpLAmc%2FdJMcah4QVz1%2FgxySDi1ykZD3c3dhXHjXcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;43&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 말은 즉, 위치 정보가 포함된 query와 key가 내적으로 표현될 때 그 표현이 각 토큰의 내용 정보와 분리된 위치 간 상대 거리에만 의존하도록 만들고 싶은 것이다. 이를 위해 RoPE는 각 토큰 embedding에 대해 위치에 따른 회전 변환을 적용한다. 일단 2-dimensional로 살펴보자:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qAHVM/dJMcahjvmIm/QvjqioFFqbby2uKizoqbH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qAHVM/dJMcahjvmIm/QvjqioFFqbby2uKizoqbH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qAHVM/dJMcahjvmIm/QvjqioFFqbby2uKizoqbH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqAHVM%2FdJMcahjvmIm%2FQvjqioFFqbby2uKizoqbH1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;80&quot; data-origin-width=&quot;1748&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 rotation matrix를 $R(m)$이라 할 때, attention score은 다음과 같이 계산된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhytGM/dJMcaaYWjmK/Q4hdNTW0ONdydwRXiQQTy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhytGM/dJMcaaYWjmK/Q4hdNTW0ONdydwRXiQQTy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhytGM/dJMcaaYWjmK/Q4hdNTW0ONdydwRXiQQTy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhytGM%2FdJMcaaYWjmK%2FQ4hdNTW0ONdydwRXiQQTy0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;173&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3, 4번째 줄의 전개 결과는 Rotation matrix의 property에 의한 결과이다. 이를 좌표 형태로 풀어 쓰면,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FG5Xp/dJMcaduxMVZ/MUQvWdH92WztkoSK2Cpcck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FG5Xp/dJMcaduxMVZ/MUQvWdH92WztkoSK2Cpcck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FG5Xp/dJMcaduxMVZ/MUQvWdH92WztkoSK2Cpcck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFG5Xp%2FdJMcaduxMVZ%2FMUQvWdH92WztkoSK2Cpcck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;157&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpK7nl/dJMcagx4P8z/ciBIFumEwNZXPmAe9NKwI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpK7nl/dJMcagx4P8z/ciBIFumEwNZXPmAe9NKwI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpK7nl/dJMcagx4P8z/ciBIFumEwNZXPmAe9NKwI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpK7nl%2FdJMcagx4P8z%2FciBIFumEwNZXPmAe9NKwI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;149&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 이것은, &lt;b&gt;key 벡터를 상대 위치 $\Delta$만큼 회전시킨 뒤, query와의 내적을 계산한다&lt;/b&gt;의 의미를 갖게 되는 것이다. 이 관점에서 보면, RoPE의 핵심은 다음과 같이 정리된다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위치 정보는 더 이상 feature로 추가되지 않음&lt;/li&gt;
&lt;li&gt;대신, vector space 상의 변환(회전)으로 작용&lt;/li&gt;
&lt;li&gt;그 결과 attention이 자연스럽게&lt;span&gt;&lt;b&gt; translation invariant&lt;/b&gt;&lt;/span&gt;한 구조를 갖게 됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 General한 form을 보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIkwPv/dJMcacJfUoh/ZhejpfPUQeXmUz71adLEd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIkwPv/dJMcacJfUoh/ZhejpfPUQeXmUz71adLEd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIkwPv/dJMcacJfUoh/ZhejpfPUQeXmUz71adLEd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIkwPv%2FdJMcacJfUoh%2FZhejpfPUQeXmUz71adLEd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;197&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 혼란스러운 포인트가 발생한다. 앞서 2차원에서의 유도를 통해, RoPE는 key 벡터를 상대 위치 $\Delta$만큼 회전시킨 뒤 query와 내적을 계산하는 구조라는 것을 확인했다. 이 관점에서는 매우 직관적으로 이해되지만, 논문에서 제시하는 일반적 형태는 이상하게도 2차원 rotation matrix가 블록 단위로 연결된 구조가 된다. 자연스럽게 나올 의문은, 굳이 2차원씩 나눌 필요가 있으며, 3D나 d차원 전체에 대해 한 번에 변화를 정의할 수는 없는가에 관한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 질문에 대한 답은 RoPE의 핵심 제약에서 나온다. 우리가 만족시키고 싶은 조건은 다음과 같았다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tvntj/dJMcahw1qip/gKz3lXgjLx7isG7J0CTIQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tvntj/dJMcahw1qip/gKz3lXgjLx7isG7J0CTIQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tvntj/dJMcahw1qip/gKz3lXgjLx7isG7J0CTIQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftvntj%2FdJMcahw1qip%2FgKz3lXgjLx7isG7J0CTIQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;48&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 두 위치 &lt;span&gt;m, n&lt;/span&gt;에 대한 변환이 결합될 때, 그 결과가 반드시 상대 위치 &lt;span&gt;n-m&lt;/span&gt;에 대한 하나의 변환으로 표현되어야 한다. 이 조건은 단순한 성질처럼 보이지만, 사실상 변환이 &lt;b&gt;덧셈 구조를 보존하는 group representation&lt;/b&gt;&lt;span&gt;이어야 함을 의미한다. 이를 보장하는 것은 2차원 Rotation matrix가 block diagonal로 연결된 구조이고, 결국 위의 선택은 아주 자연스러운 결과가 되는 것이다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;RoPE는 단순히 절대 위치에 의존을 안하고, 상대 위치만 반영한다는 것에만 장점을 지니는 것은 아니다. RoPE가 기본적이로 sinusoidal 기반의 회전 구조이기 때문에 학습 시 보지 못한 긴 sequence에 대한 일반화를 잘 하는 것도 장점이다. 더 중요한 것은 &lt;b&gt;long-term decay&lt;/b&gt;에 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RoPE의 attention score는 다음과 같은 형태로 표현될 수 있다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UdERi/dJMcahDKHcq/ADwzCDsN5KZZfOliUj8xK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UdERi/dJMcahDKHcq/ADwzCDsN5KZZfOliUj8xK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UdERi/dJMcahDKHcq/ADwzCDsN5KZZfOliUj8xK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUdERi%2FdJMcahDKHcq%2FADwzCDsN5KZZfOliUj8xK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;99&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wkoHu/dJMcai3G4dW/NLUoB6K5hKixPrS4Pt6nF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wkoHu/dJMcai3G4dW/NLUoB6K5hKixPrS4Pt6nF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wkoHu/dJMcai3G4dW/NLUoB6K5hKixPrS4Pt6nF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwkoHu%2FdJMcai3G4dW%2FNLUoB6K5hKixPrS4Pt6nF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;43&quot; data-origin-width=&quot;418&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;는 i번째 2차원 subspace에서의 query와 key 간의 유사도를 의미한다. 즉, RoPE는 전체 attention을 하나의 값으로 계산하는 것이 아니라, 각 2차원 차원쌍에서의 유사도 &lt;span&gt;h_i&lt;/span&gt;들을 서로 다른 주파수의 회전과 결합하여 합산하는 구조를 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이제 핵심은 $e^{i(n-m)\theta}$&lt;/span&gt;&lt;span&gt;항이다. &lt;/span&gt;각 차원쌍마다 서로 다른 $\theta_i$가 사용되기 때문에, 상대 거리 &lt;span&gt;n - m&lt;/span&gt;가 커질수록 각 항의 위상(phase)이 서로 다르게 변한다. 그 결과, 다음과 같은 현상이 발생한다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;$\Delta \approx 0$일 때:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 회전이 거의 동일한 방향을 가짐&lt;/li&gt;
&lt;li&gt;&lt;span&gt;각 &lt;/span&gt;&lt;span&gt;h_i&lt;/span&gt;&lt;span&gt;가 정렬된 상태로 더해짐&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;rarr; attention 값이 크게 유지됨&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;$|\Delta|$가 커질 때:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 항의 회전 각도가 서로 크게 달라짐&lt;/li&gt;
&lt;li&gt;서로 다른 방향으로 퍼지면서 상쇄(cancellation) 발생&lt;/li&gt;
&lt;li&gt;&amp;rarr; attention 값이 작아지는 경향&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, RoPE는 별도의 decay 함수를 명시적으로 설계하지 않더라도, 서로 다른 주파수의 회전 항들을 합산하는 구조만으로 &lt;b&gt;상대 거리가 증가할수록 attention이 감소하는 효과&lt;/b&gt;&lt;span&gt;를 자연스럽게 유도한다. &lt;/span&gt;이러한 성질은 자연어 처리에서 가까운 token은 더 반영하고, 먼 token은 덜 반영하는 inductive bias와 잘 맞는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실험은 건너뛰도록 하겠다...ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>논문 리뷰/NLP</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/119</guid>
      <comments>https://manfromearth1.tistory.com/119#entry119comment</comments>
      <pubDate>Mon, 23 Mar 2026 15:29:32 +0900</pubDate>
    </item>
    <item>
      <title>Revisiting the Minimalist Approach to Offline Reinforcement Learning 논문 리뷰</title>
      <link>https://manfromearth1.tistory.com/118</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아이디어 자체가 복잡하거나 새로운 알고리즘적 기여가 큰 논문은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대신, offline RL의 실패 원인을 꽤 깔끔한 관점으로 분해해서 보여준다는 점에서 가져올 만한 가치가 있다고 생각했다. 따라서 여기서는 논문의 전체 summary보다는, &lt;span&gt;이 논문이 어떤 문제를 지적하고 그것을 어떻게 바라보는지&lt;/span&gt;에 초점을 맞추어 정리하겠다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Preliminaries&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Offline RL의 핵심 문제는 결국 &lt;span&gt;dataset support 바깥에 있는 action&lt;/span&gt;에 있다. 학습 과정에서 policy가 데이터셋에 충분히 존재하지 않는 행동을 선택하게 되면, 그 행동에 대한 &lt;span&gt;Q&lt;/span&gt;-value는 실제보다 부정확하게 추정될 수 있다. 이는 본질적으로 &lt;span&gt;extrapolation error&lt;/span&gt;, 즉 관측되지 않은 영역에서의 잘못된 일반화 문제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 잘못된 추정은 여러 형태로 나타날 수 있지만, 특히 위험한 경우는 &lt;span&gt;OOD action에 대한 과대추정(overestimation)&lt;/span&gt; 이다. 이 경우 actor는 높은 &lt;span&gt;Q&lt;/span&gt;-value를 따라 dataset support 바깥으로 더 멀리 이동하고, 그 결과 critic은 다시 더 신뢰하기 어려운 영역에서 값을 예측해야 하는 악순환이 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한편, 문제를 단순히 overestimation으로만 볼 수는 없다. 설령 critic의 과대추정이 아주 크지 않더라도, actor가 dataset action으로부터 멀어진다면 critic은 여전히 support 밖 영역을 평가해야 한다. 따라서 offline RL에서는 &lt;b&gt;(1) critic의 OOD value misestimation&lt;/b&gt;&lt;span&gt;과 &lt;/span&gt;&lt;b&gt;(2) actor의 support 이탈&lt;/b&gt;&lt;span&gt;을 구분해서 보는 것이 중요하다. 우선 이 두 가지 상황에서 기존 방법론들의 접근법에 대해서 알아보자.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;Action Regularization&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;TD3-BC[&lt;a href=&quot;https://arxiv.org/pdf/2106.06860&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/pdf/2106.06860&lt;/a&gt;]가 대표적인 논문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2474&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rIfSP/dJMcabXRlPP/6t7Gw8fJZiM8ZNf3A4NOr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rIfSP/dJMcabXRlPP/6t7Gw8fJZiM8ZNf3A4NOr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rIfSP/dJMcabXRlPP/6t7Gw8fJZiM8ZNf3A4NOr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrIfSP%2FdJMcabXRlPP%2F6t7Gw8fJZiM8ZNf3A4NOr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2474&quot; height=&quot;216&quot; data-origin-width=&quot;2474&quot; data-origin-height=&quot;216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 actor가 Q를 maximize하는 구조이지만 dataset에 존재하지 않는 action을 하는 경우 패널티가 부여되어, reward maximization을 dataset 내부에서 할 수 있도록 유도하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Value Regularization&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Target Q에서, 만약 actor가 선택한 action과 dataset의 next action의 차이가 큰 경우 penalty를 주는 방식이다. 따라서 dataset에 없는 action에 대한 value를 낮추도록 유도하는 효과가 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HkSLH/dJMcaibC5PI/rIaif2Zl7ZFY25cw1Q3tok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HkSLH/dJMcaibC5PI/rIaif2Zl7ZFY25cw1Q3tok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HkSLH/dJMcaibC5PI/rIaif2Zl7ZFY25cw1Q3tok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHkSLH%2FdJMcaibC5PI%2FrIaif2Zl7ZFY25cw1Q3tok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1632&quot; height=&quot;212&quot; data-origin-width=&quot;1632&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Behavior Regularized Actor Critic&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xgO5o/dJMcaiJo9Sg/IYlS6vMP1byqVaAYzjSjmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xgO5o/dJMcaiJo9Sg/IYlS6vMP1byqVaAYzjSjmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xgO5o/dJMcaiJo9Sg/IYlS6vMP1byqVaAYzjSjmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxgO5o%2FdJMcaiJo9Sg%2FIYlS6vMP1byqVaAYzjSjmk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;113&quot; data-origin-width=&quot;1680&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BRAC, 위의 두가지를 합친 방식이다. F에 대한 선택으로, KL divergence, Wasserstein, MMD 등 다양한 선택이 존재하지만 유의미한 결과를 얻지 못했다고 논문에서 밝힌다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ReBRAC&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문은 BRAC 알고리즘의 핵심적인 한계를 다음과 같이 지적한다. 서로 다른 목적을 가지는 두 가지 regularization을 단일 coefficient로 묶어버렸다는 점&lt;span&gt;이다. &lt;/span&gt;앞서 살펴본 것처럼, 두 regularization은 역할이 다르다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Action regularization (actor penalty) &lt;/b&gt;&amp;rarr; policy가 dataset support를 벗어나지 않도록 제어&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Value regularization (critic penalty) &lt;/b&gt;&amp;rarr; OOD action에 대한 Q-value의 과대추정을 억제&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 둘은 겉보기에는 유사하지만, 실제로는 &lt;/span&gt;서로 다른 failure mode를 다루고 있다&lt;span&gt;. &lt;/span&gt;그럼에도 불구하고 BRAC에서는 이를 하나의 계수로 묶어서 제어한다. 이 구조에서는 다음과 같은 문제가 발생한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;actor를 강하게 묶고 싶으면 &amp;rarr; critic도 같이 강하게 묶임&lt;/li&gt;
&lt;li&gt;critic의 overestimation을 줄이고 싶으면 &amp;rarr; actor까지 과도하게 제한됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 두 문제를 사실은 독립적으로 조절해야 하는 문제임에도 그렇지 않은 접근을 한 것이며, 결국&lt;b&gt; &lt;/b&gt;하나의 trade-off로만 다뤄지게 되는 것이다. 이에 대한 ReBRAC의 아이디어는 단순하다. 이 두 regularization을 &lt;span&gt;분리해서 각각 다른 계수로 제어하자&lt;/span&gt;는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TVl2e/dJMb99TgrDi/eJLOjeCREkqkrRt5ixqXL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TVl2e/dJMb99TgrDi/eJLOjeCREkqkrRt5ixqXL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TVl2e/dJMb99TgrDi/eJLOjeCREkqkrRt5ixqXL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTVl2e%2FdJMb99TgrDi%2FeJLOjeCREkqkrRt5ixqXL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;114&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 방식으로 다음과 같은 설정이 가능해진다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;actor는 dataset support 근처에 유지하면서&lt;/li&gt;
&lt;li&gt;critic은 어느 정도 generalization을 허용하거나 (혹은 더 보수적으로 만들거나)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 기존처럼 하나의 knob이 아니라 서로 다른 두 축에서 offline RL의 안정성을 조절할 수 있게 된다. 이러한 접근이 의미 있는 이유는, 앞서 언급한대로 offline RL의 문제를 두 축으로 분해하기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G6kLd/dJMcadBieuo/b4Nz6QWC0y1fru3BZWvIw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G6kLd/dJMcadBieuo/b4Nz6QWC0y1fru3BZWvIw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G6kLd/dJMcadBieuo/b4Nz6QWC0y1fru3BZWvIw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG6kLd%2FdJMcadBieuo%2Fb4Nz6QWC0y1fru3BZWvIw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;47&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 방법들은 이 두 문제를 하나의 문제처럼 다루거나, 혹은 둘 중 하나만 해결하려고 한다는 문제점이 존재한다. 반면 ReBRAC는 support constraint 문제, value estimation 문제로 명확하게 나누고, 이를 각각 제어하도록 만든다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Experiments&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;940&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fgr47/dJMcah4QHwZ/lgBWCuOXzexggfP0GmC4K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fgr47/dJMcah4QHwZ/lgBWCuOXzexggfP0GmC4K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fgr47/dJMcah4QHwZ/lgBWCuOXzexggfP0GmC4K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFgr47%2FdJMcah4QHwZ%2FlgBWCuOXzexggfP0GmC4K1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1286&quot; height=&quot;940&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;940&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능에 관한 statement는 짧게 하고, 결국 &quot;무엇이 중요했는지&quot;에 관한 실험을 보도록 하겠다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2czsh/dJMcafTuVv5/qaHXPT8GiTOA0j8w04aij1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2czsh/dJMcafTuVv5/qaHXPT8GiTOA0j8w04aij1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2czsh/dJMcafTuVv5/qaHXPT8GiTOA0j8w04aij1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2czsh%2FdJMcafTuVv5%2FqaHXPT8GiTOA0j8w04aij1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1278&quot; height=&quot;808&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 ablation 결과는 흥미로운 점을 보여준다. actor regularization을 제거하는 경우 성능이 거의 붕괴하는 반면, critic regularization이나 decoupling을 제거하는 경우에는 성능 저하가 상대적으로 크지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 offline RL에서 가장 본질적인 문제는 critic의 overestimation이라기보다는, &lt;span&gt;&lt;b&gt;policy가 dataset support를 벗어나는 것 자체&lt;/b&gt;&lt;/span&gt;임을 시사한다. 실제로 actor가 support 내부에 잘 머물도록만 제어해도, critic의 extrapolation error는 크게 문제가 되지 않을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 ReBRAC의 decoupling은 중요한 개념적 정리를 제공하지만, 실질적인 안정성의 대부분은 &lt;span&gt;&lt;b&gt;actor regularization&lt;/b&gt;&lt;/span&gt;에서 비롯된다고 해석할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>논문 리뷰/RL</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/118</guid>
      <comments>https://manfromearth1.tistory.com/118#entry118comment</comments>
      <pubDate>Mon, 23 Mar 2026 12:53:13 +0900</pubDate>
    </item>
    <item>
      <title>Why DPO is a Misspecified Estimator and How to Fix It 논문 리뷰</title>
      <link>https://manfromearth1.tistory.com/117</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Summary&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DPO(Direct Preference Optimization)은 전통적인 two-stage RLHF에서 선호 데이터를 이용하여 보상모델을 학습하고, 그 보상을 최대화하도록 정책을 업데이트하는 방식과 다르게 선호쌍을 분류하는 형태의 supervised loss로 정책을 바로 업데이트한다. 구현이 매우 단순하며 보상 모델에 의존적이지 않고, 특히 LLM에서 그 효과를 인정받아 널리 쓰이는 방법론이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 본 논문은 DPO는 LLM처럼 parameterized된 정책 클래스에서는 실제 보상을 타깃하여 훈련되지만 정책이 표현 가능한 보상 공간으로 사영(project)할 뿐임을 보이며, 이로 인해 선호 순서가 뒤집히거나 정책의 trajectory가 만들어내는 평균적인 보상이 감소하는 결과가 일어난다는 것을 밝힌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 본 논문의 저자들은 기하학적 분석을 바탕으로 AuxDPO를 제안하여, 보상 공간에 추가 자유도를 부여하는 방식으로 misspecification을 완화하고자 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Preliminaries&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Direct Preference Optimization&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KL regularized RL objective는 다음과 같으며,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bduvTA/dJMcahXJFO0/hgGfJiQakq31Dndxtf1XmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bduvTA/dJMcahXJFO0/hgGfJiQakq31Dndxtf1XmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bduvTA/dJMcahXJFO0/hgGfJiQakq31Dndxtf1XmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbduvTA%2FdJMcahXJFO0%2FhgGfJiQakq31Dndxtf1XmK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;53&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 objective를 최적화하는 policy를 closed-form으로 구할 수 있으며, 해당 closed-form으로 reward function에 관한 식으로 도출할 수 있다. 여기서 핵심은 보상이 주어졌다면, 그 보상은 reference policy와 target policy의 우도비임을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W1vYh/dJMcaaK4DTV/mu6JftaoEKd7gyItKkR0gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W1vYh/dJMcaaK4DTV/mu6JftaoEKd7gyItKkR0gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W1vYh/dJMcaaK4DTV/mu6JftaoEKd7gyItKkR0gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW1vYh%2FdJMcaaK4DTV%2Fmu6JftaoEKd7gyItKkR0gk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;52&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 주목할 점은 reward function은 더는 고정된 함수가 아니라는 점이다. Reward function은, reference model이 고정되어 있는 경우 target policy가 내난 확률값에 따라 정의된다. 그러면 선호 쌍 데이터를 바탕으로, win output을 lose output보다 더 선호할 확률은 다음과 같은 BTL 모델로 표현 가능하다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnWxWE/dJMcacIUAwW/jc3aHIg33lAnFigVEokGX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnWxWE/dJMcacIUAwW/jc3aHIg33lAnFigVEokGX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnWxWE/dJMcacIUAwW/jc3aHIg33lAnFigVEokGX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnWxWE%2FdJMcacIUAwW%2Fjc3aHIg33lAnFigVEokGX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;71&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서 언급하는 구절에 대해서 살펴보자(이 논문을 이해할 주요 구절이다):&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1316&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmeuf5/dJMcadHKRLn/lIz30017Xvz37YJ5JCIVK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmeuf5/dJMcadHKRLn/lIz30017Xvz37YJ5JCIVK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmeuf5/dJMcadHKRLn/lIz30017Xvz37YJ5JCIVK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmeuf5%2FdJMcadHKRLn%2FlIz30017Xvz37YJ5JCIVK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1316&quot; height=&quot;526&quot; data-origin-width=&quot;1316&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DPO에서 제시하는 empirical loss는 BTL model의 negative log-likelihood를 최소화하는 식이다. 그러나 &quot;만약에&quot; 실제 보상이 주어져있다고 가정하면, 사실은 실제 보상에 대해서 모델이 추정하는 보상이 align 되도록 하는 cross-entropy loss가 되는 것이다. 여기서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzCNat/dJMcagEx3oH/ZELVUUDwxHqt6Zk9xLTsZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzCNat/dJMcagEx3oH/ZELVUUDwxHqt6Zk9xLTsZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzCNat/dJMcagEx3oH/ZELVUUDwxHqt6Zk9xLTsZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzCNat%2FdJMcagEx3oH%2FZELVUUDwxHqt6Zk9xLTsZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;35&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부분에 집중해보자. Reward function의 output은 scalar이라 1-dim이지만, 여기서는 &lt;b&gt;정책이 표현 가능한 reward의 차원&lt;/b&gt;을 의미한 것이라고 보면 된다. 여기서 논문이 주로 다루는 misspecification이 나오는 것인데, 그 이유는 policy가 실제로 간접적으로 표현할 수 있는 reward의 차원에 비해 state, action의 차원이 압도적으로 크기 때문이라고 한다. 자세한 이유를 다음 파트에서 알아보도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Reward Misspecification in DPO&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 Proposition을 보자:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfVvw3/dJMcacvnKzy/zQbcCDkLkPkPnlWmEDDJ6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfVvw3/dJMcacvnKzy/zQbcCDkLkPkPnlWmEDDJ6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfVvw3/dJMcacvnKzy/zQbcCDkLkPkPnlWmEDDJ6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfVvw3%2FdJMcacvnKzy%2FzQbcCDkLkPkPnlWmEDDJ6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;229&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4)번 수식의 의미는, 진짜 보상 $r^*$가 만들어내는 BTL 비교 확률과 policy가 간접적으로 만드는 BTL 비교 확률 사이의 KL divergence를 최소화한다는 것인데, 여기서 핵심은 KL이 실제 보상 $r^*$의 state, action space에서 이루어지는 것이 아닌, 정책이 표현하게 되는 state, action space 집합 안에서만 계산된다는 것이다. 논문이 이것이 projection이라고 말하는데, 이러한 이유는 고정된 reward를 제약된 집합 위로 KL 기준으로 사영하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 여기서 실제 보상의 차원과 모델의 표현 차원이 같다면 projection은 자기 자신이 되어 RLHF에서 제공하는 closed-form 정책과 일치하게 되어 정확하지만, 대부분은 모델의 표현 차원에 비해 실제 보상의 차원이 압도적으로 크기 때문에 모델이 진짜 보상을 표현할 수 없는 misspecified estimation setting에 있게 되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인한 문제는 두 가지로 요약해볼 수 있다. Pairwise KL에서, 데이터 분포에 따라 분포가 큰 곳의 alignment는 잘 이루어지지만, 그렇지 않은 곳의 경우 alignment가 잘 이루어지지 않거나, 심지어 특정 비교 순서가 뒤집히는 상황도 발생할 수 있다. 특히 KTO 논문에서 실험적으로 데이터의 비율에 따라 DPO의 성능이 달라지는 것을 확인한 바가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 평균 보상도 줄어들 수 있다. 고전적 two-staged RLHF는 policy improvement가 보장되었지만, DPO는 엄밀히 말해서 reward를 최적화하는 것이 아닌 KL을 최적화하는 것이기 때문에, 비교 확률을 맞추는 것과는 별개로 실제 기대 보상을 줄일 수 있는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 리뷰에서는 &lt;b&gt;3.1 LOCAL GEOMETRY OF DPO&lt;/b&gt;를 다루지 않고 가지만 확인하면 좋을 것이다. 결과만 말하자면 policy의 implicit reward manifold는 local하게 선형 공간이며, DPO는 실제 reward를 그 공간으로 사영하고 그 사영 방향은 데이터의 빈도에 따라 결정된다. 그러한 &lt;b&gt;결과로 순서가 뒤집히거나, 최적 행동 확률이 줄거나 평균 보상이 감소할 수 있으며, 이는 데이터 부족이나 optimizer의 문제도 아닌 policy capacity 제약 자체에서 오는 기하학적 문제인 것&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Towards Mitigating DPO's Pitfalls&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에 수식이 많아서 어지러우니, 우선 전체 순서를 요약하고 덤벼보도록 하자.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;RLHF를 locally 분석&lt;/li&gt;
&lt;li&gt;reward equivalence class 개념 등장&lt;/li&gt;
&lt;li&gt;DPO linearization과 RLHF equivalence class의 관계 규명&lt;/li&gt;
&lt;li&gt;misspecification의 정확한 구조 파악&lt;/li&gt;
&lt;li&gt;nullspace 방향을 열어주면 해결 가능&lt;/li&gt;
&lt;li&gt;그것이 AuxDPO&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것을 단계별로 정의해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RLHF objective $J(\theta; r^*)=\mathbb{E}[r^*] - \beta D_{KL}(\pi_\theta || \pi_{\theta_0})$를 Taylor expansion으로 근사해보자. TRPO 공부 좀 했으면 금방 한다. ㅎㅎ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;78&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NZ4Jf/dJMcaaYBf5f/k5dGmxTsBsa0AMh4D3VEsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NZ4Jf/dJMcaaYBf5f/k5dGmxTsBsa0AMh4D3VEsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NZ4Jf/dJMcaaYBf5f/k5dGmxTsBsa0AMh4D3VEsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNZ4Jf%2FdJMcaaYBf5f%2Fk5dGmxTsBsa0AMh4D3VEsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;39&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;78&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $F$는 Fisher information matrix이고, $A=\nabla\log\pi_{\theta_0}(a|s)$이다. 결과적으로 다음과 같은 형태가 된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLcvR4/dJMcadHKToe/WYvelyBJCVx7IvZHLoobh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLcvR4/dJMcadHKToe/WYvelyBJCVx7IvZHLoobh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLcvR4/dJMcadHKToe/WYvelyBJCVx7IvZHLoobh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLcvR4%2FdJMcadHKToe%2FWYvelyBJCVx7IvZHLoobh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;54&quot; data-origin-width=&quot;992&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 근사 형태를 잘 풀어주면 natural policy gradient가 다음과 같이 결정됨을 알 수 있다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yEoE4/dJMb99ZJdsK/zw3CQ8u7aIwZahTtltVZnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yEoE4/dJMb99ZJdsK/zw3CQ8u7aIwZahTtltVZnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yEoE4/dJMb99ZJdsK/zw3CQ8u7aIwZahTtltVZnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyEoE4%2FdJMb99ZJdsK%2Fzw3CQ8u7aIwZahTtltVZnK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;74&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 식에서 중요한 것은, $Ar^*$가 정책의 업데이트를 결정한다는 점이다. 따라서, $r_1, r_2$가 $Ar_1 = Ar_2$이면 동일 정책을 만드는 것이고, 이 때 equvalance class는 $r_1-r_2 \in N(A)$라는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xZ7WK/dJMcaivxnGz/KgOvrXP3ec2ZRkx3QXJoO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xZ7WK/dJMcaivxnGz/KgOvrXP3ec2ZRkx3QXJoO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xZ7WK/dJMcaivxnGz/KgOvrXP3ec2ZRkx3QXJoO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxZ7WK%2FdJMcaivxnGz%2FKgOvrXP3ec2ZRkx3QXJoO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1388&quot; height=&quot;204&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Proposition 7은 DPO의 선형화된 reward $r^{\beta}_\theta = \beta A_{\theta_0}^\top (\theta - \theta_0)$는 RLHF의 equivalence class 중 Mahalanobis norm이 최소인 대표 원소를 선택하는 것을 말한다. Misspecification의 본질은 여기서 나오는데 실제 reward는 DPO가 표현 가능한 것 + nullspace 성분으로 구성되어 있다는 것, 즉 $r^*=r^\beta_{\theta^*}+\delta, \delta\inN(A)$라는 것이다. 다시 말해서, DPO는 RLHF reward equivalence class 중 최소-norm 대표만을 표현할 수 있기 때문에, 진짜 reward에 존재하는 nullspace 성분을 모델링하지 못한다. 그 결과 BTL 확률을 맞추는 과정에서 왜곡이 발생한다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 본 논문은 nullspace 방향을 열어주는 AuxDPO를 제시한다. 수식을 확인해보자:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhRjIF/dJMcadAXRHn/w7SKlPvXLvjfMknH6lo191/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhRjIF/dJMcadAXRHn/w7SKlPvXLvjfMknH6lo191/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhRjIF/dJMcadAXRHn/w7SKlPvXLvjfMknH6lo191/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhRjIF%2FdJMcadAXRHn%2Fw7SKlPvXLvjfMknH6lo191%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;231&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 policy에서 implicitly induced reward에, null space에 속하는 $\delta$를 추가하여 loss를 구성한 방식이다. Null space는 기본적으로 찾는 것이 상당히 어렵기 때문에, 논문에서는 penalty term으로 null space를 대체하는 방식을 취한다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zMtAh/dJMcagR4uPz/pjGe6ikr9xVOUTotkCE8vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zMtAh/dJMcagR4uPz/pjGe6ikr9xVOUTotkCE8vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zMtAh/dJMcagR4uPz/pjGe6ikr9xVOUTotkCE8vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzMtAh%2FdJMcagR4uPz%2FpjGe6ikr9xVOUTotkCE8vK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;90&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 penalty term은 $A\delta\approx0$이 되도록 강제하는, 즉 policy에 영향을 주지 않는 방향(nullspace)으로만 존재하도록 학습된다.&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Experiments&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/egJsTJ/dJMcahpUagF/JSSK7RAEyXE811B5SUOte1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/egJsTJ/dJMcahpUagF/JSSK7RAEyXE811B5SUOte1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/egJsTJ/dJMcahpUagF/JSSK7RAEyXE811B5SUOte1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FegJsTJ%2FdJMcahpUagF%2FJSSK7RAEyXE811B5SUOte1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;680&quot; height=&quot;366&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;728&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서 주장한 바와 같이, 실제로 기존 방법들에 비해 유의미하게 높은 성능을 거두었으며 특히 OOD setting에서 우수한 성능을 보이는 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문 리뷰는 여기서 마무리하도록 하겠다!&lt;/p&gt;</description>
      <category>논문 리뷰/NLP</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/117</guid>
      <comments>https://manfromearth1.tistory.com/117#entry117comment</comments>
      <pubDate>Sun, 22 Feb 2026 01:44:44 +0900</pubDate>
    </item>
    <item>
      <title>OpenVLA:An Open-Source Vision-Language-Action Model 논문 리뷰</title>
      <link>https://manfromearth1.tistory.com/116</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Summary&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenVLA는 로봇 제어를 거창하게 새로 정의하기보다, &lt;b&gt;언어모델이 이미 잘 하는 일(다음 토큰 예측)&lt;/b&gt;로 최대한 끌고 온 접근이다. 입력은 &amp;ldquo;관측 이미지 + 자연어 지시&amp;rdquo;이고, 출력은 &amp;ldquo;로봇 행동(action)들의 문자열(토큰 시퀀스)&amp;rdquo;이다. 여기서 핵심 트릭은 로봇 행동이 본래 연속값(예: 이동/회전/그리퍼)인데, 이를 &lt;b&gt;이산 토큰으&lt;/b&gt;로 바꿔서 LLM의 출력 공간에 얹는다는 점이다. 그러면 학습은 다시 익숙한 형태로 돌아간다. 행동 토큰에 대해서만 cross-entropy를 걸고, 표준 next-token prediction으로 훈련하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재미있는 건, 이 설계가 &amp;ldquo;로봇 제어를 언어모델로 풀었다&amp;rdquo;기보다 &lt;b&gt;&amp;ldquo;언어모델의 학습/인프라/스케일링을 로봇 제어에 가져오기 쉬운 형태로 바꿨다&amp;rdquo;는 데 더 가깝다는 점&lt;/b&gt;이다. 그래서 논문 전체가 &amp;ldquo;어떤 백본/이산화/토크나이저 처리/학습 레시피가 VLA를 만들 때 잘 먹히는가?&amp;rdquo;라는 실용적 질문에 집중한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Preliminaries&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미리 알아야 하는 포인트들에 대해서 숙지하고 가자.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Vision-Language Model&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근의 VLM은 대체로 다음 3개의 블록으로 구성된다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Visual encoder&lt;/b&gt;: 이미지 &amp;rarr; 패치 임베딩 시퀀스&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Projector&lt;/b&gt;: 시각 임베딩을 LLM 입력 공간으로 매핑&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LLM&lt;/b&gt;: 입력 토큰들을 바탕으로 다음 텍스트 토큰을 예측&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;훈련 목표는 보통 &amp;ldquo;다음 텍스트 토큰 예측&amp;rdquo;이다. 즉, 관측(이미지)와 프롬프트(텍스트)가 주어졌을 때, 모델이 다음 토큰의 확률을 맞춘다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;MDP?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로봇 시연(demonstration)은 환경과 상호작용하면서 나온 궤적 데이터다. 생성 과정 자체는 MDP로 모델링할 수 있다. 하지만 OpenVLA의 훈련은 &lt;b&gt;보상/가치함수/벨만식 없이 시연 행동을 맞추는 지도학습(behavior cloning)&lt;/b&gt;에 가깝다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, &amp;ldquo;배경은 제어 문제&amp;rdquo;인데 &amp;ldquo;학습은 imitation 방식&amp;rdquo;이다. 이걸 구분하지 않으면, 왜 tokenization이 그렇게 중요해지는지(=학습을 안정적으로 만들기 위해) 포인트를 놓치기 쉽다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Discrete LLM vs Continuous Action&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어모델은 기본적으로 이산 vocabulary 위에서 작동한다. 반면 로봇은 연속 벡터인 경우가 많아, 이산 token &amp;rarr; 연속 action으로 바꾸는 것이 VLA의 핵심 문제 중 하나이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해볼 수 있는 대안으로는, 이산 token을 연속 action으로 바꾸어주는 MLP를 새로 구성하거나, action 자체를 이산화하여 LLM의 next token prediction, 즉 classification의 문제로 치환하는 것이다. 본 논문은 후자를 다루는데, 전자의 경우 어떠한 문제가 있는지에 대해서 살펴보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Method&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5pe6Y/dJMb99SU7uo/JnXWubHIBwHJHoWZP4NfOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5pe6Y/dJMb99SU7uo/JnXWubHIBwHJHoWZP4NfOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5pe6Y/dJMb99SU7uo/JnXWubHIBwHJHoWZP4NfOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5pe6Y%2FdJMb99SU7uo%2FJnXWubHIBwHJHoWZP4NfOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;780&quot; height=&quot;307&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 파이프라인을 우선 요약해보면 다음과 같다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(이미지, 지시문) &amp;rarr; LLM(input) &amp;rarr; 행동 토큰 시퀀스(next-token prediction) &amp;rarr; Action De-Tokenizer &amp;rarr; 연속 행동 벡터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 조금 더 구조적으로 쓰면:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;시각 인코더가 이미지에서 시각 토큰을 만든다.&lt;/li&gt;
&lt;li&gt;지시문 텍스트 토큰과 시각 토큰이 LLM으로 들어간다.&lt;/li&gt;
&lt;li&gt;LLM이 행동 토큰을 &amp;ldquo;문장처럼&amp;rdquo; 생성한다.&lt;/li&gt;
&lt;li&gt;행동 토큰을 연속 행동으로 복원해서 로봇에 보낸다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Action-to-Token&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 각 행동 차원을 독립적으로, 256개의 bin 중 하나로 양자화한다. 즉, 행동 벡터의 각 컴포넌트별 1% 분위수와 99% 분위수를 설정한 후 균등 256등분, 이후 이산화(mapping)을 거친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시연 데이터에는 종종 이상치 행동(센서가 튀거나, 기록에 오류가 생기거나, 실패 궤적이 존재하거나)이 섞이기 때문에 min, max를 쓰면 그 몇 개가 전체 구간을 늘려버려서 &lt;b&gt;자주 등장하는 행동 범위의 해상도&lt;/b&gt;가 떨어진다. 반면 quantile 기반은 &amp;ldquo;자주 쓰는 구간에 해상도를 집중&amp;rdquo;시키는 전략이기 때문에 이상치에 둔감한 경향이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Tokenizer Constraint &amp;rarr; Overwrite&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이산화로 차원마다 256개 토큰이 필요해진다. 그런데 Llama 토크나이저는 &amp;ldquo;새 special token&amp;rdquo;을 무한히 늘릴 수 있는 구조가 아니고, 예약된 수가 제한적이다. 그래서 OpenVLA는 단순화를 택한다. Llama vocabulary에서 &lt;b&gt;거의 사용되지 않는 256개 토큰(마지막 256개)&lt;/b&gt;을 골라 그 토큰 id를 행동 토큰 의미로 overwrite한다. 원래 언어에서 거의 안 쓰이던 토큰의 의미를 포기하고, 그 슬롯을 행동 토큰으로 쓰면 언어 능력에 주는 부작용을 줄일 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 질문은 남는다. &lt;b&gt;표현 공간이 왜곡(distort)되지는 않을까? &lt;/b&gt;여기서 중요한 관점은 &amp;ldquo;덮어쓰기 = 공간 전체 파괴&amp;rdquo;가 아니라, 보통은 다음에 더 가깝다는 점이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 행동 토큰들은 모델 내부에서 일종의 &lt;b&gt;작은 하위 구조(서브스페이스)&lt;/b&gt;처럼 자리잡는다.&lt;/li&gt;
&lt;li&gt;학습 손실이 행동 토큰 위치에서만 걸리므로, 업데이트도 주로 행동 토큰 및 그와 연결된 경로로 집중된다.&lt;/li&gt;
&lt;li&gt;그래서 전체 언어 기능이 통째로 망가지기보다는, &amp;ldquo;행동 토큰을 다루는 회로가 추가/재배치&amp;rdquo;되는 쪽에 가깝다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 이건 &amp;ldquo;항상 안전하다&amp;rdquo;는 뜻이 아니다. 파인튜닝을 얼마나 크게 하느냐(전체 튜닝 vs LoRA), 학습률, 데이터 프롬프트 구성에 따라 텍스트 능력의 미세 손실이 생길 여지는 있다. 하지만 논문은 택한 방향이 minimal한 방식임을 주장한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;De-Tokenizer&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행동 토큰을 연속 행동으로 바꿔주는 부분을 논문은 &amp;ldquo;action de-tokenizer&amp;rdquo;로 둔다. &lt;span&gt;&amp;nbsp;&lt;/span&gt;여기서 오해가 생기기 쉬운데, 보통 이 모듈이 &amp;ldquo;큰 MLP로 똑똑하게 변환&amp;rdquo;하는 역할은 아니다. 대부분은 다음 중 하나다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Bin center lookup: 토큰 id &amp;rarr; 해당 bin의 대표값(중앙값)&lt;/li&gt;
&lt;li&gt;Codebook lookup: 토큰 id &amp;rarr; 미리 정해둔 코드북 벡터&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 디토크나이저는 대개 &amp;ldquo;복원기&amp;rdquo;이고, &lt;b&gt;결정은 LLM이 토큰을 선택하는 순간 이미 끝난다&lt;/b&gt;. 이 설계가 주는 장점은 명확하다. 연속 회귀를 직접 최적화하는 불안정함을 피하고, LLM이 잘하는 분류 학습으로 모든 걸 밀어 넣는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 직관적으로, LLM은 &lt;b&gt;이미 의미를 잘 아니까, 그 출력을 받아서 연속 행동만 잘 뽑는 작은 head만 학습하면 되지 않나?&lt;/b&gt;와 같은 생각이 든다. 충분히 타당한 생각이지만, 보통 로봇 조작에서 문제가 생긴다고 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조작은 &amp;lsquo;무엇을&amp;rsquo;보다 &amp;lsquo;어디를/얼마나/어느 각도로/어느 타이밍에/얼마나 힘으로&amp;rsquo;가 더 빡세다.&lt;/li&gt;
&lt;li&gt;Frozen VLM의 표현은 대체로 &lt;b&gt;semantic alignment&lt;/b&gt;에는 강하지만, 정밀 기하/접촉 국면(phase)을 head가 쉽게 읽어내기 좋은 형태로 제공하지 않을 수 있다.&lt;/li&gt;
&lt;li&gt;결국 representation을 고정하면, &lt;b&gt;&amp;ldquo;성공/실패 판단&amp;rdquo;, &amp;ldquo;힘 조절&amp;rdquo;, &amp;ldquo;접촉 전후 국면&amp;rdquo; 같은 것을 head나 reward로 떠안아야 하고, 그 순간부터는 학습이 점점 RL에 가까워지고(=credit assignment 문제), 설계 난이도가 급상승&lt;/b&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 OpenVLA류 접근은 &amp;ldquo;차라리 LLM/VLM을 조금이라도 제어에 맞게 휘게 만들자&amp;rdquo;를 택한다. LoRA가 등장하는 이유도 이 지점이다. (전체를 다 바꾸기보다는 필요한 방향으로 최소한만 움직이려는 전략)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Vision Tokenizer&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문에서는 SigLIP와 DINOv2 특징을 함께 넣은 Prismatic을 사용한다. 이 두 이미지 토크나이저 모델은 다음과 같은 이유로 같이 쓰인다고 한다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SigLIP: 언어-시각 정렬(semantic grounding)에 강함&lt;/li&gt;
&lt;li&gt;DINOv2: 패치 수준의 공간 구조(spatial structure)가 더 또렷하게 남는 경향&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 조작 과제는 목표 물체를 &amp;ldquo;알아보는 것&amp;rdquo;에서 끝나지 않고, &amp;ldquo;정확히 집는 것&amp;rdquo;이 핵심이라서 공간적 정밀도가 중요하다. 그래서 DINOv2 특징이 도움이 될 가능성이 크다. 추가적인 부분에 대해서는 Experiment에서 더 다뤄보도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Experiments&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;782&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2xt6l/dJMcafr34DT/ErgHpJZCglv4GwS5RWz7X0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2xt6l/dJMcafr34DT/ErgHpJZCglv4GwS5RWz7X0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2xt6l/dJMcafr34DT/ErgHpJZCglv4GwS5RWz7X0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2xt6l%2FdJMcafr34DT%2FErgHpJZCglv4GwS5RWz7X0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1294&quot; height=&quot;782&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;782&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 Robot manipulation에서 좋은 성능을 보이는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nkhXA/dJMcagLiHhk/nlYccU7PwE9LwD0VkKv7d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nkhXA/dJMcagLiHhk/nlYccU7PwE9LwD0VkKv7d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nkhXA/dJMcagLiHhk/nlYccU7PwE9LwD0VkKv7d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnkhXA%2FdJMcagLiHhk%2FnlYccU7PwE9LwD0VkKv7d0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;211&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논문의 Table 9 일부를 가져왔다. SigLIP만 있는 경우에 성능이 떨어지는 것으로 보아 DINOv2의 필요성에 관한 설득력이 생긴다. 그러나 DINOv2가 없을 때의 실험도 한번 해봐야 하지 않나 싶은데, 이것은 살짝 아쉬운 부분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;738&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDGdEf/dJMcacB7Kjn/J9EU2q1me1A2FgBeND0DOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDGdEf/dJMcacB7Kjn/J9EU2q1me1A2FgBeND0DOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDGdEf/dJMcacB7Kjn/J9EU2q1me1A2FgBeND0DOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDGdEf%2FdJMcacB7Kjn%2FJ9EU2q1me1A2FgBeND0DOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1336&quot; height=&quot;738&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;738&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fine-tuning의 필요성을 보여준다. VLM의 hidden 기하 구조를 control-friendly하게 바꾸어줌을 알 수 있다. 다만 head만 따로 붙인 것도 실험에 있었으면 좋지 않았을까하는 생각은 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bROOAN/dJMcagLiHsl/Gg5B4IrpDMHRKjCuQyMYa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bROOAN/dJMcagLiHsl/Gg5B4IrpDMHRKjCuQyMYa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bROOAN/dJMcagLiHsl/Gg5B4IrpDMHRKjCuQyMYa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbROOAN%2FdJMcagLiHsl%2FGg5B4IrpDMHRKjCuQyMYa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1324&quot; height=&quot;494&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;494&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제서야 언급하기는 하는데... ㅎㅎ 논문에서 특히 강점으로 주장하는 것은, 개인 local computer로 충분히좋은 성능을 낼 수 있다는 것이다. 따라서 LoRA도 하고... Quantization도 하는 것인데, 성능이 잘 보존되는 것을 확인할 수 있다. 아래도 또 확인해보자:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWYIkB/dJMcahKddwk/zvZHcZMMzJ0rC3kUAvQ5uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWYIkB/dJMcahKddwk/zvZHcZMMzJ0rC3kUAvQ5uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWYIkB/dJMcahKddwk/zvZHcZMMzJ0rC3kUAvQ5uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWYIkB%2FdJMcahKddwk%2FzvZHcZMMzJ0rC3kUAvQ5uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;276&quot; data-origin-width=&quot;1354&quot; data-origin-height=&quot;622&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이만 논문 리뷰는 여기서 마치도록 하겠다.&lt;/p&gt;</description>
      <category>논문 리뷰/RL</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/116</guid>
      <comments>https://manfromearth1.tistory.com/116#entry116comment</comments>
      <pubDate>Sat, 21 Feb 2026 12:38:10 +0900</pubDate>
    </item>
    <item>
      <title>Mean Flow Policy with Instantaneous Velocity Constraint for One-step Action Generation 논문 리뷰</title>
      <link>https://manfromearth1.tistory.com/115</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Summary&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 논문은 flow-based policy의 학습 및 추론 과정에서 기존의 instantaneous velocity 기반 flow matching이나 CNF 대신, &lt;b&gt;mean velocity field를 직접 모델링하는 Mean Flow Policy (MFP)&lt;/b&gt;를 제안한다. 이를 통해 기존 flow policy가 갖는 다단계 적분(NFE 증가), BPTT 비용, 그리고 실시간 제어에서의 샘플링 병목 문제를 구조적으로 제거한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 Mean Flow를 RL에 차용한 것이 아니라, RL 환경에서 Mean Flow를 적용할 때 발생하는 &lt;span&gt;&lt;b&gt;학습의 ill-posedness(해의 비유일성)&lt;/b&gt;&lt;/span&gt; 문제를 이론적으로 분석하고, 이를 해결하기 위해 &lt;b&gt;Instantaneous Velocity Constraint (IVC)&lt;/b&gt;를 도입했다는 점이 핵심 기여다. 특히, mean flow identity가 경계조건 없이 다중 해를 허용한다는 점을 정리하고, IVC가 이를 수학적으로 well-posed한 문제로 만든다는 분석은 이 논문의 이론적 정당성을 뒷받침한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 점이 본 논문이 ICLR 2026 Oral에 선정된 이유이며, 그런 만큼 우수한 논문이지만 어디서 논문이 설득력이 떨어지는지에 대해서도 알아보는 시간을 가지도록 하겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Method&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Mean Velocity Policy&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cllKD3/dJMcabXtLa1/XUAZxnx92c4lpRyWT8cMC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cllKD3/dJMcabXtLa1/XUAZxnx92c4lpRyWT8cMC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cllKD3/dJMcabXtLa1/XUAZxnx92c4lpRyWT8cMC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcllKD3%2FdJMcabXtLa1%2FXUAZxnx92c4lpRyWT8cMC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;440&quot; height=&quot;74&quot; data-origin-width=&quot;1628&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;굳이 이를 &amp;ldquo;action 생성&amp;rdquo;으로 한정할 필요는 없다. 이는 CNF(Continuous Normalizing Flow)에서의 일반적인 생성 과정과 동일하게, &lt;span&gt;&lt;b&gt;기저 분포(latent noise)에서 시작하여 연속시간 동역학을 통해 목표 분포의 샘플로 사상하는 문제&lt;/b&gt;&lt;/span&gt;로 이해할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 CNF를 직접 사용하는 경우, 본질적으로 시간에 대한 연속적 적분이 필요하며, 이는 수치적 불안정성과 다단계 계산 비용을 수반한다. 한편, 이를 완화하기 위해 제안된 Flow Matching은 생성 모델링 관점에서는 효율적이지만, 이를 RL의 정책 학습에 적용할 경우 &lt;span&gt;&lt;b&gt;시간축을 따라 정의된 생성 경로에 대한 역전파(BPTT)가 요구되며&lt;/b&gt;&lt;/span&gt;, 이는 계산 복잡도와 메모리 측면에서 상당한 부담을 초래한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 적분은 평균이다는 말을 어디서 들어봤다면, 적분값 자체를 optimize하면 되지 않을까 싶다. 본 논문은 그렇게 mean flow를 타겟팅하는 전략을 선택한다. 순간순간의 velocity field를 학습하는 것이 아닌, 특정한 인터벌까지 고려된 velocity field의 누적 변화량(적분) 자체를 타겟팅하는 것이다. 따라서 $t$ 시점의 순간적인 velocity field를 $v(a(t), t, s)$라 하면, time interval $[t,r]$에서의 mean velocity $u(a(t), t, r, s)$는 다음과 같이 정의된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccyAhJ/dJMcaf6EcGj/qZWQjvLYjQnLgPpqW3yHoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccyAhJ/dJMcaf6EcGj/qZWQjvLYjQnLgPpqW3yHoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccyAhJ/dJMcaf6EcGj/qZWQjvLYjQnLgPpqW3yHoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccyAhJ%2FdJMcaf6EcGj%2FqZWQjvLYjQnLgPpqW3yHoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;68&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $u$는 학습 가능한 네트워크로, 보통 $u_\theta$로 부른다. 만약 이상적으로 학습이 잘 된 경우, 실제 action은 다음과 같은 형태가 된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf4KN3/dJMcad103jl/SRUv3KR1KJq9DRwAYAO7S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf4KN3/dJMcad103jl/SRUv3KR1KJq9DRwAYAO7S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf4KN3/dJMcad103jl/SRUv3KR1KJq9DRwAYAO7S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf4KN3%2FdJMcad103jl%2FSRUv3KR1KJq9DRwAYAO7S1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;42&quot; data-origin-width=&quot;1050&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 간단한 방법이 있다니~ 하면 진작에 잘 했으면 맨체스터 유나이티드 갔겠지 마인드마냥 생각할 것이다. 그러나 이 방법은 특별한 장치 없으면 제대로 사용할 수 없다. 그러한 특별한 장치를 알기 이전에, 어떻게 이 Mean flow matching이 학습되는지 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$u$에 대한 앞선 정의를 다시 한 번 확인하고, 이를 time $t$에 대해서 미분하면 다음과 같은 식이 등장한다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NXTHb/dJMcagxHIy7/CG1pIdRwlmTZNPd5GyFWd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NXTHb/dJMcagxHIy7/CG1pIdRwlmTZNPd5GyFWd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NXTHb/dJMcagxHIy7/CG1pIdRwlmTZNPd5GyFWd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNXTHb%2FdJMcagxHIy7%2FCG1pIdRwlmTZNPd5GyFWd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;46&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Instaneous velocity $v$는 $da(t)/dt$로 정의되며, 우리가 flow matching에서 배운 linear interpolation $a(t)=t\cdot a(1) + (1-t)\cdot a(0)$이므로 $v=a(1)-a(0)$가 된다. $u의 $t$에 대한 미분은 다음과 같이 정의된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1692&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kFFZr/dJMb99L6UBr/axzqXaezSjHeVxlZbcKLDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kFFZr/dJMb99L6UBr/axzqXaezSjHeVxlZbcKLDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kFFZr/dJMb99L6UBr/axzqXaezSjHeVxlZbcKLDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkFFZr%2FdJMb99L6UBr%2FaxzqXaezSjHeVxlZbcKLDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;52&quot; data-origin-width=&quot;1692&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Computation은 Jacobian-Vector Product로 action 변화와 time step의 변화에 따른 변화율을 계산함으로써 $O(n)$으로 계산할 수 있다. 따라서 mean-flow matching loss는 다음과 같다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1786&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIaYt6/dJMcadVf1Pz/zIu8e1diRJGS1cVl7a6SjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIaYt6/dJMcadVf1Pz/zIu8e1diRJGS1cVl7a6SjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIaYt6/dJMcadVf1Pz/zIu8e1diRJGS1cVl7a6SjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIaYt6%2FdJMcadVf1Pz%2FzIu8e1diRJGS1cVl7a6SjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;65&quot; data-origin-width=&quot;1786&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 action sampling 자체는 올바르게 할 수 있는 모델이 완성된다고 가정하자. 그런데 우리는 policy iteration을 통해서 policy 자체의 성능을 올려야 한다. 이에 대해서 논문은 다음과 같은 방식을 제시한다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2204&quot; data-origin-height=&quot;998&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emxqLI/dJMcai3jSYa/brspPl2DM8zxAK3VKM9sdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emxqLI/dJMcai3jSYa/brspPl2DM8zxAK3VKM9sdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emxqLI/dJMcai3jSYa/brspPl2DM8zxAK3VKM9sdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemxqLI%2FdJMcai3jSYa%2FbrspPl2DM8zxAK3VKM9sdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2204&quot; height=&quot;998&quot; data-origin-width=&quot;2204&quot; data-origin-height=&quot;998&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 간단하다. 여러 action을 샘플링하고, 그 중에서 가장 $Q$가 높은 action을 선택하여 policy를 업데이트하면 된다. 얼핏 보면 간단하지만, 논문에서는 이러한 방법이 policy improvement를 보장한다는 것을 제시한다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2216&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mN3fs/dJMcadAVOzB/NWL9jEqvn7FKssmgcZRJLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mN3fs/dJMcadAVOzB/NWL9jEqvn7FKssmgcZRJLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mN3fs/dJMcadAVOzB/NWL9jEqvn7FKssmgcZRJLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmN3fs%2FdJMcadAVOzB%2FNWL9jEqvn7FKssmgcZRJLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2216&quot; height=&quot;822&quot; data-origin-width=&quot;2216&quot; data-origin-height=&quot;822&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 $\Delta_N$은 best-of-N advantage gain이다. 더 자세한 증명은 논문의 appendix를 찾아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 &quot;이상적인 경우&quot;에 policy가 실제로 성능이 향상될 수 있음을 알았다. 그러나 아까 설명했듯이 mean flow matching은 문제가 있다. (13)의 식에 있는 $\epsilon_A$는 mean flow matching으로 인한 오차에서 발생하는 항목이다. 이번에는 이 error가 왜 일어나는지에 대해서 알아보고, 이를 해결하고자 하는 &lt;b&gt;instantaneous velocity constraint(IVC)&lt;/b&gt;에 대해서 알아보도록 하자.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Instantaneous Velocity Constraint&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X6sDD/dJMcai96l2R/HchFeW1rjKWPu0nDIEZBX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X6sDD/dJMcai96l2R/HchFeW1rjKWPu0nDIEZBX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X6sDD/dJMcai96l2R/HchFeW1rjKWPu0nDIEZBX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX6sDD%2FdJMcai96l2R%2FHchFeW1rjKWPu0nDIEZBX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;249&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 Theroem을 확인하자:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;742&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dq9iQ7/dJMcahpR5Ch/jgSEW6ki3BWYqXKkfKjoLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dq9iQ7/dJMcahpR5Ch/jgSEW6ki3BWYqXKkfKjoLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dq9iQ7/dJMcahpR5Ch/jgSEW6ki3BWYqXKkfKjoLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdq9iQ7%2FdJMcahpR5Ch%2FjgSEW6ki3BWYqXKkfKjoLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1436&quot; height=&quot;742&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;742&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식 (8)을 활용하여, 학습하고자 하는 $u_\theta$와 true mean velocity field $u^*$를 빼주면 $\Delta_u + (t-r)\frac{d}{dt}\Delta_u=0$이 되며, 이 형태를 풀어주고 적분하면 $(r-t)\Delta_u = C(a,r)$이 되고, $t$에 무관한 적분 상수 $C(a,r)$이 튀어나와 (16)과 같은 형태가 나오는 것이다. 따라서 $\Delta_u$는 유일한 값이 아닌 여러 값이 나올 수 있으며, 특히 더 문제가 되는 것은 $t\rightarrow r$일때 그 값이 발산한다는 것이다. 따라서 $t\approx r$의 경계 조건이 필수적이게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpXk2O/dJMcabpFZrZ/W8YXaCICC7Yxi9QbzB4s2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpXk2O/dJMcabpFZrZ/W8YXaCICC7Yxi9QbzB4s2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpXk2O/dJMcabpFZrZ/W8YXaCICC7Yxi9QbzB4s2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpXk2O%2FdJMcabpFZrZ%2FW8YXaCICC7Yxi9QbzB4s2K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1438&quot; height=&quot;372&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWnKg8/dJMcafZRODm/afBKSWyDcEuYQ4UOqVlOWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWnKg8/dJMcafZRODm/afBKSWyDcEuYQ4UOqVlOWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWnKg8/dJMcafZRODm/afBKSWyDcEuYQ4UOqVlOWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWnKg8%2FdJMcafZRODm%2FafBKSWyDcEuYQ4UOqVlOWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1424&quot; height=&quot;172&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하지만 강력하다. $\Delta_v$의 norm을 bounded로 설정하면, $C(a,r)$이 반드시 0이 되어야 하는 조건으로 만족되어 $\Delta_v$도 0이 되고, 따라서 $\Delta_u$도 0이 된다. 따라서 경계조건 설정만으로 해의 유일성이 보장되는 결과가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최종적으로 다음과 같은 loss로 policy가 학습된다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkyG06/dJMb99L6WvW/EjQqSR1lOzp2MMcod7GIVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkyG06/dJMb99L6WvW/EjQqSR1lOzp2MMcod7GIVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkyG06/dJMb99L6WvW/EjQqSR1lOzp2MMcod7GIVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkyG06%2FdJMb99L6WvW%2FEjQqSR1lOzp2MMcod7GIVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;49&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고리즘은 다음과 같다:&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2234&quot; data-origin-height=&quot;1070&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kQ6BN/dJMcaibfT41/m33etF7INUy2iPzKgnF4Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kQ6BN/dJMcaibfT41/m33etF7INUy2iPzKgnF4Fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kQ6BN/dJMcaibfT41/m33etF7INUy2iPzKgnF4Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkQ6BN%2FdJMcaibfT41%2Fm33etF7INUy2iPzKgnF4Fk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2234&quot; height=&quot;1070&quot; data-origin-width=&quot;2234&quot; data-origin-height=&quot;1070&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오해의 소지가 있어서 말하자면, offline Pre-training step에서는 best-of-N이 없다. From scratch을 하지 않고 바로 온라인으로 튜닝했을 때의 성능을 보고싶기는 한데 일단 이정도로만 이해하자(온라인 알고리즘이다! 근데 실험에서의 비교군이 너무 적어서 아쉽다).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Experiments&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;1216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkmA5N/dJMcabpFZP7/KqXV8ZmRkCFeejCZ01j39K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkmA5N/dJMcabpFZP7/KqXV8ZmRkCFeejCZ01j39K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkmA5N/dJMcabpFZP7/KqXV8ZmRkCFeejCZ01j39K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkmA5N%2FdJMcabpFZP7%2FKqXV8ZmRkCFeejCZ01j39K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1526&quot; height=&quot;1216&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;1216&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Offline-to-Online RL 알고리즘 간의 비교이다. 좋은 성능을 내는 것은 맞으나 솔직히 비교 대상 자체가 잘못되지 않았나 싶고, 온라인 알고리즘의 베이스라인 자체를 조금 두었으면 좋겠다는 생각이 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z6GWV/dJMcajgRzvq/qvvWdRhyJBJ81QWomJY9l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z6GWV/dJMcajgRzvq/qvvWdRhyJBJ81QWomJY9l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z6GWV/dJMcajgRzvq/qvvWdRhyJBJ81QWomJY9l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz6GWV%2FdJMcajgRzvq%2FqvvWdRhyJBJ81QWomJY9l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;228&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;556&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IVC contraint hyperparameter에 대해서도 robust한 것을 알 수 있다. $\lambda=0$일 때도 학습이 잘 나오기는 하고, 실험을 다른 것을 돌려보지 않은 점이 흠이다. 그러면 Best-of-N 때문에 학습이 잘 된 것이 아닌가? 다만 이론적으로 해의 유일성을 보장하면서, BPTT 없이 flow policy를 만들었다는 것이 고무적인 점이라고 보면 될 것 같기도 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l2w0P/dJMcaaRPXXt/LGBc8LVXovPALqfWsj12B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l2w0P/dJMcaaRPXXt/LGBc8LVXovPALqfWsj12B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l2w0P/dJMcaaRPXXt/LGBc8LVXovPALqfWsj12B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl2w0P%2FdJMcaaRPXXt%2FLGBc8LVXovPALqfWsj12B0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;102&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1488&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y9z34/dJMcaiWzDUO/u96MOxbMKWKKLtaRzbgRF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y9z34/dJMcaiWzDUO/u96MOxbMKWKKLtaRzbgRF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y9z34/dJMcaiWzDUO/u96MOxbMKWKKLtaRzbgRF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy9z34%2FdJMcaiWzDUO%2Fu96MOxbMKWKKLtaRzbgRF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;99&quot; data-origin-width=&quot;1488&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먄약 실제 추론에서 best-of-N을 사용하지 않는다면 설득력 있는 자료이고, 아니면 설득력이 떨어지는 자료라고 본다. 다만 best-of-N을 쓰지 않고, 또 policy를 직접 적합시키지 않고 latent만 조정하는 방법론들이 있으니 실전 사용에서는 설득력이 있을 것 같기도 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 mean flow가 가지는 약점을 조금 더 이야기해보자면, 결국 generative modeling에서 쓰이지 않은 이유는 결국 평균에서의 유리함이지, pointwise에서 유리한 것은 아니라는 것이다. 근본적인 문제가 있는 것으로 보이지만 이에 대해 실험을 보이지 않은 것은 살짝 아쉬운 면이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 논문 리뷰는 여기서 마치도록 하겠다!&lt;/p&gt;</description>
      <category>논문 리뷰/RL</category>
      <author>manfromearth1</author>
      <guid isPermaLink="true">https://manfromearth1.tistory.com/115</guid>
      <comments>https://manfromearth1.tistory.com/115#entry115comment</comments>
      <pubDate>Thu, 19 Feb 2026 21:41:16 +0900</pubDate>
    </item>
  </channel>
</rss>