<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>채스</title>
    <link>https://chaeniverse.tistory.com/</link>
    <description>통계 학도입니다. 지금은 현업에서 data scientist로 근무하고 있습니다.
인공지능(머신러닝/딥러닝)에 관심이 많습니다.</description>
    <language>ko</language>
    <pubDate>Sat, 18 Jul 2026 00:33:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>chaeniverse</managingEditor>
    <image>
      <title>채스</title>
      <url>https://tistory1.daumcdn.net/tistory/5732984/attach/3739ea49031e4a17ab8975e5787a325d</url>
      <link>https://chaeniverse.tistory.com</link>
    </image>
    <item>
      <title>Taming Transformers for High Resolution Image Synthesis(VQGAN)</title>
      <link>https://chaeniverse.tistory.com/88</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
  tex2jax: {
  	inlineMath: [['$','$'], ['\\(','\\)']]
  },
  &quot;HTML-CSS&quot;: {
  	linebreaks: { automatic: true },
    scale: 100,
    minScaleAdjust: 50,
    matchFontHeight: true
  },
  SVG: {
  	linebreaks: { automatic: true }
  }
});
&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;VAE&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터&lt;span&gt; $x$&lt;/span&gt;에 대한 사후확률&lt;span&gt; $p(z|x)$&lt;/span&gt;를 추정하기 위한 변분추론을 활용한 다른&lt;span&gt; tractable&lt;/span&gt;한 분포&lt;span&gt; $q(z|x)$&lt;/span&gt;를 추정&lt;span&gt; &amp;rarr; latent feature $z$&lt;/span&gt;를 구하고 이로부터&lt;span&gt; $x'$&lt;/span&gt;를&lt;span&gt; sampling (&lt;/span&gt;생성&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때&lt;span&gt; Reparameterization trick&lt;/span&gt;을 활용해&lt;span&gt; $e$&lt;/span&gt;를&lt;span&gt; sampling&lt;/span&gt;하고&lt;span&gt; $z=\mu+\sigma\epsilon$ &lt;/span&gt;을 구하게 됨&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDSrDO/dJMcafL7lxU/LwsVxs2nvSeYNvV5FWz5Qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDSrDO/dJMcafL7lxU/LwsVxs2nvSeYNvV5FWz5Qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDSrDO/dJMcafL7lxU/LwsVxs2nvSeYNvV5FWz5Qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDSrDO%2FdJMcafL7lxU%2FLwsVxs2nvSeYNvV5FWz5Qk%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;659&quot; height=&quot;375&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;VQ-VAE&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;VAE&lt;/span&gt;와 다르게&lt;span&gt; posterior $p(z|x)$&lt;/span&gt;와&lt;span&gt; prior $p(z)$&lt;/span&gt;를 가우시안 분포가 아닌&lt;span&gt; categorical &lt;/span&gt;분포로 정의하며&lt;span&gt;, sampling &lt;/span&gt;되는 결과값 또한 특정 분포로부터의&lt;span&gt; continuous&lt;/span&gt;한&lt;span&gt; vector&lt;/span&gt;가 아니라&lt;span&gt; embedding table&lt;/span&gt;의 특정 위치&lt;span&gt; (index)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;입력값&lt;span&gt;(image)&lt;/span&gt;는&lt;span&gt; encoder&lt;/span&gt;를 통과해&lt;span&gt; embedding &lt;/span&gt;값&lt;span&gt; $z_e(x)$&lt;/span&gt;로 생성되며&lt;span&gt;, Euclidean distance (RMSE)&lt;/span&gt;를 기반으로 코드북&lt;span&gt; (Embedding Space) &lt;/span&gt;내에서 가장 유사한&lt;span&gt; embedding vector&lt;/span&gt;의&lt;span&gt; index (1~K)&lt;/span&gt;를 반환&lt;/li&gt;
&lt;li&gt;결과적으로 각&lt;span&gt; embedding &lt;/span&gt;값을 가장 유사한&lt;span&gt; embedding vector&lt;/span&gt;로 대치되며&lt;span&gt;, &lt;/span&gt;이를&lt;span&gt; decoder&lt;/span&gt;에 입력하여 이미지를 생성&lt;span&gt; (&lt;/span&gt;복원&lt;span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;357&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UTYk1/dJMcadgqoBB/EnviCmKvAJKoKsVtWeDKw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UTYk1/dJMcadgqoBB/EnviCmKvAJKoKsVtWeDKw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UTYk1/dJMcadgqoBB/EnviCmKvAJKoKsVtWeDKw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUTYk1%2FdJMcadgqoBB%2FEnviCmKvAJKoKsVtWeDKw1%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;852&quot; height=&quot;357&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;357&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;VQ-VAE Traning&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Indexing &lt;/span&gt;및&lt;span&gt; codebook&lt;/span&gt;의&lt;span&gt; embedding&lt;/span&gt;으로 대치하는 과정은&lt;span&gt; gradient&lt;/span&gt;의&lt;span&gt; back-propagation&lt;/span&gt;이 어려우므로&lt;span&gt; decoder&lt;/span&gt;의&lt;span&gt; gradient&lt;/span&gt;를&lt;span&gt; encoder&lt;/span&gt;로&lt;span&gt; back-propagation &lt;/span&gt;수행&lt;span&gt; (straight-through): Encoder&lt;/span&gt;의&lt;span&gt; output&lt;/span&gt;과&lt;span&gt; Code&lt;/span&gt;의&lt;span&gt; embedding&lt;/span&gt;은 동일한 차원에 존재하기 때문&lt;/li&gt;
&lt;li&gt;&lt;span&gt;sg (stop gradient): embedding loss&lt;/span&gt;와&lt;span&gt; commitment loss &lt;/span&gt;계산 시 특정&lt;span&gt; term&lt;/span&gt;에 대해&lt;span&gt; gradient&lt;/span&gt;를 역전파 하지 않도록 함&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;$$ L=logp(x|z_q(x))+||sg[z_e(x)]-e||^2_2+\beta||z_e(x)-sg[e]||_2^2 $$&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;Reconstruction loss + Embedding loss + Commitment loss&lt;/li&gt;
&lt;li&gt;Reconstruction loss : 복원된 결과물과 입력값을 비교함으로써 encoder와 decoder를 최저고하&lt;/li&gt;
&lt;li&gt;Embedding loss: Codebook의 embedding을 encoder의 결과물과 유사하게 만들어 줌으로써 codebook을 최적화 (VQ objective)&lt;/li&gt;
&lt;li&gt;Commitment loss: Encoder의 출력값에 대한 제약을 걸어주는 term으로, 아무 값이 아니라 codebook의 벡터와 가까운 값을 출력하도록 하며 encoder를 최적화 (regularization)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;What is VQGAN&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ogDdx/dJMcadnaCSz/cGrEWKQ4KzPCXDdSsin6sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ogDdx/dJMcadnaCSz/cGrEWKQ4KzPCXDdSsin6sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ogDdx/dJMcadnaCSz/cGrEWKQ4KzPCXDdSsin6sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FogDdx%2FdJMcadnaCSz%2FcGrEWKQ4KzPCXDdSsin6sK%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;1227&quot; height=&quot;476&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;476&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&gt;CNN&lt;/span&gt;의&lt;span&gt; locality bias&lt;/span&gt;와&lt;span&gt; Transformer&lt;/span&gt;의&lt;span&gt; global relation modeling &lt;/span&gt;특성을 함께 활용하여&lt;span&gt; high-resolution image &lt;/span&gt;생성&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CNN을 통해 context-rich visual part에 관한 codebook을 구축&lt;/li&gt;
&lt;li&gt;Transformer를 통해 visual part 간의 관계를 고려한 global composition 학습&lt;/li&gt;
&lt;li&gt;Adversarial 학습 방법론을 활용해 codebook이 중요한 local structure를 충분히 잡아내도록 함.&lt;br /&gt;&amp;rarr; Transformer&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;가 가장 잘하는&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; long-range relation &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;모델링에 집중하도록 하여&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; high resolution&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;의 이미지를 생성할 수 있도록 함&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Architecture&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;image&lt;/span&gt;로부터&lt;span&gt; discrete&lt;/span&gt;한&lt;span&gt; latent embedding&lt;/span&gt;을 추출할 수 있도록&lt;span&gt; codebook(Z) &lt;/span&gt;학습 후&lt;span&gt; codebook&lt;/span&gt;의&lt;span&gt; index&lt;/span&gt;를 예측하는&lt;span&gt; autoregressive&lt;/span&gt;한 방식으로&lt;span&gt; image synthesis &lt;/span&gt;수행&lt;/li&gt;
&lt;li&gt;크게&lt;span&gt; visual feature&lt;/span&gt;를 잘 추출할 수 있는&lt;span&gt; codebook&lt;/span&gt;을 학습시키기 위한 과정&lt;span&gt; (1), &lt;/span&gt;해당&lt;span&gt; codebook&lt;/span&gt;을 기반으로&lt;span&gt; transformer&lt;/span&gt;를 활용한&lt;span&gt; imaeg synthesis &lt;/span&gt;과정&lt;span&gt; (2)&lt;/span&gt;으로 구분된다&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6lWWY/dJMcaf6pCsU/ywd2oGds6Awk4Ez1QG01X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6lWWY/dJMcaf6pCsU/ywd2oGds6Awk4Ez1QG01X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6lWWY/dJMcaf6pCsU/ywd2oGds6Awk4Ez1QG01X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6lWWY%2FdJMcaf6pCsU%2Fywd2oGds6Awk4Ez1QG01X1%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;943&quot; height=&quot;404&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;404&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;Transformer&lt;br /&gt;$p(s)=\prod_i(s_i|s_{&amp;lt;i})$&lt;/li&gt;
&lt;li&gt;VQGAN = $argmin_{z_i\in \mathcal{Z}}||\hat{z}-z_i||$&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Architecture (1) - Training codebook&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;VQVAE와 유사한 방식으로 이미지로부터 discrete한 latent embedding을 추출할 수 있도록 codebook(Z) 학습&lt;/li&gt;
&lt;li&gt;단 perceptual loss를 활용한다는 점, discriminator를 이용한 adversarial training방식으로 진행된다는 점에서 VQVAE와 차이를 보임.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;compression 단계가 없다는 말이고. real이냐 fake이냐를 학습시키는 게 adversarial training 방식&lt;/li&gt;
&lt;/ul&gt;
$$ L_{VQ}(E,G,\mathcal{Z})=||x-\hat{x}||^2+||sg[E(x)]-z_\mathbf{q}||^2_2+||sg[z_\mathbf{q}]-E(x)||_2^2 $$
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Reconstruction loss: 복원된 결과물과 입력값을 비교함으로써 encoder와 decoder를 최적화&lt;/li&gt;
&lt;li&gt;이때 VQGAN의 경우 VGG16을 활용한 perceptual loss*를 추가적으로 활용&lt;/li&gt;
&lt;li&gt;Embedding loss: Codebook의 embedding을 encoder의 결과물과 유사하게 만들어줌으로써 codebook을 최적화&lt;/li&gt;
&lt;li&gt;Commitment loss: Encoder의 출력값에 대한 제약을 걸어주는 term으로, 아무 값이 아니라 codebook의 vector와 가까운 값을 출력하도록 하며 encoder를 최적화&lt;/li&gt;
&lt;li&gt;$$ L_{GAN}=(\{E,G,\mathcal{Z}\},D)=[logD(x)+log(1-D(\hat{x}))] $$&lt;/li&gt;
&lt;li&gt;Discrimination loss: 생성된 결과물에 대해 patch 단위로 real/fake를 구별하는 discriminator (e.g. patchGAN)를 활용하여, 본 loss를 활용하지 않을 때 보다 더욱 perceptually rich한 특성들을 encoding 할 수 있도록 함.&lt;/li&gt;
&lt;/ul&gt;
$$ \mathcal{Q}^*=argmin_{E,G,\mathcal{Z}}max_{D}\mathbb{E}{x\sim p(x)}[\mathcal{L}{VQ}(E,G,\mathcal{Z})+\lambda L_{GAN}(\{E,G,\mathcal{Z}\},D)] $$
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Rec loss와 GAN loss 간 균형을 조절하기 위한 term (일종의 regularization term)&lt;/li&gt;
&lt;li&gt;$$ \lambda=\frac{\nabla_{G_L}[\mathcal{L}{rec}]}{\nabla{G_L}[\mathcal{L}_{GAN}]+\delta} $$&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Architecture (2) - Transformer for image synthesis (&lt;i&gt;unconditional&lt;/i&gt;)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;학습된&lt;span&gt; codebook&lt;/span&gt;에 의해&lt;span&gt; codebook&lt;/span&gt;의&lt;span&gt; index &lt;/span&gt;집합이 산출되면&lt;span&gt; transformer&lt;/span&gt;를&lt;span&gt; auto-regressive&lt;/span&gt;하게 활용하여&lt;span&gt; &amp;ldquo;&lt;/span&gt;다음&lt;span&gt; index&lt;/span&gt;를 예측하는&lt;span&gt;&amp;rdquo; task&lt;/span&gt;로써&lt;span&gt; image synthesis&lt;/span&gt;를 수행하게 됨&lt;/li&gt;
&lt;li&gt;이 때&lt;span&gt; index &lt;/span&gt;예측 시&lt;span&gt; ground truth&lt;/span&gt;는&lt;span&gt; image&lt;/span&gt;에 대해서 미리 구한&lt;span&gt; codebook&lt;/span&gt;의&lt;span&gt; index&lt;/span&gt;가 되며&lt;span&gt;, NLL loss&lt;/span&gt;를 활용하여 학습 수행&lt;/li&gt;
&lt;li&gt;&lt;span&gt;High-resolution imaeg&lt;/span&gt;에 대한&lt;span&gt; generation &lt;/span&gt;학습 시&lt;span&gt; attention mechanism&lt;/span&gt;이&lt;span&gt; quadratic&lt;/span&gt;한 연산 증가 특성을 갖는다는 점을 극복하기 위해&lt;span&gt; sliding attention window &lt;/span&gt;방법론을 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/menpC/dJMcacV9aqQ/x32umMHgZKqyyzJoOXpdM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/menpC/dJMcacV9aqQ/x32umMHgZKqyyzJoOXpdM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/menpC/dJMcacV9aqQ/x32umMHgZKqyyzJoOXpdM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmenpC%2FdJMcacV9aqQ%2Fx32umMHgZKqyyzJoOXpdM1%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;996&quot; height=&quot;327&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Architecture (2) (cont&amp;rsquo;d)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Conditional generation&lt;/span&gt;의 경우 특정한 정보&lt;span&gt;(c)&lt;/span&gt;를 생성 과정에 포함시켜&lt;span&gt; image synthesis&lt;/span&gt;를 수행하게 됨&lt;/li&gt;
&lt;li&gt;예를 들어&lt;span&gt; semantic segmentation map&lt;/span&gt;을 이용하는 경우&lt;span&gt;, &lt;/span&gt;해당&lt;span&gt; map&lt;/span&gt;을 이용해 학습한 또 다른&lt;span&gt; codebook($Z_c$)&lt;/span&gt;을 활용할 수 있음&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1199&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu0ygi/dJMcaaRzP3W/oN75NKIykR4j7Sg1rPkdxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu0ygi/dJMcaaRzP3W/oN75NKIykR4j7Sg1rPkdxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu0ygi/dJMcaaRzP3W/oN75NKIykR4j7Sg1rPkdxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu0ygi%2FdJMcaaRzP3W%2FoN75NKIykR4j7Sg1rPkdxk%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;1199&quot; height=&quot;480&quot; data-origin-width=&quot;1199&quot; data-origin-height=&quot;480&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;Giving condition (e.g. concat)&lt;/li&gt;
&lt;li&gt;$p(s|c)=\prod_i p(s_i|s_{&amp;lt;i},c)$&lt;/li&gt;
&lt;li&gt;NNL (Negative Log Likelihood)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;Result&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Unified Model for Image Synthesis Tasks&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;Condition &lt;/span&gt;정보를 제공하는 방식&lt;span&gt; (vector, &lt;/span&gt;혹은 새로운&lt;span&gt; codebook &lt;/span&gt;정보 등&lt;span&gt;)&lt;/span&gt;을 통해&lt;span&gt; semantic map&lt;/span&gt;으로부터 이미지를 생성하거나&lt;span&gt;, &lt;/span&gt;흐린 이미지로부터 선명한 이미지를 생성하는 방식의&lt;span&gt; image synthesis &lt;/span&gt;가능&lt;/li&gt;
&lt;li&gt;&lt;span&gt;sliding window attention &lt;/span&gt;방식을 통해서 이러한&lt;span&gt; conditional synthesis&lt;/span&gt;를&lt;span&gt; high-resolution image synthesis&lt;/span&gt;에도 적용할 수 있음&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;[출처]: &lt;a href=&quot;https://www.youtube.com/watch?v=xR6Uw_3Huss&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=xR6Uw_3Huss&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=xR6Uw_3Huss&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/2wB6w/dJMb9dHhA4m/1FphY36ER66ZkkoOfaA310/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/hm234/dJMb9hCUS50/bZwP8IKJkSVJJ6pvv4TT2k/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/SR013/dJMb9hCUS51/Io1HigaiizAFjczXX3sAXK/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;[Paper Review] Taming Transformers for High Resolution Image Synthesis(VQGAN)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/xR6Uw_3Huss&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&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;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>딥러닝</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/88</guid>
      <comments>https://chaeniverse.tistory.com/88#entry88comment</comments>
      <pubDate>Fri, 16 Jan 2026 16:51:41 +0900</pubDate>
    </item>
    <item>
      <title>AIxMHC2025</title>
      <link>https://chaeniverse.tistory.com/85</link>
      <description>&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;Latent_Diffusion_Model_page-0001.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caNmkV/btsRboiB8eC/oXpDQuMPvO9CLkVNUBiQQk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caNmkV/btsRboiB8eC/oXpDQuMPvO9CLkVNUBiQQk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caNmkV/btsRboiB8eC/oXpDQuMPvO9CLkVNUBiQQk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaNmkV%2FbtsRboiB8eC%2FoXpDQuMPvO9CLkVNUBiQQk%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0001.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0002.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcE3qZ/btsReswLjPx/HvLdKBLipG7WXjqj9KJskk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcE3qZ/btsReswLjPx/HvLdKBLipG7WXjqj9KJskk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcE3qZ/btsReswLjPx/HvLdKBLipG7WXjqj9KJskk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcE3qZ%2FbtsReswLjPx%2FHvLdKBLipG7WXjqj9KJskk%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0002.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0003.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nhFdi/btsRcbpopji/BqQKlYFZJQAVTz4aXh4waK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nhFdi/btsRcbpopji/BqQKlYFZJQAVTz4aXh4waK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nhFdi/btsRcbpopji/BqQKlYFZJQAVTz4aXh4waK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnhFdi%2FbtsRcbpopji%2FBqQKlYFZJQAVTz4aXh4waK%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0003.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0004.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oj3R4/btsRb8sGjoV/Goaeiu1BGwcXtr7TNTRQR0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oj3R4/btsRb8sGjoV/Goaeiu1BGwcXtr7TNTRQR0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oj3R4/btsRb8sGjoV/Goaeiu1BGwcXtr7TNTRQR0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foj3R4%2FbtsRb8sGjoV%2FGoaeiu1BGwcXtr7TNTRQR0%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0004.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0005.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgQNIs/btsRbmSIfeo/T54oNKkCvL3r8ZzUrRj4yk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgQNIs/btsRbmSIfeo/T54oNKkCvL3r8ZzUrRj4yk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgQNIs/btsRbmSIfeo/T54oNKkCvL3r8ZzUrRj4yk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgQNIs%2FbtsRbmSIfeo%2FT54oNKkCvL3r8ZzUrRj4yk%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0005.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0006.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsTj89/btsRbY4NDdn/lEa6VnNJHrv9cV93jZK6R0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsTj89/btsRbY4NDdn/lEa6VnNJHrv9cV93jZK6R0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsTj89/btsRbY4NDdn/lEa6VnNJHrv9cV93jZK6R0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsTj89%2FbtsRbY4NDdn%2FlEa6VnNJHrv9cV93jZK6R0%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0006.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0007.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbkhU0/btsRclrSmmM/oUfQBcST4PxAIG2kfeZvR0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbkhU0/btsRclrSmmM/oUfQBcST4PxAIG2kfeZvR0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbkhU0/btsRclrSmmM/oUfQBcST4PxAIG2kfeZvR0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbkhU0%2FbtsRclrSmmM%2FoUfQBcST4PxAIG2kfeZvR0%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0007.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0008.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DdFVP/btsRbpuSWih/OE9ejMDv6ssLJQ4yKcDUU0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DdFVP/btsRbpuSWih/OE9ejMDv6ssLJQ4yKcDUU0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DdFVP/btsRbpuSWih/OE9ejMDv6ssLJQ4yKcDUU0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDdFVP%2FbtsRbpuSWih%2FOE9ejMDv6ssLJQ4yKcDUU0%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0008.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0009.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSnzp/btsRd3KNgbw/0ik6Mkjnacnu3TPWkOSR7K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSnzp/btsRd3KNgbw/0ik6Mkjnacnu3TPWkOSR7K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSnzp/btsRd3KNgbw/0ik6Mkjnacnu3TPWkOSR7K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSnzp%2FbtsRd3KNgbw%2F0ik6Mkjnacnu3TPWkOSR7K%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0009.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0010.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RD5ru/btsRdIGIZhy/DU69grCX6yR9krYgfmS6sK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RD5ru/btsRdIGIZhy/DU69grCX6yR9krYgfmS6sK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RD5ru/btsRdIGIZhy/DU69grCX6yR9krYgfmS6sK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRD5ru%2FbtsRdIGIZhy%2FDU69grCX6yR9krYgfmS6sK%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0010.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0011.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Oi9uh/btsRcykhLxN/Q2QT89fwMt6kQMlb2ui72k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Oi9uh/btsRcykhLxN/Q2QT89fwMt6kQMlb2ui72k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Oi9uh/btsRcykhLxN/Q2QT89fwMt6kQMlb2ui72k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOi9uh%2FbtsRcykhLxN%2FQ2QT89fwMt6kQMlb2ui72k%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0011.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0012.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bczelG/btsRbskTvoF/a1hfeNgOEQvd6JTkixsW0K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bczelG/btsRbskTvoF/a1hfeNgOEQvd6JTkixsW0K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bczelG/btsRbskTvoF/a1hfeNgOEQvd6JTkixsW0K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbczelG%2FbtsRbskTvoF%2Fa1hfeNgOEQvd6JTkixsW0K%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0012.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0013.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ADolI/btsRbIHXyvA/Ql7PyKj5yPAfY3XCmdkwDk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ADolI/btsRbIHXyvA/Ql7PyKj5yPAfY3XCmdkwDk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ADolI/btsRbIHXyvA/Ql7PyKj5yPAfY3XCmdkwDk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FADolI%2FbtsRbIHXyvA%2FQl7PyKj5yPAfY3XCmdkwDk%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0013.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0014.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfQvf2/btsRbWlClkW/JPXsf4ymCWIuaSNesXwHa1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfQvf2/btsRbWlClkW/JPXsf4ymCWIuaSNesXwHa1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfQvf2/btsRbWlClkW/JPXsf4ymCWIuaSNesXwHa1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfQvf2%2FbtsRbWlClkW%2FJPXsf4ymCWIuaSNesXwHa1%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0014.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0015.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J6YPt/btsRcm5qjdR/mHad2T4uexjMBhWTvfPqPK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J6YPt/btsRcm5qjdR/mHad2T4uexjMBhWTvfPqPK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J6YPt/btsRcm5qjdR/mHad2T4uexjMBhWTvfPqPK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ6YPt%2FbtsRcm5qjdR%2FmHad2T4uexjMBhWTvfPqPK%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0015.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0016.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K9jr7/btsResKiTc3/nSGQyI0SBhIKibiDgzZ8qk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K9jr7/btsResKiTc3/nSGQyI0SBhIKibiDgzZ8qk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K9jr7/btsResKiTc3/nSGQyI0SBhIKibiDgzZ8qk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK9jr7%2FbtsResKiTc3%2FnSGQyI0SBhIKibiDgzZ8qk%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0016.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0017.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYZPTs/btsRdAhNIVA/P3NHxisvy9V1s05m2gsJ80/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYZPTs/btsRdAhNIVA/P3NHxisvy9V1s05m2gsJ80/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYZPTs/btsRdAhNIVA/P3NHxisvy9V1s05m2gsJ80/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYZPTs%2FbtsRdAhNIVA%2FP3NHxisvy9V1s05m2gsJ80%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0017.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0018.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nrgjw/btsRet3wzyP/JSiMxNGK3w4IaArRS9fogK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nrgjw/btsRet3wzyP/JSiMxNGK3w4IaArRS9fogK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nrgjw/btsRet3wzyP/JSiMxNGK3w4IaArRS9fogK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnrgjw%2FbtsRet3wzyP%2FJSiMxNGK3w4IaArRS9fogK%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0018.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0019.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTbYau/btsRdF4jtIe/nj8N98ZBpFCOIvr7S6glek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTbYau/btsRdF4jtIe/nj8N98ZBpFCOIvr7S6glek/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTbYau/btsRdF4jtIe/nj8N98ZBpFCOIvr7S6glek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTbYau%2FbtsRdF4jtIe%2Fnj8N98ZBpFCOIvr7S6glek%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0019.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0020.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p2HO0/btsRbYjreAe/oCfyzyVkZdmzVpFqJHDNbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p2HO0/btsRbYjreAe/oCfyzyVkZdmzVpFqJHDNbK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p2HO0/btsRbYjreAe/oCfyzyVkZdmzVpFqJHDNbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp2HO0%2FbtsRbYjreAe%2FoCfyzyVkZdmzVpFqJHDNbK%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0020.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0021.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcZh1Q/btsRbnxhxmR/nJpK4Ew45ngNe8ItShqLkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcZh1Q/btsRbnxhxmR/nJpK4Ew45ngNe8ItShqLkk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcZh1Q/btsRbnxhxmR/nJpK4Ew45ngNe8ItShqLkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcZh1Q%2FbtsRbnxhxmR%2FnJpK4Ew45ngNe8ItShqLkk%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0021.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Latent_Diffusion_Model_page-0022.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xHSUM/btsRdBnthh1/oHmlyZK4CmwjEHooDcUYr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xHSUM/btsRdBnthh1/oHmlyZK4CmwjEHooDcUYr0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xHSUM/btsRdBnthh1/oHmlyZK4CmwjEHooDcUYr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxHSUM%2FbtsRdBnthh1%2FoHmlyZK4CmwjEHooDcUYr0%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;756&quot; height=&quot;567&quot; data-filename=&quot;Latent_Diffusion_Model_page-0022.jpg&quot; data-origin-width=&quot;756&quot; data-origin-height=&quot;567&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>딥러닝</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/85</guid>
      <comments>https://chaeniverse.tistory.com/85#entry85comment</comments>
      <pubDate>Thu, 16 Oct 2025 15:28:35 +0900</pubDate>
    </item>
    <item>
      <title>StarGAN 논문 리뷰</title>
      <link>https://chaeniverse.tistory.com/83</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
  tex2jax: {
  	inlineMath: [['$','$'], ['\\(','\\)']]
  },
  &quot;HTML-CSS&quot;: {
  	linebreaks: { automatic: true },
    scale: 100,
    minScaleAdjust: 50,
    matchFontHeight: true
  },
  SVG: {
  	linebreaks: { automatic: true }
  }
});
&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;arxiv : &lt;a href=&quot;https://arxiv.org/pdf/1711.09020&quot;&gt;https://arxiv.org/pdf/1711.09020&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;code : &lt;a href=&quot;https://github.com/imlixinyang/StarGAN&quot;&gt;https://github.com/imlixinyang/StarGAN&lt;/a&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;1. Introduction&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 논문이 다루는 task&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;single model을 사용해서 multiple domain에서 image-to-image translation을 수행한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Input: 웃는 얼굴&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Output: Blond hair, Gender, Aged, Pale skin, .. etc&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Figure 1]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;581&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HMZYG/btsK7FDM0Cp/BSf5s3qKH9UqNuCVpvn1LK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HMZYG/btsK7FDM0Cp/BSf5s3qKH9UqNuCVpvn1LK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HMZYG/btsK7FDM0Cp/BSf5s3qKH9UqNuCVpvn1LK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHMZYG%2FbtsK7FDM0Cp%2FBSf5s3qKH9UqNuCVpvn1LK%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;1260&quot; height=&quot;581&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;581&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;h3 data-ke-size=&quot;size23&quot;&gt;2. 해당 task에서 기존 연구 한계점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 방법들은 two domain 이상 다루는 데 있어서 scalability나 robustness에서 한계를 보인다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Related Work&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[GAN]&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;discriminator와 generator를 이용해서 real 이미지와 fake 이미지를 분간한다.&lt;/li&gt;
&lt;li&gt;fake image를 realistic에 가깝게 학습시킨다.&lt;/li&gt;
&lt;li&gt;이 과정에서 adversarial loss가 쓰인다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Conditional GAN]&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;conditional image generation는 학습시킬 때 사전 정보(prior)를 주는 것을 의미한다.&lt;/li&gt;
&lt;li&gt;예) 주어진 text description과 매우 관련 있는 이미지만 생성할 수 있다.&lt;/li&gt;
&lt;li&gt;이 논문에서 conditional domain information을 주어 다양한 target domain으로 image translation이 가능하게 한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이때, &lt;b&gt;scalable GAN framework&lt;/b&gt;가 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Image-to-Image Translation]&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;최근 연구는 image-to-image translation에서 우수한 결과를 냈다.&lt;/li&gt;
&lt;li&gt;하지만 이런 연구들은 각 도메인 쌍마다 다른 모델들을 학습시켜야 하기 때문에, multiple domain을 다루는 데 한계를 갖는다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;반면 우리의 framework는 오직 single model만을 사용해서 multiple domain 간의 관계를 학습한다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 제안 방법론&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Main Idea&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Star Generative Adversarial Networks&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;StarGAN을 이용해서 multiple dataset을 통합시킬 것이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1. Multi-Domain Image-to-Image Translation&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;single generator G가 multiple domain을 실제와 맞게 잘 mapping하도록 학습시킨다.&lt;/li&gt;
&lt;li&gt;target domain label c가 주어졌을 때, input image x를 output image y로 출력시키도록 G를 훈련시킨다.&lt;/li&gt;
&lt;li&gt;$G(x,c)\rightarrow y$&lt;/li&gt;
&lt;li&gt;우리는 random하게 target domain label c를 생성하고, G는 input image를 translate 하는 걸 학습한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;또한 보조 분류기를 도입하여 multiple domain을 control한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;discriminator는 source(데이터)와 domain label에 대해 확률 분포를 만들어낸다.&lt;/li&gt;
&lt;li&gt;$D:x\rightarrow\{D_{src}(x),D_{cls}(x)\}$&lt;/li&gt;
&lt;li&gt;Figure 3은 traning process를 보여준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Figure 3]&lt;/b&gt;&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;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjqMyl/btsK7cPmOH5/n6yk6Ax4o68ISqUmlHVkkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjqMyl/btsK7cPmOH5/n6yk6Ax4o68ISqUmlHVkkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjqMyl/btsK7cPmOH5/n6yk6Ax4o68ISqUmlHVkkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjqMyl%2FbtsK7cPmOH5%2Fn6yk6Ax4o68ISqUmlHVkkK%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;1242&quot; height=&quot;479&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;479&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;discriminator D와 generator G로 이뤄져 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;D는 real과 fake image를 구분하는 걸 학습하고,&lt;/li&gt;
&lt;li&gt;real image와 real image에 대응하는 도메인을 분류하도록 학습한다.&lt;/li&gt;
&lt;li&gt;G는 image와 target domain label을 input으로 받고 fake image를 만든다.&lt;/li&gt;
&lt;li&gt;target domain label은 input image와 결합된다.&lt;/li&gt;
&lt;li&gt;G는 original domain label이 주어졌을 때, fake image에서 original image를 재구성한다.&lt;/li&gt;
&lt;li&gt;G는 real image와 분간할 수 없고 target domain으로 분류되도록 image를 만든다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Adversarial Loss]&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;real image로부터 분간할 수 없도록 생성된 이미지를 만들기 위해 adversarial loss를 사용한다. (이 Eq (1)은 이따가 Eq (7)에서 변형된다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathcal{L}_{adv}=\mathbb{E}[logD_{src}(x)]+\\\mathbb{E}_{x,c}[log(1-D_{src}(G(x,c)))],\;\;\;(1) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 여기서 G는 input image x와 target domain label c가 주어졌을 때 image G(x,c)를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;D는 real image와 fake image를 구별한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 논문에서 우리는 $D_{src}(x)$를 D에 의해 주어진 source들에 대한 확률 분포라고 가정한다.&lt;/li&gt;
&lt;li&gt;generator G는 이 목적 함수를 최소화하려고 하고, discriminator D는 이를 최대화하려고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Domain Classification Loss]&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;input image x와 target domain label인 c가 주어졌을 때 x를 target domain c로 분류된 output image y로 변환하는 것이다.&lt;/li&gt;
&lt;li&gt;discriminator D 위에 보조 분류기를 추가하고, D와 G를 최적화할 때 domain classification loss를 사용한다.&lt;/li&gt;
&lt;li&gt;목적 함수를 두 개로 나눈다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실제 이미지를 최적화하는 데 사용되는 domain classification loss&lt;/li&gt;
&lt;li&gt;가짜 이미지를 최적화하는 데 사용되는 domain classification loss&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;전자는 아래와 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathcal{L}^r_{cls}=\mathbb{E}_{x,c'}[-logD_{cls}(c'|x)],\;\;\;\;(2) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 여기서 $D_{cls}(c'|x)$는 D에 의해 계산된 domain label에 대한 확률 분포이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 목적함수를 최소화하여 D는 실제 이미지 x를 해당 원본 도메인 c&amp;rsquo;로 분류하는 방법을 학습한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;fake image의 도메인 분류를 위한 loss function은 아래와 같다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ L^f_{cls}=\mathbb{E}_{x,c}[-logD_{cls}(c|G(x,c))].\;\;\; (3) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; G는 이 목적함수를 최소화하여 target domain c로 분류될 수 있도록 이미지를 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Reconstruction Loss]&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;adversarial loss와 classification loss를 최소화하여, G는 realistic하고 올바른 target domain으로 분류되는 image를 생성하도록 학습된다.&lt;/li&gt;
&lt;li&gt;그러나 Eq (1)과 Eq (3)을 최소화하는 것만으로는,&lt;b&gt;도메인 관련된 부분만 변경한다는 것을 보장하지 않는다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;변환된 이미지가 입력 이미지의 내용을 보존하면서&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;이 문제를 해결하기 위해 generator에 cycle consistency loss를 적용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathcal{L}_{rec}=\mathbb{E}_{x,c,c'}=[||x-G(G(x,c),c')||_1],\;\;\;(4) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 여기서 G는 변환된 이미지 G(x,c)와 원래 도메인 레이블 c&amp;rsquo;을 입력으로 받아 원본 이미지 x를 재구성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재구성 손실로 L1-norm을 채택한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;하나의 생성기를 두 번 사용한다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;원본 이미지를 target domain의 이미지로 변환하고, 그 다음 변환된 이미지로부터 원본 이미지를 재구성한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Full Objective]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 G와 D를 optimize하기 위해 objective function을 다음과 같이 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathcal{L}_D=-\mathcal{L}_{adv}+\lambda_{cls}\mathcal{L}^r_{cls},\;\;\;(5)\\\mathcal{L}_G=\mathcal{L}_{adv}+\lambda_{cls}\mathcal{L}{cls}^f+\lambda_{rec}\mathcal{L}_{rec},\;\;\;(6) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 여기서 $\lambda_{cls}$와 $\lambda_{rec}$은 domain classification loss와 reconstruction loss를 adversarial loss와 비교하여 상대적인 중요성을 조절하는 하이퍼파라미터이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 모든 실험에서 $\lambda_{cls}=1$로 $\lambda_{rec}=10$으로 둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;regularization parameter&lt;/b&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2. Training with Multiple Datasets&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;StarGAN의 이점은 여러 데이터셋을 동시에 통합하여 서로 다른 유형의 레이블을 포함할 수 있다는 점이다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문제는 각 데이터셋에 레이블 정보가 부분적으로만 알려져 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CelebA는 머리 색상 및 성별과 같은 속성이 레이블에 포함돼 있지만, 표정에 대한 label은 없다.&lt;/li&gt;
&lt;li&gt;변환된 이미지 G(x,c)에서 input image x를 재구성할 때 label vector c&amp;rsquo;에 대한 완전한 정보가 필요하기 떄문에 문제가 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Mask Vector]&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;이 문제를 해결하기 위해, StarGAN에서 지정되지 않은 레이블은 무시하고,&lt;/li&gt;
&lt;li&gt;명시적으로 알려진 레이블에 집중할 수 있도록 하는 mask vector m을 도입한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \tilde{c}=[c_1,...,c_n,m],\;\;\;(7) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;masking.. dropout.. overfitting 방지하는 식으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일부 데이터를 없애고 마치 처음부터 없었던 것처럼 training 시키면 그거에 대해서 안정성을 보장할 수 있는..&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;[Training Strategy]&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;다중 데이터셋으로 StarGAN을 훈련할 때, 우리는 Eq (7)에서 정의된 도메인 레이블 $\tilde{c}$을 generator에 input으로 넣는다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;generator는 0 벡터인 지정되지 않은 레이블은 무시하고, 명시적으로 주어진 레이블에 집중하게 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;generator의 구조는 단일 데이터셋으로 훈련할 때와 같지만, 입력 레이블 $\tilde{c}$의 차원만 다르다.&lt;/li&gt;
&lt;li&gt;multi-task 학습 환경에서 모델을 훈련시킨다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이때 discriminator는 알려진 라벨과 관련된 classification error만 최소화하려고 한다.&lt;/li&gt;
&lt;li&gt;예를 들어, CelebA의 이미지를 사용하여 훈련할 경우, discriminator는 CelebA 속성과 관련된 라벨의 classification error만 최소화하며, RaFD와 관련된 얼굴 표정은 고려하지 않는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;CelebA와 RaFD를 번걸아 가며 사용하면서, discriminator는 두 데이터셋 모두에 대한 모든 discriminative feature를 학습하고,&lt;/li&gt;
&lt;li&gt;generator는 두 데이터셋 모두의 모든 레이블을 조절하는 방법을 학습한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Figure 4]&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1397&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ueeBt/btsK66PcqlB/472vcJQYoPkNHecH22RmE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ueeBt/btsK66PcqlB/472vcJQYoPkNHecH22RmE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ueeBt/btsK66PcqlB/472vcJQYoPkNHecH22RmE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FueeBt%2FbtsK66PcqlB%2F472vcJQYoPkNHecH22RmE0%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;1397&quot; height=&quot;615&quot; data-origin-width=&quot;1397&quot; data-origin-height=&quot;615&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; CelebA 데이터셋의 얼굴 feature translation 결과.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 컬럼은 input image이고, 다음 네 열은 single feature translation이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 열은 multiple feature translation을 보여준다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. Implementation&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Improved GAN Training]&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;training process를 안정화하고, 높은 퀄리티의 이미지를 생성하기 위해 Eq(1)을 Waserstein GAN 목적함수와 gradient penalty로 대체한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$$ \mathcal{L}_{adv}=\mathbb{E}[D_{src}(x)]-\mathbb{E}_{x,c}[D_{src}(G(x,c))]\\-\lambda_{gp}\mathbb{E}_{\hat{x}}[(||\bigtriangledown{\hat{x}}D_{src}(\hat{x})||_2-1)^2],\;\;\;(8) $$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 여기서 $\hat{x}$는 실제 이미지와 생성된 이미지 쌍 사이의 직선을 따라 균일하게 샘플링된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 실험에서 $\lambda_{gp}=10$을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Waseretein GAN.. 분포 간의 distance를 계산할 때 사용되는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;generator에서 생성된 거랑 실제 이미지의 분포가 있을텐데&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;b&gt;[Network Architecture]&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;StarGAN은 downsampling을 위해 2 stride size인 convolutional layers로 구성된 generator network를 가지고 있으며,upsampling을 위해 2 stirde size인 transposed convolutional layers를 갖고 있다.&lt;/li&gt;
&lt;li&gt;여섯 개의 residual blocks와&lt;/li&gt;
&lt;li&gt;우리는 generator에 대해 instance normalization을 적용하고, discriminator에는 적용하지 않는다.&lt;/li&gt;
&lt;li&gt;우리는 discriminator networ에서 PatchGAN을 이용하여 local image 패치가 실제인지 가짜인지를 분류한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분류기 PatchGAN&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[architecture]&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;generator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;840&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o4tva/btsK8uO0AXS/ZyUgkuryp9ISsqLmoKYl9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o4tva/btsK8uO0AXS/ZyUgkuryp9ISsqLmoKYl9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o4tva/btsK8uO0AXS/ZyUgkuryp9ISsqLmoKYl9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo4tva%2FbtsK8uO0AXS%2FZyUgkuryp9ISsqLmoKYl9K%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;1417&quot; height=&quot;840&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;840&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;discriminator&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ai1oq/btsK7Fqg4Wl/Y3j9KFgQbnL0pUjp0S7c1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ai1oq/btsK7Fqg4Wl/Y3j9KFgQbnL0pUjp0S7c1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ai1oq/btsK7Fqg4Wl/Y3j9KFgQbnL0pUjp0S7c1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAi1oq%2FbtsK7Fqg4Wl%2FY3j9KFgQbnL0pUjp0S7c1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1388&quot; height=&quot;650&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;650&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;h3 data-ke-size=&quot;size23&quot;&gt;Contribution&lt;/h3&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 실험 및 결과&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우리는 이 섹션에서 facial attribute transfer에 대해 최근 방법과 StarGAN을 먼저 비교한다.&lt;/li&gt;
&lt;li&gt;다음으로, facial expression synthesis에 대해 classification experiment를 수행한다.&lt;/li&gt;
&lt;li&gt;마지막으로, StarGAN이 multiple datasets로부터 image-to-image translation을 학습할 수 있다는 실험적인 결과를 보여준다.&lt;/li&gt;
&lt;li&gt;모든 실험은 training phase동안 볼수 없는 image로부터의 model output을 사용하여 진행되었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Dataset&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CelebA(웃는 얼굴), RaFD(?)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Baseline&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Results&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Conclusion&lt;/h3&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;&lt;a href=&quot;https://oranz.tistory.com/48&quot;&gt;https://oranz.tistory.com/48&lt;/a&gt; : stargan에 대해서 뜯어보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1711.09020&quot;&gt;https://arxiv.org/abs/1711.09020&lt;/a&gt; : stargan 논문&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aistudy9314.tistory.com/52&quot;&gt;https://aistudy9314.tistory.com/52&lt;/a&gt; : StarGAN 논문 리뷰 해놓은 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.kaggle.com/code/songseungwon/stargan-tutorial-with-15-steps-make-fake-images&quot;&gt;https://www.kaggle.com/code/songseungwon/stargan-tutorial-with-15-steps-make-fake-images&lt;/a&gt; : this is StarGAN tutorial.. 이거 치는 중임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://beausty23.tistory.com/112&quot;&gt;https://beausty23.tistory.com/112&lt;/a&gt; : StarGAN pretrained 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;</description>
      <category>논문 리뷰</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/83</guid>
      <comments>https://chaeniverse.tistory.com/83#entry83comment</comments>
      <pubDate>Thu, 5 Dec 2024 16:01:49 +0900</pubDate>
    </item>
    <item>
      <title>머신러닝에서 분류 과제 수행 단계</title>
      <link>https://chaeniverse.tistory.com/81</link>
      <description>&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;머신러닝은 크게 prediction와 classification으로 나뉘어 집니다.&lt;/li&gt;
&lt;li&gt;본 포스팅에서는 전처리 및 모델링 과정에서 정교한 classification 작업을 수행하기 위해 필요한 단계들을 설명합니다.&lt;/li&gt;
&lt;li&gt;이는 gold standard는 아니므로 참고용으로 봐주시기 바랍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;전처리 단계&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1차적인 변수 탐색&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;범주형 변수의 경우 2x2 table, odds ratio를 그려 변수의 영향력을 점검합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;odds ratio가 10 이상이거나 지나치게 낮은 경우 해당 변수를 제거할 지 의논이 필요합니다.&lt;/li&gt;
&lt;li&gt;odds ratio가 지나치게 높거나 낮은 경우 sensitivity, specificity 값이 극단적인 경향을 띕니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;연속형 변수의 경우 기초 통계량(mean, sd 등)과 histogram을 출력하여 변수의 영향력을 점검합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2차적인 변수 탐색&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연속형 변수들 간의 다중공선성을 VIF 지표로 점검하기 전에, 결측치를 제거 혹은 대체(imputation) 해줍니다.&lt;/li&gt;
&lt;li&gt;결측치가 40%가 넘는 경우, 변수의 설명력이 없다고 판단하여 해당 변수를 제거합니다.&lt;/li&gt;
&lt;li&gt;imputation은 여러 기법이 있지만, test set 혹은 다른 data set이 들어왔을 때 동일한 지표를 보다 쉽게 적용하기 위해 간단한 기법을 사용합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;연속형 변수의 경우 median(mean보다 극단값의 영향을 덜 받습니다.), 범주형 변수의 경우 mode(최빈값)을 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;결측치 대체 후 연속형 변수 간의 VIF 지수를 구한 후, VIF 지수가 10 이상이면 해당 변수를 제거합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;VIF 기준으로 변수 제거할 때에는, 10이 넘는 변수들을 한 번에 제거하는 것이 아니라, 하나씩 제거하면서 추이를 관찰합니다.&lt;/li&gt;
&lt;li&gt;VIF cutoff는 주관적으로 결정할 수 있으나, 10이 넘는 변수는 무조건 제거하는 것이 좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;범주형 변수의 변환&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;범주형 변수의 경우 numerical type으로 변환해 주기 위해 one-hot encoding 등을 수행합니다.&lt;/li&gt;
&lt;li&gt;머신러닝에서 one-hot encoding을 주로 사용하지만, 어떤 모델을 쓰냐에 따라 다중공선성의 우려가 있기 때문에 dummy encoding을 사용합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;dummy encoding이란, category 중 하나를 reference로 두고 더미 변환하는 것을 의미합니다.&lt;/li&gt;
&lt;li&gt;이때, reference category는 [0, 0, 0, ..., 0]의 값을 갖습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, category = ['1','2','3','4']으로 주어져 있을 때 '1'을 reference로 둔다면, category = '1'은 컬럼에 포함되지 않고 나머지들만 컬럼에 포함됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;train set에서의 median, mode를 test set에도 동일하게 적용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정규화, 표준화 과정&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연속형 변수에서 scale의 차이가 심할 경우 모델 설명력에 영향을 미칠 수 있기 때문에 정규화 또는 표준화 작업이 필요합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;주로 MinMaxScaler 혹은 Standardization 기법을 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Standardization을 사용한다고 했을 때, train set에서의 mean, sd를 test set에도 동일하게 적용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;변수 선택&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;머신러닝에서 feature의 개수가 많을수록 설명력은 높아지지만, overfitting의 문제가 발생할 수 있습니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이를 방지하기 위해 hyperparameter 최적화 전에 변수 선택 과정을 거칩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;변수 선택 방법으로는 여러 가지가 있으나, 여기서는 RFE (Recursice Feature Elimination)을 사용합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이는 Backward elimination과 유사한 방법입니다.&lt;/li&gt;
&lt;li&gt;RFE 중에서도 RFE with 5-fold stratified cross-validation을 사용합니다.&lt;/li&gt;
&lt;li&gt;RFE with cv에 대한 성능(?) 지표로 한 개를 고를 수 있는데, 여기서는 AUROC score를 사용합니다.&lt;/li&gt;
&lt;li&gt;RFE with cv 결과 graph를 토대로 5개의 feature를 선정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Modeling 과정&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앞선 전처리 단계를 모두 거친 후 Modeling 과정을 수행합니다.&lt;/li&gt;
&lt;li&gt;머신러닝 모델로 XGboost, Randon Forest, Support Vector Machine, Logistic Regression, Multi-layer Perceptron을 사용합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&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;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;먼저 whole dataset을 3:1로 stratified split을 수행합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3이 train set이고, 1이 test set입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;train set에서 10-fold stratified cross validation을 수행합니다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최적의 hyperparameter 조합을 찾기 위해서 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;10-fold cv를 통해 train / val set으로 나뉘어집니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;train set을 표준화합니다.&lt;/li&gt;
&lt;li&gt;표준화된 train data의 mean, sd를 갖고 val set을 표준화합니다.&lt;/li&gt;
&lt;li&gt;10-fold cv를 통해 구한 성능에 평균을 취합니다.&lt;/li&gt;
&lt;li&gt;이 평균치가 제일 높은 hyperparameter 조합을 저장합니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;효율성을 높이기 위해 bayesian optimization을 사용합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이외에도 grid search, random search 등을 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;전체 train data를 대상으로 다시 표준화를 실시합니다.&lt;/li&gt;
&lt;li&gt;이렇게 표준화된 train data와 앞서 찾은 best hyperparameter 조합을 갖고 model을 적합시킵니다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;이 모델을 a 모델이라 하겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;train data의 mean, sd를 갖고 test data를 표준화합니다.&lt;/li&gt;
&lt;li&gt;a 모델에 test data를 넣고 performance metrics를 출력합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1~3번 작업을 총 50번 반복합니다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;subject selection bias를 피하고 모델의 robustness를 향상시키기 위함입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;50번의 performance metrics의 평균을 구합니다.&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;--&amp;gt; 이것이 저희 모델의 최종 성능이 됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;performance metrics로는, accuracy, precision, recall (sensiticity), F1-score, area under the receiver operating characteristic curve (AUC-ROC) 등이 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>머신러닝</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/81</guid>
      <comments>https://chaeniverse.tistory.com/81#entry81comment</comments>
      <pubDate>Thu, 24 Oct 2024 15:58:49 +0900</pubDate>
    </item>
    <item>
      <title>Logistic Regression</title>
      <link>https://chaeniverse.tistory.com/80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
  tex2jax: {
  	inlineMath: [['$','$'], ['\\(','\\)']]
  },
  &quot;HTML-CSS&quot;: {
  	linebreaks: { automatic: true },
    scale: 100,
    minScaleAdjust: 50,
    matchFontHeight: true
  },
  SVG: {
  	linebreaks: { automatic: true }
  }
});
&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Introduction&lt;/h3&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;background-color: #f6e199;&quot;&gt;closed form이 존재&lt;/span&gt;합니다.&lt;/li&gt;
&lt;li&gt;선형회귀분석의 $\hat{\beta}$는 $(X^TX)^{-1}X^Ty$로 구할 수 있습니다.&lt;/li&gt;
&lt;li&gt;그러나 로지스틱 회귀분석은 그렇지 않습니다.&lt;/li&gt;
&lt;li&gt;로지스틱 회귀분석에서 좋은 모델이란, &lt;u&gt;정답 범주일 확률을 크게 산출&lt;/u&gt;하고, &lt;u&gt;정답이 아닌 범주를 작게 산출&lt;/u&gt;하는 모형입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Likelihood function&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUtWWp/btsJHyr0AvH/AzoKF9qCF6mMEPaBFkhOT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUtWWp/btsJHyr0AvH/AzoKF9qCF6mMEPaBFkhOT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUtWWp/btsJHyr0AvH/AzoKF9qCF6mMEPaBFkhOT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUtWWp%2FbtsJHyr0AvH%2FAzoKF9qCF6mMEPaBFkhOT0%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;786&quot; height=&quot;508&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;508&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;*이전 슬라이드에서 model A와 model B라는 예시가 등장했고, model A의 성능이 더 우수한 것으로 나타났습니다.&lt;/li&gt;
&lt;li&gt;model A가 더 우수하다는 것을, 어떠한 지표로 정의할 수 있고, 이를 likelihood라고 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;likelihood는 각각의 객체들에 대해서 정답 클래스로 분류될 확률을 말합니다.&lt;/li&gt;
&lt;li&gt;오른쪽 표에서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;노란색 동그라미&lt;/span&gt; 친 값들이 각각의 객체에 대한 likelihood입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;만약 모든 객체들이 독립적으로(i.i.d) 산출되면, 각각의 likelihood는 $P(A,B)=P(A)\cdot P(B)$로 계산할 수 있습니다.&lt;/li&gt;
&lt;/ul&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;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cC6V0a/btsJIVTRbIS/6wbc6kFlOmDfSHV5Q3dzjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC6V0a/btsJIVTRbIS/6wbc6kFlOmDfSHV5Q3dzjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC6V0a/btsJIVTRbIS/6wbc6kFlOmDfSHV5Q3dzjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC6V0a%2FbtsJIVTRbIS%2F6wbc6kFlOmDfSHV5Q3dzjK%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;816&quot; height=&quot;568&quot; data-origin-width=&quot;816&quot; data-origin-height=&quot;568&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;/li&gt;
&lt;li&gt;데이터 셋에 대한 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;likelihood&lt;/span&gt;는 각각의 &lt;span style=&quot;background-color: #dddddd;&quot;&gt;likelihood&lt;/span&gt;를 전부 곱한 값입니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;likelihood&lt;/span&gt;는 확률의 개념이기 때문에 0부터 1사이의 값을 갖습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, 계속 곱할수록 0으로 수렴합니다.&lt;/li&gt;
&lt;li&gt;이를 해결하기 위해 &lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;log likelihood&lt;/span&gt;를 이용합니다.&lt;/li&gt;
&lt;li&gt;*log 함수는 &lt;u&gt;단조 증가&lt;/u&gt; 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;likelihood 관점에서 봤을 때, 값이 큰 모형이 데이터를 더 잘 설명하는 모형입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;likelihood를 크게 만든다. =&amp;gt; log likelihood를 크게 만든다. =&amp;gt; 음의 log likelihood를 작게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;식으로 표현하면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$Max\ likelihood=Max\ log(L)=Min\ -log(L)$&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;MLE&lt;/b&gt;(Maximum Likelihood Estimator)가 등장합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 셋이 가질 수 있는 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;likelihood를 maximize하는 coefficient&lt;/span&gt;를 찾는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Maximum Likelihood Estimation&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4I3cR/btsJG2Ab5Ai/5zhgfCds3LKkcPXh8AilZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4I3cR/btsJG2Ab5Ai/5zhgfCds3LKkcPXh8AilZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4I3cR/btsJG2Ab5Ai/5zhgfCds3LKkcPXh8AilZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4I3cR%2FbtsJG2Ab5Ai%2F5zhgfCds3LKkcPXh8AilZk%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;781&quot; height=&quot;592&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;592&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;여기서는 수학적인 trick을 이용해서 로지스틱 회귀분석의 mle 식을 구하고자 합니다.&lt;/li&gt;
&lt;li&gt;i번째 객체의 likelihood는 P(y=1)로 표현할 수 있습니다.&lt;br /&gt;$x_i$와 $y_i$를 갖고 likelihood를 계산하면, 정답 범주가 1일때는 $\sigma(\mathbf{x}_i|\mathbf{\beta})$이고,&lt;br /&gt;정답 범주가 0일 때는 $1-\sigma(\mathbf{x}_i|\mathbf{\beta})$가 됩니다.&lt;br /&gt;=&amp;gt; 로지스틱 회귀분석에서 이는 하나로 합쳐서 나타낼 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$P(\mathbf{x}_i,y_i|\mathbf{\beta})=\sigma(\mathbf{x}_i|\beta)^{y_i}(1-\sigma(\mathbf{x}_i)|\mathbf{\beta})^{1-y_i}$&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8IQ0q/btsJIjASwZg/RuHKcR2L7FTIIhYSpVxKbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8IQ0q/btsJIjASwZg/RuHKcR2L7FTIIhYSpVxKbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8IQ0q/btsJIjASwZg/RuHKcR2L7FTIIhYSpVxKbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8IQ0q%2FbtsJIjASwZg%2FRuHKcR2L7FTIIhYSpVxKbk%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;772&quot; height=&quot;563&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;563&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;전체 데이터 셋에 대한 likelihood는 아래와 같이 계산할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$L(\mathbf{X},\mathbf{y}|\mathbf{\beta})=\prod_{i=1}^N P(\mathbf{x_i},y_i|\mathbf{\beta})=\prod_{i=1}^N \sigma(\mathbf{x}_i|\mathbf{\beta})^{y_i}(1-\sigma(\mathbf{x}_i|\mathbf{\beta}))^{1-y_i}$&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;likelihood를 maximize 한다는 것은, 곧 log likelihood를 최대화 한다는 말과 같습니다.&lt;/li&gt;
&lt;li&gt;$\prod$에 log를 씌우면 $\sum$이 나옵니다. 식은 아래와 같습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$logL(\mathbf{X},\mathbf{y}|\mathbf{\beta})=\sum_{i=1}^{N}y_i log\sigma(\mathbf{x}_i|\mathbf{\beta})+(1-y_i)log(1-\sigma(\mathbf{x}_i|\mathbf{\beta}))$&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;background-color: #ffc9af;&quot;&gt;베타에 대해서 non-linear 식&lt;/span&gt;이라는 것입니다.&lt;/li&gt;
&lt;li&gt;따라서 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;explicit solution이 존재하지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;그렇기 때문에 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;적절한 최적화 알고리즘(e.g., gradient descent)을 통해서&lt;/span&gt; solution을 구할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Gradient Descent Algorithm&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;596&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pw5go/btsJGK7AH4W/AW0PFpXACism8RPmetUUGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pw5go/btsJGK7AH4W/AW0PFpXACism8RPmetUUGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pw5go/btsJGK7AH4W/AW0PFpXACism8RPmetUUGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpw5go%2FbtsJGK7AH4W%2FAW0PFpXACism8RPmetUUGk%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;796&quot; height=&quot;596&quot; data-origin-width=&quot;796&quot; data-origin-height=&quot;596&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;gradient descent algorithm에 대해 설명하겠습니다.&lt;/li&gt;
&lt;li&gt;처음에 베타는 랜덤한 숫자를 가지고 무작위로 배정해줍니다. -&amp;gt; 이를 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;initial weight&lt;/span&gt;라고 합니다.&lt;/li&gt;
&lt;li&gt;위 그림에서 파란색 선에 해당하는 함수를 최소화해야 합니다.&lt;/li&gt;
&lt;li&gt;initial weight을 기준으로 최적해에 가까워지기 위해 계속 gradient(1차 미분값, 접선의 기울기)를 계산하며 descent(하강)합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 그림에서는 gradient descent가 0이 되는 순간 최적해를 찾을 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTxM3B/btsJHSDAYa1/XPeOxKBFx61u7YAz5z9pJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTxM3B/btsJHSDAYa1/XPeOxKBFx61u7YAz5z9pJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTxM3B/btsJHSDAYa1/XPeOxKBFx61u7YAz5z9pJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTxM3B%2FbtsJHSDAYa1%2FXPeOxKBFx61u7YAz5z9pJK%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;771&quot; height=&quot;586&quot; data-origin-width=&quot;771&quot; data-origin-height=&quot;586&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;정리하면, 목적함수 L에 대해서 미분을 합니다. &lt;br /&gt;-&amp;gt; gradient가 0인지 질문합니다. &lt;br /&gt;-&amp;gt; yes 라고 답하면 학습은 종료됩니다. &lt;br /&gt;-&amp;gt; 아닐 경우, 학습을 지속합니다. &lt;br /&gt;-&amp;gt; 해를 improve하기 위하여 gradient의 역방향으로, 적당한 거리만큼 이동합니다.&lt;/li&gt;
&lt;li&gt;이론적인 background는 생략하겠습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;짧게 요약하면, 테일러 전개를 이용합니다.&lt;/li&gt;
&lt;li&gt;여기서, 1차 도함수만 갖고 정답 해에 가까워 질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;아래는 gradient descent 를 직관적으로 보여주는 수식입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$w_{new}=w_{old}-\alpha f'(w),\ \ where 0&amp;lt;\alpha&amp;lt;1$&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*여기서 $\alpha$는 저희가 정해야 하는 수입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brJ8yJ/btsJHkgtwWB/v5MokLsyVhVR1US9U1Z4S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brJ8yJ/btsJHkgtwWB/v5MokLsyVhVR1US9U1Z4S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brJ8yJ/btsJHkgtwWB/v5MokLsyVhVR1US9U1Z4S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrJ8yJ%2FbtsJHkgtwWB%2Fv5MokLsyVhVR1US9U1Z4S1%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;806&quot; height=&quot;586&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;586&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;/li&gt;
&lt;li&gt;동그라미 노드들은 설명변수, 종속변수이고, w는 베타와 같습니다.&lt;/li&gt;
&lt;li&gt;$h=\sum_{i=0}^{2}w_i x_i$이고 이는 곧 $\hat{\beta}_0+\hat{\beta}_1 x_1+\hat{\beta}_2 x_2$와 같습니다.&lt;/li&gt;
&lt;li&gt;y는 로지스틱 회귀분석 모형을 통해 해당하는 값을 $y=\frac{1}{1+exp(-h)}$ 이 수식으로 표현하였습니다.&lt;/li&gt;
&lt;li&gt;직관적인 해석을 위해 $L=\frac{1}{2}(t-y)^2$로 표현하겠습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;t는 1또는 0이고, y는 p(y=1)를 의미합니다.&lt;/li&gt;
&lt;li&gt;t=1일 경우 y는 1에 가깝게, t=0일 경우 y는 0에 가깝게 나와야 좋은 모형입니다.&lt;/li&gt;
&lt;li&gt;둘 사이의 제곱을 minimize 하는 걸 loss function으로 정의합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wVYXF/btsJGUh4wlF/VfnfSMykgPTHj845ex2mHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wVYXF/btsJGUh4wlF/VfnfSMykgPTHj845ex2mHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wVYXF/btsJGUh4wlF/VfnfSMykgPTHj845ex2mHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwVYXF%2FbtsJGUh4wlF%2FVfnfSMykgPTHj845ex2mHK%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;790&quot; height=&quot;577&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;577&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;y는 로지스틱 회귀분석에서 추정된 값이고, t는 실제 값입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;둘 차이가 적으면 미지수를 덜 움직이고, 차이가 크면 많이 움직입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;다음으로, 가중치를 update 하는 건 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;가중치와 연결돼 있는 설명변수에만&lt;/span&gt; 영향을 미칩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$log(\frac{p}{1-p})=\hat{\beta}_0+\hat{\beta}_1 x + \hat{\beta}x_2 +...$&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위와 같은 식이 있을 때, 예를 들어 $\beta_2$를 학습하는 데 있어서 $\beta_2$만 영향을 미친다는 뜻입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBBvD3/btsJHphCZzt/67pwgmZlyYppYOEJwczI60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBBvD3/btsJHphCZzt/67pwgmZlyYppYOEJwczI60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBBvD3/btsJHphCZzt/67pwgmZlyYppYOEJwczI60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBBvD3%2FbtsJHphCZzt%2F67pwgmZlyYppYOEJwczI60%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;760&quot; height=&quot;597&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;597&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;$\beta$ 추정이 완료되었고, 새로운 데이터가 들어왔을 때 두 범주 중 한 범주에 속할 확률을 물어봅니다.&lt;/li&gt;
&lt;li&gt;그 확률 값은 $p=\frac{1}{1+e^{-(\hat{\beta}_0+\hat{\beta}_1x_1+\hat{\beta}_2x_2+...)}}$ 식으로 표현되고,&lt;br /&gt;$(\hat{\beta}_0+\hat{\beta}_1x_1+\hat{\beta}_2x_2+...)$ 이 식을 a라고 표현하면, 위의 그림과 같이 S자 형태의 curve가 그려집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnmWoL/btsJHU2sbmi/g2KnQ9zqWyxm2kemgxKO1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnmWoL/btsJHU2sbmi/g2KnQ9zqWyxm2kemgxKO1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnmWoL/btsJHU2sbmi/g2KnQ9zqWyxm2kemgxKO1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnmWoL%2FbtsJHU2sbmi%2Fg2KnQ9zqWyxm2kemgxKO1K%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;776&quot; height=&quot;592&quot; data-origin-width=&quot;776&quot; data-origin-height=&quot;592&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;/li&gt;
&lt;li&gt;확률값을 0 아니면 1로 변환해 줘야 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이때 사용되는 것이 cutoff(threshold)이고, default 값은 0.5입니다.&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;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.youtube.com/watch?v=kgIaWJvQdUQ&amp;amp;list=PLetSlH8YjIfXMOuS4piqzJRvSZorDnNUm&amp;amp;index=8&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=kgIaWJvQdUQ&amp;amp;list=PLetSlH8YjIfXMOuS4piqzJRvSZorDnNUm&amp;amp;index=8&lt;/a&gt;&lt;/p&gt;</description>
      <category>머신러닝</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/80</guid>
      <comments>https://chaeniverse.tistory.com/80#entry80comment</comments>
      <pubDate>Sun, 22 Sep 2024 00:48:25 +0900</pubDate>
    </item>
    <item>
      <title>MLP (Multi Layer Perceptron)</title>
      <link>https://chaeniverse.tistory.com/79</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
  tex2jax: {
  	inlineMath: [['$','$'], ['\\(','\\)']]
  },
  &quot;HTML-CSS&quot;: {
  	linebreaks: { automatic: true },
    scale: 100,
    minScaleAdjust: 50,
    matchFontHeight: true
  },
  SVG: {
  	linebreaks: { automatic: true }
  }
});
&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Perceptron: Limitation&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ese69K/btsJHxmiDHB/AVMKNCbXjQy7Eqf13dXAq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ese69K/btsJHxmiDHB/AVMKNCbXjQy7Eqf13dXAq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ese69K/btsJHxmiDHB/AVMKNCbXjQy7Eqf13dXAq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fese69K%2FbtsJHxmiDHB%2FAVMKNCbXjQy7Eqf13dXAq1%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;772&quot; height=&quot;566&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;566&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;먼저 단일 perceptron이 갖는 한계에 대해서 설명하겠습니다.&lt;/li&gt;
&lt;li&gt;perceptron이란 classification 관점에서 봤을 때 두 category를 구분하는 초평면을 만드는 linear model입니다.&lt;/li&gt;
&lt;li&gt;linear model은 이차원일 경우 1번(&lt;span style=&quot;color: #ef5369;&quot;&gt;핑크색&lt;/span&gt;)과 같이 이 두 데이터 사이를 가장 잘 구분하는 하나의 직선을 찾습니다.&lt;/li&gt;
&lt;li&gt;2번(&lt;span style=&quot;color: #ef5369;&quot;&gt;핑크색&lt;/span&gt;)과 같이 데이터가 있다고 하면, &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;다중선형회귀분석으로 표현되는 regression model은 &lt;/span&gt;이 데이터에 대해서 가장 적합한 회귀직선을 찾습니다.&lt;/li&gt;
&lt;li&gt;2번(&lt;span style=&quot;color: #ef5369;&quot;&gt;핑크색&lt;/span&gt;)에서 저런 곡선(&lt;span style=&quot;color: #a6bc00;&quot;&gt;연두색&lt;/span&gt;)을 찾아낼 수 있다면, 설명변수와 종속변수가 갖고 있는 복잡한 관계를 잘 설명할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;문제는 설명변수와 종속변수의 관계식이 선형이 아닐 때 발생합니다.&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Introduction&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6PSSg/btsJHEeqDYu/6uI1hPwbWmH6oYC3enN0hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6PSSg/btsJHEeqDYu/6uI1hPwbWmH6oYC3enN0hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6PSSg/btsJHEeqDYu/6uI1hPwbWmH6oYC3enN0hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6PSSg%2FbtsJHEeqDYu%2F6uI1hPwbWmH6oYC3enN0hK%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;762&quot; height=&quot;552&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;552&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;선을 여러 개 그어서 합치자는 게 mlp의 핵심입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복잡한 문제를 풀기 위해 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;small and simple problem으로 decompose 하는 것&lt;/span&gt;입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;왼쪽 그림을 보았을 때, 부호들을 잘 구분하려면, &lt;br /&gt;왼쪽 하단에 있는 -(&lt;span style=&quot;color: #ee2323;&quot;&gt;마이너스&lt;/span&gt;)를 구분할 수 있는 퍼셉트론을 만들고, 오른쪽 상단에 있는 -(&lt;span style=&quot;color: #ee2323;&quot;&gt;마이너스&lt;/span&gt;)를 구분할 수 있는 퍼셉트론을 만든 후 이 둘을 조합하면 됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이는 오른쪽에 위치한 perceptron이 두개인 mlp에 대한 설명입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;u&gt;perceptron은 선형 모형&lt;/u&gt;입니다. 이 선형 모형을 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;어떻게 조합하느냐에 따라&lt;/span&gt; 다양한 형태의 비선형 경계면 혹은 함수식이 만들어질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HTv64/btsJHWlzJ00/kDSISMAr0tGqDS5ejF8KWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HTv64/btsJHWlzJ00/kDSISMAr0tGqDS5ejF8KWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HTv64/btsJHWlzJ00/kDSISMAr0tGqDS5ejF8KWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHTv64%2FbtsJHWlzJ00%2FkDSISMAr0tGqDS5ejF8KWk%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;827&quot; height=&quot;606&quot; data-origin-width=&quot;827&quot; data-origin-height=&quot;606&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;1번(핑크색)은 hidden layer가 단 하나인 mlp입니다.&amp;nbsp;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중간에 위치한 layer를 hidden layer라고 합니다.&lt;/li&gt;
&lt;li&gt;이 hidden layer를 여러 개 배치해서 모델의 복잡도를 높일 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;3번(핑크색)처럼 hidden layer의 수가 점점 많아지면 -&amp;gt; 딥러닝 구조가 되는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Decision boundary of MLP&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDLjSQ/btsJGvJJDtf/RS02lLcTZUdQjQTrB3hR2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDLjSQ/btsJGvJJDtf/RS02lLcTZUdQjQTrB3hR2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDLjSQ/btsJGvJJDtf/RS02lLcTZUdQjQTrB3hR2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDLjSQ%2FbtsJGvJJDtf%2FRS02lLcTZUdQjQTrB3hR2k%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;772&quot; height=&quot;578&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;578&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;/li&gt;
&lt;li&gt;만약에 decision boundary가 piece-wise linear boundary (어떤 선들의 조합)이라고 하면,&lt;br /&gt;logistic regression은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;그릴 수 있는 선의 개수가 하나&lt;/span&gt;입니다.&lt;br /&gt;그러나 이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;선의 방향이나 기울기에 대해서는 제약이 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;반면에 decision tree는 여러 개의 선을 그릴 수 있습니다.&lt;br /&gt;그러나, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;선은 축에 수직으로&lt;/span&gt; 그려져야 합니다.&lt;/li&gt;
&lt;li&gt;mlp는 선의 개수를 사전에 정할 수 있습니다.&lt;br /&gt;즉, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;모델의 복잡도를 저희가 직접 조절할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;모델의 복잡도를 조절하기 위해서, &lt;u&gt;hidden layer의 수&lt;/u&gt; 혹은 &lt;u&gt;hidden node의 수&lt;/u&gt;를 바꿀 수 있습니다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;본 강의에서는 hidden layer의 수는 하나로 고정하고, hidden node의 수를 바꿔가면서 학습을 진행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;또한, mlp는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;선의 방향에 대해서도 제약이 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Basic Structure&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qsabv/btsJHsk08Yp/h9qhG9xlFZfiA6jkkVwFKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qsabv/btsJHsk08Yp/h9qhG9xlFZfiA6jkkVwFKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qsabv/btsJHsk08Yp/h9qhG9xlFZfiA6jkkVwFKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqsabv%2FbtsJHsk08Yp%2Fh9qhG9xlFZfiA6jkkVwFKk%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;772&quot; height=&quot;615&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;615&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;/li&gt;
&lt;li&gt;hidden node로 표현된 동그라미 하나가 perceptron 하나를 의미합니다.&lt;/li&gt;
&lt;li&gt;$h_1$부터 $h_p$까지 p개의 perceptron이 존재합니다.&lt;/li&gt;
&lt;li&gt;각각의 설명변수들은 각 perceptron으로 다 연결이 됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$x_1$에 대해서 첫번째 perceptron은 $w_{11}$이라는 가중치에 의해서 연결됩니다.&lt;/li&gt;
&lt;li&gt;p번 perceptron에 대해서는 $w_{1p}$라는 가중치 에 의해서 연결됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$w_{11}$과 $w_{1p}$는 같지 않을 확률이 높습니다.&lt;/li&gt;
&lt;li&gt;마지막에 각각의 perceptron이 처리했던 정보들을 취합합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vlGgl/btsJIqmdNQs/q8ENfD7VQE94uwSSjC3MB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vlGgl/btsJIqmdNQs/q8ENfD7VQE94uwSSjC3MB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vlGgl/btsJIqmdNQs/q8ENfD7VQE94uwSSjC3MB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvlGgl%2FbtsJIqmdNQs%2Fq8ENfD7VQE94uwSSjC3MB0%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;772&quot; height=&quot;576&quot; data-origin-width=&quot;772&quot; data-origin-height=&quot;576&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;$y=\sum_{i=0}^p w_p^(2) h_p$에서 (2)의 의미는 hidden node에서 output node로 연결되는 가중치라는 뜻입니다.&lt;/li&gt;
&lt;li&gt;예를 들어 $w_{dp}^(1)$ 이렇게 표현하면 d번째 변수가 p번째 hidden node에 연결되는 가중치라는 것입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서 (1)은 input과 hidden node를 연결하는 가중치입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lJ3di/btsJIgxpbJi/lY7YJ51vm0LXT7jbAkybwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lJ3di/btsJIgxpbJi/lY7YJ51vm0LXT7jbAkybwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lJ3di/btsJIgxpbJi/lY7YJ51vm0LXT7jbAkybwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlJ3di%2FbtsJIgxpbJi%2FlY7YJ51vm0LXT7jbAkybwk%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;792&quot; height=&quot;592&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;592&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;&amp;nbsp;MLP를 이용한 classificaion 문제는 접근 방식이 조금 다릅니다.&lt;/li&gt;
&lt;li&gt;classification은 output node가 복잡하게 만들어집니다.&lt;/li&gt;
&lt;li&gt;output node의 개수는 class의 수와 같습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;encoding은 one-hot encoding을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;$z_j=\sum_{i=1}^p w_{jp}^{(2)}h_p$ : 여기서 $z_j$는 각 hidden node로부터 받은 선형 결합 값입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;$y_j$의 output node는, z값에 exponential을 씌운 값입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;z가 항상 0보다 큰 값을 갖게 하기 위해서 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$y_j=\frac{e^{z_j}}{\sum_{k=1}^{c}e^{z_k}}$ 이 식은 1번부터 c번까지 output node의 z값에 전부 exponential을 취하고 더한 것입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$y_1+y_2+...+y_c=1$ 이 식이 항상 성립합니다. 이때, $0\leq y_i \leq 1$ 를 만족합니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;$\sum_{i=1}{c}y_i=1$&lt;span&gt; : 각각의 출력 node의 최종적인 output은 해당 범주에 속하는 확률로써 해석할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; $y_j=\frac{e^{z_j}}{\sum_{k=1}^{c}e^{z_k}}$ : 이 식을 softmax function이라고 합니다.&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;The role of hidden nodes&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;595&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biyxw2/btsJHO9bfHJ/x2h789KCCvJQFhLDfHvJkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biyxw2/btsJHO9bfHJ/x2h789KCCvJQFhLDfHvJkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biyxw2/btsJHO9bfHJ/x2h789KCCvJQFhLDfHvJkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbiyxw2%2FbtsJHO9bfHJ%2Fx2h789KCCvJQFhLDfHvJkk%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;792&quot; height=&quot;595&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;595&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;hidden node의 개수는 인공신경망의 복잡도를 결정합니다.&lt;/li&gt;
&lt;li&gt;hidden node를 많이 사용할수록 복잡한 decision boundary를 만들 수 있습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 페이지의 예시 그림을 통해서도 알 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;XOR problem revisited&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;587&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C6o4C/btsJGUI6ool/10WkybxPN5J4mU1Z0VGEQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C6o4C/btsJGUI6ool/10WkybxPN5J4mU1Z0VGEQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C6o4C/btsJGUI6ool/10WkybxPN5J4mU1Z0VGEQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC6o4C%2FbtsJGUI6ool%2F10WkybxPN5J4mU1Z0VGEQK%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;788&quot; height=&quot;587&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;587&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;MLP가 어떻게 작동하는지 원리를 설명하겠습니다.&lt;/li&gt;
&lt;li&gt;1번과 같은 상황에서 두 범주를 구분하는 mlp를 만들겠습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왼쪽 하단에 위치한 파란색 동그라미만 구분할 수 있는 하나의 직선식을 만들어보겠습니다.&lt;/li&gt;
&lt;li&gt;$a_1=x_1+x_2-\frac{3}{2}$ 입니다.&lt;/li&gt;
&lt;li&gt;이 식을 구조로 나타내면 3번입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;원래는 activation function : $\frac{1}{1+e^{-a}}$를 쓰는데, 여기서는 exponential을 정의하기 어려우므로, step function을 사용합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;step function이란 a값이 0보다 크거나 같으면 1을 반환하고 0보다 작으면 -1을 반환하는 함수입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiLbP8/btsJGIvnqzi/9RqnmButVOVANFYNis9UAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiLbP8/btsJGIvnqzi/9RqnmButVOVANFYNis9UAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiLbP8/btsJGIvnqzi/9RqnmButVOVANFYNis9UAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiLbP8%2FbtsJGIvnqzi%2F9RqnmButVOVANFYNis9UAk%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;777&quot; height=&quot;577&quot; data-origin-width=&quot;777&quot; data-origin-height=&quot;577&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;/li&gt;
&lt;li&gt;해당하는 직선식은 $a_2=x_1+x_2-\frac{5}{2}$입니다. 이 직선식은 2번과 같이 표현됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 선 아래 있는 세 개 점들(&lt;span style=&quot;color: #f89009;&quot;&gt;주황색 네모 두개&lt;/span&gt;, &lt;span style=&quot;color: #006dd7;&quot;&gt;파란색 동그라미&lt;/span&gt;)에 대해서도 a를 구하고 다시 activation을 시키면 -1이 나옵니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마지막 하나는 1이 나옵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;547&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buvg9B/btsJHDGDcMN/ygb166mhupqc64fJ4FNpb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buvg9B/btsJHDGDcMN/ygb166mhupqc64fJ4FNpb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buvg9B/btsJHDGDcMN/ygb166mhupqc64fJ4FNpb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuvg9B%2FbtsJHDGDcMN%2Fygb166mhupqc64fJ4FNpb1%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;782&quot; height=&quot;547&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;547&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;계속해서, 원래 $x_1$, $x_2$라는 2차원 공간에 있던 네 개의 점들을 $h_1$, $h_2$라는 2차원 공간으로 매핑시킵니다.&lt;/li&gt;
&lt;li&gt;$o=h_1+h_2-1$이라는 직선식을 만들어서 두 범주(&lt;span style=&quot;color: #006dd7;&quot;&gt;동그라미&lt;/span&gt;, &lt;span style=&quot;color: #f89009;&quot;&gt;네모&lt;/span&gt;)를 구분할 수 있게 되었습니다.&lt;/li&gt;
&lt;li&gt;같은 활성 함수에 넣어 계산 해보면,&lt;br /&gt;3번처럼 1, -1, -1 이 됩니다. 최종적인 output node는 4번 표의 y 컬럼처럼 구분이 됩니다.&lt;/li&gt;
&lt;li&gt;원래 공간에서는 linearly non-separable 했는데&lt;br /&gt;h라는 hidden node, 즉 perceptron에 의해 분리된 공간 상에서는 두 범주(&lt;span style=&quot;color: #006dd7;&quot;&gt;동그라미&lt;/span&gt;, &lt;span style=&quot;color: #f89009;&quot;&gt;네모&lt;/span&gt;)가 separable한 상황이 되었습니다.&lt;/li&gt;
&lt;li&gt;정리하면, 원래 공간에서 선형적으로 분리가 불가능했던 데이터 셋을,&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;부분적으로 선형으로 분리&lt;/span&gt;시킨 다음에,&lt;br /&gt;그걸 결합해서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;선형적으로 분리가 가능하게 만드는 것&lt;/span&gt;이 mlp의 원리입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;General formulation&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGY3cb/btsJHoJIanf/CGM5XuqVIlfv04hZakAya1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGY3cb/btsJHoJIanf/CGM5XuqVIlfv04hZakAya1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGY3cb/btsJHoJIanf/CGM5XuqVIlfv04hZakAya1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGY3cb%2FbtsJHoJIanf%2FCGM5XuqVIlfv04hZakAya1%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;783&quot; height=&quot;585&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;585&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;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Error Back-Propagation&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0oU1k/btsJGyGjtjH/K69qj1KTyrHchKLWkbzBx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0oU1k/btsJGyGjtjH/K69qj1KTyrHchKLWkbzBx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0oU1k/btsJGyGjtjH/K69qj1KTyrHchKLWkbzBx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0oU1k%2FbtsJGyGjtjH%2FK69qj1KTyrHchKLWkbzBx1%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;786&quot; height=&quot;577&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;577&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;이번에는 gradient descent를 갖고 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;backpropagation을 &lt;/span&gt;설명하겠습니다.&lt;/li&gt;
&lt;li&gt;먼저 1번에 해당하는 hidden node와 output node 사이의 가중치는 $w_j^(2)$만 해결하면 됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이를 정리하면, $(y_k-\hat{y}_k)\cdot h_j$가 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;현재 정답과 $y_k$ 노드의 mlp에 의해 추정된 값 $\hat{y}_k$ 차이에 비례해서 gradient가 계산됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dB0HRl/btsJIqs2KNR/7cco0WpLMKZbVk03enBewK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dB0HRl/btsJIqs2KNR/7cco0WpLMKZbVk03enBewK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dB0HRl/btsJIqs2KNR/7cco0WpLMKZbVk03enBewK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdB0HRl%2FbtsJIqs2KNR%2F7cco0WpLMKZbVk03enBewK%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;768&quot; height=&quot;578&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$\frac{\partial L_k}{\partial w_{ji}^{(1)}}=\frac{\partial L_k}{\partial y_k}\cdot \frac{\partial y_k}{\partial w_j^{(2)}}\cdot \frac{\partial h_j}{\partial a_j}\cdot \frac{\partial a_j}{\partial w_{ji}^{(1)}}\\ =(y_k-\hat{y}_k)\cdot w_j^{(2)}\cdot a_j \cdot(1-a_j)\cdot \mathbf{x}_{kj}$&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반면에 1번에서 첫번째 input layer와 hidden layer 사이의 가중치에 대한 gradient를 계산해보면,&lt;br /&gt;첫번째 실제 값과 추정된 값 사이의 차이가 얼마나 크냐, &lt;br /&gt;그리고 가중치에 연결되어 있는 input node의 값이 얼마냐 에 따라 그래디언트가 결정됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DifYd/btsJGKtb95z/wb6wkZNqxI1BmVrphUkMwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DifYd/btsJGKtb95z/wb6wkZNqxI1BmVrphUkMwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DifYd/btsJGKtb95z/wb6wkZNqxI1BmVrphUkMwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDifYd%2FbtsJGKtb95z%2Fwb6wkZNqxI1BmVrphUkMwK%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;537&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;537&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;/li&gt;
&lt;li&gt;1번 식과 2번 식에 넣어서 계산해보면, 1, -1.5가 나옵니다.&lt;/li&gt;
&lt;li&gt;output node를 그냥 1 1 1로 연결해 보겠습니다.&lt;/li&gt;
&lt;li&gt;현재 가중치로 y값을 계산하면,&lt;br /&gt;$x_1=\frac{1}{2}$이고, $x2=\frac{1}{2}$이니까 $a_1=1$, $a_2=-1.5$가 됩니다.&lt;br /&gt;이걸 activation function에 넣으면 0.269, 0.818이 나옵니다.&lt;br /&gt;이걸 다시 $\sum w_j^{(2)} h$ 식에 넣어서 계산을 하면 2.087이 나옵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HBNL4/btsJIPe3kcO/QLFnw1X6noQ4g4PEyoIcPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HBNL4/btsJIPe3kcO/QLFnw1X6noQ4g4PEyoIcPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HBNL4/btsJIPe3kcO/QLFnw1X6noQ4g4PEyoIcPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHBNL4%2FbtsJIPe3kcO%2FQLFnw1X6noQ4g4PEyoIcPK%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;798&quot; height=&quot;541&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;541&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;앞선 예시를 갖고 이제 update를 하겠습니다.&lt;/li&gt;
&lt;li&gt;hidden layer하고 output layer를 사용해서, $\eta(y-\hat{y}\times h_1)$에서 $\eta$에 값을 넣습니다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\eta$는 학습률이라고 할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;학습률을 0.1이라고 가정하면, &lt;br /&gt;$w_1^{(2)}(new)$, $w_2^{(2)}(new)$, $w_0^{(2)}(new)$에 넣어 update를 하면,&lt;br /&gt;하나의 data point에 대해 1.029, 10.89, 1.109가 나옵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oipO4/btsJIPe3lRA/tKKELxO0hseikQMEm4dX61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oipO4/btsJIPe3lRA/tKKELxO0hseikQMEm4dX61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oipO4/btsJIPe3lRA/tKKELxO0hseikQMEm4dX61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoipO4%2FbtsJIPe3lRA%2FtKKELxO0hseikQMEm4dX61%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;783&quot; height=&quot;522&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;522&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;이번에는 hidde node1에 해당하는 부분을 update 하겠습니다.&lt;/li&gt;
&lt;li&gt;원래는 1번과 같이 1, 1, 0 이었는데, 해당하는 식에 넣어 계산을 하면 1.011, 1.011, 0.021로 update가 됩니다.&lt;/li&gt;
&lt;li&gt;두번째 hidden node에 대해서도 동일한 방식으로 update를 진행합니다.&lt;/li&gt;
&lt;li&gt;앞선 내용들을 계속 반복함으로써, data point를 번갈아 제공하며 최적의 performance를 내는 모형을 학습시킬 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Other properties&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;mlp에는 몇 가지 종료 장치를 걸 수 있습니다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;weight의 변화량이 적을 때&lt;/li&gt;
&lt;li&gt;독립된 검증 데이셋을 사용해서 예측 오차가 일정 수준 이하로 떨어졌을 때&lt;/li&gt;
&lt;li&gt;epoch을 사전에 정한 만큼 충분히 도달했을 때&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;또한 학습 데이터를 갖고 iteration을 계속 하면 overfit이 발생합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 overfit을 방지하기 위한 몇가지 장치들이 있습니다. (여기서는 생략하겠습니다.)&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;p data-ke-size=&quot;size16&quot;&gt;[출처] : &lt;a href=&quot;https://www.youtube.com/watch?v=Wsvem-tuCyM&amp;amp;list=PLetSlH8YjIfXMOuS4piqzJRvSZorDnNUm&amp;amp;index=16&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=Wsvem-tuCyM&amp;amp;list=PLetSlH8YjIfXMOuS4piqzJRvSZorDnNUm&amp;amp;index=16&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=Wsvem-tuCyM&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/FzNQq/hyW6H2wVVG/Jr8ojUf8VllTUaTUwHQ5E0/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;06-2: Artificial Neural Networks - MLP&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/Wsvem-tuCyM&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>머신러닝</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/79</guid>
      <comments>https://chaeniverse.tistory.com/79#entry79comment</comments>
      <pubDate>Sat, 21 Sep 2024 21:39:39 +0900</pubDate>
    </item>
    <item>
      <title>XGBoost</title>
      <link>https://chaeniverse.tistory.com/78</link>
      <description>&lt;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
  tex2jax: {
  	inlineMath: [['$','$'], ['\\(','\\)']]
  },
  &quot;HTML-CSS&quot;: {
  	linebreaks: { automatic: true },
    scale: 100,
    minScaleAdjust: 50,
    matchFontHeight: true
  },
  SVG: {
  	linebreaks: { automatic: true }
  }
});
&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Introduction&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;먼저 XGBoost의 역사를 살펴보겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6qoQy/btsJHnEaQsI/kgfKJQSjoacKhtlsjMVFjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6qoQy/btsJHnEaQsI/kgfKJQSjoacKhtlsjMVFjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6qoQy/btsJHnEaQsI/kgfKJQSjoacKhtlsjMVFjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6qoQy%2FbtsJHnEaQsI%2FkgfKJQSjoacKhtlsjMVFjk%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;831&quot; height=&quot;456&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;456&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;처음에는 단일 의사결정 나무에서 시작하였고, 이것에 대한 ensemble 기법인 bagging이 등장하였습니다.&lt;br /&gt;그 bagging에서 split하는 데 있어서 변수를 random하게 선택하는 random forest 기법이 제안되었습니다.&lt;/li&gt;
&lt;li&gt;다음으로 stump tree를 base learner로 하는 boosting이 등장하였고, 그거를 다시 gradient를 이용해서 boosting하는게 gradient boosting입니다.&lt;/li&gt;
&lt;li&gt;마지막은 xgboost입니다. xgboost는 gradient boosting을 기반으로 하였고,&lt;br /&gt;여기서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;좀 더 빠르게 연산을 수행&lt;/span&gt;하고 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;대용량 데이터에 대해서도 처리&lt;/span&gt;하기 위해 고안된 기법입니다.&lt;/li&gt;
&lt;/ul&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;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6UjmJ/btsJIiBT4Yr/1c3eBJ4HNW9P7JWkfDKkk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6UjmJ/btsJIiBT4Yr/1c3eBJ4HNW9P7JWkfDKkk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6UjmJ/btsJIiBT4Yr/1c3eBJ4HNW9P7JWkfDKkk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6UjmJ%2FbtsJIiBT4Yr%2F1c3eBJ4HNW9P7JWkfDKkk0%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;445&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;445&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;letter-spacing: 0px;&quot;&gt;위 그림은 xgboost의 성능을 높이기 위해 필요한 장치들입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;xgboost는 gbm의 성능, 스케일, 속도를 최적화하기 위해 극한으로 빠르게 연산을 수행합니다.&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;letter-spacing: 0px;&quot;&gt;약간의 성능 저하도 발생하지만, xgboost가 가진 장점으로 커버 가능합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;xgboost는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;하나의 머신에서 데이터를 더 많이 사용&lt;/span&gt;할 수 있게 하고, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;병렬 처리도 가능&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br9hYq/btsJItJXxHV/zknPKNfuK8vLiEoOpml6XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br9hYq/btsJItJXxHV/zknPKNfuK8vLiEoOpml6XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br9hYq/btsJItJXxHV/zknPKNfuK8vLiEoOpml6XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr9hYq%2FbtsJItJXxHV%2FzknPKNfuK8vLiEoOpml6XK%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;857&quot; height=&quot;466&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;466&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;xgboost는 gradient boosting machine의 일종으로, 보다 빠른 연산을 위해 &lt;u&gt;approximation solution&lt;/u&gt;을 찾습니다.&lt;/li&gt;
&lt;li&gt;xgboost를 &lt;span style=&quot;background-color: #ffc9af;&quot;&gt;알고리즘&lt;/span&gt; 측면에서 살펴보겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Split Finding Algorithm&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보통 decision tree는 최적의 split point를 찾기 위해 exact greedy algorithm을 사용합니다. (모든 변수를 탐색하는 것을 의미합니다.)&lt;/li&gt;
&lt;li&gt;따라서 항상 optimal solution을 찾아줍니다.&lt;/li&gt;
&lt;li&gt;하지만, &lt;u&gt;데이터가 메모리에 다 담기지 않는다면&lt;/u&gt; greedy algorithm을 수행하기 어렵습니다.&lt;/li&gt;
&lt;li&gt;또한, 모든 경우의 수를 다 탐색해야 하기 때문에 &lt;u&gt;병렬 처리가 불가능&lt;/u&gt;합니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;$for\ j\ in\ sorted(I,\ by\ \mathbf{x}_{jk})\ do$&lt;/span&gt; : 위의 pseudo code에서 이 부분이 모든 경우의 수를 탐색하는 것을 의미합니다.&lt;/li&gt;
&lt;li&gt;앞선 두 가지의 단점 때문에 이 과정을 approximation하는 알고리즘이 존재합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu7aW9/btsJHFdg4KT/qPkcPTJFTXjkGQuX8UK6X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu7aW9/btsJHFdg4KT/qPkcPTJFTXjkGQuX8UK6X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu7aW9/btsJHFdg4KT/qPkcPTJFTXjkGQuX8UK6X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu7aW9%2FbtsJHFdg4KT%2FqPkcPTJFTXjkGQuX8UK6X1%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;847&quot; height=&quot;467&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;467&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;이제 approximiation하는 알고리즘에 대해 설명하겠습니다.&lt;/li&gt;
&lt;li&gt;첫 번째 단계는 전체 데이터가 갖고 있는 영역을 percentile에 따라 분할합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서 small k는 변수의 index입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;각각의 변수들에 대해서 학습 training data를 정렬시켜놓고,정렬된 데이터에서 percentile을 보고 일정한 갯수만큼 분할을 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이때 사용되는 hyperparameter는 $\epsilon$ 입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;분할된 덩어리들은 bucket이라고 합니다. 현재 위에서 보이는 바와 같이 l개의 bucket이 존재합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 bucket들에 대해서 따로따로 split point를 찾습니다. -&amp;gt; 이는 뒤에서 예시를 통해 설명하겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKAlPE/btsJHpIyzyi/Ef20ijnQv0A4cBhQhfUSZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKAlPE/btsJHpIyzyi/Ef20ijnQv0A4cBhQhfUSZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKAlPE/btsJHpIyzyi/Ef20ijnQv0A4cBhQhfUSZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKAlPE%2FbtsJHpIyzyi%2FEf20ijnQv0A4cBhQhfUSZk%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;855&quot; height=&quot;487&quot; data-origin-width=&quot;855&quot; data-origin-height=&quot;487&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;/li&gt;
&lt;li&gt;먼저 data를 오름차순 크기 순으로 정렬합니다.&lt;/li&gt;
&lt;li&gt;exact greedy algorithm이라면 핑크색 네모 단위로 split해서, 각각의 bucket에서의 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;처음부터 마지막까지&lt;span&gt; &lt;/span&gt;&lt;/span&gt;gradient를 계산합니다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;이렇게 되면 총 39개의 candidate split이 생깁니다.&lt;/li&gt;
&lt;li&gt;여기서 gradient가 가장 큰 방향으로 best split point를 정합니다.&lt;/li&gt;
&lt;/ul&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;한편, approximation algorithm에서는, 빨간색 선처럼 bucket을 나눕니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서 핵심은, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;각각의 bucket에 대해서 gradient를 따로따로 계산한다&lt;/span&gt;는 점입니다.&lt;/li&gt;
&lt;li&gt;구체적으로, 1번(초록색)에서는 3개의 gradient를 계산할 수 있습니다.&lt;/li&gt;
&lt;li&gt;따라서 1번 bucket에서의 candidate split은 총 3개입니다. 여기서 best split을 찾습니다.&lt;/li&gt;
&lt;li&gt;이와 같이, 2번, 3번, ... , 10번 bucket에 대해서 마찬가지로 진행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;현재 best split point가 있는 &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;bucket&lt;/span&gt;말고 나머지 9개 bucket에서는 gradient를 통해 얻을 수 있는 정보가 없습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 bucket에 있는 label이 전부 같기 때문입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;반면, 가운데(보라색) &lt;span style=&quot;background-color: #c1bef9;&quot;&gt;bucket&lt;/span&gt;에서, 저 지점(&lt;span style=&quot;color: #8a3db6;&quot;&gt;보라색 선&lt;/span&gt;)에서 split했을 때 얻을 수 있는 정보량이 최대가 됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;따라서 best split point는 &lt;span style=&quot;color: #8a3db6;&quot;&gt;저 지점&lt;/span&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앞선 내용을 산술적으로 살펴보겠습니다.&lt;/li&gt;
&lt;li&gt;exact greedy algorithm은 총 39번의 candidate split에 대한 gradient를 계산해야 합니다.&lt;/li&gt;
&lt;li&gt;반면 approximation algorithm은 각 bucket마다 3번씩 gradient를 계산하면 됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;10&lt;/span&gt;&lt;/b&gt;*3 = 30, 총 30번의 계산을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;그리고 이는 &lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;병렬 처리가&lt;/b&gt;&lt;/span&gt;&lt;b&gt; 가능&lt;/b&gt;합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1번 bucket(초록색)은 thread1에 태워서 gradient를 계산하고, 2번 bucket(노란색)은 thread2에 태워서 계산하고, ... 이런식으로 총 10개의 bucket에 대해서 동시에 계산하는 병렬처리가 가능합니다.&lt;/li&gt;
&lt;li&gt;이는 계산 시간을 더 단축시켜주는 요소입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;앞선 예시는 약간 극단적인 케이스로, approximation algorithm으로 best split을 찾지 못하는 경우도 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNdfu4/btsJH0uH7zc/akNgkyUPwNT2rpyIsWArl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNdfu4/btsJH0uH7zc/akNgkyUPwNT2rpyIsWArl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNdfu4/btsJH0uH7zc/akNgkyUPwNT2rpyIsWArl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNdfu4%2FbtsJH0uH7zc%2FakNgkyUPwNT2rpyIsWArl0%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;860&quot; height=&quot;485&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;485&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전 예시를 갖고 계속 설명하겠습니다. 버킷을 위에 보이는 것처럼 빨간색 선으로 구분하였습니다.&lt;/li&gt;
&lt;li&gt;approximation 하는 데 있어서 트리 별(per tree)로 할 수 있고, split 별(per split)로 할 수도 있습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;global variant = per tree / local variant = per split&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;per tree 관점에서, best split point를 찾았기 때문에 left child와 right child로 구분됩니다.&lt;/li&gt;
&lt;li&gt;이렇게 구분된 상황에서 다시 partitioning을 해야 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서 global variant는 처음에 만들어놓은 bucket 기준을 그대로 사용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;원래 첫번째 parent node에는 bucket 10개가 있었는데, global variant를 쓰는 순간, left child node에서 탐색할 수 있는 bucket이 5개가 나옵니다. (right child node는 6개입니다.)&lt;/li&gt;
&lt;li&gt;global variant는 tree가 깊어질수록 탐색해야 할 bucket의 수가 줄어듭니다.&lt;/li&gt;
&lt;li&gt;bucket 내부에 있는 example들의 size는, (bucket이 잘린 경우를 제외하고는) parent node에서 leaf node에 이르기까지 동일하게 유지됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcJrg0/btsJHqgmy9k/x1CIYbIk7cSwS24qcSZEg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcJrg0/btsJHqgmy9k/x1CIYbIk7cSwS24qcSZEg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcJrg0/btsJHqgmy9k/x1CIYbIk7cSwS24qcSZEg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcJrg0%2FbtsJHqgmy9k%2Fx1CIYbIk7cSwS24qcSZEg0%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;870&quot; height=&quot;487&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;487&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;한편, local variant에도 parent node에 bucket 10개가 있습니다.&lt;br /&gt;여기서 left child node와 right child node로 split 했을 때,&lt;br /&gt;각각의 child node에 대해서도 동일한 bucket size를 유지합니다.&lt;/li&gt;
&lt;li&gt;즉, 왼쪽과 오른쪽 각각의 bucket size는 10개입니다.&lt;/li&gt;
&lt;/ul&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;이런식으로 계속 진행되면 local variant는 split이 계속되어도 bucket size는 항상 동일하게 유지됩니다.&lt;/li&gt;
&lt;li&gt;즉, 하나의 bucket에 들어가는 example의 수는 depth가 깊어질수록 수가 점점 감소할 가능성이 높아집니다.&lt;/li&gt;
&lt;li&gt;이런식으로 두 개의 split finding을 통해서 실제 split candidate도 줄이고 병렬 계산도 수행할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;쉽게 말하면, global variant는 node가 깊어져도 parent node에서 한 bucket에 들어가는 example들의 size를 유지하는 것이고, &lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;반면 local variant는 node가 깊어져도 parent node의 bucket size를 유지하는 것입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6xqTX/btsJHz5sQSN/5c8NPL61G2rB8HaK12GKB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6xqTX/btsJHz5sQSN/5c8NPL61G2rB8HaK12GKB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6xqTX/btsJHz5sQSN/5c8NPL61G2rB8HaK12GKB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6xqTX%2FbtsJHz5sQSN%2F5c8NPL61G2rB8HaK12GKB1%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;837&quot; height=&quot;478&quot; data-origin-width=&quot;837&quot; data-origin-height=&quot;478&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위 그림은 exact greedy algorithm과 local variant &amp;amp; global variant algorithm의 성능을 비교한 그래프입니다.&lt;/li&gt;
&lt;li&gt;여기서 $\epsilon$으로 표시한 게 hyper-parameter이고,&lt;br /&gt;보통은 $\frac{1}{\epsilon}$개의 bucket이 만들어집니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$\epsilon$이 0.3일 경우 대략 3~4개가 만들어지고, 0.05이면 20개 정도가 만들어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;여기서 핵심은, approximation algorithm을 사용해도 성능이 그리 나쁘지 않다는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Sparsity-Aware Split Finding&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cio9Md/btsJGBiF0Id/fG8RbxS33OiX14yyK11Ab0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cio9Md/btsJGBiF0Id/fG8RbxS33OiX14yyK11Ab0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cio9Md/btsJGBiF0Id/fG8RbxS33OiX14yyK11Ab0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcio9Md%2FbtsJGBiF0Id%2FfG8RbxS33OiX14yyK11Ab0%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;1127&quot; height=&quot;670&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;670&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;다음으로 approximation을 위한 xgboost의 두번째 장치를 설명하겠습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왼쪽은 알고리즘이고 오른쪽은 쉽게 설명한 예시 그림입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;여기서 목적은 missing value (결측치)를 효율적으로 처리하는 것입니다.&lt;/li&gt;
&lt;li&gt;그래서 이 경우에는 각각의 split마다 default direction을 학습 과정에서 찾아냅니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그런 다음, new data가 들어왔을 때 어떤 value가 missing이면 처음에 정의했던 default direction으로 보냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;오른쪽 그림을 살펴보겠습니다.&lt;/li&gt;
&lt;li&gt;여기서 &quot;value&quot;는 실제로 특정 변수의 값이고, &quot;class&quot;는 정답 범주를 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$//\ enumerate\ missing\ value\ goto\ right$&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;$//\ enumerate\ missing\ value\ goto\ left$&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;즉, 두 가지 경우를 각각 비교한 다음에 더 좋은 direction을 찾습니다.&lt;/li&gt;
&lt;li&gt;구체적으로 설명하겠습니다. 예를 들어, $//\ enumerate\ missing\ value\ goto\ right$ 에 따라 missing value를 전부 오른쪽으로 보내겠습니다.&lt;/li&gt;
&lt;li&gt;이렇게 보낸 다음에, candidate split을 찾습니다. -&amp;gt; 빨간색 선&lt;/li&gt;
&lt;li&gt;left에 대해서도 동일하게 진행합니다. -&amp;gt; 파란색 선
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위의 결과로, missing value를 right direction으로 보냈을 때와 left direction으로 보냈을 때의 candidate split이 정해졌고, 그에 따른 성능을 알 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;left일 때와 right일 때를 비교했을 때 left가 성능이 더 좋습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그러면 이 변수에 대해서는 new data가 들어왔을 때 missing value라면 left로 보내지는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IBAEG/btsJHEZNmNk/tH8AUJknErt3tho1n9QDx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IBAEG/btsJHEZNmNk/tH8AUJknErt3tho1n9QDx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IBAEG/btsJHEZNmNk/tH8AUJknErt3tho1n9QDx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBAEG%2FbtsJHEZNmNk%2FtH8AUJknErt3tho1n9QDx1%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;828&quot; height=&quot;487&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;487&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;왼쪽은 앞선 default direction 설명에 따른 예시입니다. (따로 설명은 하지 않겠습니다.)&lt;/li&gt;
&lt;li&gt;오른쪽은 sparsity aware algorithm을 사용했을 때 computation 시간이 상당히 줄어드는 것을 보여줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;System Design for Efficient Computing&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bifWpz/btsJGGxuq2N/iUiCSCqIkawK8bOK8ks1CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bifWpz/btsJGGxuq2N/iUiCSCqIkawK8bOK8ks1CK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bifWpz/btsJGGxuq2N/iUiCSCqIkawK8bOK8ks1CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbifWpz%2FbtsJGGxuq2N%2FiUiCSCqIkawK8bOK8ks1CK%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;845&quot; height=&quot;496&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;496&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;다음은 tree에 대한 병렬화 파트입니다.&lt;/li&gt;
&lt;li&gt;tree를 학습시키는데 있어서 가장 시간이 많이 걸리는 부분들은, 각각의 변수에 대해서 sorting을 합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가장 효율적으로 sorting을 하더라도 $O(nlogn)$ 만큼의 시간이 필요합니다.&lt;/li&gt;
&lt;li&gt;data가 커지면 data*$logn$ 만큼 커집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;따라서 xgboost는 data를 row-wise로 보지 않고, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;column-wise 포맷으로 data를 저장&lt;/span&gt;합니다.&lt;/li&gt;
&lt;li&gt;구체적으로, 사전에 각각의 column들을 sorting해 놓습니다.&lt;/li&gt;
&lt;li&gt;각 column들이 미리 sorting이 되어 있으니까, 해당하는 feature column들에 대한 index들이 달라집니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 과정은 tree를 학습시키기 전에 한 번만 미리 만들어 놓으면 됩니다.&lt;/li&gt;
&lt;li&gt;따라서 중간에 sorting 하는 과정이 생략되기 때문에 효과적인 연산이 가능합니다.&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;[출처]: &lt;a href=&quot;https://www.youtube.com/watch?v=VHky3d_qZ_E&amp;amp;list=PLetSlH8YjIfWMdw9AuLR5ybkVvGcoG2EW&amp;amp;index=27&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=VHky3d_qZ_E&amp;amp;list=PLetSlH8YjIfWMdw9AuLR5ybkVvGcoG2EW&amp;amp;index=27&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=VHky3d_qZ_E&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/Tdlms/hyW6C7WUTK/LbU6z5FNtnI8MOE0TI3Brk/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;04-7: Ensemble Learning - XGBoost (앙상블 기법 - XGBoost)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/VHky3d_qZ_E&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&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;</description>
      <category>머신러닝</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/78</guid>
      <comments>https://chaeniverse.tistory.com/78#entry78comment</comments>
      <pubDate>Sat, 21 Sep 2024 14:39:10 +0900</pubDate>
    </item>
    <item>
      <title>SVM (Support Vector Machine) 1탄</title>
      <link>https://chaeniverse.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
  tex2jax: {
  	inlineMath: [['$','$'], ['\\(','\\)']]
  },
  &quot;HTML-CSS&quot;: {
  	linebreaks: { automatic: true },
    scale: 100,
    minScaleAdjust: 50,
    matchFontHeight: true
  },
  SVG: {
  	linebreaks: { automatic: true }
  }
});
&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Introduction&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SVM은 분류 알고리즘으로, binary classification을 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p7wm2/btsJGgdwibq/GleaCuTNBj6KWdkdDtpQBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p7wm2/btsJGgdwibq/GleaCuTNBj6KWdkdDtpQBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p7wm2/btsJGgdwibq/GleaCuTNBj6KWdkdDtpQBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp7wm2%2FbtsJGgdwibq%2FGleaCuTNBj6KWdkdDtpQBk%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;717&quot; height=&quot;337&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;337&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;위 그림은 SVM에서 사용되는 함수들입니다.&lt;/li&gt;
&lt;li&gt;original SVM은 기본적으로 선형모형입니다. 그래서 3번째 식에 속합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;선형 분류기의 목적&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uih5L/btsJFysd7yl/PAP6JpHK0FUya3KpmdUbHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uih5L/btsJFysd7yl/PAP6JpHK0FUya3KpmdUbHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uih5L/btsJFysd7yl/PAP6JpHK0FUya3KpmdUbHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUih5L%2FbtsJFysd7yl%2FPAP6JpHK0FUya3KpmdUbHk%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;875&quot; height=&quot;475&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;475&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;SVM은 binary classification이기 때문에 label, 즉 y에 해당하는 값을 (-1,1)로 지정해줍니다. (이유는 뒤에서 설명하겠습니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Problem: find hypothesis $h: X \rightarrow\left\{-1,+1 \right\}$&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;in $H$ (classifier) with small generalization error $R_D(h)$&lt;/span&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;저희의 목적은 $X$&amp;nbsp; 라는 입력 공간 상에서, 각자 학습 데이터의 실제 정답에 해당하는 label(+1과 -1)을 잘 분류하는 classifier $H$&amp;nbsp; 를 찾는 것입니다.&lt;/li&gt;
&lt;li&gt;정리하면, small generalization error인 $R_D(h)$를 가장 작게 할 수 있는 분류기를 찾는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGOTmP/btsJGyx6OWL/xgUPMLxNXS6RhfmVAco46K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGOTmP/btsJGyx6OWL/xgUPMLxNXS6RhfmVAco46K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGOTmP/btsJGyx6OWL/xgUPMLxNXS6RhfmVAco46K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGOTmP%2FbtsJGyx6OWL%2FxgUPMLxNXS6RhfmVAco46K%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;875&quot; height=&quot;199&quot; data-origin-width=&quot;875&quot; data-origin-height=&quot;199&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;SVM은 linear classifier이기 때문에 high-dimensional에서도 linear seperation을 진행합니다.&lt;/li&gt;
&lt;li&gt;위 그림과 같이, 2차원은 선으로 3차원은 면으로 구분합니다.&lt;/li&gt;
&lt;li&gt;만약 차원이 3차원보다 높다면(이떄 차원을 d 차원이라고 하겠습니다.), d 차원에서 두 범주를 잘 구분하는 (d-1) 차원의 hyperplane을 찾는 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TIRLe/btsJFw83k4L/ZkrZPEgnOBycrHKysNTNJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TIRLe/btsJFw83k4L/ZkrZPEgnOBycrHKysNTNJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TIRLe/btsJFw83k4L/ZkrZPEgnOBycrHKysNTNJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTIRLe%2FbtsJFw83k4L%2FZkrZPEgnOBycrHKysNTNJK%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;882&quot; height=&quot;502&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;502&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;/li&gt;
&lt;li&gt;왼쪽 그림에서 $\mathbf{w}\cdot\mathbf{x}+b=0$&amp;nbsp; 이 식보다 더 큰 범주에 속하면 +1을, 아니면 -1을 부여합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;$H=\left\{\mathbf{x}\rightarrow sign(\mathbf{w}\cdot\mathbf{x}+b:\ \mathbf{w}\in R^d,\ b\in R) \right\}$&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&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;정리하면, 모델 H는 $\mathbf{w}\cdot \mathbf{x} +b$ 에 input인 $\mathbf{x}$&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;을 넣어&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;label을 부여합니다.&lt;/li&gt;
&lt;li&gt;이때 음수가 나오면 -1로, 양수가 나오면 +1로 보는게 선형 분류기입니다.&lt;/li&gt;
&lt;li&gt;위 식에서 w, b는 hyperparameter입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Local Opimum? Global Optimum!&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJjXgs/btsJFx7VjlE/59ijpJSydPLItkIUfbOwQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJjXgs/btsJFx7VjlE/59ijpJSydPLItkIUfbOwQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJjXgs/btsJFx7VjlE/59ijpJSydPLItkIUfbOwQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJjXgs%2FbtsJFx7VjlE%2F59ijpJSydPLItkIUfbOwQk%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;862&quot; height=&quot;493&quot; data-origin-width=&quot;862&quot; data-origin-height=&quot;493&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;위 그림에는 label을 정확하게 분류하는 다양한 분류기들이 있고, 분류 경계면이 칠해져 있습니다.&lt;/li&gt;
&lt;li&gt;이때 최적의 분류기는 경계면의 margin이 제일 넓은 2번 분류기입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2BKTI/btsJGgSTlMK/GHzHykVDbNhhljDS7853r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2BKTI/btsJGgSTlMK/GHzHykVDbNhhljDS7853r0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2BKTI/btsJGgSTlMK/GHzHykVDbNhhljDS7853r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2BKTI%2FbtsJGgSTlMK%2FGHzHykVDbNhhljDS7853r0%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;811&quot; height=&quot;508&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;508&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;이제 margin의 넓이를 구해보겠습니다.&lt;/li&gt;
&lt;li&gt;위의 그림에서 청록색을 분류 경계면이라고 하겠습니다.&lt;br /&gt;plus-plane과 청록색-plane 사이의 gap을 margin이라고 하겠습니다.&lt;/li&gt;
&lt;li&gt;청록색에 $x_0$가 있다고 하면, $w^Tx_0+b=0$이 성립합니다.&lt;/li&gt;
&lt;li&gt;위 그림에서 $\mathbf{w}$ 는 법선 벡터 입니다. &lt;br /&gt;plus plane에 $x_1$ 이 있다고 하면, $x_1=x_0+pw$ 와 같이 표현할 수 있습니다.&lt;/li&gt;
&lt;li&gt;또한 $x_1$이 $w^Tx+b=1$에 있는 값이기 때문에 아래와 같이 전개할 수 있습니다.&lt;br /&gt;$w^Tx_1+b=1\rightarrow w^Tx_0+p\cdot w^Tw+b=1$&lt;br /&gt;이때, $w^Tx_0$와 $b$는 $w^Tx_b=1$에 있는 점이기 때문에 0이 됩니다.&lt;/li&gt;
&lt;li&gt;그러면 남는 것은,&lt;br /&gt;$p\cdot w^Tw=1$ 이 되고, $p=-\frac{1}{w^Tw}=-\frac{1}{||w||^2}\rightarrow |p|=\frac{1}{||w||^2}$ 이 됩니다.&lt;br /&gt;즉, $|p|=\frac{1}{||w||^2}$ 이게 margin이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Margin and VC Dimension&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZGZWS/btsJG4D2Z6y/pVctBgBDXYooB1zAiOqN40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZGZWS/btsJG4D2Z6y/pVctBgBDXYooB1zAiOqN40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZGZWS/btsJG4D2Z6y/pVctBgBDXYooB1zAiOqN40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZGZWS%2FbtsJG4D2Z6y%2FpVctBgBDXYooB1zAiOqN40%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;822&quot; height=&quot;477&quot; data-origin-width=&quot;822&quot; data-origin-height=&quot;477&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;margin과 VC dimension 간의 관계를 생각해 보겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;The VC dimension of a separating hyperplane with a margin $\Delta$ is bounded as follows&lt;br /&gt;$h\leq min( \left [ \frac{R^2}{\Delta^2} \right ],D)+1$&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;where D is the dimensionality of the input space, and R is the radius of the smallest sphere containing all the input vectors&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;위 식에서 D는 차원 수이고, R은 전체 Data를 입력공간에서 감싸는 초구의 반지름입니다.&lt;br /&gt;$\Delta$ 는 margin을 뜻합니다.&lt;br /&gt;차원 수는 데이터가 주어지는 순간 고정됩니다.&lt;br /&gt;초구도 단 한 개만 만들어지므로, 고정됩니다.&lt;/li&gt;
&lt;li&gt;가변적인 것은 margin 뿐입니다.&lt;br /&gt;$\Delta$ 가 커지면 $\left [ \frac{R^2}{\Delta^2} \right ]$는 작아질 것입니다.&lt;br /&gt;margin을 매우 키우면 dimension보다 $\left [ \frac{R^2}{\Delta^2} \right ]$이 더 작아지는 상황이 발생할 수 있습니다.&lt;/li&gt;
&lt;li&gt;margin이 충분히 커서 dimension보다 $\left [ \frac{R^2}{\Delta^2} \right ]$이 더 작아지면, VC dimension은 $\left [ \frac{R^2}{\Delta^2} \right ] +1$이 됩니다.&lt;/li&gt;
&lt;li&gt;반대로 margin이 작으면 VC dimension이 D+1 이 됩니다.&lt;/li&gt;
&lt;/ul&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;만약 margin을 충분히 키우는 선형모형이 된다면, VC dimension 자체가 D+1 보다 작아질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;$R[f]\leq R_{emp}[f]+\sqrt{\frac{h(ln\frac{2n}{n}+1)+ln\frac{\delta}{4}}{n}}$&lt;/span&gt;&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;margin을 최대화 한다는 것은 -&amp;gt; VC dimension을 줄어들게 하고 -&amp;gt; VC dimension이 줄어드는 것은 -&amp;gt; h를 줄이는 것입니다.&lt;/li&gt;
&lt;li&gt;h를 줄이면, $h(ln\frac{2n}{n}+1)$가 작아지고 -&amp;gt; capacity term이 작아지고 -&amp;gt; ... -&amp;gt; generalization risk가 작아진다.&lt;/li&gt;
&lt;li&gt;정리하면, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;margin이 최대화되는 점을 찾으면&lt;/span&gt; -&amp;gt; VC dimension이 작아지고 -&amp;gt; capacity term도 작아지고 -&amp;gt; 따라서 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;기대할 수 있는 risk가 줄어듭니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBo2ld/btsJGhRW2vV/CLTXmhqIiFugVPLAKyQQb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBo2ld/btsJGhRW2vV/CLTXmhqIiFugVPLAKyQQb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBo2ld/btsJGhRW2vV/CLTXmhqIiFugVPLAKyQQb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBo2ld%2FbtsJGhRW2vV%2FCLTXmhqIiFugVPLAKyQQb0%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;843&quot; height=&quot;477&quot; data-origin-width=&quot;843&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞선 설명을 이해하기 쉬운 예시로 나타낸 슬라이드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Support Vector Machine: Cases&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;hard margin은 예외를 벗어나는 것을 허용하지 않습니다. 반면 soft margin은 예외를 허용합니다.&lt;/li&gt;
&lt;li&gt;input space에서 선형 분리가 불가능한 상황에서는, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;kernel trick&lt;/span&gt;을 이용합니다.&lt;/li&gt;
&lt;li&gt;SVM은 상황에 따라 여러 case가 있습니다. 하나씩 살펴보겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;SVM Case I: Linear Case &amp;amp; Hard Margin&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선형으로 입력 공간에서 분리가 가능하면서, hard margin의 case입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- Objective function&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;min $\frac{1}{2}||\mathbf{w}^2||$&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- Constraints&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;$s.t.\ y_i(\mathbf{w}^T\mathbf{x}_i+b)\geq 1\ \ \forall i$&lt;/span&gt;&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;margin이 $\frac{2}{||w||^2}$&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;라고 하겠습니다. 이를 최대화하기 위해 역수를 취하면,&lt;br /&gt;$\frac{1}{2}||\mathbf{w}^2||$가 되고, 이 식을 최소화하는 문제로 바뀌게 됩니다.&lt;/li&gt;
&lt;li&gt;저희가 구하고자 하는 것은 (X, y)가 주어졌을 때, parameter &quot;w, b&quot;입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfiYMN/btsJGOuXY2F/bmeItQMKxk7U1fgH8CFMwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfiYMN/btsJGOuXY2F/bmeItQMKxk7U1fgH8CFMwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfiYMN/btsJGOuXY2F/bmeItQMKxk7U1fgH8CFMwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfiYMN%2FbtsJGOuXY2F%2FbmeItQMKxk7U1fgH8CFMwK%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;835&quot; height=&quot;497&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;497&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;그림으로 설명하면, 파란색 동그라미는 +1 평면보다 위쪽에 위치해야 합니다.&lt;br /&gt;반면에, 빨간색 동그라미는 -1 평면보다 아래쪽에 위치해야 합니다.&lt;br /&gt;이를 식으로 표현하면 다음과 같습니다.&lt;br /&gt;$y_i=+1\\ w^Tx_i+b\geq 1$&lt;br /&gt;$y_i=-1\\ w^Tx_i+b\leq -1$&lt;br /&gt;&lt;br /&gt;이는 $y_i(w^Tx_i+b)\geq 1$로 한번에 나타낼 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6MD0X/btsJH0nDmbT/CsBOpRKsJWkBFkgmwfq4mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6MD0X/btsJH0nDmbT/CsBOpRKsJWkBFkgmwfq4mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6MD0X/btsJH0nDmbT/CsBOpRKsJWkBFkgmwfq4mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6MD0X%2FbtsJH0nDmbT%2FCsBOpRKsJWkBFkgmwfq4mk%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;870&quot; height=&quot;502&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;502&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;SVM에서 수학적 원리를 알기 위해 필요한 수식 전개입니다.&lt;br /&gt;Lagrangian multiplier를 이용하며, $L_P$ 문제를 $L_D$ 문제로 바꿔서 쉽게 풀어내는 원리입니다.&lt;br /&gt;자세한 수식에 대한 설명은 [출처]에 있는 동영상 강의를 봐주시기 바랍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tHKmI/btsJIn3WKZd/Yr8aeVX0pKRDoecfQBceH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tHKmI/btsJIn3WKZd/Yr8aeVX0pKRDoecfQBceH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tHKmI/btsJIn3WKZd/Yr8aeVX0pKRDoecfQBceH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtHKmI%2FbtsJIn3WKZd%2FYr8aeVX0pKRDoecfQBceH1%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;841&quot; height=&quot;461&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;461&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;위 식에서 $\frac{1}{2}||\mathbf{w}^2||$가 원래 minimize 해야 하는 목적 함수이고,&lt;br /&gt;&lt;span&gt;$(y_i(\mathbf{w^T\mathbf{x}_i}+b)-1)$ 는 제약식입니다.&lt;br /&gt;&lt;/span&gt;$\alpha_i$는 lagrangian 승수이고, 모든 제약식에 대해 전부 만족해야 하므로, ​식은&lt;br /&gt;$\sum_{i=1}^{N}\alpha_i(y_i(\mathbf{w^T\mathbf{x}_i}+b)-1)$&lt;span&gt;로 표현할 수 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Primal 문제의 최적해는 KKT condition에 의해서 찾을 수 있습니다.&lt;br /&gt;w &amp;amp; b가 미지수이기 때문에, 이를 편미분하면 $w-\sum_{i=1}^{N}\alpha_iy_ix_i=0$&lt;span&gt;이 나옵니다.&lt;br /&gt;&lt;/span&gt;그래서 최적해 식이 $w=\sum_{i=1}^{N}\alpha_iy_ix_i$&lt;span&gt;와 같이 나온 것입니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;b에 대해서 편미분하면 ​$-\sum_{i=1}^{N}\alpha_iy_i=0 \rightarrow \sum_{i=1}^{N}\alpha_iy_i=0 \rightarrow \sum_{i=1}^{N}\alpha_iy_i=0$와 같이 식이 전개 됩니다.&lt;/li&gt;
&lt;li&gt;이제 앞선 Primal 문제를 Dual 문제로 치환한 후 $\alpha$에 대한 식으로 바꿔보겠습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;496&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x3Uaj/btsJGlNJVII/MJAuY7tw94ZrPimyr311rK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x3Uaj/btsJGlNJVII/MJAuY7tw94ZrPimyr311rK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x3Uaj/btsJGlNJVII/MJAuY7tw94ZrPimyr311rK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx3Uaj%2FbtsJGlNJVII%2FMJAuY7tw94ZrPimyr311rK%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;845&quot; height=&quot;496&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;496&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;$L_P$ 문제는 앞서 찾은 KKT condition에 의한 $\mathbf{w}$의 최적해, b의 최적해를 이용해서 $L_D$ 문제로 변환할 수 있습니다. (자세한 건 동영상 강의 참조)&lt;/li&gt;
&lt;li&gt;수식 전개를 거친 후 이를 $\alpha$에 대한 식으로 매우 단순화 시키면, $-\frac{1}{2}\lambda\alpha^2+\alpha$&lt;span&gt;와 같이 $\alpha$에 대한 최대값을 찾는 문제가 됩니다.즉 $L_D$는 $\alpha$에 대한 convex function 입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;​&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v7YC8/btsJIoV5Rv6/TKICe8ZGKQGjcF9GLasKdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v7YC8/btsJIoV5Rv6/TKICe8ZGKQGjcF9GLasKdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v7YC8/btsJIoV5Rv6/TKICe8ZGKQGjcF9GLasKdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv7YC8%2FbtsJIoV5Rv6%2FTKICe8ZGKQGjcF9GLasKdK%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;863&quot; height=&quot;475&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;475&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;정리하면, primal 문제가 dual 문제로 바뀌면서 $\alpha$에 대한 문제가 되는 것입니다.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이에 따라 최적해는 다음과 같이 구할 수 있습니다.&lt;br /&gt;$x_{new}$ 라는 새로운 값이 들어오면&lt;/span&gt;​, $f(x_{new})=sign(\sum_{i=1}^{N}\alpha_i y_ix_i^T x_{new}+b)$와 같이 구할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/epyJLZ/btsJHj9xQkB/5LTC1r9xvOdaKKIldqPuQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/epyJLZ/btsJHj9xQkB/5LTC1r9xvOdaKKIldqPuQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/epyJLZ/btsJHj9xQkB/5LTC1r9xvOdaKKIldqPuQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FepyJLZ%2FbtsJHj9xQkB%2F5LTC1r9xvOdaKKIldqPuQ0%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;845&quot; height=&quot;457&quot; data-origin-width=&quot;845&quot; data-origin-height=&quot;457&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;추가적으로 알아야 할 사항은, 분류경계면에서 왼쪽 경계와 오른쪽 경계에 위치한 값들만이 w를 결정하는데 영향을 미칩니다.&lt;br /&gt;이들을 support vectors라고 합니다.&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;[출처] : &lt;a href=&quot;https://www.youtube.com/watch?v=eZtrD6pYaaE&amp;amp;list=PLetSlH8YjIfWMdw9AuLR5ybkVvGcoG2EW&amp;amp;index=9&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=eZtrD6pYaaE&amp;amp;list=PLetSlH8YjIfWMdw9AuLR5ybkVvGcoG2EW&amp;amp;index=9&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=eZtrD6pYaaE&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/CIBiM/hyW2XyYE1p/Sg9K7k1kKodedh0oqINkeK/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;02-2: Kernel-based Learning - SVM (Linear Case with Hard Margin)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/eZtrD6pYaaE&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&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;</description>
      <category>머신러닝</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/68</guid>
      <comments>https://chaeniverse.tistory.com/68#entry68comment</comments>
      <pubDate>Fri, 20 Sep 2024 23:08:27 +0900</pubDate>
    </item>
    <item>
      <title>Random Forest</title>
      <link>https://chaeniverse.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Introduction&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*bagging: 데이터 셋을 독립적으로 생성하는 데 있어서 복원추출을 사용하는 방법론.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 복원 추출된 bootstrap에다가 variance가 높고 bias가 낮은 알고리즘(= 복잡도가 높은 알고리즘)을 개별적으로 학습시켜 최종적으로 결합하게 되면 효과를 봅니다.&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;Random forest는 이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;bagging&lt;/span&gt;의 특수한 형태입니다.&lt;/li&gt;
&lt;li&gt;Random forest는 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;반드시 decision tree를 base learner&lt;/span&gt;로 봅니다.&lt;/li&gt;
&lt;li&gt;의사결정나무 알고리즘 여러개를 학습시켜 결합하게 되면 forest가 됩니다.&lt;/li&gt;
&lt;li&gt;Random forest는 ensemble의 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;다양성을 확보&lt;/span&gt;하기 위한 두가지 메커니즘을 갖고 있습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bagging&lt;/li&gt;
&lt;li&gt;&lt;u&gt;변수를 랜덤으로 선택&lt;/u&gt;한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Algorithm&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bootstrap size t만큼의 random sample을 만듭니다.&lt;/li&gt;
&lt;li&gt;변수를 split 할 때 해당하는 영역을 분할하는 과정에서 원래 p개의 변수 중에서 m개의 변수만을 선택합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;e.g., 이번 영역에 대한 data를 분할할 때는, $x_1$만 사용한다. $x_2$는 사용하지 않는다. 이렇게 제약을 하는 것을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이렇게 해서 의사결정 나무를 만들고 결과를 결합한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;More detail&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;583&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ptkK1/btsJETJTojW/HQZGObcZe5Ou84rni5DtO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ptkK1/btsJETJTojW/HQZGObcZe5Ou84rni5DtO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ptkK1/btsJETJTojW/HQZGObcZe5Ou84rni5DtO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FptkK1%2FbtsJETJTojW%2FHQZGObcZe5Ou84rni5DtO1%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;786&quot; height=&quot;583&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;583&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;위 그림에서 왼쪽으로 가는 게 training data이고 오른쪽이 OOB data입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Randomly selected variable&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tYiRu/btsJD7IyHh8/tQ6TtiEsK2GV1yDHGQb1u1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tYiRu/btsJD7IyHh8/tQ6TtiEsK2GV1yDHGQb1u1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tYiRu/btsJD7IyHh8/tQ6TtiEsK2GV1yDHGQb1u1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtYiRu%2FbtsJD7IyHh8%2FtQ6TtiEsK2GV1yDHGQb1u1%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;793&quot; height=&quot;590&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;590&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;bootstrap을 통해 선택된 데이터 셋이 있습니다. X는 25차원의 데이터입니다.&lt;/li&gt;
&lt;li&gt;bagging tree: bagging을 한 각각의 bootstrap에다가 모든 변수를 사용해서 의사결정나무를 쓰는 것입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bootstrap을 이용하여 random으로 sampling한 후 decision tree 한개를 만듭니다.&lt;/li&gt;
&lt;li&gt;이 과정을 여러번 반복합니다.&lt;/li&gt;
&lt;li&gt;이 결과들을 하나로 묶으면 bagging tree라고 할 수 있습니다.&lt;/li&gt;
&lt;li&gt;이때, $T_1$, $T_2$, ..., $T_B$의 결과는 거의 비슷합니다. (왜냐면 같은 dataset에서 random sampling 한 것이기 때문입니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;random forest는&amp;nbsp;위와 같은 그림이 있을 때 bootstrap을 사용한 후 -&amp;gt; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;random variable selection&lt;/span&gt;을 거치고 -&amp;gt; decision tree를 만듭니다.&lt;/li&gt;
&lt;li&gt;변수 선택이 들어갔기 때문에 &lt;u&gt;개별 tree의 성능은 떨어지지만, 이를 여러 개의 tree로 묶으면 성능이 올라갑니다.&lt;/u&gt; (이게 random forest의 재밌는 점입니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Generalization Error (일반화 성능)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$Generalization\&amp;nbsp;Error\leq\frac{\bar\rho(1-s^2)}{s^2}$&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여기서, $\rho$는 각각의 tree들이 갖고 있는 결과들의 상관관계이고,&lt;/li&gt;
&lt;li&gt;$s^2$는 얼마나 정확한지 나타내는 지표입니다.&lt;/li&gt;
&lt;li&gt;따라서 알고리즘이 정확할수록 $s^2$는 높아지고, 개별 모델의 다양성이 높을수록 $\rho$는 낮아집니다.&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Variable Importance&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cruCQY/btsJD4Zsa8b/WCkCOxAz5SdVaLysilBey0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cruCQY/btsJD4Zsa8b/WCkCOxAz5SdVaLysilBey0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cruCQY/btsJD4Zsa8b/WCkCOxAz5SdVaLysilBey0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcruCQY%2FbtsJD4Zsa8b%2FWCkCOxAz5SdVaLysilBey0%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;790&quot; height=&quot;585&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;585&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Random Forest의 장점은 변수의 중요도를 산출할 수 있다는 것입니다.&lt;/li&gt;
&lt;li&gt;dataset에서 bootstrap을 사용해 tree를 만들고, 남은 OOB data를 이 tree에 적용합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;train data를 재사용하지 않으면서 validation을 할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$e_i$는 원래 OOB 데이터에 넣었을 때 에러입니다. $p_i$는 OOB data에서 중요도를 산출하고자 하는 $x_i$를 permutation 한 것의 에러입니다.&lt;/li&gt;
&lt;li&gt;만약 $x_i$가 split에 사용되지 않았으면, $p_i$는 $e_i$와 같습니다. 왜냐면 그 변수를 사용하는 과정에서 tree에 한번도 사용되지 않았기 때문입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이를 다시 말하면 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;i번째 변수는 중요하지 않은 변수&lt;/span&gt;라는 것을 뜻합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;$x_i$가 split에 자주 사용될수록 $p_i&amp;gt;e_i$가 될 것입니다. 왜냐면 random으로 permutation해서 정보를 뒤죽박죽 바꿔버렸기 때문입니다. 따라서 바뀌기 전의 데이터의 변수를 갖고 만든 모델이 망가져버린 것입니다.&lt;/li&gt;
&lt;li&gt;정리하면, 둘 사이의 차이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;($p_i-e_i$)가 크면 클수록 중요한 변수로 판단합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Example&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E8XzI/btsJGgqzcln/9FFd2I6W7ZqWx5U0LwzwSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E8XzI/btsJGgqzcln/9FFd2I6W7ZqWx5U0LwzwSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E8XzI/btsJGgqzcln/9FFd2I6W7ZqWx5U0LwzwSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE8XzI%2FbtsJGgqzcln%2F9FFd2I6W7ZqWx5U0LwzwSk%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;788&quot; height=&quot;590&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;590&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;예를 들어, 위에서 보이는 것처럼 원래 값인 $x_i$를 permutation 합니다.&lt;/li&gt;
&lt;li&gt;만약 변수 i가 tree를 split 하는 데 한 번도 사용되지 않았다면, 즉, $x_1$, $x_2$, $x_7$만 사용되고 $x_i$는 사용되지 않았다고 하면, 원래 OOB data를 이용한 orginal 에러율 $e_i$와 permutation 시킨 $p_i$가 같아집니다.&lt;/li&gt;
&lt;li&gt;그렇기 때문에 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;tree를 split 하는 데 사용되지 않은 변수라면 중요하지 않은 변수&lt;/span&gt;라고 할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKs7lb/btsJEUveaL5/DIiK3ERMDVckLzlJ1u6Vs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKs7lb/btsJEUveaL5/DIiK3ERMDVckLzlJ1u6Vs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKs7lb/btsJEUveaL5/DIiK3ERMDVckLzlJ1u6Vs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKs7lb%2FbtsJEUveaL5%2FDIiK3ERMDVckLzlJ1u6Vs0%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;788&quot; height=&quot;590&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;590&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;이번에는, $x_i$가 여러 곳에서 사용된 중요한 변수라고 하겠습니다.&lt;/li&gt;
&lt;li&gt;그렇다면 정보를 뒤죽박죽 섞었기 때문에 원래 OOB data의 에러율인 $e_i$보다 permutation시킨 에러율 $p_i$가 훨씬 크게 나타날 것입니다.&lt;/li&gt;
&lt;/ul&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;m번째 tree에서 변수 i에 대한 random permutation 전후 OOB error의 차이는 아래와 같습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$d_i^m=p_i^m-e_i^m$&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 Tree들에 대한 OOB error 차이의 평균 및 분산입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$\bar{d}_i=\frac{1}{m}\sum_{i=1}^m d_i^m$, $s_i^2=\frac{1}{m-1}\sum_{i=1}^m (d_i^m-\bar{d}_i)^2$&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;i번째 변수의 중요도입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$v_i=\frac{\bar{d}_i}{s_i}$&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 평균이 높고 분산이 낮을수록 변수의 중요도는 올라갑니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;a href=&quot;https://www.youtube.com/watch?v=nu_6PB1v3Xk&amp;amp;list=PLetSlH8YjIfWMdw9AuLR5ybkVvGcoG2EW&amp;amp;index=24&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=nu_6PB1v3Xk&amp;amp;list=PLetSlH8YjIfWMdw9AuLR5ybkVvGcoG2EW&amp;amp;index=24&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=nu_6PB1v3Xk&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/bfRX8R/hyW6zwnmT5/yiQ8b6GApGp6lcbKEr16U0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-title=&quot;04-4: Ensemble Learning - Random Forests (앙상블 - 랜덤포레스트)&quot; data-original-url=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/nu_6PB1v3Xk&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&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;script type=&quot;text/x-mathjax-config&quot;&gt;
MathJax.Hub.Config({
  tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}
});
&lt;/script&gt;
&lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>머신러닝</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/67</guid>
      <comments>https://chaeniverse.tistory.com/67#entry67comment</comments>
      <pubDate>Thu, 19 Sep 2024 14:27:41 +0900</pubDate>
    </item>
    <item>
      <title>A-R Algorithm</title>
      <link>https://chaeniverse.tistory.com/66</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;acceptance-rejection algorithm&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;div id=&quot;SE-c5eff641-e1b0-4f41-8e2f-b315e73539e0&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;p id=&quot;SE-0e910d24-c675-4fbb-99bb-ae6373b405cf&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;이상한 분포에 균일 분포를 씌운 뒤 모래를 뿌려서 안쪽에 있는 것만 accept하고 바깥 쪽에 있는건 reject하는 정도만 알고 있었고, 자세한 logic은 몰랐는데 이번에 알게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ddd95474-aa94-4a83-b7b0-c6e77763a522&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #232629;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0ea4ace4-35c0-4152-9120-90a14fa6e5e1&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;가령,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-c19cf577-155d-4f7e-b46a-2c1efffcf5df&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;아래와 같은 이상한 pdf가 있고 저 분포를 따르는 data를 sampling하고 싶다고 가정하자.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-942bff4d-1882-43a2-b398-11db7cae4694&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;그러나, 우린 저 pdf의 분포를 모르기 때문에 근사시키는 방법을 사용해서 sampling을 시도해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-710b6ed9-7253-448c-93ba-f6bc4f32742c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;그래서 이 과정에서 균일 분포 등 우리에게 친숙한 분포를 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-d994898e-4bf6-4560-bd10-300b325db0ee&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;step1) 저 x축에서 unif(0,1)을 따르는 data들을 10000개 정도 sampling한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c35e4fe9-4969-4ac7-aff9-d12f88448377&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;x축에 표시해둔 눈금이 unif(0,1)에서 뽑아낸 data point라고 생각하자.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d30dc7bf-8dc6-43d1-b00f-1c2cc56ad80c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;균일분포에서 추출한 것이므로 data들이 고르게 분포돼 있는 걸 알 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-86d6cd96-4162-4ce0-8d45-66998b5d2009&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_연습장-8 (1).jpg&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGemeI/btsJtE1acxC/IKrpdvhqf7TkfFSLOX2fk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGemeI/btsJtE1acxC/IKrpdvhqf7TkfFSLOX2fk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGemeI/btsJtE1acxC/IKrpdvhqf7TkfFSLOX2fk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGemeI%2FbtsJtE1acxC%2FIKrpdvhqf7TkfFSLOX2fk0%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;996&quot; height=&quot;804&quot; data-filename=&quot;edited_연습장-8 (1).jpg&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;SE-b9b5582e-c1e5-4714-a9c9-753fe4c484b6&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;p id=&quot;SE-59130f4f-dc1f-4cad-9ca6-5440347f4a79&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #232629;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;step2) 저 별표를 x축에서의 fixed point라고 하고, fixed point를 기준으로 y축도 마찬가지로 unif(0,a)를 따르는 data point들을 10000개 정도 sampling한다.&lt;/span&gt;​&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-70e05852-c97c-4607-9e7c-2087a6615d5e&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_연습장-8 (2).jpg&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;792&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIM19o/btsJvb4dTuG/eCZWcMYcI5XmOM3EuyzDxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIM19o/btsJvb4dTuG/eCZWcMYcI5XmOM3EuyzDxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIM19o/btsJvb4dTuG/eCZWcMYcI5XmOM3EuyzDxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIM19o%2FbtsJvb4dTuG%2FeCZWcMYcI5XmOM3EuyzDxK%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;866&quot; height=&quot;792&quot; data-filename=&quot;edited_연습장-8 (2).jpg&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div id=&quot;SE-cb1c56f6-6751-43fc-97e4-7e8bae74957d&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;p id=&quot;SE-792f9c1a-bf6b-4a81-a6d8-1dd538b3d2eb&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;step3) then, 저런 식으로 data가 sampling 되는 데, 이때 초록색 부분만 accept하고 나머지 핑크색 부분은 reject한다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-3e31fac8-557c-4ac0-8a4d-65fd9bf44708&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-697a6941-5b6b-461d-9e66-1fea95c943cc&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_연습장-8 (3).jpg&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyZV7l/btsJuBhZRJP/YekX52te5OYz5VAxSNl1R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyZV7l/btsJuBhZRJP/YekX52te5OYz5VAxSNl1R0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyZV7l/btsJuBhZRJP/YekX52te5OYz5VAxSNl1R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyZV7l%2FbtsJuBhZRJP%2FYekX52te5OYz5VAxSNl1R0%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;893&quot; height=&quot;814&quot; data-filename=&quot;edited_연습장-8 (3).jpg&quot; data-origin-width=&quot;893&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;이런 식으로 눈금 쳐진 모든 x축의 data point들에 대해서 이 process를 수행하고, 선택된 data point들의 histogram을 그리면,&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-1b2c8239-1ae6-4fd1-b45c-370e4b6d9537&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_연습장-8 (4).jpg&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br2sR5/btsJuqOCKeI/6OOW5OCbKMXNWCaOJ9e4W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br2sR5/btsJuqOCKeI/6OOW5OCbKMXNWCaOJ9e4W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br2sR5/btsJuqOCKeI/6OOW5OCbKMXNWCaOJ9e4W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr2sR5%2FbtsJuqOCKeI%2F6OOW5OCbKMXNWCaOJ9e4W1%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;849&quot; height=&quot;764&quot; data-filename=&quot;edited_연습장-8 (4).jpg&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-b2e5a5e3-7746-4920-a6d9-4c96347c4bb4&quot; style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;이런식으로 그려진다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-684a8829-2855-42c2-99bb-6b45ccd62136&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;그리고 최종적으로 이 data들의 표본평균을 구하여 원래 분포의 평균을 대체하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>통계학</category>
      <author>chaeniverse</author>
      <guid isPermaLink="true">https://chaeniverse.tistory.com/66</guid>
      <comments>https://chaeniverse.tistory.com/66#entry66comment</comments>
      <pubDate>Sat, 7 Sep 2024 11:14:41 +0900</pubDate>
    </item>
  </channel>
</rss>