<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>IBOK</title>
    <link>https://bo-10000.tistory.com/</link>
    <description> </description>
    <language>ko</language>
    <pubDate>Tue, 21 Jul 2026 10:37:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>복만</managingEditor>
    <image>
      <title>IBOK</title>
      <url>https://tistory1.daumcdn.net/tistory/3487102/attach/fb04976601014f93b22d0aff6d652500</url>
      <link>https://bo-10000.tistory.com</link>
    </image>
    <item>
      <title>[딥러닝 논문리뷰] Depth Anything V2 (NeurIPS 2024)</title>
      <link>https://bo-10000.tistory.com/210</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;논문: &lt;a href=&quot;https://arxiv.org/pdf/2406.09414&quot;&gt;https://arxiv.org/pdf/2406.09414&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그: &lt;a href=&quot;https://depth-anything-v2.github.io/&quot;&gt;https://depth-anything-v2.github.io/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드: &lt;a href=&quot;https://github.com/DepthAnything/Depth-Anything-V2&quot;&gt;https://github.com/DepthAnything/Depth-Anything-V2&lt;/a&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;&amp;nbsp;&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;lt;요약&amp;gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Monocular depth estimatino (MDE) 관련 논문&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://depth-anything.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Depth Anything&lt;/a&gt;의 후속 논문이고 다양한 크기의 모델와 벤치마크 데이터셋을 함께 공개&lt;/li&gt;
&lt;li&gt;Synthetic dataset을 활용하여 정확도를 높이고, student teacher 모델 구조를 이용하여 효율성을 높였다.&lt;/li&gt;
&lt;li&gt;Stable diffusion 최신 모델들에 비해 10배이상 빠르고 정확함&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Related works&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Monocular depth estimation (MDE)는 3D reconstruction, 네비, 자율주행 등에 활용한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Backbone이 되는 모델 구조에 따라 두가지로 분류가 가능하다.&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;1. discriminative model (BEiT, DINOv2 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - ex) Depth Anything&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 장점: 효율성&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;2. generative model (Stable diffusion 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - ex) Marigold&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 장점: 디테일이 좋다. 투명한 물체와 반사 등에도 효과적임.&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Method&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 아이디어는 &quot;&lt;b&gt;Real dataset&lt;/b&gt;에 오히려 노이즈가 많아서 안좋을 수 있다&quot;&quot;&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;b&gt;synthetic dataset&lt;/b&gt;을 이용하자.&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;2064&quot; data-origin-height=&quot;1116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnATjC/btsMEDqM1OQ/IBkUPNwLkzx0GKNFE2Q6G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnATjC/btsMEDqM1OQ/IBkUPNwLkzx0GKNFE2Q6G0/img.png&quot; data-alt=&quot;The depth of synthetic images is truly &amp;quot;GT&amp;quot;.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnATjC/btsMEDqM1OQ/IBkUPNwLkzx0GKNFE2Q6G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnATjC%2FbtsMEDqM1OQ%2FIBkUPNwLkzx0GKNFE2Q6G0%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;749&quot; height=&quot;405&quot; data-origin-width=&quot;2064&quot; data-origin-height=&quot;1116&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;The depth of synthetic images is truly &quot;GT&quot;.&lt;/figcaption&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;그럼 이전 연구들은 왜 synthetic dataset을 안썼을까? Synthetic dataset은 다음과 같은 단점이 있다.&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;1. &lt;b&gt;distribution shift&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - 그래도 여전히 real world 이미지와는 차이가 있다 (style, color distribution 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;restricted scene coverage&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - real world의 모든 시나리오를 담지는 못한다.&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;그러므로 학습에 real world 데이터는 반드시 사용해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 해결하기 위해 다음과 같은&amp;nbsp;&lt;b&gt;student teacher 모델 구조&lt;/b&gt;를 활용한다.&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;2064&quot; data-origin-height=&quot;798&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWSGCb/btsMEqFezqL/RiNnStQ2lWUgIbv2Rp1GIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWSGCb/btsMEqFezqL/RiNnStQ2lWUgIbv2Rp1GIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWSGCb/btsMEqFezqL/RiNnStQ2lWUgIbv2Rp1GIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWSGCb%2FbtsMEqFezqL%2FRiNnStQ2lWUgIbv2Rp1GIk%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;759&quot; height=&quot;293&quot; data-origin-width=&quot;2064&quot; data-origin-height=&quot;798&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;1. High-quality synthetic image로 &lt;b&gt;teacher model&lt;/b&gt;을 학습한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; - Generalization 성능이 높고 사이즈가 큰 &lt;u&gt;DINOv2-G&lt;/u&gt;를 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Teacher model을 이용해 real image의 &lt;b&gt;pseudo depth label&lt;/b&gt;을 제작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 이 Pseudo-labeled real image dataset을 이용해 &lt;b&gt;student model&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;이렇게 하면 다양한 사이즈의 모델을 이용해 효율성을 높이면서도 정확도가 높은 MDE 모델들을 학습시킬 수 있다.&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Results&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정성적 비교 결과 (위는 전작인 Depth Anything V1과 비교, 아래는 SD 기반의 Marigold와 비교)&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;816&quot; data-origin-height=&quot;1354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M8PkK/btsME0lwxxw/uiMpJrOAetAzfqRf4m0Kj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M8PkK/btsME0lwxxw/uiMpJrOAetAzfqRf4m0Kj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M8PkK/btsME0lwxxw/uiMpJrOAetAzfqRf4m0Kj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM8PkK%2FbtsME0lwxxw%2FuiMpJrOAetAzfqRf4m0Kj1%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;658&quot; height=&quot;1092&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;1354&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;816&quot; data-origin-height=&quot;1300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y07YV/btsMF8bNrt2/ekOB2SyTYfRKcjfCwoJL0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y07YV/btsMF8bNrt2/ekOB2SyTYfRKcjfCwoJL0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y07YV/btsMF8bNrt2/ekOB2SyTYfRKcjfCwoJL0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy07YV%2FbtsMF8bNrt2%2FekOB2SyTYfRKcjfCwoJL0K%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;666&quot; height=&quot;1061&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;1300&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;느낀점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DINOv2-G로 synthetic dataset에 대해 학습했을 때의 문제점 중 하나는 일부 real world data에 대해 추론 성능이 떨어지는 것이었다. 그런데 이 모델로 real world data에 대한 synthetic label을 만들어 student model을 학습시킨건데 그러면 pseudo-labeled real word dataset에도 이 문제가 고스란히 전달되는것 아닌지.. 극히 일부라 괜찮았던 것일까?&lt;/p&gt;</description>
      <category>  Deep Learning/논문 리뷰 [KOR]</category>
      <category>Depth estimation</category>
      <category>nerips</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/210</guid>
      <comments>https://bo-10000.tistory.com/210#entry210comment</comments>
      <pubDate>Sun, 9 Mar 2025 14:26:20 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu 22.04에 nvidia driver, cuda, cuDNN, torch 설치하기 (2024 ver)</title>
      <link>https://bo-10000.tistory.com/209</link>
      <description>&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;h2 data-ke-size=&quot;size26&quot;&gt;목차&lt;/h2&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;0. ubuntu 버전 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. nvidia driver 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. cuda 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. cuDNN 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. torch 설치&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0. ubuntu 버전 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 사용중인 ubuntu의 버전을 확인해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1731822251657&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;lsb_release -a&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/94e9z/btsKMFpDl6x/K5FhAEMUV3lGpG4bA1mCl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/94e9z/btsKMFpDl6x/K5FhAEMUV3lGpG4bA1mCl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/94e9z/btsKMFpDl6x/K5FhAEMUV3lGpG4bA1mCl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F94e9z%2FbtsKMFpDl6x%2FK5FhAEMUV3lGpG4bA1mCl1%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;336&quot; height=&quot;111&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;198&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. nvidia driver 설치&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1-1. 외부저장소 추가&lt;/blockquote&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 style=&quot;color: #666666; text-align: left;&quot;&gt;nvidia driver을 포함하는 외부저장소(PPA)를 추가하고 해당 내용을 패키지 리스트에 업데이트해준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1731822120315&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update&lt;/code&gt;&lt;/pre&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1-2. 설치 가능한 드라이버 목록 확인&lt;/blockquote&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 style=&quot;color: #666666; text-align: left;&quot;&gt;ubuntu-drivers를 이용해 설치 가능한 nvidia driver 목록을 확인한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1731822214622&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu-drivers devices&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL9vI8/btsKM4oZBR1/USamWZtNNpJ0DtLKcdeZ9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL9vI8/btsKM4oZBR1/USamWZtNNpJ0DtLKcdeZ9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL9vI8/btsKM4oZBR1/USamWZtNNpJ0DtLKcdeZ9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL9vI8%2FbtsKM4oZBR1%2FUSamWZtNNpJ0DtLKcdeZ9k%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;534&quot; height=&quot;402&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;402&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;근데 나는 ubuntu-drivers가 안떴다. apt install로도 안되었음. 이를 해결하기 위해 ..&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-2-1. sources.list에 다음 설정을 추가한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;출처)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://velog.io/@johyonghoon/ubuntu-Unable-to-locate-package-ubuntu-driver-common-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0&quot;&gt;https://velog.io/@johyonghoon/ubuntu-Unable-to-locate-package-ubuntu-driver-common-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0&lt;/a&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1731822455306&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi /etc/apt/sources.list&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1731822431549&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;deb http://archive.ubuntu.com/ubuntu bionic main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu bionic-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu bionic-updates main restricted universe multiverse&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1731822513773&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install -y ubuntu-drivers-common&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 ubuntu-drivers가 정상적으로 뜬다.&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;1-3. nvidia driver 설치&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 1-2로 돌아가 nvidia driver 목록을 확인하고.. 나는 recommended 버전인 565 버전을 설치했다.&lt;/p&gt;
&lt;pre id=&quot;code_1731822600558&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install nvidia-driver-565&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nvidia-driver가 정상적으로 깔리면 nvidia-smi로 확인할 수 있다. 난 안되서 재부팅 했더니 됐다.&lt;/p&gt;
&lt;pre id=&quot;code_1731822726896&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo reboot

...

nvidia-smi&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CfG5s/btsKMF4gR5g/ZRk83XkTib181F7UqWsKn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CfG5s/btsKMF4gR5g/ZRk83XkTib181F7UqWsKn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CfG5s/btsKMF4gR5g/ZRk83XkTib181F7UqWsKn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCfG5s%2FbtsKMF4gR5g%2FZRk83XkTib181F7UqWsKn1%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;616&quot; height=&quot;316&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;666&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. cuda 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 cuda를 깔아야 하는데, 난 torch를 설치할 것이기 때문에 맞는 버전의 cuda를 깔아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;2-1. torch 설치 페이지에서 설치해야 하는 cuda의 버전을 확인한다.&lt;/blockquote&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;a href=&quot;https://pytorch.org/get-started/locally/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://pytorch.org/get-started/locally/&lt;/a&gt;&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wuiYy/btsKNoU3Xut/lfOeKYZcXQ0U2LwtuOyk3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wuiYy/btsKNoU3Xut/lfOeKYZcXQ0U2LwtuOyk3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wuiYy/btsKNoU3Xut/lfOeKYZcXQ0U2LwtuOyk3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwuiYy%2FbtsKNoU3Xut%2FlfOeKYZcXQ0U2LwtuOyk3K%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;603&quot; height=&quot;308&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;308&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;사용할 pytorch 버전, os의 종류, 설치에 이용할 패키지 (coda, pip 등)을 선택하면 어떤 버전의 cuda를 깔아야 하는지 알려준다.&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;nvidia-smi를 설치하면 상단에 cuda version이 뜨는데, 이건 &lt;b&gt;설치된 cuda toolkit의 버전이 아니라, 설치된 nvidia driver가 지원하면 최대 cuda 버전&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;나는 12.7로 떠서 12.4를 설치하기로 했다.&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;2-2. cuda 설치하기&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cuda 설치 명령어는 다음 페이지를 통해 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cuda-toolkit-archive&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.nvidia.com/cuda-toolkit-archive&lt;/a&gt;&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgjNb4/btsKM5OYFt0/8qCgudVL8v0dPgKqwATgk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgjNb4/btsKM5OYFt0/8qCgudVL8v0dPgKqwATgk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgjNb4/btsKM5OYFt0/8qCgudVL8v0dPgKqwATgk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgjNb4%2FbtsKM5OYFt0%2F8qCgudVL8v0dPgKqwATgk1%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;543&quot; height=&quot;476&quot; data-origin-width=&quot;716&quot; data-origin-height=&quot;628&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIlxWI/btsKK1Og7tx/CllGzou94zuKRyVvZnbJk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIlxWI/btsKK1Og7tx/CllGzou94zuKRyVvZnbJk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIlxWI/btsKK1Og7tx/CllGzou94zuKRyVvZnbJk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIlxWI%2FbtsKK1Og7tx%2FCllGzou94zuKRyVvZnbJk0%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;562&quot; height=&quot;351&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;445&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-2-1. pubkey추가&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;위의 명령어에서 sudo apt-get update를 했더니 pubkey가 없다는 에러가 발생..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pubkey를 등록해줬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://miiingo.tistory.com/363&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://miiingo.tistory.com/363&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731824792058&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo gpg --keyserver keyserver.ubuntu.com --recv-keys &amp;lt;PUBKEY&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에 나온 pubkey를 등록해줬더니 넘어갔다.&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;2-3. 환경변수 추가&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cuda path를 환경변수에 추가해주자.&lt;/p&gt;
&lt;pre id=&quot;code_1731825646680&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;vi ~/.bashrc&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1731825657323&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1731825722755&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;source ~/.bashrc&lt;/code&gt;&lt;/pre&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;2-4. cuda 설치 확인&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cuda가 잘 설치되었는지 확인하기 위해 다음을 실행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1731825124123&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nvcc -V&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btaE3S/btsKL2eBvIK/2YA5oREOpxSETS2DKpVvc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btaE3S/btsKL2eBvIK/2YA5oREOpxSETS2DKpVvc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btaE3S/btsKL2eBvIK/2YA5oREOpxSETS2DKpVvc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtaE3S%2FbtsKL2eBvIK%2F2YA5oREOpxSETS2DKpVvc1%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;436&quot; height=&quot;55&quot; data-origin-width=&quot;808&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 안되었단다.. 설치를 해주자&lt;/p&gt;
&lt;pre id=&quot;code_1731825182776&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install nvidia-cuda-tookit&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXa3le/btsKLfFxF97/6eo91QZJfNymSTeymKcerK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXa3le/btsKLfFxF97/6eo91QZJfNymSTeymKcerK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXa3le/btsKLfFxF97/6eo91QZJfNymSTeymKcerK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXa3le%2FbtsKLfFxF97%2F6eo91QZJfNymSTeymKcerK%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;465&quot; height=&quot;114&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;198&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. cuDNN 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크에서 서버 설정값에 맞게 선택한다. cuda 설치와 똑같다. 회원가입을 해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.nvidia.com/cudnn-downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.nvidia.com/cudnn-downloads&lt;/a&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;a style=&quot;background-color: #e6f5ff; color: #0070d1; text-align: start;&quot; href=&quot;https://www.tensorflow.org/install/source?hl=ko&quot;&gt;tensorflow 호환성 표&lt;/a&gt;&amp;nbsp;도 봤는데 딱히 호환성 이슈는 없는것 같다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0o5A6/btsKMZaaiZy/KrGQhhBLPkJG2mmIAF3N80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0o5A6/btsKMZaaiZy/KrGQhhBLPkJG2mmIAF3N80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0o5A6/btsKMZaaiZy/KrGQhhBLPkJG2mmIAF3N80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0o5A6%2FbtsKMZaaiZy%2FKrGQhhBLPkJG2mmIAF3N80%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;621&quot; height=&quot;494&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;563&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BqoYW/btsKLaK5Mpy/atV96QpOGkktQgr4igSbT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BqoYW/btsKLaK5Mpy/atV96QpOGkktQgr4igSbT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BqoYW/btsKLaK5Mpy/atV96QpOGkktQgr4igSbT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBqoYW%2FbtsKLaK5Mpy%2FatV96QpOGkktQgr4igSbT1%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;622&quot; height=&quot;631&quot; data-origin-width=&quot;718&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난 cuda 12로 설치했으니까 마지막 커맨드를 cudnn-cuda-12로 설치했다.&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. torch 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;4-1. torch 설치&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 pytorch 설치페이지로 가서 서버 설정과 cuda 버전 등을 선택한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://pytorch.org/get-started/locally/&quot;&gt;https://pytorch.org/get-started/locally/&lt;/a&gt;&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebi7N6/btsKLia0mlj/KOgH05k1lo9O2BpKLWsi1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebi7N6/btsKLia0mlj/KOgH05k1lo9O2BpKLWsi1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebi7N6/btsKLia0mlj/KOgH05k1lo9O2BpKLWsi1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Febi7N6%2FbtsKLia0mlj%2FKOgH05k1lo9O2BpKLWsi1K%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;610&quot; height=&quot;314&quot; data-origin-width=&quot;610&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;4-2. 설치 확인&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cuda로 잘 가나 확인해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1731827377315&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import torch

torch.cuda.is_available()

x = torch.zeros((3, 3))
x.to(&quot;cuda&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7CGPN/btsKLwAkXa9/ZdrK2ZKWRIrYy3lVnWwOCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7CGPN/btsKLwAkXa9/ZdrK2ZKWRIrYy3lVnWwOCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7CGPN/btsKLwAkXa9/ZdrK2ZKWRIrYy3lVnWwOCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7CGPN%2FbtsKLwAkXa9%2FZdrK2ZKWRIrYy3lVnWwOCk%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;610&quot; height=&quot;418&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;418&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>  OS &amp;amp; Tools/Ubuntu</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/209</guid>
      <comments>https://bo-10000.tistory.com/209#entry209comment</comments>
      <pubDate>Sun, 17 Nov 2024 16:10:29 +0900</pubDate>
    </item>
    <item>
      <title>토스 개발자 컨퍼런스 SLASH24 시간표 공유</title>
      <link>https://bo-10000.tistory.com/208</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;slash24.png&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;1701&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEk4Gy/btsJfzMEQ56/IjTZVroLpaW6flcxxARILk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEk4Gy/btsJfzMEQ56/IjTZVroLpaW6flcxxARILk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEk4Gy/btsJfzMEQ56/IjTZVroLpaW6flcxxARILk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEk4Gy%2FbtsJfzMEQ56%2FIjTZVroLpaW6flcxxARILk%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;1360&quot; height=&quot;1701&quot; data-filename=&quot;slash24.png&quot; data-origin-width=&quot;1360&quot; data-origin-height=&quot;1701&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;스페셜 세션에도 듣고 싶은 것들이 몇가지 있었는데 겹치는 데이터 트랙 세션들이 꼭 듣고 싶은 것들이라..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추첨으로 초청권을 준다는데 꼭 당첨됐으면 ~~&lt;/p&gt;</description>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/208</guid>
      <comments>https://bo-10000.tistory.com/208#entry208comment</comments>
      <pubDate>Tue, 27 Aug 2024 13:43:46 +0900</pubDate>
    </item>
    <item>
      <title>카카오브레인 Multimodal LLM Honeybee 논문 리뷰</title>
      <link>https://bo-10000.tistory.com/207</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;카카오브레인에서 작년 말 Multimodal LLM인 Honeybee를 발표했다. 아쉽게도 한국어 모델은 아니고 영어 모델이고, 5개의 벤치마크에서 SoTA를 달성했다고 해서 뉴스가 엄청 많이 나왔다.&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;a href=&quot;https://arxiv.org/pdf/2312.06742.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/pdf/2312.06742.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깃헙: &lt;a href=&quot;https://github.com/kakaobrain/honeybee&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/kakaobrain/honeybee&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709361868918&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - kakaobrain/honeybee: The official implementation of project &amp;quot;Honeybee&amp;quot;&quot; data-og-description=&quot;The official implementation of project &amp;quot;Honeybee&amp;quot;. Contribute to kakaobrain/honeybee development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/kakaobrain/honeybee&quot; data-og-url=&quot;https://github.com/kakaobrain/honeybee&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ch2KzH/hyVqlhjsNZ/vwfXYspjWlfYrKoVOiCNSk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/kakaobrain/honeybee&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/kakaobrain/honeybee&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ch2KzH/hyVqlhjsNZ/vwfXYspjWlfYrKoVOiCNSk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - kakaobrain/honeybee: The official implementation of project &quot;Honeybee&quot;&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The official implementation of project &quot;Honeybee&quot;. Contribute to kakaobrain/honeybee development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;nbsp;&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 배경&lt;/b&gt;&lt;/h2&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;MLLM (Multimodal LLM)&lt;/b&gt;은 &lt;u&gt;&lt;b&gt;vision encoder, LLM, projector&lt;/b&gt;&lt;/u&gt; 세가지로 구성되어 있다.&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;2192&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2LHDY/btsFoEXC9jw/KGnS1YJYP9zSFjO7MqM7D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2LHDY/btsFoEXC9jw/KGnS1YJYP9zSFjO7MqM7D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2LHDY/btsFoEXC9jw/KGnS1YJYP9zSFjO7MqM7D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2LHDY%2FbtsFoEXC9jw%2FKGnS1YJYP9zSFjO7MqM7D1%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;2192&quot; height=&quot;294&quot; data-origin-width=&quot;2192&quot; data-origin-height=&quot;294&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;b&gt;vision encoder&lt;/b&gt;과 &lt;b&gt;LLM&lt;/b&gt;은 각각 따로따로 사전학습된 것을 사용한다. 따라서 두 모델을 연결해주기 위해 &lt;b&gt;projector&lt;/b&gt;가 필요하다.&amp;nbsp;&lt;b&gt;projector은 vision encoder에서 나온 visual feature을 LLM의 feature space로 매핑&lt;/b&gt;해주는 역할을 한다. 일반적으로 &lt;b&gt;vision encoder과 LLM은 고정해두고 projector을 학습&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이 projector의 역할이 매우 중요한데, &lt;b&gt;크게 두 가지 타입으로 나눌 수 있다.&lt;/b&gt;&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;794&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsC2Wt/btsFnX4bBfH/qwb0kaNXJkxbezxzCkzTx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsC2Wt/btsFnX4bBfH/qwb0kaNXJkxbezxzCkzTx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsC2Wt/btsFnX4bBfH/qwb0kaNXJkxbezxzCkzTx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsC2Wt%2FbtsFnX4bBfH%2Fqwb0kaNXJkxbezxzCkzTx0%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;378&quot; height=&quot;203&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;426&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;첫번째는 LLaVA 등에서 사용한 &lt;u&gt;&lt;b&gt;linear projector&lt;/b&gt;&lt;/u&gt;이다. 말그대로 linear layer을 이용해 image feature을 변환하는 방식인데, 이 방법은 &lt;b&gt;feature을 일대일 매핑해야 하기 때문에 계산량이 많다&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;다른 하나는 &lt;u&gt;&lt;b&gt;Abstractor&lt;/b&gt;&lt;/u&gt;라고 불리는 기법으로, InstructBLIP, BLIP-2, miniGPT-4 등에서 사용한 방법이다. 이들은 정해진 수의 visual token을 추출해 사용하는 방식으로, &lt;b&gt;visual token의 수를 적절하게 조절할 수 있어 flexibility와 efficiency가 높으나 information loss가 있을 수 있다.&lt;/b&gt; Abstractor 방식은 resampler, Q-former 등이 있다.&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 efficiency와 flexibility 때문에 &lt;b&gt;최근 abstractor 방식이 많이 사용되고 있다.&lt;/b&gt; 그러나 abstractor은 &lt;b&gt;locality preservation이 약하다&lt;/b&gt;는 단점이 있다.&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;1116&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPex1B/btsFoaWz72R/NVLm1YtB7iQAmc8vBnLNAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPex1B/btsFoaWz72R/NVLm1YtB7iQAmc8vBnLNAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPex1B/btsFoaWz72R/NVLm1YtB7iQAmc8vBnLNAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPex1B%2FbtsFoaWz72R%2FNVLm1YtB7iQAmc8vBnLNAk%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;424&quot; height=&quot;207&quot; data-origin-width=&quot;1116&quot; data-origin-height=&quot;544&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;위 그림을 보면 큰 feature인 man만 잡아내고 pizza, glass 같은 애들은 못 잡아 내고 있는걸 볼 수 있다. 따라서 spatial understanding 능력이 떨어진다.&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;u&gt;&lt;b&gt;local context를 보존할 수 있는 abstractor 방식&lt;/b&gt;&lt;/u&gt;을 새롭게 제안하고, 이를 적용한 MLLM인 &lt;u&gt;&lt;b&gt;Honeybee&lt;/b&gt;&lt;/u&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; 2. Honeybee&lt;/b&gt;&lt;/h2&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;2362&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHHahh/btsFsaapgzl/M2JR8DM52SpjwzxaQqKKVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHHahh/btsFsaapgzl/M2JR8DM52SpjwzxaQqKKVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHHahh/btsFsaapgzl/M2JR8DM52SpjwzxaQqKKVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHHahh%2FbtsFsaapgzl%2FM2JR8DM52SpjwzxaQqKKVK%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;757&quot; height=&quot;302&quot; data-origin-width=&quot;2362&quot; data-origin-height=&quot;942&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;Honeybee의 전체 구조는 위와 같다. &lt;b&gt;vision encoder&lt;/b&gt;에서 visual feature을 추출 후 &lt;b&gt;projector&lt;/b&gt;을 거쳐 visual token으로 변환하고, text token과 함께 &lt;b&gt;LLM&lt;/b&gt;의 input으로 넣는다.&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;여기까지는 여타 MLLM들과 동일한 구조이고, 핵심 구조는 새롭게 제안한 projector인 &lt;u&gt;&lt;b&gt;C-abstractor&lt;/b&gt;&lt;/u&gt;과 &lt;u&gt;&lt;b&gt;D-abstractor&lt;/b&gt;&lt;/u&gt;이다.&amp;nbsp;&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;1256&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMUtIq/btsFodZ9BI0/FCgCK1ItgJOt7BQYu50GK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMUtIq/btsFodZ9BI0/FCgCK1ItgJOt7BQYu50GK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMUtIq/btsFodZ9BI0/FCgCK1ItgJOt7BQYu50GK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMUtIq%2FbtsFodZ9BI0%2FFCgCK1ItgJOt7BQYu50GK1%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;441&quot; height=&quot;331&quot; data-origin-width=&quot;1256&quot; data-origin-height=&quot;942&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;u&gt;&lt;b&gt;C-Abstractor&lt;/b&gt;&lt;/u&gt;은 local context를 잘 포착하는 convolution을 이용다. ResNet을 여러개 쌓아 visual token을 추출한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;u&gt;D-Abstractor&lt;/u&gt;&lt;/b&gt;은 &lt;a href=&quot;https://arxiv.org/pdf/2005.12872.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DETR&lt;/a&gt;에서 제안한 deformable attention을 이용하여 visual token을 추출한다.&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. 학습방법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습은 두단계로 진행된다. 첫번째로 vision encoder과 LLM은 freeze하고 abstractor만 학습한다. 그 다음으로 freeze를 풀고 모든 parameter을 세부 조정하는 단계를 거친다.&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;LLM으로는 Vicuna-v1.5 (7B, 13B) 두가지 크기의 모델을 이용했고, vision encoder은 CLIP ViT-L/14 모델을 이용했다.&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;4. 실험결과&lt;/b&gt;&lt;/h2&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;5개 bench에서 SoTA를 달성했다.&lt;/b&gt;&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;1298&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwKCS4/btsFmmiWfD3/KbhYskCikJTU8e9SekjgvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwKCS4/btsFmmiWfD3/KbhYskCikJTU8e9SekjgvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwKCS4/btsFmmiWfD3/KbhYskCikJTU8e9SekjgvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwKCS4%2FbtsFmmiWfD3%2FKbhYskCikJTU8e9SekjgvK%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;508&quot; height=&quot;170&quot; data-origin-width=&quot;1298&quot; data-origin-height=&quot;434&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;참고로 각 bench의 예시는 다음과 같다.&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;1384&quot; data-origin-height=&quot;1336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCNB3J/btsFm7y7kIA/Z43wTCdauhfptj3yR94I31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCNB3J/btsFm7y7kIA/Z43wTCdauhfptj3yR94I31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCNB3J/btsFm7y7kIA/Z43wTCdauhfptj3yR94I31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCNB3J%2FbtsFm7y7kIA%2FZ43wTCdauhfptj3yR94I31%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;716&quot; height=&quot;691&quot; data-origin-width=&quot;1384&quot; data-origin-height=&quot;1336&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;
&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wrSvo/btsFuHS6tv0/AzYweMkg2mjAKsPnjyOczK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wrSvo/btsFuHS6tv0/AzYweMkg2mjAKsPnjyOczK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wrSvo/btsFuHS6tv0/AzYweMkg2mjAKsPnjyOczK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwrSvo%2FbtsFuHS6tv0%2FAzYweMkg2mjAKsPnjyOczK%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;2114&quot; height=&quot;1178&quot; data-origin-width=&quot;2114&quot; data-origin-height=&quot;1178&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;Qwen이나 LLaVA 등은 더 큰 vision encoder / image resolution / 더 많은 visual token을 이용했지만 Honeybee의 성능이 더 높았다고 한다.&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;1034&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beW08S/btsFuNMzzrQ/binNxMunkybjmob5oJGtl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beW08S/btsFuNMzzrQ/binNxMunkybjmob5oJGtl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beW08S/btsFuNMzzrQ/binNxMunkybjmob5oJGtl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeW08S%2FbtsFuNMzzrQ%2FbinNxMunkybjmob5oJGtl1%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;467&quot; height=&quot;204&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;452&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;Honeybee도 이렇게 image resolution과 visual token 수를 높이면 성능이 더 상승한다고 한다.&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;nbsp;&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;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btmjs6/btsFn9i79Ck/4sL3JZmXCk62THWgXrCxS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btmjs6/btsFn9i79Ck/4sL3JZmXCk62THWgXrCxS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btmjs6/btsFn9i79Ck/4sL3JZmXCk62THWgXrCxS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtmjs6%2FbtsFn9i79Ck%2F4sL3JZmXCk62THWgXrCxS1%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;454&quot; height=&quot;281&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;640&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;C/D-abstractor이 local context preservation에 좋다는 것을 보이기 위해 spatial understanding capability를 볼 수 있는 task에 대한 성능을 측정했다고 한다.&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;1034&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVFBIL/btsFsaha1TU/65IB1parTaujQC7s2P1bT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVFBIL/btsFsaha1TU/65IB1parTaujQC7s2P1bT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVFBIL/btsFsaha1TU/65IB1parTaujQC7s2P1bT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVFBIL%2FbtsFsaha1TU%2F65IB1parTaujQC7s2P1bT0%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;520&quot; height=&quot;374&quot; data-origin-width=&quot;1034&quot; data-origin-height=&quot;744&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;위는 performance와 efficiency에 대한 비교이다. linear은 앞서 말했듯이 일대일 대응이라 flexibility가 아예 없다. resampler과 C-abstractor은 flexible하게 디자인할 수 있으며, visual token 수가 늘어날수록 성능이 증가하는 양상을 보이나 C-abstractor의 성능이 훨씬 좋다.&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 Honeybee가 생성한 답변의 예시들이다.&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;1870&quot; data-origin-height=&quot;1252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzQkIe/btsFoaWAfZe/FhzUQNAnB8V5QjIHVdpokk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzQkIe/btsFoaWAfZe/FhzUQNAnB8V5QjIHVdpokk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzQkIe/btsFoaWAfZe/FhzUQNAnB8V5QjIHVdpokk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzQkIe%2FbtsFoaWAfZe%2FFhzUQNAnB8V5QjIHVdpokk%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;1870&quot; height=&quot;1252&quot; data-origin-width=&quot;1870&quot; data-origin-height=&quot;1252&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;1870&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vpM1G/btsFqNzNeoe/RjiwgyCKodTVzGjsI8FwTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vpM1G/btsFqNzNeoe/RjiwgyCKodTVzGjsI8FwTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vpM1G/btsFqNzNeoe/RjiwgyCKodTVzGjsI8FwTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvpM1G%2FbtsFqNzNeoe%2FRjiwgyCKodTVzGjsI8FwTK%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;1870&quot; height=&quot;908&quot; data-origin-width=&quot;1870&quot; data-origin-height=&quot;908&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>  Deep Learning/논문 리뷰 [KOR]</category>
      <category>mllm</category>
      <category>Multimodal</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/207</guid>
      <comments>https://bo-10000.tistory.com/207#entry207comment</comments>
      <pubDate>Sat, 2 Mar 2024 16:09:38 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝 논문리뷰] MeZO: Fine-Tuning Language Models with Just Forward Passes (NeurIPS 2023)</title>
      <link>https://bo-10000.tistory.com/206</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;논문 링크:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://arxiv.org/pdf/2305.17333.pdf&quot;&gt;https://arxiv.org/pdf/2305.17333.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발표 영상:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://neurips.cc/virtual/2023/poster/71437&quot;&gt;https://neurips.cc/virtual/2023/poster/71437&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/princeton-nlp/MeZO&quot;&gt;https://github.com/princeton-nlp/MeZO&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706448173442&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;NeurIPS 2023&quot; data-og-description=&quot;Abstract: Fine-tuning language models (LMs) has yielded success on diverse downstream tasks, but as LMs grow in size, backpropagation requires a prohibitively large amount of memory. Zeroth-order (ZO) methods can in principle estimate gradients using only&quot; data-og-host=&quot;neurips.cc&quot; data-og-source-url=&quot;https://neurips.cc/virtual/2023/poster/71437&quot; data-og-url=&quot;https://neurips.cc/virtual/2023/poster/71437&quot; data-og-image=&quot;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://neurips.cc/virtual/2023/poster/71437&quot; data-source-url=&quot;https://neurips.cc/virtual/2023/poster/71437&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('&amp;quot;&amp;quot;');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;NeurIPS 2023&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Abstract: Fine-tuning language models (LMs) has yielded success on diverse downstream tasks, but as LMs grow in size, backpropagation requires a prohibitively large amount of memory. Zeroth-order (ZO) methods can in principle estimate gradients using only&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;neurips.cc&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(L)LM fine-tuning에는 메모리가 많이 든다. &lt;u&gt;Adam을 이용한 backpropagation은 inference의 약 12배 정도의 메모리가 필요&lt;/u&gt;하다. 이를 해결하기 위해 &lt;u&gt;inference와 동일한 크기의 메모리로 LM을 fine-tuning&lt;/u&gt;할 수 있는 MeZO를 제시한다.&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. Introduction&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(L)LM fine-tuning에는 메모리가 많이 든다. (Adam: inference의 12배정도) 왜냐면 Adam과 같은 optimizer들은 forward activation, backward gradient, gradient history 등을 다 기록해둬야 하기 때문이다. 이때문에 A100 GPU 사용 시 inference만 하면 30B LLM을 돌릴 수 있지만, Adam을 이용한 backpropagation은 2.7B LLM이 한계이다.&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;708&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br5BbA/btsD6vUdAAX/EvyVcUnZ6Lx26pU20haNOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br5BbA/btsD6vUdAAX/EvyVcUnZ6Lx26pU20haNOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br5BbA/btsD6vUdAAX/EvyVcUnZ6Lx26pU20haNOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr5BbA%2FbtsD6vUdAAX%2FEvyVcUnZ6Lx26pU20haNOK%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;603&quot; height=&quot;311&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;365&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;prompt engineering을 통한 &lt;b&gt;In-context learning (ICL)&lt;/b&gt;의 경우 single inference만으로 모델을 fine-tune할 수 있지만, 직접 backpropagation을 통해 모델 weight를 업데이트 하는 것보다는 성능이 떨어질 수밖에 없다.&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;&lt;a href=&quot;https://ieeexplore.ieee.org/abstract/document/119632&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ZO-SGD&lt;/a&gt;(zeroth-order optimization)&lt;/b&gt; 방법은 loss value 간의 차이만을 이용해 gradient를 추정한다. 그러나 이 방법은 여전히 inference의 두 배에 해당하는 메모리가 필요하며 모델 사이즈가 커질수록 수렴이 느려진다고 알려져 있다. 때문에 LM 학습에는 직접적으로 활용된 바가 없다.&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;MeZO(memory-efficient zeroth-order optimizer)&lt;/b&gt;는 inference와 동일한 크기의 메모리만을 이용해 모델을 업데이트한다. MeZO는 billion 규모의 파라미터를 가진 LM을 성공적으로 fine-tuning 하는데에 성공했다.&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. Method&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;MeZO&lt;/b&gt;는 &lt;b&gt;ZO-SGD&lt;/b&gt;에 기반을 두고 있다. &lt;b&gt;SPSA&lt;/b&gt;는 ZO에서 사용하는 클래식한 gradient estimator로, 단 두 번의 forward pass만을 이용해 gradient를 추정할 수 있다.&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;465&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K3OOv/btsD8AVgp8N/z6THsqXt3KkaiyNTEhA8Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K3OOv/btsD8AVgp8N/z6THsqXt3KkaiyNTEhA8Ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K3OOv/btsD8AVgp8N/z6THsqXt3KkaiyNTEhA8Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK3OOv%2FbtsD8AVgp8N%2Fz6THsqXt3KkaiyNTEhA8Ik%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;465&quot; height=&quot;57&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;57&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;SPSA의 gradient 추정 방법은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Randon direction $z$가 샘플링된다.&lt;/li&gt;
&lt;li&gt;모델의 parameter들은 $\pm z$ 방향으로 perturb된다.&lt;/li&gt;
&lt;li&gt;각 방향에서 계산된 loss를 이용하면, $\epsilon \rightarrow 0$ 일 때, 위 식을 이용해 loss를 근사할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 추정한 gradient를 이용하면 아무 optimizer나 이용해서 parameter update를 할 수 있다. SGD에 사용하는 예시는 다음과 같다.&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;188&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0Zm2s/btsD7l42LdO/T0aEZ57uuzJ5PcfSbqMXy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0Zm2s/btsD7l42LdO/T0aEZ57uuzJ5PcfSbqMXy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0Zm2s/btsD7l42LdO/T0aEZ57uuzJ5PcfSbqMXy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0Zm2s%2FbtsD7l42LdO%2FT0aEZ57uuzJ5PcfSbqMXy0%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;188&quot; height=&quot;28&quot; data-origin-width=&quot;188&quot; data-origin-height=&quot;28&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;그런데, SPSA는 inference의 두 배 메모리가 필요하다. 그 이유는 &lt;u&gt;매번 sampling하는 $z$의 크기가 parameter의 전체 크기와 동일하기 때문이다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;$z \sim \mathcal N(0, I_d)\in \mathbb R^d$&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;MeZO의 알고리즘&lt;/b&gt;&lt;/u&gt;은 다음과 같다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;702&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/loMKm/btsD7kSBQzU/5WTkjlwchfBdkvilT8GTB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/loMKm/btsD7kSBQzU/5WTkjlwchfBdkvilT8GTB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/loMKm/btsD7kSBQzU/5WTkjlwchfBdkvilT8GTB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FloMKm%2FbtsD7kSBQzU%2F5WTkjlwchfBdkvilT8GTB0%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;702&quot; height=&quot;505&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;505&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Random seed s를 뽑는다.&lt;/li&gt;
&lt;li&gt;Parameter perturbation은 in-place로 진행되는데, 매번 parameter perturbation을 할 때마다 random number generator을 초기화한다.&lt;/li&gt;
&lt;li&gt;Parameter perturbation은 parameter 하나씩 iteration을 돌면서 진행되는데, 매 iteration마다 각각의 parameter의 perturbation에 사용될 z를 random number generator을 이용해 뽑는다.&lt;/li&gt;
&lt;li&gt;첫번째 parameter perturbation: +$\epsilon$ 만큼 perturb해서 +방향의 loss 계산&lt;/li&gt;
&lt;li&gt;두번째 parameter perturbation: -2$\epsilon$ 만큼 perturb해서 -방향의 loss 계산&lt;/li&gt;
&lt;li&gt;세번째 parameter perturbation: -$\epsilon$ 만큼 perturb해서 원래대로 복귀&lt;/li&gt;
&lt;li&gt;+- 방향의 loss 이용하여 SPSA로 gradient 추정, parameter update&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법을 이용하면 random seed $s$만을 저장하고도 ZO를 구현할 수 있다.&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;pre id=&quot;code_1706448807332&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# https://github.com/princeton-nlp/MeZO/blob/main/large_models/trainer.py#L757C1-L788C21
def zo_step(self, model, inputs):
    &quot;&quot;&quot;
    Estimate gradient by MeZO. Return the loss from f(theta + z)
    &quot;&quot;&quot;
    args = self.args

    # What parameters to optimize 
    self.named_parameters_to_optim = []
    for name, param in model.named_parameters():
        if param.requires_grad:
            self.named_parameters_to_optim.append((name, param))

    # Sample the random seed for sampling z
    self.zo_random_seed = np.random.randint(1000000000)

    # First function evaluation
    self.zo_perturb_parameters(scaling_factor=1)
    loss1 = self.zo_forward(model, inputs)

    # Second function evaluation
    self.zo_perturb_parameters(scaling_factor=-2)
    loss2 = self.zo_forward(model, inputs)

    self.projected_grad = ((loss1 - loss2) / (2 * self.args.zo_eps)).item()

    # No gradient accumulation support
    assert self.args.gradient_accumulation_steps == 1

    # Reset model back to its parameters at start of step
    self.zo_perturb_parameters(scaling_factor=1)
    
    return loss1


# https://github.com/princeton-nlp/MeZO/blob/main/large_models/trainer.py#L699C1-L712C76
def zo_perturb_parameters(self, random_seed=None, scaling_factor=1):
    &quot;&quot;&quot;
    Perturb the parameters with random vector z.
    Input: 
    - random_seed: random seed for MeZO in-place perturbation (if it's None, we will use self.zo_random_seed)
    - scaling_factor: theta = theta + scaling_factor * z * eps
    &quot;&quot;&quot;

    # Set the random seed to ensure that we sample the same z for perturbation/update
    torch.manual_seed(random_seed if random_seed is not None else self.zo_random_seed)
    
    for name, param in self.named_parameters_to_optim:
        z = torch.normal(mean=0, std=1, size=param.data.size(), device=param.data.device, dtype=param.data.dtype)
        param.data = param.data + scaling_factor * z * self.args.zo_eps&lt;/code&gt;&lt;/pre&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;3. Results&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MeZO는 prompt-based fine-tuning 방식에서만 잘 작동한다. Prompt는 &lt;a href=&quot;https://arxiv.org/pdf/2012.15723.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Making pre-trained Language Models Better Few-shot Learners&lt;/a&gt;의 방법을 차용하였다.&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;610&quot; data-origin-height=&quot;133&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQNl3j/btsD3Mh643w/VaeCPZ0azexltObXK94L80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQNl3j/btsD3Mh643w/VaeCPZ0azexltObXK94L80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQNl3j/btsD3Mh643w/VaeCPZ0azexltObXK94L80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQNl3j%2FbtsD3Mh643w%2FVaeCPZ0azexltObXK94L80%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;610&quot; height=&quot;133&quot; data-origin-width=&quot;610&quot; data-origin-height=&quot;133&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;701&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOBdHG/btsD3INItoh/PhxiHuPrWZHRE00N15QzM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOBdHG/btsD3INItoh/PhxiHuPrWZHRE00N15QzM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOBdHG/btsD3INItoh/PhxiHuPrWZHRE00N15QzM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOBdHG%2FbtsD3INItoh%2FPhxiHuPrWZHRE00N15QzM1%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;701&quot; height=&quot;243&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;243&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;u&gt;Medium-sized masked LMs (RoBERTa-large, 350M)&lt;/u&gt;, &lt;u&gt;large autoregressive LMs (OPT-13B, 30B, 66B)&lt;/u&gt;에 대해 실험을 진행했다.&amp;nbsp;&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;u&gt;&lt;b&gt;[RoBERTa]&lt;/b&gt;&lt;/u&gt;&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;865&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj9dqx/btsD4GIDnye/1iYyCYpkw2YFZFwFyI5uj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj9dqx/btsD4GIDnye/1iYyCYpkw2YFZFwFyI5uj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj9dqx/btsD4GIDnye/1iYyCYpkw2YFZFwFyI5uj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj9dqx%2FbtsD4GIDnye%2F1iYyCYpkw2YFZFwFyI5uj0%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;865&quot; height=&quot;350&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;350&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;u&gt;&lt;b&gt;[OPT]&lt;/b&gt;&lt;/u&gt;&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;865&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nMjDA/btsD4UNwdll/kIqU8gMXb5pMEKXjHYKTVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nMjDA/btsD4UNwdll/kIqU8gMXb5pMEKXjHYKTVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nMjDA/btsD4UNwdll/kIqU8gMXb5pMEKXjHYKTVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnMjDA%2FbtsD4UNwdll%2FkIqU8gMXb5pMEKXjHYKTVK%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;865&quot; height=&quot;350&quot; data-origin-width=&quot;865&quot; data-origin-height=&quot;350&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;Fine-Tuning의 1/12 메모리, 절반의 시간만 사용하고도 1% 내의 성능을 낸다. (OPT-13B 모델)&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;nbsp; Zero-shot과 ICL보다 훨씬 상회하는 성능을 보이는것을 알 수 있다. (FT 결과가 없는것은 큰 모델에선 FT보다 성능이 많이 떨어져서일까?)&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;2000&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6n8eB/btsD4FCVgRP/1HvIObK6o1kGmsK6JKQlhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6n8eB/btsD4FCVgRP/1HvIObK6o1kGmsK6JKQlhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6n8eB/btsD4FCVgRP/1HvIObK6o1kGmsK6JKQlhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6n8eB%2FbtsD4FCVgRP%2F1HvIObK6o1kGmsK6JKQlhK%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;725&quot; height=&quot;232&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;639&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;u&gt;&lt;b&gt;[시간 효율성과 메모리 효율성]&lt;/b&gt;&lt;/u&gt;&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;2000&quot; data-origin-height=&quot;713&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czrt7e/btsD4F31rtz/mqKQsmvEDB9kyXBUp9YD90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czrt7e/btsD4F31rtz/mqKQsmvEDB9kyXBUp9YD90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czrt7e/btsD4F31rtz/mqKQsmvEDB9kyXBUp9YD90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fczrt7e%2FbtsD4F31rtz%2FmqKQsmvEDB9kyXBUp9YD90%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;2000&quot; height=&quot;713&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;713&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;2000&quot; data-origin-height=&quot;1380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u52tB/btsD2wN5aoF/kZosoxqkprKzx4a7KnltJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u52tB/btsD2wN5aoF/kZosoxqkprKzx4a7KnltJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u52tB/btsD2wN5aoF/kZosoxqkprKzx4a7KnltJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu52tB%2FbtsD2wN5aoF%2FkZosoxqkprKzx4a7KnltJ0%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;502&quot; height=&quot;346&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1380&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;u&gt;&lt;b&gt;[Non-differentiable objectives]&lt;/b&gt;&lt;/u&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;Non-differentiable objective (accuracy, F1 score 등)에 대해서도 optimize할 수 있다. 따라서, human preference 등을 이용한 parameter update도 기대할 수 있다.&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;2000&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AAMO4/btsD3a4QobE/t8UIKrqf31jKOdsMKVRSBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AAMO4/btsD3a4QobE/t8UIKrqf31jKOdsMKVRSBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AAMO4/btsD3a4QobE/t8UIKrqf31jKOdsMKVRSBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAAMO4%2FbtsD3a4QobE%2Ft8UIKrqf31jKOdsMKVRSBk%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;2000&quot; height=&quot;504&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;504&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;</description>
      <category>  Deep Learning/논문 리뷰 [KOR]</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/206</guid>
      <comments>https://bo-10000.tistory.com/206#entry206comment</comments>
      <pubDate>Sun, 28 Jan 2024 22:42:01 +0900</pubDate>
    </item>
    <item>
      <title>[딥러닝 논문리뷰] AIM: Scalable Pre-training of Large Autoregressive Image Models (Apple, 2024)</title>
      <link>https://bo-10000.tistory.com/205</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Apple에서 2024년 1월 large pretrained image model인 &lt;u&gt;&lt;b&gt;AIM(Autoregressive Image Models)&lt;/b&gt;&lt;/u&gt;을 발표했다. 코드와 model weight이 Github에 공개되어 있다.&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;a href=&quot;https://arxiv.org/pdf/2401.08541.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/pdf/2401.08541.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GitHub: &lt;a href=&quot;https://github.com/apple/ml-aim/tree/main&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/apple/ml-aim/tree/main&lt;/a&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;&amp;nbsp;&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;AIM은 LLM에 영감을 받아 만들어진 대규모 vision 모델이다. &lt;a href=&quot;https://arxiv.org/pdf/2106.08254.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;BEiT&lt;/a&gt; (2021), &lt;a href=&quot;https://arxiv.org/pdf/2111.06377.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Masked autoencoder(MAE)&lt;/a&gt; (2021) 등이 &lt;b&gt;masked language modeling (MLM)&lt;/b&gt;을 통해 사전학습 시킨 것과 다르게, 주어진 패치로 다음 패치를 예측하는 &lt;b&gt;autoregressive object&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;AIM의 주요 contribution은 vision 모델도 &lt;b&gt;LLM과 유사한 scaling property&lt;/b&gt;를 보일 수 있다는 것을 증명했다는 점이다. &lt;a href=&quot;https://arxiv.org/abs/2304.07193&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DINOv2&lt;/a&gt; (2023) 에서는 142M장의 이미지로 460M 모델을 학습시켰지만, vision 모델은 LLM에서의 scaling law를 따르지 않는다고 주장했고, MAE에서도 비슷하게 얘기했다. 그러나 AIM은 2B장 이미지에 대해 7B 모델을 autoregressive objective로 성공적으로 학습시켰으며, 이 정도의 규모에서도 saturation이 일어나지 않는다는 점을 토대로 large-scale vision 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;&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;2056&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bad9mU/btsDKwsIs6q/yXkMID0bCyAgYBMRScWQik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bad9mU/btsDKwsIs6q/yXkMID0bCyAgYBMRScWQik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bad9mU/btsDKwsIs6q/yXkMID0bCyAgYBMRScWQik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbad9mU%2FbtsDKwsIs6q%2FyXkMID0bCyAgYBMRScWQik%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;2056&quot; height=&quot;778&quot; data-origin-width=&quot;2056&quot; data-origin-height=&quot;778&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Related works&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 연구에서는 &lt;a href=&quot;https://cdn.openai.com/papers/Generative_Pretraining_from_Pixels_V2.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;iGPT&lt;/a&gt; (2020) 에서 사용한 autoregressive objective를 사전학습에 사용했다. 또다른 pretrained vision model인 BEiT, MAE 등은 BERT에 영감을 받은 MLM방식을 사용했다. Contrastive method들도 라벨 없이 사전학습한다는 점에서 유사하다고 볼 수 있다. 이들은 작은 모델 사이즈에서는 좋은 성능을 내지만 scaling에는 어려움이 있다.&amp;nbsp;&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Method&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Dataset&lt;/b&gt;&lt;/blockquote&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;a href=&quot;https://arxiv.org/pdf/2309.17425.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DFN&lt;/a&gt; dataset에서 2B장 이미지를 추출하고 여기에 ImageNet을 섞어서 사용했다.&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Objective&lt;/b&gt;&lt;/blockquote&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;1006&quot; data-origin-height=&quot;1248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WuGt4/btsDJEEIWNO/JvaWRBgylt5kKKJr6FYVk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WuGt4/btsDJEEIWNO/JvaWRBgylt5kKKJr6FYVk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WuGt4/btsDJEEIWNO/JvaWRBgylt5kKKJr6FYVk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWuGt4%2FbtsDJEEIWNO%2FJvaWRBgylt5kKKJr6FYVk1%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;546&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;1248&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;이미지를 K개의 패치로 overlap 없이 자르고, next patch prediction을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;$\sum_x&amp;nbsp;\sum_k&amp;nbsp;-\log&amp;nbsp;P(x_k|x_{&amp;lt;k})$&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;MAE와 유사하게, normalized pixel-level regression loss를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;$\min_\theta&amp;nbsp;\frac1K\sum_{k=1}^K||\hat&amp;nbsp;x&amp;nbsp;_k&amp;nbsp;(\theta)-x_k||_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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Architecture&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 ViT 구조를 사용했다. 상세한 파라미터는 다음과 같다.&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;1006&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OM41q/btsDKesiAPG/ktTcak34k8oLttqkHfgvE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OM41q/btsDKesiAPG/ktTcak34k8oLttqkHfgvE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OM41q/btsDKesiAPG/ktTcak34k8oLttqkHfgvE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOM41q%2FbtsDKesiAPG%2FktTcak34k8oLttqkHfgvE0%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;436&quot; height=&quot;232&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;536&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;이전 sequence의 패치만 이용해 attention을 수행하도록 하는 causal mask를 적용했다. 그러나 downstream task에서는 bidirectional self-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;이를 해결하고자 &amp;ldquo;prefix transformer&amp;rdquo;를 도입했다. 처음 S개의 패치가 &quot;prefix&quot;에 해당한다. 이들은 나머지 패치를 예측하기 위한 context로 사용되고, 이들은 autoregression prediction에서 제외된다.&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;1006&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CcOSe/btsDKyqxwgA/QOsluEfCstd4omfdZAtTd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CcOSe/btsDKyqxwgA/QOsluEfCstd4omfdZAtTd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CcOSe/btsDKyqxwgA/QOsluEfCstd4omfdZAtTd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCcOSe%2FbtsDKyqxwgA%2FQOsluEfCstd4omfdZAtTd1%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;436&quot; height=&quot;338&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;780&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Downstream tasks&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Downstream task에 대해 평가할때는 backbone은 모두 freeze하고 classification head만 train했다. Large model 이니만큼 전체를 다시 finetuning 해서 쓰는것은 너무 낭비이다.&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;그러나 pretrain task에서는 패치단위 prediction만 했기 때문에 이미지 단위 token이 없었다. Classification 등의 이미지 단위 prediction을 위해서는 패치 feature들에 global average pooling을 할 수도 있지만, attention pooling operation을 통해 global descriptor 계산하는 로직을 추가했다.&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;1006&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG3WIk/btsDGn5jyvj/AKHx021wHICTY5jb3oztGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG3WIk/btsDGn5jyvj/AKHx021wHICTY5jb3oztGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG3WIk/btsDGn5jyvj/AKHx021wHICTY5jb3oztGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG3WIk%2FbtsDGn5jyvj%2FAKHx021wHICTY5jb3oztGk%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;452&quot; height=&quot;61&quot; data-origin-width=&quot;1006&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Results&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Impact of scaling&lt;/b&gt;&lt;/blockquote&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;2054&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwwvBh/btsDHm5VD6v/E7Z4NccmbgXlMStW2uVvpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwwvBh/btsDHm5VD6v/E7Z4NccmbgXlMStW2uVvpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwwvBh/btsDHm5VD6v/E7Z4NccmbgXlMStW2uVvpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwwvBh%2FbtsDHm5VD6v%2FE7Z4NccmbgXlMStW2uVvpk%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;2054&quot; height=&quot;814&quot; data-origin-width=&quot;2054&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pretrain loss와 classification accuracy간의 상관관계를 확인할 수 있다. Pretrain loss가 줄어들수록  downstream task의 성능이 높아지는 것을 통해 pretrain objective를 잘 설정했다고 볼 수 있다. 또한 모델 사이즈를 키울수록 성능이 좋아지는 것을 확인할 수 있다. 이는 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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Ablations&lt;/b&gt;&lt;/blockquote&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;2054&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bW89QS/btsDHsk7oFc/pVpN849fGU7gQWRap7ldS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bW89QS/btsDHsk7oFc/pVpN849fGU7gQWRap7ldS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bW89QS/btsDHsk7oFc/pVpN849fGU7gQWRap7ldS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbW89QS%2FbtsDHsk7oFc%2FpVpN849fGU7gQWRap7ldS1%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;2054&quot; height=&quot;604&quot; data-origin-width=&quot;2054&quot; data-origin-height=&quot;604&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;Method에서 설명한 다양한 구조에 대한 ablation. 참고로 autoregression pattern은 패치를 어떤 순서로 넣어줄 것인가에 대한 내용인데, 일반적으로 생각하는 가로-세로 순서가 가장 좋았다고 한다.&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;998&quot; data-origin-height=&quot;1110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqt0m6/btsDHoQhsWO/VYD7XKxlhnvAutwq7AwnHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqt0m6/btsDHoQhsWO/VYD7XKxlhnvAutwq7AwnHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqt0m6/btsDHoQhsWO/VYD7XKxlhnvAutwq7AwnHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqt0m6%2FbtsDHoQhsWO%2FVYD7XKxlhnvAutwq7AwnHk%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;476&quot; height=&quot;1110&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;1110&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Pretrain objective&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MLM 방식과도 비교를 진행했다. MLM보다 autoregressive가 좋다고 한다.&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;998&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bp57SV/btsDHqgukal/0pJ4WJD4QvbymkEtnbVO50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bp57SV/btsDHqgukal/0pJ4WJD4QvbymkEtnbVO50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bp57SV/btsDHqgukal/0pJ4WJD4QvbymkEtnbVO50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbp57SV%2FbtsDHqgukal%2F0pJ4WJD4QvbymkEtnbVO50%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;474&quot; height=&quot;223&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;470&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Comparison with other pretrained models&lt;/b&gt;&lt;/blockquote&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;2038&quot; data-origin-height=&quot;954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCfrJb/btsDLMowv6Z/tYLr0dzxsLbhyPG7g1b6nK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCfrJb/btsDLMowv6Z/tYLr0dzxsLbhyPG7g1b6nK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCfrJb/btsDLMowv6Z/tYLr0dzxsLbhyPG7g1b6nK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCfrJb%2FbtsDLMowv6Z%2FtYLr0dzxsLbhyPG7g1b6nK%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;2038&quot; height=&quot;954&quot; data-origin-width=&quot;2038&quot; data-origin-height=&quot;954&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;다른 pretrained 모델들과의 비교이다. DINOv2를 제외하고 AIM이 모두 이겼는데, DINOv2는 더 높은 해상도 이미지를 이용했다고 한다. 그리고 DINOv2는 여러가지 자질구레한 학습 트릭들에 크게 의존하고 있는데, AIM은 학습 방법이 매우 간단하다고 한다 (...)&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;근데 AIM을 제외하고 2등인 iBOT과 비교해봐도 &lt;a href=&quot;https://github.com/bytedance/ibot&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;iBOT의 파라미터 수&lt;/a&gt;는 300M개정도이다. AIM-0.6B의 절반 정도인데도 훨씬 더 좋은 성능을 보인다. 아마 표에 파라미터 갯수를 안 적어놓은 것은 이런 불리함 때문 아니었을까..&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;후기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 pretrain vision 모델들은 MLM을 주로 사용하곤 했는데 본 논문에서는 2020년 iGPT에서 사용한 autoregressive task를 이용해 모델을 학습시켰다. vision 모델에서도 LLM처럼 모델 사이즈가 커질수록 성능이 증가하는 scaling law가 작용할 수 있음을 보였다.&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;마지막 result에서 보듯이 파라미터 수가 엄청나게 큰것 치고 성능이 압도적으로 좋은건 아님&lt;/li&gt;
&lt;li&gt;학습 장비와 학습에 소요된 시간을 안적어놓음. 그리고 깃헙에 학습 코드와 loss 코드가 없다.&lt;/li&gt;
&lt;li&gt;파라미터 수를 2B까지 키워도 성능이 saturation 되지 않았다고 하는데, 그러면 DINOv2를 이길때까지 한번더 scaling을 안한 이유는..?&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>  Deep Learning/논문 리뷰 [KOR]</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/205</guid>
      <comments>https://bo-10000.tistory.com/205#entry205comment</comments>
      <pubDate>Sun, 21 Jan 2024 23:03:44 +0900</pubDate>
    </item>
    <item>
      <title>한국어 오픈소스 멀티모달 모델 모음 (image-text)</title>
      <link>https://bo-10000.tistory.com/204</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;혹은 awesome-korean-multimodal 같은것&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;사실 한국어 LLM도 많이 없거니와, 오픈소스로 공개된 한국어 멀티모달 LLM(MLLM)은 정말 얼마 안되는듯 하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(참고: 한국어 LLM 모델 모음 - &lt;a href=&quot;https://github.com/NomaDamas/awesome-korean-llm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;awesome-korean-llm&lt;/a&gt;)&lt;/p&gt;
&lt;figure id=&quot;og_1705142826158&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - NomaDamas/awesome-korean-llm: Awesome list of Korean Large Language Models.&quot; data-og-description=&quot;Awesome list of Korean Large Language Models. Contribute to NomaDamas/awesome-korean-llm development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/NomaDamas/awesome-korean-llm&quot; data-og-url=&quot;https://github.com/NomaDamas/awesome-korean-llm&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bqMRvV/hyU2eW5uUN/0KdAgufRvDowTRnxV9Iwh1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/NomaDamas/awesome-korean-llm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/NomaDamas/awesome-korean-llm&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bqMRvV/hyU2eW5uUN/0KdAgufRvDowTRnxV9Iwh1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - NomaDamas/awesome-korean-llm: Awesome list of Korean Large Language Models.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Awesome list of Korean Large Language Models. Contribute to NomaDamas/awesome-korean-llm development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국어 multimodal llm 뿐만 아니라 multimodal embedding 모델을 함께 정리해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히 말하면 멀티모달 중 image-text (vision-language) 모델들만 정리했다.&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;&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;Multimodal LLM (MLLM)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;tabtoyou/KoLLaVA&lt;/li&gt;
&lt;li&gt;etri-vilab/Ko-LLaVA&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Vision-Language Pretraining (VLP) - Multimodal embedding
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;jaketae/KoCLIP&lt;/li&gt;
&lt;li&gt;Bingsu/clip-vit-large-patch-ko&lt;/li&gt;
&lt;li&gt;SeanForHim/KoBEiT3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Multimodal LLM&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;tabtoyou/KoLLaVA&lt;br /&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1705147313853&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - tabtoyou/KoLLaVA: KoLLaVA: Korean Large Language-and-Vision Assistant (feat.LLaVA)&quot; data-og-description=&quot;KoLLaVA: Korean Large Language-and-Vision Assistant (feat.LLaVA) - GitHub - tabtoyou/KoLLaVA: KoLLaVA: Korean Large Language-and-Vision Assistant (feat.LLaVA)&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/tabtoyou/KoLLaVA&quot; data-og-url=&quot;https://github.com/tabtoyou/KoLLaVA&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c3PWJP/hyU5HQPrXy/KR9Mt5waxDaMKe3qVUUpe1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/tabtoyou/KoLLaVA&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/tabtoyou/KoLLaVA&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c3PWJP/hyU5HQPrXy/KR9Mt5waxDaMKe3qVUUpe1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - tabtoyou/KoLLaVA: KoLLaVA: Korean Large Language-and-Vision Assistant (feat.LLaVA)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;KoLLaVA: Korean Large Language-and-Vision Assistant (feat.LLaVA) - GitHub - tabtoyou/KoLLaVA: KoLLaVA: Korean Large Language-and-Vision Assistant (feat.LLaVA)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tabtoyou/KoLLaVA&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;만든사람:&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/gujh14&quot;&gt;Jeonghyeon&lt;/a&gt;&lt;/span&gt;,&amp;nbsp;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/marie990&quot;&gt;&lt;span&gt;Seongyeon&lt;/span&gt;&lt;/a&gt;,&amp;nbsp;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/csh3695&quot;&gt;&lt;span&gt;Seonghwan&lt;/span&gt;&lt;/a&gt;,&amp;nbsp;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/seungwooham&quot;&gt;&lt;span&gt;Seungwoo&lt;/span&gt;&lt;/a&gt;,&amp;nbsp;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/hsh-dev&quot;&gt;&lt;span&gt;Seonghun&lt;/span&gt;&lt;/a&gt;,&amp;nbsp;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://github.com/tabtoyou&quot;&gt;&lt;span&gt;Taebaek&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/tabtoyou/KoLLaVA-KoVicuna-7b&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;v1&lt;/a&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;backbone: CLIP(ViT)+&lt;a href=&quot;https://huggingface.co/junelee/ko_vicuna_7b&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;KoVicuna(7B)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;dataset:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1;&quot; href=&quot;https://huggingface.co/datasets/tabtoyou/KoLLaVA-CC3M-Pretrain-595K&quot;&gt;KoLLaVA-CC3M-Pretrain-595K&lt;/a&gt;: pretrain&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/datasets/tabtoyou/KoLLaVA-Instruct-150k&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;KoLLaVA_Instruct-150k&lt;/a&gt;: instruction tuning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;license: Apache License 2.0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/tabtoyou/KoLLaVA-v1.5-Synatra-7b&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;v1.5&lt;/a&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;backbone: CLIP(ViT)+&lt;a href=&quot;https://huggingface.co/maywell/Synatra-7B-v0.3-dpo&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Synatra(7B)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;dataset:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1;&quot; href=&quot;https://huggingface.co/datasets/tabtoyou/KoLLaVA-CC3M-Pretrain-595K&quot;&gt;KoLLaVA-CC3M-Pretrain-595K&lt;/a&gt;: pretrain&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;background-color: #e6f5ff; color: #0070d1;&quot; href=&quot;https://huggingface.co/datasets/tabtoyou/KoLLaVA-v1.5-Instruct-581k&quot;&gt;KoLLaVA-Instrurct-581k&lt;/a&gt;:  instruction tuning&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;license: cc-by-sa-4.0 (non-commercial)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Training: (1) Frozen image encoder / text encoder을 연결하는 projection layer을 학습하는 pretrain stage와, (2) instruction tuning을 하는 fine-tuning stage로 나누어 두단계로 학습&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;etri-vilab/Ko-LLaVA&lt;/b&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1705147343173&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/UDVUA/hyU5RTroEG/J7fYkiwvJtuvIHFB13GyI1/img.png?width=1200&amp;amp;height=648&amp;amp;face=0_0_1200_648&quot; data-og-url=&quot;https://huggingface.co/spaces/etri-vilab/Ko-LLaVA&quot; data-og-source-url=&quot;https://huggingface.co/spaces/etri-vilab/Ko-LLaVA&quot; data-og-host=&quot;huggingface.co&quot; data-og-description=&quot;&quot; data-og-title=&quot;Ko-LLaVA - a Hugging Face Space by etri-vilab&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://huggingface.co/spaces/etri-vilab/Ko-LLaVA&quot; data-source-url=&quot;https://huggingface.co/spaces/etri-vilab/Ko-LLaVA&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/UDVUA/hyU5RTroEG/J7fYkiwvJtuvIHFB13GyI1/img.png?width=1200&amp;amp;height=648&amp;amp;face=0_0_1200_648');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Ko-LLaVA - a Hugging Face Space by etri-vilab&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;huggingface.co&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/spaces/etri-vilab/Ko-LLaVA&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Demo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;만든사람: &lt;a href=&quot;https://etri-visualintelligence.github.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ETRI 시각지능연구실&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;backbone: LLama(13b)&lt;/li&gt;
&lt;li&gt;space만 공개되고 모델 weight이나 데이터셋은 공개된게 없다. 몇가지 테스트해봤을 때 위의 KoLLaVA보다 성능이 많이 떨어지는 것 같다.&lt;/li&gt;
&lt;li&gt;예시)&lt;/li&gt;
&lt;/ul&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;1484&quot; data-origin-height=&quot;974&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diGs7B/btsDs4W3cIx/7lslH5TdeTrKVaA3kqzBI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diGs7B/btsDs4W3cIx/7lslH5TdeTrKVaA3kqzBI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diGs7B/btsDs4W3cIx/7lslH5TdeTrKVaA3kqzBI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiGs7B%2FbtsDs4W3cIx%2F7lslH5TdeTrKVaA3kqzBI1%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;652&quot; height=&quot;428&quot; data-origin-width=&quot;1484&quot; data-origin-height=&quot;974&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;부록) LLaVA와 비교&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLaVA도 한국어를 어느정도 할 수 있다. (&lt;a href=&quot;https://llava.hliu.cc/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;demo&lt;/a&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;in Korean&quot; 키워드는 잘 안되는것 같고, 한국어로 물었을 때 영어로 대답하는 단점이 있다.&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&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2R7Fo/btsDnCVOmUs/q2PANEX37FBKNwfW81Pswk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2R7Fo/btsDnCVOmUs/q2PANEX37FBKNwfW81Pswk/img.png&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;1110&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.4598%; margin-right: 10px;&quot; data-widthpercent=&quot;33.23&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2R7Fo/btsDnCVOmUs/q2PANEX37FBKNwfW81Pswk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2R7Fo%2FbtsDnCVOmUs%2Fq2PANEX37FBKNwfW81Pswk%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;1110&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFOs7z/btsDpcClu9f/5WI5nkQLj5MJp5yPI4lRQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFOs7z/btsDpcClu9f/5WI5nkQLj5MJp5yPI4lRQ0/img.png&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;1110&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.4598%; margin-right: 10px;&quot; data-widthpercent=&quot;33.23&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFOs7z/btsDpcClu9f/5WI5nkQLj5MJp5yPI4lRQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFOs7z%2FbtsDpcClu9f%2F5WI5nkQLj5MJp5yPI4lRQ0%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;1110&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIs0mb/btsDny6WSJb/35b1rX2mD6PuJNixOyi8Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIs0mb/btsDny6WSJb/35b1rX2mD6PuJNixOyi8Ak/img.png&quot; data-origin-width=&quot;1790&quot; data-origin-height=&quot;1100&quot; data-is-animation=&quot;false&quot; width=&quot;642&quot; height=&quot;395&quot; data-widthpercent=&quot;33.54&quot; style=&quot;width: 32.7549%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIs0mb/btsDny6WSJb/35b1rX2mD6PuJNixOyi8Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIs0mb%2FbtsDny6WSJb%2F35b1rX2mD6PuJNixOyi8Ak%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;1100&quot;/&gt;&lt;/span&gt;&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;VLP&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;jaketae/KoCLIP&lt;/b&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1705147360290&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dvh1QR/hyU2hfaWjp/xgwX1YKi3uhGd60j0TG38K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot; data-og-url=&quot;https://github.com/jaketae/koclip&quot; data-og-source-url=&quot;https://github.com/jaketae/koclip&quot; data-og-host=&quot;github.com&quot; data-og-description=&quot;KoCLIP: Korean port of OpenAI CLIP, in Flax. Contribute to jaketae/koclip development by creating an account on GitHub.&quot; data-og-title=&quot;GitHub - jaketae/koclip: KoCLIP: Korean port of OpenAI CLIP, in Flax&quot; data-og-type=&quot;object&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://github.com/jaketae/koclip&quot; data-source-url=&quot;https://github.com/jaketae/koclip&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dvh1QR/hyU2hfaWjp/xgwX1YKi3uhGd60j0TG38K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - jaketae/koclip: KoCLIP: Korean port of OpenAI CLIP, in Flax&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;KoCLIP: Korean port of OpenAI CLIP, in Flax. Contribute to jaketae/koclip development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jaketae/koclip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;만든사람:&lt;span&gt; &lt;a href=&quot;https://github.com/guijinSON&quot;&gt;GUIJIN SON&lt;/a&gt;&lt;/span&gt;, &lt;a href=&quot;https://github.com/tree-park&quot;&gt;&lt;span&gt;Hansol Park&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/jaketae&quot;&gt;&lt;span&gt;Jake Tae&lt;/span&gt;&lt;/a&gt;, &lt;a href=&quot;https://github.com/trent-dev&quot;&gt;&lt;span&gt;Trent Oh&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;backbone: &lt;a href=&quot;https://huggingface.co/klue/roberta-large&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;klue/roberta-large&lt;/a&gt; + CLIP(ViT)&lt;/li&gt;
&lt;li&gt;dataset: MSCOCO AIHub 한국어 번역 데이터&lt;/li&gt;
&lt;li&gt;license: Apache License 2.0&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Bingsu/clip-vit-large-patch14-ko&lt;/b&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1705147365109&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xwyUQ/hyU2hlXmey/LAyx7FzIrSxQpW6FnMroC0/img.png?width=1200&amp;amp;height=648&amp;amp;face=0_0_1200_648&quot; data-og-url=&quot;https://huggingface.co/Bingsu/clip-vit-large-patch14-ko&quot; data-og-source-url=&quot;https://huggingface.co/Bingsu/clip-vit-large-patch14-ko&quot; data-og-host=&quot;huggingface.co&quot; data-og-description=&quot;clip-vit-large-patch14-ko Korean CLIP model trained by Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation로 학습된 한국어 CLIP 모델입&quot; data-og-title=&quot;Bingsu/clip-vit-large-patch14-ko &amp;middot; Hugging Face&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://huggingface.co/Bingsu/clip-vit-large-patch14-ko&quot; data-source-url=&quot;https://huggingface.co/Bingsu/clip-vit-large-patch14-ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xwyUQ/hyU2hlXmey/LAyx7FzIrSxQpW6FnMroC0/img.png?width=1200&amp;amp;height=648&amp;amp;face=0_0_1200_648');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Bingsu/clip-vit-large-patch14-ko &amp;middot; Hugging Face&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;clip-vit-large-patch14-ko Korean CLIP model trained by Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation로 학습된 한국어 CLIP 모델입&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;huggingface.co&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/Bingsu/clip-vit-large-patch14-ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HuggingFace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;backbone: CLIP(ViT)&lt;/li&gt;
&lt;li&gt;dataset: AIHUB에 있는 모든 한국어-영어 병렬 데이터&lt;/li&gt;
&lt;li&gt;license: MIT&lt;/li&gt;
&lt;li&gt;training:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Knowledge distillation 이용 (영어로 text encoder을 teacher model로 하고, 한국어 text encoder을 student model로 해서 학습시키는 방법이다 - &lt;a style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; href=&quot;https://arxiv.org/abs/2004.09813&quot;&gt;Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Bing-su/train_ml_clip&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;training code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;SeanForHim/KoBEiT3&lt;/b&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1705147380393&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eJqse/hyU2gAB89e/IXFM0f7Mhe2pdeeUuCvF8K/img.png?width=1200&amp;amp;height=648&amp;amp;face=0_0_1200_648&quot; data-og-url=&quot;https://huggingface.co/SeanForHim/KoBEiT3&quot; data-og-source-url=&quot;https://huggingface.co/SeanForHim/KoBEiT3&quot; data-og-host=&quot;huggingface.co&quot; data-og-description=&quot;&quot; data-og-title=&quot;SeanForHim/KoBEiT3 &amp;middot; Hugging Face&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://huggingface.co/SeanForHim/KoBEiT3&quot; data-source-url=&quot;https://huggingface.co/SeanForHim/KoBEiT3&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eJqse/hyU2gAB89e/IXFM0f7Mhe2pdeeUuCvF8K/img.png?width=1200&amp;amp;height=648&amp;amp;face=0_0_1200_648');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;SeanForHim/KoBEiT3 &amp;middot; Hugging Face&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;huggingface.co&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://huggingface.co/SeanForHim/KoBEiT3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;HuggingFace&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/SeanJeonghwanLee/KoBEiT3&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;backbone: BEiT3-large
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;tokenizer: korean sentencepiece tokenizer trained on kor wikipedia&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;dataset: &lt;a href=&quot;https://aihub.or.kr/aihubdata/data/view.do?currMenu=115&amp;amp;topMenu=100&amp;amp;aihubDataSe=realm&amp;amp;dataSetSn=104&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AIHUB 시각정보 기반 질의응답&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;license: 기재 안되어 있으나 BEiT3은 Microsoft open source code of conduct를 따름&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  Deep Learning/Etc.</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/204</guid>
      <comments>https://bo-10000.tistory.com/204#entry204comment</comments>
      <pubDate>Sat, 13 Jan 2024 20:59:52 +0900</pubDate>
    </item>
    <item>
      <title>Apple의 Multimodal LLM Ferret 논문 리뷰</title>
      <link>https://bo-10000.tistory.com/203</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Apple에서 2023년 10월 내놓은 Multimodal LLM인 Ferret의 논문이다. 모델 크기는 7B, 13B 두가지이며 Github에 코드와 checkpoint가 공개되어 있고, 비상업적 용도로 사용가능하다.&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;a href=&quot;https://arxiv.org/pdf/2310.07704.pdf&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://arxiv.org/pdf/2310.07704.pdf&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Github: &lt;a href=&quot;https://github.com/apple/ml-ferret&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/apple/ml-ferret&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704634201560&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - apple/ml-ferret&quot; data-og-description=&quot;Contribute to apple/ml-ferret development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/apple/ml-ferret&quot; data-og-url=&quot;https://github.com/apple/ml-ferret&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLYW9L/hyUXYz5Gsn/OU7d9Hd63tBmyL0kJVk02K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/apple/ml-ferret&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/apple/ml-ferret&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLYW9L/hyUXYz5Gsn/OU7d9Hd63tBmyL0kJVk02K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - apple/ml-ferret&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to apple/ml-ferret development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vision-language learning 모델의 주요한 두 capability는 &lt;b&gt;referring&lt;/b&gt;과 &lt;b&gt;grounding&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;&lt;b&gt;Referring&lt;/b&gt;: 이미지에서 주어진 영역에 대한 이해도 (location-in text-out)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Grounding&lt;/b&gt;: 텍스트에서 설명하는 영역을 이미지에서 찾아내는 능력 (text-in location-out)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 연구들에서는 referring과 grounding을 별개의 task로 두고 각각 학습하고자 했다.&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;Ferret에서는 두 task에서 얻을 수 있는 상호보완성을 기대하여 두 task를 통합하여 학습하는 MLLM (Multimodal Large Language 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;본 연구의 contribution은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ferret은 &lt;u&gt;&lt;b&gt;free-formed region input&lt;/b&gt;&lt;/u&gt;을 처리할 수 있는 최초의 MLLM이다.&lt;/li&gt;
&lt;li&gt;Ferret 학습을 위해 만든 데이터셋 &lt;u&gt;&lt;b&gt;GRIT&lt;/b&gt;&lt;/u&gt;: Ground-and-Refer Instruction Tuning dataset&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Ferret-Bench&lt;/b&gt;&lt;/u&gt; 개발: Ferret이 기존 best MLLM보다 평균적으로 20.4% 우세&lt;/li&gt;
&lt;/ul&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;nbsp;논문에 GRIT과 Ferret-Bench에 대한 설명도 있지만 본 글에서는 스킵하고 Ferret 구조를 중심으로 정리하고자 한다.&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Related work&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 MLLM 연구들을 나열하고 있다. 간단히 정리만 하고 넘어가면..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;MLLMs&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;image-text pre-training 모델: SimVLM, GIT, PaLI, PaLI-X, BLIP-2, Flamingo (최초로 pretrained CLIP과 LLM을 결합), PALM-E, CM3, CM3Leon&lt;/li&gt;
&lt;li&gt;LLM 활용: LLaVA, MultiGPT-4, mPLUG-Owl, Otter, InstructBLIP&lt;/li&gt;
&lt;li&gt;Image generation: FROMAGe, GILL, Emu&lt;/li&gt;
&lt;li&gt;참고: &lt;a style=&quot;color: #000000;&quot; href=&quot;https://arxiv.org/pdf/2309.10020.pdf&quot; data-token-index=&quot;0&quot;&gt;&lt;span&gt;Multimodal Foundation Models: From Specialists to General-Purpose Assistants&lt;/span&gt;&lt;/a&gt; (2023.10)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;MLLMs for referring and grounding&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Kosmos-2, Shikra, GPT4ROI, PIVT, BuboGPT, VisionLLM, ContextDET&lt;/li&gt;
&lt;li&gt;Ferret과의 가장 큰 차이점은, 이들은 input 형태로 bounding box만을 지원한다는 점이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Unifying grounding and VL understanding&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UniTAB, OFA, Unified-IO, Pix2Seq&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM3WsD/btsC5Zb6AHJ/Yj7VH1PmnTkjbUNKDCCak1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM3WsD/btsC5Zb6AHJ/Yj7VH1PmnTkjbUNKDCCak1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM3WsD/btsC5Zb6AHJ/Yj7VH1PmnTkjbUNKDCCak1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcM3WsD%2FbtsC5Zb6AHJ%2FYj7VH1PmnTkjbUNKDCCak1%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;840&quot; height=&quot;360&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;360&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Methods&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Hybrid Region Representation&lt;/b&gt;&lt;/blockquote&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;b&gt;point&lt;/b&gt;: [x, y]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;box&lt;/b&gt;: [xmin, ymin, xmax, ymax]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;free-form&lt;/b&gt;&lt;/li&gt;
&lt;/ul&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;visual sampler&lt;/b&gt;을 이용하여 hybrid region representation을 생성해 사용한다. Hybrid region representation은 coordinate + &lt;u&gt;&lt;b&gt;continuous visual feature&lt;/b&gt;&lt;/u&gt;로 구성된다. (Visual sampler은 다음 section에서 후술)&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;u&gt;&lt;b&gt;Continuous visual feature&lt;/b&gt;&lt;/u&gt;: 영역을 2D binary mask로 변환한 다음 (segmentation mask처럼), image encoder에서 뽑은 feature map과 함께 &lt;b&gt;visual sampler&lt;/b&gt;에 input으로 넣어서 visual continuous feature을 뽑는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Point의 경우 해당 point를 중심으로 하고 fixed radius를 가진 원을 영역으로 사용하여 visual feature를 뽑는다.&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;Final image input은 다음과 같이 된다.&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;point&lt;/b&gt;: {x, y, f}&lt;/li&gt;
&lt;li&gt;&lt;b&gt;box &amp;amp; free-form&lt;/b&gt;: {x_min, y_min, x_max, y_max, f}
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;x_min, x_max: min/max x-axis coordinate&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;모델 구조&lt;/b&gt;&lt;/blockquote&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;840&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL2u8r/btsC4KlUmGZ/4oTbCLYzuspdh85kK3Wh51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL2u8r/btsC4KlUmGZ/4oTbCLYzuspdh85kK3Wh51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL2u8r/btsC4KlUmGZ/4oTbCLYzuspdh85kK3Wh51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL2u8r%2FbtsC4KlUmGZ%2F4oTbCLYzuspdh85kK3Wh51%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;840&quot; height=&quot;416&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;416&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;Ferret은 &lt;b&gt;image encoder, visual sampler, LLM&lt;/b&gt; 세가지로 구성된다. 사실상 핵심 구조는 Visual sampler이다. 본 논문에서 주요 contribution으로 내세운 것도 free-form input region이고, image encoder과 LLM은 기존 모델들을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Image encoder&lt;/b&gt;: &lt;u&gt;&lt;b&gt;CLIP-ViT-L/14&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Visual&lt;/b&gt; &lt;b&gt;sampler&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;binary region mask M에서 random하게 512개의 point를 추출한다.&lt;/li&gt;
&lt;li&gt;bilinear interpolation을 이용해 각 point의 feature을 추출한다.&lt;/li&gt;
&lt;li&gt;512개의 point들을 &lt;b&gt;sampling&lt;/b&gt;, &lt;b&gt;gathering&lt;/b&gt;, &lt;b&gt;pooling&lt;/b&gt; 세 단계로 구성된 block들에 통과시킨다. (2회 반복)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Sampling&lt;/b&gt;: N/4개의 point를 farthest point sampling (FPS) 알고리즘으로 추출한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Gathering&lt;/b&gt;: 각 point x_i에 대해서 처음 N개의 point들을 대상으로 k-NN을 수행해 가장 가까운 k개의 point를 찾고, 그렇게 찾은 각 point들과 x_i의 feature들을 합쳐준다. 각 N/4개의 point들에 k개의 feature들이 남게 된다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pooling&lt;/b&gt;: 각 point들의 k개의 feature을 max pooling을 통해 하나로 합쳐준다.&lt;/li&gt;
&lt;li&gt;이러한 과정을 통해 N개의 point들이 N/4개의 dense한 point들이 되어 남게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;마지막으로 나온 32개의 point의 feature들을 flatten하여 LLM embedding으로 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LLM&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;Vicuna&lt;/b&gt;&lt;/u&gt; (LLaMA + instruction tuning)&lt;/li&gt;
&lt;li&gt;Grounding을 위해서, output에서 이미지의 영역은 box coordinate로 나타난다.&lt;/li&gt;
&lt;li&gt;Image embedding은 linear layer로 한번 projection 한다음에 input으로 들어간다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Experiments&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Training details&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 언급한 바와 같이 image encoder로는 &lt;b&gt;CLIP-ViT-L/14@336p&lt;/b&gt;, LLM으로는 &lt;b&gt;Vicuna&lt;/b&gt;를 사용했다. Projection layer로는 &lt;b&gt;LLaVA&lt;/b&gt;의 first-stage weight을 사용했으며, visual sampler은 random initialization을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;GRIT dataset&lt;/b&gt;을 이용해 &lt;b&gt;3 epoch&lt;/b&gt; 학습시켰으며 &lt;b&gt;Loshchilov &amp;amp; Hutter optimization (lr=2e-5)&lt;/b&gt; 을 사용했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Batch size 128&lt;/b&gt;로, &lt;b&gt;A100 GPU 8대&lt;/b&gt;에서 &lt;b&gt;13B모델은 5일, 7B모델은 2.5일&lt;/b&gt;동안 학습했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Results&lt;/b&gt;&lt;/blockquote&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnrE3f/btsC32f4Xu7/Z7bxNm4H0rqw5d81QKDSXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnrE3f/btsC32f4Xu7/Z7bxNm4H0rqw5d81QKDSXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnrE3f/btsC32f4Xu7/Z7bxNm4H0rqw5d81QKDSXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnrE3f%2FbtsC32f4Xu7%2FZ7bxNm4H0rqw5d81QKDSXK%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;842&quot; height=&quot;327&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;327&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Ferret-Bench&lt;/b&gt;&lt;/blockquote&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;842&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hab9Z/btsC6rflan3/5H7L2enJWKCnnlK0UPWtX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hab9Z/btsC6rflan3/5H7L2enJWKCnnlK0UPWtX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hab9Z/btsC6rflan3/5H7L2enJWKCnnlK0UPWtX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHab9Z%2FbtsC6rflan3%2F5H7L2enJWKCnnlK0UPWtX1%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;842&quot; height=&quot;244&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;244&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;Ferret-Bench에서는 당연히 Ferret이 가장 잘하고, 모델 크기가 클수록 성능이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLaVA-Bench에서도 좋은 성능을 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;Ferret vs GPT-4V&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;용감하게 GPT에게도 도전장을 내밀었다.&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;894&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CTBEv/btsC34rqO08/7HgVXHX2dopKtiSnwzUoU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CTBEv/btsC34rqO08/7HgVXHX2dopKtiSnwzUoU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CTBEv/btsC34rqO08/7HgVXHX2dopKtiSnwzUoU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCTBEv%2FbtsC34rqO08%2F7HgVXHX2dopKtiSnwzUoU0%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;894&quot; height=&quot;552&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;552&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;논문의 표현을 빌리자면, Ferret은 정밀한 bounding box가 요구되는 상황에서 특히 빛을 발한다고 한다.&lt;/p&gt;</description>
      <category>  Deep Learning/논문 리뷰 [KOR]</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/203</guid>
      <comments>https://bo-10000.tistory.com/203#entry203comment</comments>
      <pubDate>Sun, 7 Jan 2024 23:06:10 +0900</pubDate>
    </item>
    <item>
      <title>[Optuna] 딥러닝 하이퍼파라미터 최적화하기</title>
      <link>https://bo-10000.tistory.com/202</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FTeGF/btsBC0c5RFn/gZWVXGqcQkVhnSIulEDDGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FTeGF/btsBC0c5RFn/gZWVXGqcQkVhnSIulEDDGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FTeGF/btsBC0c5RFn/gZWVXGqcQkVhnSIulEDDGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFTeGF%2FbtsBC0c5RFn%2FgZWVXGqcQkVhnSIulEDDGk%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;81&quot; height=&quot;210&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;220&quot; data-origin-height=&quot;210&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;b&gt;&lt;a href=&quot;https://optuna.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Optuna&lt;/a&gt;&lt;/b&gt;는 &lt;b&gt;파이썬 기반의 하이퍼파라미터 최적화 (hyperparameter optimization) 프레임워크&lt;/b&gt;로, 심플하고 유연한 API를 제공한다. 본 글에서는 &lt;b&gt;Optuna&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;공식 Docs&lt;/b&gt;: &lt;a href=&quot;https://optuna.readthedocs.io/en/stable/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://optuna.readthedocs.io/en/stable/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1702183411166&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Optuna: A hyperparameter optimization framework &amp;mdash; Optuna 3.4.0 documentation&quot; data-og-description=&quot;&amp;copy; Copyright 2018, Optuna Contributors. Revision 4ea580fc.&quot; data-og-host=&quot;optuna.readthedocs.io&quot; data-og-source-url=&quot;https://optuna.readthedocs.io/en/stable/index.html&quot; data-og-url=&quot;https://optuna.readthedocs.io/en/stable/index.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ddtW07/hyULW1zNmn/F1xvnN0QTA0cdkLNgtBDc0/img.png?width=1000&amp;amp;height=210&amp;amp;face=0_0_1000_210,https://scrap.kakaocdn.net/dn/gMhpJ/hyUIzmEr2x/JM8Hj0es5u7k6SWYF3RDq1/img.png?width=1000&amp;amp;height=210&amp;amp;face=0_0_1000_210&quot;&gt;&lt;a href=&quot;https://optuna.readthedocs.io/en/stable/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://optuna.readthedocs.io/en/stable/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ddtW07/hyULW1zNmn/F1xvnN0QTA0cdkLNgtBDc0/img.png?width=1000&amp;amp;height=210&amp;amp;face=0_0_1000_210,https://scrap.kakaocdn.net/dn/gMhpJ/hyUIzmEr2x/JM8Hj0es5u7k6SWYF3RDq1/img.png?width=1000&amp;amp;height=210&amp;amp;face=0_0_1000_210');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Optuna: A hyperparameter optimization framework &amp;mdash; Optuna 3.4.0 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;copy; Copyright 2018, Optuna Contributors. Revision 4ea580fc.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;optuna.readthedocs.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Basic concepts&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Optuna&lt;/b&gt;는 &lt;b&gt;study&lt;/b&gt;와 &lt;b&gt;trial&lt;/b&gt;을 다음과 같이 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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;Study&lt;/b&gt;: objective 함수에 기반하여 optimization을 수행하는 하나의 프로젝트&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Trial&lt;/b&gt;: Study 내의 optimization 단일 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Hyperparameter optimization을 수행하기 위해 &lt;b&gt;objective&lt;/b&gt;와 &lt;b&gt;study&lt;/b&gt;를 정의하고, n_trials 파라미터를 조정하여 몇 회의 trial을 수행할지 설정할 수 있다.&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;다음과 같이 study를 정의할 수 있다. objective는 매 trial을 input으로 받는 함수이다.&lt;/p&gt;
&lt;pre id=&quot;code_1702183860954&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import optuna

def objective(trial):
	...
    
    model.fit(train_x, train_y)
    
    error = get_error(model, valid_x, valid_y)
    
    return error
    
study = optuna.create_study()

study.optimize(objective, n_trials=100)&lt;/code&gt;&lt;/pre&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Search space와 Sampling algorithms&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 탐색할 hyperparameter의&lt;b&gt; search space&lt;/b&gt;를 정의해주면, optuna는 그 안에서 hyperparmeter을 &lt;b&gt;sampling&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;Search space는 objective 안에서 설정할 수 있다. 다음은 다양한 search space를 정의하는 방법의 예시이다.&lt;/p&gt;
&lt;pre id=&quot;code_1702184192128&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import optuna


def objective(trial):
    # Categorical parameter
    optimizer = trial.suggest_categorical(&quot;optimizer&quot;, [&quot;MomentumSGD&quot;, &quot;Adam&quot;])

    # Integer parameter
    n_layers = trial.suggest_int(&quot;n_layers&quot;, 1, 3)

    # Loops
    layers = []
    for i in range(n_layers):
        n_units = trial.suggest_int(&quot;n_units_l{}&quot;.format(i), 4, 128, log=True)
        layers.append(nn.Linear(in_size, n_units))
        layers.append(nn.ReLU())
        in_size = n_units
    layers.append(nn.Linear(in_size, 10))

    # Integer parameter (discretized)
    num_units = trial.suggest_int(&quot;num_units&quot;, 10, 100, step=5)

    # Floating point parameter
    dropout_rate = trial.suggest_float(&quot;dropout_rate&quot;, 0.0, 1.0)

    # Floating point parameter (log)
    learning_rate = trial.suggest_float(&quot;learning_rate&quot;, 1e-5, 1e-2, log=True)

    # Floating point parameter (discretized)
    drop_path_rate = trial.suggest_float(&quot;drop_path_rate&quot;, 0.0, 1.0, step=0.1)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Categorial, int, float 등 다양한 형태의 hyperparameter을 지정해줄 수 있다. 더 많은 suggest_* 함수는 &lt;a href=&quot;https://optuna.readthedocs.io/en/stable/reference/generated/optuna.trial.Trial.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&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;search space에서 hyperparameter을 &lt;b&gt;sampling하는 알고리즘&lt;/b&gt; 역시 사용자가 정의할 수 있는데, create_study를 할 때 sampler 인수에 넘겨주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1702184554839&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;study = optuna.create_study(sampler=optuna.samplers.RandomSampler())
print(f&quot;Sampler is {study.sampler.__class__.__name__}&quot;) #print&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Optuna에서 사용가능한 sampler의 종류는 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GridSampler&lt;/li&gt;
&lt;li&gt;RandomSampler&lt;/li&gt;
&lt;li&gt;TPESampler (default)&lt;/li&gt;
&lt;li&gt;CmaEsSampler&lt;/li&gt;
&lt;li&gt;PartialFixedSampler&lt;/li&gt;
&lt;li&gt;NSGAIISampler&lt;/li&gt;
&lt;li&gt;QMCSampler&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 sampler에 대한 자세한 설명은 &lt;a href=&quot;https://optuna.readthedocs.io/en/stable/reference/samplers/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&gt;에서 사용할 수 있다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;924&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDIsxv/btsBHq2e6fD/kglsrkNuNxgvWGHd2iXJy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDIsxv/btsBHq2e6fD/kglsrkNuNxgvWGHd2iXJy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDIsxv/btsBHq2e6fD/kglsrkNuNxgvWGHd2iXJy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDIsxv%2FbtsBHq2e6fD%2FkglsrkNuNxgvWGHd2iXJy0%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;705&quot; height=&quot;924&quot; data-origin-width=&quot;1626&quot; data-origin-height=&quot;924&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;어떤 sampler을 사용하면 좋을지에 대한 힌트도 찾아볼 수 있다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1884&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bULNG6/btsBG5cQ9xg/C5qxoxCiZyZV0zvwMUxvY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bULNG6/btsBG5cQ9xg/C5qxoxCiZyZV0zvwMUxvY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bULNG6/btsBG5cQ9xg/C5qxoxCiZyZV0zvwMUxvY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbULNG6%2FbtsBG5cQ9xg%2FC5qxoxCiZyZV0zvwMUxvY0%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;626&quot; height=&quot;118&quot; data-origin-width=&quot;1884&quot; data-origin-height=&quot;354&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Pruning algorithms&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pruning은 학습 초기 단계에서 가능성이 낮아보이는 trial을 자동으로 중단하는 기능이다. &quot;automated early-stopping&quot;이라고 볼 수 있다.&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;Pruner의 종류는 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MedianPruner&lt;/li&gt;
&lt;li&gt;NopPruner&lt;/li&gt;
&lt;li&gt;PatientPruner&lt;/li&gt;
&lt;li&gt;PercentilePruner&lt;/li&gt;
&lt;li&gt;SuccessiveHalvingPruner&lt;/li&gt;
&lt;li&gt;HyperbandPruner&lt;/li&gt;
&lt;li&gt;ThresholdPruner&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전체 pruner의 종류와 자세한 설명은 &lt;a href=&quot;https://optuna.readthedocs.io/en/stable/reference/pruners.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;여기&lt;/a&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;Pruner의 사용법은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;training의 each step 직후에 report() 와 should_prune() 함수를 호출한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;report(): 중간 objective value를 주기적으로 모니터링한다.&lt;/li&gt;
&lt;li&gt;should_prune(): 사전에 정의된 조건을 충족하지 않는 trial의 조기 종료를 결정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1702184923418&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def objective(trial):
    ...

    for step in range(100):
        model.fit(train_x, train_y, classes=classes)

        # Report intermediate objective value.
        intermediate_error = get_error(valid_x, valid_y)
        trial.report(intermediate_error, step)

        # Handle pruning based on the intermediate value.
        if trial.should_prune():
            raise optuna.TrialPruned()

    return get_error(valid_x, valid_y)

# Add stream handler of stdout to show the messages
optuna.logging.get_logger(&quot;optuna&quot;).addHandler(logging.StreamHandler(sys.stdout))
study = optuna.create_study(pruner=optuna.pruners.MedianPruner())
study.optimize(objective, n_trials=20)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1702184968017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#out
A new study created in memory with name: no-name-e9380357-f153-4409-b874-c302ee358494
Trial 0 finished with value: 0.2894736842105263 and parameters: {'alpha': 0.07567537350404895}. Best is trial 0 with value: 0.2894736842105263.
Trial 1 finished with value: 0.02631578947368418 and parameters: {'alpha': 1.0132167782206652e-05}. Best is trial 1 with value: 0.02631578947368418.
Trial 2 finished with value: 0.02631578947368418 and parameters: {'alpha': 0.011064776558365616}. Best is trial 1 with value: 0.02631578947368418.
Trial 3 finished with value: 0.3157894736842105 and parameters: {'alpha': 3.096403335234504e-05}. Best is trial 1 with value: 0.02631578947368418.
Trial 4 finished with value: 0.07894736842105265 and parameters: {'alpha': 0.027787238399605656}. Best is trial 1 with value: 0.02631578947368418.
Trial 5 pruned.
Trial 6 pruned.
Trial 7 pruned.
Trial 8 pruned.
Trial 9 pruned.
Trial 10 pruned.
Trial 11 pruned.
Trial 12 pruned.
Trial 13 finished with value: 0.02631578947368418 and parameters: {'alpha': 0.0005226670470560228}. Best is trial 1 with value: 0.02631578947368418.
Trial 14 pruned.
Trial 15 pruned.
Trial 16 pruned.
Trial 17 pruned.
Trial 18 pruned.
Trial 19 pruned.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docs에서는 다음의 sampler-pruner 조합을 추천하고 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RandomSampler 사용 시 MedianPruner 사용&lt;/li&gt;
&lt;li&gt;TPESampler 사용 시 HyperbandPruner 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1878&quot; data-origin-height=&quot;348&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DVd6C/btsBJe1w8iJ/x0DGrqCIEjPAUpVNUo1h9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DVd6C/btsBJe1w8iJ/x0DGrqCIEjPAUpVNUo1h9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DVd6C/btsBJe1w8iJ/x0DGrqCIEjPAUpVNUo1h9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDVd6C%2FbtsBJe1w8iJ%2Fx0DGrqCIEjPAUpVNUo1h9K%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;682&quot; height=&quot;126&quot; data-origin-width=&quot;1878&quot; data-origin-height=&quot;348&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;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Visualization&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;optuna의 최적화 결과에 대한 시각화를 도와주는 &lt;a href=&quot;https://github.com/optuna/optuna-dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;optuna-dashboard&lt;/a&gt;라는 툴이 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1702185136301&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - optuna/optuna-dashboard: Real-time Web Dashboard for Optuna.&quot; data-og-description=&quot;Real-time Web Dashboard for Optuna. Contribute to optuna/optuna-dashboard development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/optuna/optuna-dashboard&quot; data-og-url=&quot;https://github.com/optuna/optuna-dashboard&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DYlYL/hyUL2AJKT8/5WyLixlg8FJjBTdG73Bj60/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/optuna/optuna-dashboard&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/optuna/optuna-dashboard&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DYlYL/hyUL2AJKT8/5WyLixlg8FJjBTdG73Bj60/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - optuna/optuna-dashboard: Real-time Web Dashboard for Optuna.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Real-time Web Dashboard for Optuna. Contribute to optuna/optuna-dashboard development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;pre id=&quot;code_1702185146287&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import optuna

if __name__ == &quot;__main__&quot;:
    study_name = &quot;quadratic-simple&quot;
    study = optuna.create_study(
        storage=f&quot;sqlite:///{study_name}.db&quot;,  # Specify the storage URL here.
        study_name=study_name
    )
    study.optimize(objective, n_trials=100)
    print(f&quot;Best value: {study.best_value} (params: {study.best_params})&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1702185161534&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pip install optuna-dashboard
optuna-dashboard sqlite:///quadratic-simple.db&lt;/code&gt;&lt;/pre&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;logging&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일에 trial의 기록을 남기려면 다음과 같이 logging 옵션을 설정하여 할 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1702185209424&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;optuna.logging.enable_propagation &amp;mdash; Optuna 3.4.0 documentation&quot; data-og-description=&quot;&amp;copy; Copyright 2018, Optuna Contributors. Revision 4ea580fc.&quot; data-og-host=&quot;optuna.readthedocs.io&quot; data-og-source-url=&quot;https://optuna.readthedocs.io/en/stable/reference/generated/optuna.logging.enable_propagation.html&quot; data-og-url=&quot;https://optuna.readthedocs.io/en/stable/reference/generated/optuna.logging.enable_propagation.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c6g4gO/hyUIqQN3A9/X5zLM71s6PZiep4bk7Ktuk/img.png?width=1000&amp;amp;height=210&amp;amp;face=0_0_1000_210&quot;&gt;&lt;a href=&quot;https://optuna.readthedocs.io/en/stable/reference/generated/optuna.logging.enable_propagation.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://optuna.readthedocs.io/en/stable/reference/generated/optuna.logging.enable_propagation.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c6g4gO/hyUIqQN3A9/X5zLM71s6PZiep4bk7Ktuk/img.png?width=1000&amp;amp;height=210&amp;amp;face=0_0_1000_210');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;optuna.logging.enable_propagation &amp;mdash; Optuna 3.4.0 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;copy; Copyright 2018, Optuna Contributors. Revision 4ea580fc.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;optuna.readthedocs.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1702185198100&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import optuna
import logging

logger = logging.getLogger()

logger.setLevel(logging.INFO)  # Setup the root logger.
logger.addHandler(logging.FileHandler(&quot;foo.log&quot;, mode=&quot;w&quot;))

optuna.logging.enable_propagation()  # Propagate logs to the root logger.
optuna.logging.disable_default_handler()  # Stop showing logs in sys.stderr.

study = optuna.create_study()

logger.info(&quot;Start optimization.&quot;)
study.optimize(objective, n_trials=10)

with open(&quot;foo.log&quot;) as f:
    assert f.readline().startswith(&quot;A new study created&quot;)
    assert f.readline() == &quot;Start optimization.\n&quot;&lt;/code&gt;&lt;/pre&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Examples&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Optuna는 다양한 딥러닝 프레임워크들과 유연하게 결합하여 사용할 수 있는데, 예제들은 다음 링크에서 확인할 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/optuna/optuna-examples/blob/main/pytorch/pytorch_simple.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;pytorch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/optuna/optuna-examples/blob/main/pytorch/pytorch_lightning_simple.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;pytorch lightning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/optuna/optuna-examples/blob/main/sklearn/sklearn_simple.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;sklearn&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/optuna/optuna-examples/blob/main/tensorflow/tensorflow_eager_simple.py&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;tensorflow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;FAQ&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 docs의 &lt;a href=&quot;https://optuna.readthedocs.io/en/stable/faq.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;FAQ&lt;/a&gt; 중 유용한 몇가지를 소개한다.&lt;/p&gt;
&lt;figure id=&quot;og_1702185403130&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;FAQ &amp;mdash; Optuna 3.4.0 documentation&quot; data-og-description=&quot;When you want to suggest \(n\) variables which represent the proportion, that is, \(p[0], p[1], ..., p[n-1]\) which satisfy \(0 \le p[k] \le 1\) for any \(k\) and \(p[0] + p[1] + ... + p[n-1] = 1\), try the below. For example, these variables can be used a&quot; data-og-host=&quot;optuna.readthedocs.io&quot; data-og-source-url=&quot;https://optuna.readthedocs.io/en/stable/faq.html&quot; data-og-url=&quot;https://optuna.readthedocs.io/en/stable/faq.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/QLhnI/hyUIulmgWF/m7K7KHjk6XLCeqYB8Nxm61/img.png?width=1000&amp;amp;height=210&amp;amp;face=0_0_1000_210&quot;&gt;&lt;a href=&quot;https://optuna.readthedocs.io/en/stable/faq.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://optuna.readthedocs.io/en/stable/faq.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/QLhnI/hyUIulmgWF/m7K7KHjk6XLCeqYB8Nxm61/img.png?width=1000&amp;amp;height=210&amp;amp;face=0_0_1000_210');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;FAQ &amp;mdash; Optuna 3.4.0 documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;When you want to suggest \(n\) variables which represent the proportion, that is, \(p[0], p[1], ..., p[n-1]\) which satisfy \(0 \le p[k] \le 1\) for any \(k\) and \(p[0] + p[1] + ... + p[n-1] = 1\), try the below. For example, these variables can be used a&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;optuna.readthedocs.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;How to define objective functions that have own arguments?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2258&quot; data-origin-height=&quot;1708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUrV2c/btsBFfHDYI6/G0Pn2YPv3blgptEZy40mn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUrV2c/btsBFfHDYI6/G0Pn2YPv3blgptEZy40mn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUrV2c/btsBFfHDYI6/G0Pn2YPv3blgptEZy40mn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUrV2c%2FbtsBFfHDYI6%2FG0Pn2YPv3blgptEZy40mn0%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;2258&quot; height=&quot;1708&quot; data-origin-width=&quot;2258&quot; data-origin-height=&quot;1708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;How to avoid OOM when optimizing studies?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2258&quot; data-origin-height=&quot;796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RNFwq/btsBHsZ25Xg/iANTay7iKq4vvfc9S9iwsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RNFwq/btsBHsZ25Xg/iANTay7iKq4vvfc9S9iwsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RNFwq/btsBHsZ25Xg/iANTay7iKq4vvfc9S9iwsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRNFwq%2FbtsBHsZ25Xg%2FiANTay7iKq4vvfc9S9iwsk%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;2258&quot; height=&quot;796&quot; data-origin-width=&quot;2258&quot; data-origin-height=&quot;796&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;</description>
      <category>  Python &amp;amp; library/Etc.</category>
      <category>Optuna</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/202</guid>
      <comments>https://bo-10000.tistory.com/202#entry202comment</comments>
      <pubDate>Sun, 10 Dec 2023 14:17:52 +0900</pubDate>
    </item>
    <item>
      <title>[PyTorch] Autograd 작동방식 알아보기</title>
      <link>https://bo-10000.tistory.com/201</link>
      <description>&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 style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/MswxJw-8PvE&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&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;&amp;nbsp;&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 style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 동영상에서 PyTorch Autograd를 이해하기 쉽게 설명해주고 있다. 다음은 위 동영상을 간단히 정리한 글이다.&lt;/span&gt;&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;1431&quot; data-origin-height=&quot;880&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p8vQR/btsBj9zLInD/PdBL6takzOb0TEQKxgBCH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p8vQR/btsBj9zLInD/PdBL6takzOb0TEQKxgBCH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p8vQR/btsBj9zLInD/PdBL6takzOb0TEQKxgBCH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp8vQR%2FbtsBj9zLInD%2FPdBL6takzOb0TEQKxgBCH1%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;650&quot; height=&quot;400&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;880&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. torch.Tensor&lt;/h2&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;832&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Rcil6/btsBlaSIVBg/niL9AX76YcjmYch57ak3lK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Rcil6/btsBlaSIVBg/niL9AX76YcjmYch57ak3lK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Rcil6/btsBlaSIVBg/niL9AX76YcjmYch57ak3lK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRcil6%2FbtsBlaSIVBg%2FniL9AX76YcjmYch57ak3lK%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;650&quot; height=&quot;400&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;832&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;각 tensor은 다음의 attr을 갖는다&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;data&lt;/code&gt;: tensor의 값&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;grad&lt;/code&gt;: tensor의 gradient 값. is_leaf인 경우에만 gradient가 자동으로 저장된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;grad_fn&lt;/code&gt;: gradient function. 해당 tensor가 어떤 연산을 통해 forward되었는지에 따라 결정된다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ex) a * b = c 인 경우 c의 grad_fn은 MulBackward이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;is_leaf인 경우 None&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;is_leaf&lt;/code&gt;: (backward 기준) 가장 마지막 tensor인지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;requires_grad&lt;/code&gt;: 계산 그래프의 일부로 들어갈 것인지&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. grad_fn&lt;/h2&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;832&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CvCT8/btsBj8t4GjW/VE6BpE62eAmFzxkc4PXSFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CvCT8/btsBj8t4GjW/VE6BpE62eAmFzxkc4PXSFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CvCT8/btsBj8t4GjW/VE6BpE62eAmFzxkc4PXSFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCvCT8%2FbtsBj8t4GjW%2FVE6BpE62eAmFzxkc4PXSFK%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;650&quot; height=&quot;400&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;832&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;grad_fn&lt;/code&gt;은 다음의 attr을 갖는다.&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;saved_tensors&lt;/code&gt;: forward 연산으로부터 받음&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;계산그래프에 포함되지 않은 in_place 연산 등으로 인해 tensor 값이 변경되는 경우를 대비하여 계산 당시의 tensor 값을 context 변수에 저장해 놓는다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 &quot;Add&quot;처럼 이전 tensor 값이 필요하지 않은 연산의 경우 context 변수가 값을 저장해 두지 않아도 된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;next_functions&lt;/code&gt;: 다음 tuple로 구성된 list&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;backward기준으로 다음 tensor의 grad_fn&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;is_leaf&lt;/b&gt;이고 &lt;b&gt;requires_grad&lt;/b&gt;일 경우 &lt;code&gt;AcummulateGrad&lt;/code&gt; - 계산된 gradient를 self.grad에 저장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;is_leaf&lt;/b&gt;이고 &lt;b&gt;requires_grad&lt;/b&gt;가 아닐 경우 None&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;grad_fn의 몇번째 input으로 전달될 것인지&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;보통은 grad_fn이 하나의 input만 받지만 forward 연산의 output이 여러개인 경우 grad_fn이&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;여러개의 input을 받을 수 있다&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. backward()&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;tensor의 backward() 연산이 호출되면 해당 tensor은 gradient 1로 시작한다. 이 값이 &lt;code&gt;grad_fn&lt;/code&gt;을 타고 흘러간다.&lt;/span&gt;&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;1641&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FQfdo/btsBf9BuE6a/XJ0WcS0ERiHiT5JM6ylhCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FQfdo/btsBf9BuE6a/XJ0WcS0ERiHiT5JM6ylhCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FQfdo/btsBf9BuE6a/XJ0WcS0ERiHiT5JM6ylhCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFQfdo%2FbtsBf9BuE6a%2FXJ0WcS0ERiHiT5JM6ylhCk%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;686&quot; height=&quot;432&quot; data-origin-width=&quot;1641&quot; data-origin-height=&quot;1034&quot;/&gt;&lt;/span&gt;&lt;/figure&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이전 tensor의 gradient가 &lt;code&gt;MulBackward&lt;/code&gt;로 전달&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1 &amp;rarr; &lt;code&gt;MulBackward&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다음 tensor의 gradient를 계산하여 &lt;code&gt;next_function&lt;/code&gt;으로 전달&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다음 tensor의 gradient = 현재 연산에서의 gradient x 이전 tensor의 gradient (chain rule)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;4 &amp;rarr; &lt;code&gt;Mulbackward&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;6 &amp;rarr; &lt;code&gt;AccumulateGrad&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;code&gt;AccumulateGrad&lt;/code&gt; 함수는 해당 tensor의 grad에 gradient 저장&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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 style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;gradient는 &lt;b&gt;is_leaf&lt;/b&gt;인 경우에만 저장된다. leaf가 아닌 tensor의 gradient는 저장되지 않고 grad_fn을 따라 전달되기만 한다.&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 style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그러나 intermediate tensor에도 gradient를 저장하고 싶다면 &lt;code&gt;tensor.retain_grad()&lt;/code&gt; 메소드를 사용하면 된다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>  Python &amp;amp; library/PyTorch</category>
      <category>pytorch</category>
      <author>복만</author>
      <guid isPermaLink="true">https://bo-10000.tistory.com/201</guid>
      <comments>https://bo-10000.tistory.com/201#entry201comment</comments>
      <pubDate>Sat, 2 Dec 2023 23:20:20 +0900</pubDate>
    </item>
  </channel>
</rss>