<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>숟가락 그만 얹어</title>
    <link>https://stopspoon.tistory.com/</link>
    <description>LG AI Research
한상준</description>
    <language>ko</language>
    <pubDate>Tue, 26 May 2026 19:05:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>업무외시간</managingEditor>
    <image>
      <title>숟가락 그만 얹어</title>
      <url>https://tistory1.daumcdn.net/tistory/3938307/attach/6f66ebebdc7b41e19961622d1a8e1ef0</url>
      <link>https://stopspoon.tistory.com</link>
    </image>
    <item>
      <title>MCP Inspector 설치 및 실행 방법</title>
      <link>https://stopspoon.tistory.com/110</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;p data-ke-size=&quot;size16&quot;&gt;1. MCP Inspector 실행을 위해서는 nodejs와 nodejs 패키지 실행 도구 npx가 필요한데, 단순히 apt get install nodejs를 하면 구버전이 설치되어 Inspector 실행에서 오류가 난다 (Unmatched Token). &lt;a href=&quot;https://github.com/nodesource/distributions/blob/master/README.md&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;에 따라 apt 패키지에 최신 nodejs를 업데이트하고 nodejs를 설치해주자.&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. nodejs를 잘 모르는 사람 입장에서는 npx @modelcontextprotocol/inspector이 낯설다. 나의 경우에는 command 앞쪽에다가 환경 변수를 넣어 HOST=0.0.0.0과 ALLOWED_ORIGINS=http://10.1.210.69:6274를 추가해주었는데, 그래야만 Docker container 외부에서 포트포워딩으로 Inspector에 접속할 수 있었다.&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;3. Inspector 왼쪽 바 메뉴에서 Command: python, Arguments: server.py를 입력해주었다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;힘들게 설정해서 실행시켰는데 client.py에서 print로 찍어 결과를 보는 것보다 더 유용한지는 잘 모르겠다. 앞으로 안쓰게 될 듯?&lt;/p&gt;</description>
      <category>Engineering/Developments</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/110</guid>
      <comments>https://stopspoon.tistory.com/110#entry110comment</comments>
      <pubDate>Fri, 11 Jul 2025 14:52:31 +0900</pubDate>
    </item>
    <item>
      <title>매일 쓰는 Tensorboard</title>
      <link>https://stopspoon.tistory.com/108</link>
      <description>&lt;pre id=&quot;code_1710217244245&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Tensorboard 실행
tensorboard --logdir=./lightining_logs/ --port=7001 --host=0.0.0.0&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Engineering/Developments</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/108</guid>
      <comments>https://stopspoon.tistory.com/108#entry108comment</comments>
      <pubDate>Tue, 14 Nov 2023 20:08:03 +0900</pubDate>
    </item>
    <item>
      <title>Symbolic Music Motif Generation</title>
      <link>https://stopspoon.tistory.com/106</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;신입 사원일 때부터 늘 논문을 쓰고 싶었는데 과제 하느라 바쁘기도 했고 막상 시간이 주어졌을 때는 한 주제에 깊이 몰입하지 못했던 것 같다. 논문이라는 것이 회사 입장에서 어떤 큰 impact가 있겠냐마는 엔지니어에게는 내가 노력한 것을 확실한 형태로 증명하는 수단이고, 내 이야기의 소재가 된다 (가수에게 자작곡이 이런 느낌일까).&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;ISMIR 논문은 곡을 단순히 길게 생성하는 것보다는 의미 있는 단위로 생성하여 quality를 향상시키겠다는 동기에서 시작하였다. 두 번의 reject을 먹고 (처음에는 novelty 부족, 두 번째는 poor writing), 회사에 있는 박사님의 도움을 받고서야 accept 되었다. 생각보다 많은 Music AI 연구자들이 내 연구를 알고 관심을 가져주는 것을 보면 신기하다.&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;NeurIPS 논문은 원래는 Humming2Music을 하고 싶었고, 그에 대한 일부 파트로 Melody2Music을 연구하다 아이디어가 말이 안되는 듯하여 또 일부를 쪼갠 연구이다. 이 연구는 image segmentation처럼 각 note에 악기를 assign하는 Mixture2Music으로, 일종의 ill-posed problem이기 때문에 확률 생성 모델인 diffusion model을 활용하였다. 음악 생성 결과보다도 diffusion model에 guide를 주어 우리가 의도한 특성을 반영하는 과정이 더 재밌었던 것 같다.&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://www.lgresearch.ai/blog/view?seq=295&amp;amp;page=1&amp;amp;pageSize=12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LG AI Research Blog에 기고한 글&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675995778306&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[ISMIR / NeurIPS 2022] Symbolic Music Motif Generation | LG AI&quot; data-og-description=&quot;Introduction 음악 창작은 가장 높은 수준의 창의성이 요구되는 작업 중 하나입니다. 작곡하는 과정을 생각해보면 먼저 전체적인 악상을 떠올리고 메인 멜로디와 그에 맞는 화성 및 악기 구성을 고&quot; data-og-host=&quot;www.lgresearch.ai&quot; data-og-source-url=&quot;https://www.lgresearch.ai/blog/view?seq=295&amp;amp;page=1&amp;amp;pageSize=12&quot; data-og-url=&quot;https://www.lgresearch.ai/blog/view?seq=295&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ehugTe/hyRzClPRuG/xJUG6B9npDP1OMchDd1KX0/img.jpg?width=384&amp;amp;height=221&amp;amp;face=0_0_384_221,https://scrap.kakaocdn.net/dn/uPL4G/hyRzpUjMUo/gWNdKZ2gcTDwPgJRlkyR11/img.jpg?width=384&amp;amp;height=221&amp;amp;face=0_0_384_221,https://scrap.kakaocdn.net/dn/cROC2O/hyRzn3iKbe/WoQqMkeuoQVsJeYNKkTo5K/img.png?width=1239&amp;amp;height=384&amp;amp;face=0_0_1239_384&quot;&gt;&lt;a href=&quot;https://www.lgresearch.ai/blog/view?seq=295&amp;amp;page=1&amp;amp;pageSize=12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.lgresearch.ai/blog/view?seq=295&amp;amp;page=1&amp;amp;pageSize=12&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ehugTe/hyRzClPRuG/xJUG6B9npDP1OMchDd1KX0/img.jpg?width=384&amp;amp;height=221&amp;amp;face=0_0_384_221,https://scrap.kakaocdn.net/dn/uPL4G/hyRzpUjMUo/gWNdKZ2gcTDwPgJRlkyR11/img.jpg?width=384&amp;amp;height=221&amp;amp;face=0_0_384_221,https://scrap.kakaocdn.net/dn/cROC2O/hyRzn3iKbe/WoQqMkeuoQVsJeYNKkTo5K/img.png?width=1239&amp;amp;height=384&amp;amp;face=0_0_1239_384');&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;[ISMIR / NeurIPS 2022] Symbolic Music Motif Generation | LG AI&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Introduction 음악 창작은 가장 높은 수준의 창의성이 요구되는 작업 중 하나입니다. 작곡하는 과정을 생각해보면 먼저 전체적인 악상을 떠올리고 메인 멜로디와 그에 맞는 화성 및 악기 구성을 고&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.lgresearch.ai&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;b&gt;References&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] &lt;span style=&quot;background-color: #ffffff; color: #757575;&quot;&gt;S. Han et al., Symbolic Music Loop Generation with Neural Discrete Representations, ISMIR 2022&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #757575;&quot;&gt;[2] &lt;span style=&quot;background-color: #ffffff; color: #757575;&quot;&gt;S. Han et al., Instrument Separation of Symbolic Music by Explicitly Guided Diffusion Model, NeurIPS Workshop 2022&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #757575;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #757575;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Research/Music Generation</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/106</guid>
      <comments>https://stopspoon.tistory.com/106#entry106comment</comments>
      <pubDate>Fri, 10 Feb 2023 11:11:59 +0900</pubDate>
    </item>
    <item>
      <title>좋은 선생님들께 배운 것 (2)</title>
      <link>https://stopspoon.tistory.com/105</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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;용환기교수님2.png&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;66&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L9SuC/btrXe9mOEFU/fAKGJgDVeu5XzLxo639K3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L9SuC/btrXe9mOEFU/fAKGJgDVeu5XzLxo639K3k/img.png&quot; data-alt=&quot;2012-12-30 Computer Architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L9SuC/btrXe9mOEFU/fAKGJgDVeu5XzLxo639K3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL9SuC%2FbtrXe9mOEFU%2FfAKGJgDVeu5XzLxo639K3k%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;470&quot; height=&quot;67&quot; data-filename=&quot;용환기교수님2.png&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;66&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2012-12-30 Computer Architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>About me/Me</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/105</guid>
      <comments>https://stopspoon.tistory.com/105#entry105comment</comments>
      <pubDate>Fri, 27 Jan 2023 00:59:58 +0900</pubDate>
    </item>
    <item>
      <title>좋은 선생님들께 배운 것 (1)</title>
      <link>https://stopspoon.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;설을 맞아 본가에 내려가 빈둥거리던 중에 대학 때 쓰던 노트를 펄쳐보았다. 거의 10년이 다되가니 수업 내용의 대부분은 기억나지 않았고 내 글씨도 알아볼 수가 없었다. 그런데 교수님들께서 툭툭 해주셨던 말씀들은 아직까지도 내 머리 속에 남아있다. 우리 학교의 좋은 점을 꼽으라면 선생님들께서 학생들을 믿어주신다는 것이다.&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/bHHlYj/btrXj0nR0Aj/PXkyRx5nL7ie3QXKKZwDUK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHHlYj/btrXj0nR0Aj/PXkyRx5nL7ie3QXKKZwDUK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;류대영교수님2.jpg&quot; width=&quot;359&quot; height=&quot;269&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHHlYj/btrXj0nR0Aj/PXkyRx5nL7ie3QXKKZwDUK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHHlYj%2FbtrXj0nR0Aj%2FPXkyRx5nL7ie3QXKKZwDUK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMTuVT/btrXgSYZTuz/tEXFVLcOXQy5v1eZsaq3GK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMTuVT/btrXgSYZTuz/tEXFVLcOXQy5v1eZsaq3GK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-filename=&quot;류대영교수님1.jpg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMTuVT/btrXgSYZTuz/tEXFVLcOXQy5v1eZsaq3GK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMTuVT%2FbtrXgSYZTuz%2FtEXFVLcOXQy5v1eZsaq3GK%2Fimg.jpg&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;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;한국사 노트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 한계를 뛰어넘어 문명 차원의 근본적 변화를 시도하는 사람이 되라&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 세상에는 뉴턴 같은 giants -&amp;gt; 이를 전달하는 teacher -&amp;gt; 이를 이용하는 applier -&amp;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;Why not change the world?에 대한 대답을 교수님께서는 본인의 업인 학문에서는 찾지 못하셨던 것 같지만, 학생들의 잠재력을 믿고 엄청난 변화를 일으켰으면 하는 마음에서 위 메세지를 주셨을 것이다.&lt;/p&gt;</description>
      <category>About me/Me</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/104</guid>
      <comments>https://stopspoon.tistory.com/104#entry104comment</comments>
      <pubDate>Fri, 27 Jan 2023 00:32:14 +0900</pubDate>
    </item>
    <item>
      <title>CV</title>
      <link>https://stopspoon.tistory.com/103</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;영어: &lt;a href=&quot;https://sites.google.com/view/sjhan91&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://sites.google.com/view/sjhan91&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한국어: &lt;a href=&quot;https://sites.google.com/view/sjhan91-kor&quot;&gt;https://sites.google.com/view/sjhan91-kor&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>About me/Me</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/103</guid>
      <comments>https://stopspoon.tistory.com/103#entry103comment</comments>
      <pubDate>Thu, 22 Dec 2022 16:38:24 +0900</pubDate>
    </item>
    <item>
      <title>Docker Commands</title>
      <link>https://stopspoon.tistory.com/102</link>
      <description>&lt;pre id=&quot;code_1710217317293&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# run container
docker run --gpus '&quot;device=0,1,2,3,4,5,6,7&quot;' --shm-size=10g --privileged -it -d -p 7000:7000 -p 7001:7001 -p 7002:7002 -p 7003:7003 -p 7004:7004 --name sjhan -v /data/sjhan:/workspace cd98ddcb3f53 /bin/bash

# execute container
docker exec -it sjhan /bin/bash

# save crazy_sjhan container to docker image repository
docker commit sjhan hjun1008/music-torch:v0.2

# push docker image to dockerhub
docker push hjun1008/music-torch:v0.2

# rename docker image
docker image tag 030c57e297cf hjun1008/music-torch:v0.1

# remove container
docker container rm 19dfd5fb9d42

# remove aliased docker image
docker rmi 030c57e297cf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Engineering/Environments</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/102</guid>
      <comments>https://stopspoon.tistory.com/102#entry102comment</comments>
      <pubDate>Fri, 23 Sep 2022 16:31:05 +0900</pubDate>
    </item>
    <item>
      <title>Classifier-free Diffusion Guidance</title>
      <link>https://stopspoon.tistory.com/101</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 classifier-based guidance는 noise level에 따른 classifier를 따로 학습시켜야 할 뿐만 아니라 classifier based metric인 IS와 FID를 의도적으로 향상하기 위한 adversarial attack일 수 있다고 저자는 주장한다. 본 논문에서 제안하는 guidance 방식은 conditional diffusion model의 output과 unconditional model의 output의 차이의 방향으로 sample을 생성하도록 유도한다. 이때 unconditional model은 conditional model의 condition을 0 또는 null을 나타내는 방식으로 만든다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXTBb/btrJ1BIkRvH/5Xbda3QK7NvtVP5NfJyhLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXTBb/btrJ1BIkRvH/5Xbda3QK7NvtVP5NfJyhLK/img.png&quot; data-alt=&quot;괄호를 전개하여 w로 다시 묶어보면 개념이 더 명확해짐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXTBb/btrJ1BIkRvH/5Xbda3QK7NvtVP5NfJyhLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXTBb%2FbtrJ1BIkRvH%2F5Xbda3QK7NvtVP5NfJyhLK%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;415&quot; height=&quot;39&quot; data-origin-width=&quot;501&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;괄호를 전개하여 w로 다시 묶어보면 개념이 더 명확해짐&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 여러 가지로 해석이 가능한데, 1) implicit classifier의 역할을 한다고 볼 수도 있고, 2) noise constrastive estimation처럼 unconditional output을 일종의 noise로 간주하고 이를 줄이는 방향을 유도한다고 불 수도 있다. 엄밀한 수학적 정의는 아니나 개념적으로는 그렇다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과를 보면 w 값에 따라 IS와 FID 사이의 일종의 trade-off 관계가 발생하는데, 대강 찾아보니 IS는 intra-class diversity를 반영하지 못하기 때문에 w 값이 커질수록 sample diversity from FID가 떨어진다고 생각하면 얼추 맞는 것 같다.&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;References&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] J. Ho et al., Classifier-free Diffusion Guidance, NeurIPS Workshop 2021&lt;/p&gt;</description>
      <category>Research/Generative Model</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/101</guid>
      <comments>https://stopspoon.tistory.com/101#entry101comment</comments>
      <pubDate>Thu, 18 Aug 2022 13:56:53 +0900</pubDate>
    </item>
    <item>
      <title>Denoising Diffusion Implicit Models (DDIM)</title>
      <link>https://stopspoon.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Diffusion model의 sampling step을 줄이기 위해 제안된 연구. DDPM의 generalized version이라고 볼 수 있겠다. 논문이 어렵게 쓰여있지만 key idea는 sigma라는 stochastic parameter를 두어 q(x(t-1)|x(t), x(0))에 대해 새로운 form을 제안한 것이다. 이 form은 여전히 nice property를 만족한다. (즉, nice property를 만족하면서 x(t)와 x(0)를 condition으로 사용하는 form을 제안)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;93&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zVPmq/btrHtwjJCn6/lByvjfnWP3S4xJZbY6m28k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zVPmq/btrHtwjJCn6/lByvjfnWP3S4xJZbY6m28k/img.png&quot; data-alt=&quot;Generalized Form&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zVPmq/btrHtwjJCn6/lByvjfnWP3S4xJZbY6m28k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzVPmq%2FbtrHtwjJCn6%2FlByvjfnWP3S4xJZbY6m28k%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;651&quot; height=&quot;59&quot; data-origin-width=&quot;1019&quot; data-origin-height=&quot;93&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Generalized Form&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2]에서는 위 form을 forward/reverse process의 mu function을 x(t)와 noise의 linear combination으로 가정한 것이라고 해석한다. (즉, 각 process의 mu function을 어떻게 정의하느냐에 따라서 DDPM 혹은 DDIM이 된다) sigma(t)가 0이 되면 DDIM, 특정한 값을 만족하면 DDPM이 되는 구조이다. DDIM의 reverse process는 deterministic process이기 때문에 x(T)에만 의존하여 stochastic 성질을 보장한다. 이는 x(T)가 semantic latent 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;학습은 reverse process에서 q와 p의 거리를 작게 하는 방향으로 진행하는데, DDPM처럼 p의 특정 output을 가정해놓고 q와 p의 loss 식을 만드는 게 아니라 x(t)만을 가지고 x(0)를 복원하는 loss 식을 만든다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxsrJH/btrHpQio8N9/uczzaLYmLIjQmjRuFn1QX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxsrJH/btrHpQio8N9/uczzaLYmLIjQmjRuFn1QX1/img.png&quot; data-alt=&quot;x(t)로부터 x(0) 복원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxsrJH/btrHpQio8N9/uczzaLYmLIjQmjRuFn1QX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxsrJH%2FbtrHpQio8N9%2FuczzaLYmLIjQmjRuFn1QX1%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;373&quot; height=&quot;37&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;x(t)로부터 x(0) 복원&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 x(0)을 복원하려면 z(t)를 예측할 수 있어야 하기 때문에 epsilon_theta는 noise predictor가 되고 DDIM의 objective는 DDPM의 objective와 같아진다 (엄밀하게 따져보면 특정 조건에서 같아지는 듯). x(0)를 잘 예측할 수 있으면 q(x(t-1)|x(t), x'(0))를 이용해 reverse process가 가능해진다. 예측하고자 하는 것이 x(0)이기 때문에 DDIM에서는 굳이 forward process를 계산할 필요가 없다 (논문에서 대충 설명하고 넘어감).&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;Sampling step이 충분하면 DDPM으로도 좋은 성능이 보장되나 적은 step에서는 DDIM이 확실히 좋다. 이는 stochastic한 process 일수록 촘촘한 step이 필요하다는 것을 의미한다.&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;References&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] J. Song et al., Denoising Diffusion Implicit Models, ICLR 2021&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2] &lt;a href=&quot;https://www.youtube.com/watch?v=cS6JQpEY9cs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;CVPR 2022 Tutorial for Diffusion-based Generative Model&lt;/a&gt;&lt;/p&gt;</description>
      <category>Research/Generative Model</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/100</guid>
      <comments>https://stopspoon.tistory.com/100#entry100comment</comments>
      <pubDate>Sun, 17 Jul 2022 19:57:46 +0900</pubDate>
    </item>
    <item>
      <title>Denoising Diffusion Probabilistic Models (DDPM)</title>
      <link>https://stopspoon.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Diffusion model의 아이디어는 잉크가 물속에서 퍼져나가는 과정 (forward process)과 이를 역으로 되돌리는 과정 (reverse process)으로 이루어져 있다. 이미 퍼져나간 잉크를 다시 한데 모으는 것은 매우 어려울 것이다. 그러나 시간을 잘게 쪼개면 순간의 입자 운동은 예측 가능할 것이고, 거꾸로 모으는 것도 가능할 수 있다.&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;Objective&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 likelihood-based generative model이 그렇듯이 p(x)를 잘 모델링하여 high-quality fake sample을 생성하는 것이 diffusion model의 objective이다. VAE와 유사하게 latent model이지만, 시간에 따른 여러 trajectory path가 있고 latent space의 크기가 data space가 같도록 유지되는 것이 차이점이다.&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;Forward Process&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 data x(0)에 T step 동안 noise를 섞는 과정이다. DDPM 논문에서는 Markov chain function q를 Gaussian form으로 가정했으나 DPM 논문에서는 Bernoulli form으로 가정하기도 했다 (그러나 아직 이를 활용한 연구를 보지는 못했다).&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;84&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAylQH/btrHiFm3lOT/8oxP4Ow6Gt0ODHkwxUDiQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAylQH/btrHiFm3lOT/8oxP4Ow6Gt0ODHkwxUDiQK/img.png&quot; data-alt=&quot;Forward Process&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAylQH/btrHiFm3lOT/8oxP4Ow6Gt0ODHkwxUDiQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAylQH%2FbtrHiFm3lOT%2F8oxP4Ow6Gt0ODHkwxUDiQK%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;657&quot; height=&quot;67&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;84&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Forward Process&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;q(x(t)|x(t-1)) function을 위와 같이 설정한 이유는 1) time step이 진행됨에 따라 변하는 x의 scale을 보존하기 위함이고, 2) time step이 충분히 클 때 x를 isotropic Gaussian distribution으로 수렴하게 하기 위해서다. 또, 3) &lt;i&gt;nice property&lt;/i&gt;라고 불리는 성질을 이용하면 x(0)에서 x(t)를 바로 추론할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yAZTw/btrHmeKpDpC/dMyOpehU4xsHu7al5w1pok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yAZTw/btrHmeKpDpC/dMyOpehU4xsHu7al5w1pok/img.png&quot; data-alt=&quot;Nice Property&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yAZTw/btrHmeKpDpC/dMyOpehU4xsHu7al5w1pok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyAZTw%2FbtrHmeKpDpC%2FdMyOpehU4xsHu7al5w1pok%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;660&quot; height=&quot;33&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Nice Property&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DDPM은 Gaussian distribution에서의 sampling을 위해 reparameterization trick을 주로 사용한다.&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;Reverse&lt;/b&gt;&amp;nbsp;&lt;b&gt;Process&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 forward process의 반대 방향으로 진행되고 learnable parameter theta가 존재한다 (forward process에는 learnable parameter가 없음).&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;99&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfUeWQ/btrHn0ZoN2w/ir0gWm7KKheSi3XN42XjNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfUeWQ/btrHn0ZoN2w/ir0gWm7KKheSi3XN42XjNk/img.png&quot; data-alt=&quot;Reverse Process&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfUeWQ/btrHn0ZoN2w/ir0gWm7KKheSi3XN42XjNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfUeWQ%2FbtrHn0ZoN2w%2Fir0gWm7KKheSi3XN42XjNk%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;758&quot; height=&quot;73&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;99&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Reverse Process&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 function의 parameter theta를 학습시키기 위해서는 reverse process의 ground truth가 필요하다. 이를 q(x(t-1)|x(t))라고 하자. 문제를 쉽게 풀기 위해 그대로 사용하지는 않고 x(0)에 대한 condition을 넣는다.&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;Ground Truth of Reverse Process&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;q(x(t-1)|x(t))를 q(x(t-1)|x(t), x(0))으로 바꾸어 풀면 다음과 같은 형태의 mu와 sigma를 얻을 수 있다 (nice property와 Bayes rule를 이용하여 전개).&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLDuke/btrHpDvJdZu/iBZP0QDlqihZs54nUMNKf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLDuke/btrHpDvJdZu/iBZP0QDlqihZs54nUMNKf1/img.png&quot; data-alt=&quot;Ground Truth of Reverse Process&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLDuke/btrHpDvJdZu/iBZP0QDlqihZs54nUMNKf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLDuke%2FbtrHpDvJdZu%2FiBZP0QDlqihZs54nUMNKf1%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;723&quot; height=&quot;86&quot; data-origin-width=&quot;987&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Ground Truth of Reverse Process&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Loss Function&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;log(p(x))에 대해 variational bound를 구해보면 (식 전개 원리는 VAE와 유사) 3가지 term으로 나누어지는데,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EtA0u/btrHorCbH98/43GuOIMO3QIWXdeI3Kekvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EtA0u/btrHorCbH98/43GuOIMO3QIWXdeI3Kekvk/img.png&quot; data-alt=&quot;Diffusion Model Loss&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EtA0u/btrHorCbH98/43GuOIMO3QIWXdeI3Kekvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEtA0u%2FbtrHorCbH98%2F43GuOIMO3QIWXdeI3Kekvk%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;710&quot; height=&quot;70&quot; data-origin-width=&quot;1058&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Diffusion Model Loss&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L(T)는 constant이고 L(t-1)은 reverse process가 가능하도록 p_theta를 학습시키는 과정이다. L(0)의 경우 x(0)의 data distribution에 따라 별도의 decoder를 설계할 수 있다. L(t-1)은 두 Gaussian distribution의 KL divergence를 계산하는 것이기 때문에 variance를 고려하지 않는다면 두 mu function의 mean squared error를 구하는 것과 같아진다. p_theta의 mu function을 적절한 형태로 가정한다면 L(t-1)은 time step t에서의 noise predictor가 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1434&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAAdlT/btrHo7EbZmX/H2TiYbVhevDKmDt8cZpyMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAAdlT/btrHo7EbZmX/H2TiYbVhevDKmDt8cZpyMk/img.png&quot; data-alt=&quot;Training and Sampling&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAAdlT/btrHo7EbZmX/H2TiYbVhevDKmDt8cZpyMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAAdlT%2FbtrHo7EbZmX%2FH2TiYbVhevDKmDt8cZpyMk%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;787&quot; height=&quot;182&quot; data-origin-width=&quot;1434&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Training and Sampling&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Training phase에서는 위에서 언급한 대로 time step t에서의 noise predictor를 학습시키는 과정이다. epsilon_theta 모델의 input은 nice property로 계산된 x(t)와 time step t이고 output은 Gaussian noise (x(t)와 data shape이 같음)가 된다. U-Net 계열의 모델이 사용되고,&amp;nbsp;time step t는 Transformer에서의 position가 유사하게 sinusoidal 형태로 embedding되어 CNN 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;Sampling phase에서는 Gaussian noise로 출발해 autoregressive model에서의 sampling처럼 현재 x(t)을 다음 time step으로 넘겨준다. 좋은 성능을 기대하려면 충분히 큰 T 설정이 중요할 것 같은데, 1) x(T)가 isotropic Gaussian distribution임이 보장되어야 하고 2) 각 time step의 noise prediction task가 너무 어렵지 않아야 하기 때문이다. 이는 반대로 sampling 시간을 증가시키기 때문에 {1, ..., T}에서 일부만 사용하는 방법들이 고안되고 있다.&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;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 계열의 generative model에 비해 학습에 필요한 제약 조건이 적고 안정적인 수렴이 가능할 것으로 생각된다. 같은 계열인 VAE와 비교했을 때 diffusion model이 왜 더 나은 성능을 보이는지 감은 있지만 논리적으로 설명하기는 아직 어렵다 (더 tight한 bound?). 또, information bottleneck 구조가 아니기 때문에 사용할 수 있는 latent feature가 명확하지 않은 점도 있다. 모든 독립적인 time step에 대한 shared noise predictor를 좀 더 효율적으로 학습시킬 수 있는 방법도 생각해보면 재밌을 듯.&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;References&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[1] J. S. Dickstein et al., Deep Unsupervised Learning using Nonequilibrium Thermodynamics, ICML 2015&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[2] J. Ho et al., Denoising Diffusion Probabilistic Models, NeurIPS 2020&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[3] https://www.lgresearch.ai/kor/blog/view/?seq=190&amp;amp;page=1&amp;amp;pageSize=12&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[4] https://lilianweng.github.io/posts/2021-07-11-diffusion-models/&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[5] https://huggingface.co/blog/annotated-diffusion&lt;/p&gt;</description>
      <category>Research/Generative Model</category>
      <author>업무외시간</author>
      <guid isPermaLink="true">https://stopspoon.tistory.com/99</guid>
      <comments>https://stopspoon.tistory.com/99#entry99comment</comments>
      <pubDate>Thu, 14 Jul 2022 16:55:42 +0900</pubDate>
    </item>
  </channel>
</rss>