<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>philiplee.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Fri, 27 Jan 2023 13:47:09 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. philiplee.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/philiplee_235" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Diffusion Models Beat GANs on Image Synthesis]]></title>
            <link>https://velog.io/@philiplee_235/Diffusion-Models-Beat-GANs-on-Image-Synthesis</link>
            <guid>https://velog.io/@philiplee_235/Diffusion-Models-Beat-GANs-on-Image-Synthesis</guid>
            <pubDate>Fri, 27 Jan 2023 13:47:09 GMT</pubDate>
            <description><![CDATA[<p>GAN 보다 더 높은 quality 의 image 를 생성하는 Diffusion model 의 구조와 Classifier guidance 를 소개한 논문 (<a href="https://arxiv.org/abs/2105.05233">Dhariwal &amp; Nichol, 2021</a>)<sup><a href="#footnote_1">[1]</a></sup> 을 리뷰해 보았다. </p>
<p>수식 번호의 경우 논문의 표기를 따른다.</p>
<h2 id="abstract">Abstract</h2>
<p>논문에서는 Diffusion model 이 생성 모델에 대한 SOTA 보다 더 좋은 품질의 이미지를 생성함을 보인다. 생성을 위한 더 나은 구조를 찾아 unconditional image generation 을 수행한다. 또한 classifier guidance 를 통해 conditional image generation 역시 수행한다. Classifier 의 gradient 를 이용하는 compute-efficient 방법으로, diversity 와의 trade-off 가 존재한다. 하나의 sample 을 생성하기 위해, BigGAN-deep 에 비해 25번의 iteration 이 더 적게 필요함을 확인하였으며 $128 \times 128$ ImageNet 이미지에 대해 FID score 2.97 을 달성한다. 또한 upsampling diffusion model 과 classifier guidance 를 결합시켜 $256 \times 256$  ImageNet 데이터에 대해 FID score 3.94 를 달성한다.</p>
<h2 id="1-introduction">1. Introduction</h2>
<p>Image generation task 에 있어서 GAN 은 지난 몇 년간 SOTA 를 유지해 왔다. 그러나 GAN 을 통해 생성된 sample 들은 diversity 가 높지 않으며, 모델 자체를 학습시키는 과정이 어렵다는 단점 역시 가지고 있다. 따라서 likelihood 를 기반으로 하는 생성 모델들이 제안되었고, 높은 diversity 와 학습이 쉽다는 장점을 가졌지만 이들에 의해 생성된 sample 은 GAN 에 의해 생성된 sample 보다 quality 가 낮았다. 최근에 likelihood 를 이용하는 생성 모델로 diffusion 이 새로 제시되었다. Diffusion 의 training object 는 re-weighted variational lower bound 로, CIFAR-10 데이터셋 생성에 대해서 SOTA 를 달성하였다. 그러나 다른 데이터셋 (LSUN, ImageNet) 에 대해서는 여전히 GAN 보다 좋은 성능을 나타내지 못하였다. Nichol &amp; Dhariwal 에 의해 upsampling stack 이 도입되며 diffusion model 개선이 이루어졌지만, ImageNet 에 대한 SOTA 모델 (BigGAN-deep) 보다 좋지 않은 FID score 를 나타냈다.</p>
<p>이 논문에서는, diffusion model 과 GAN 의 성능이 차이나는 이유를 크게 2가지라고 주장한다.</p>
<p>1) 최신 논문에서 제안된 GAN 은 그 구조가 매우 다양하게 탐색되었으며 많이 개선되어 있다. 반면 Diffusion 은 충분한 모델 구조 개선이 이루어지지 않았다.</p>
<p>2) GAN 은 sample 의 다양성 (diversity) 와 quality 사이의 trade-off 가 이루어진다. 즉 sample 에 대한 전체 distribution 은 cover 하지 않지만, 그 quality 가 좋다.</p>
<p>따라서 논문에서는 diffusion model 의 구조를 개선시키고, diversity 에 대한 trade-off 를 도입해 sample 의 품질을 향상시킨다. 이를 통해 서로 다른 dataset 에 대해, GAN 보다 더 좋은 성능을 기록하고 SOTA 를 갱신한다.</p>
<h2 id="2-background">2. Background</h2>
<blockquote>
<p>💡 2. 절에서는 Diffusion model 의 개요 (DDPM)와 이를 개선시킨 연구들을 소개하고, 실험 환경에 대해 설명한다.</p>
</blockquote>
<p><a href="https://arxiv.org/abs/2006.11239">Ho et al. (2020)</a> 에서 처음으로 제안된 DDPM 은 noise $x_T$ 로부터 시작해 ‘denoising’ 과정을 거쳐 sample $x_{T-1}, x_{T-2}, \cdots, x_1, x_0$ 를 생성한다. $x_t$ 에 가해진 noise $\epsilon \sim \mathcal{N}(0, \mathbf{I})$ 를 예측하는 모델 $\epsilon_{\theta}(x_t, t)$ 를 </p>
<p>$$
|| \epsilon_{\theta} (x_t, t) - \epsilon || ^2_2
$$</p>
<p>가 최소가 되게끔 학습시킨다. 학습된 network 를 이용해, 분포 $p_{\theta}(x_{t-1} | x_t)$ 를 모델링한다. 분포의 분산 $\Sigma_{\theta}(x_t, t)$ 는 고정된 상수로 두고, 평균 $\mu_{\theta}(x_t, t)$ 는 network $\epsilon_{\theta}(x_t, t)$에 대한 식으로 나타낸다. 이로부터, reparameterization trick 을 통해 $x_t$ 로부터 sampling 을 통해 $x_{t-1}$  을 얻는다.</p>
<p>또한 DDPM 을 VAE 로써 해석해, 더 좋은 성능을 가져다주는 training object $L_{\text{simple}}$ 을 유도한다.</p>
<p>$$
L_{\text{simple}} = \mathbb{E}<em>{t \sim \text{Uniform}(1, T), ; x_0 \sim q(x_0), ; \epsilon \sim \mathcal{N}(0, \mathbf{I})}[ || \epsilon - \epsilon</em>{\theta}(x_t, t)||^2_2 ] \tag{26}
$$</p>
<p>DDPM 의 training 과정과 sampling 과정은 Song &amp; Ermon (2021) 에서 제안된 것 처럼 각각</p>
<ul>
<li>Training : Denoising score matching</li>
<li>Sampling : Annealed Langevin dynamics</li>
</ul>
<p>를 따른다.</p>
<h3 id="21-improvementssup2sup">2.1. Improvements<sup><a href="#footnote_2">[2]</a></sup></h3>
<p><a href="https://arxiv.org/abs/2102.09672">Nichol &amp; Dhariwal (2021)</a> 는 DDPM 에서 고정되어 있었던 분산 $\Sigma_{\theta}(x_t, t)$ 을 매개화 한다. 출력값이 $v$인 인공 신경망에 대해 (mixing vector $v$ 를 예측하는 인공 신경망),</p>
<p>$$
\Sigma_{\theta}(x_t, t) = \exp(v \log{\beta_t}+(1-v)\log{\tilde{\beta}_t}) \tag{1}
$$</p>
<p>로 매개화 한다. 이 때 $L_{\text{simple}}$ 은 $\Sigma_{\theta}$ 에 의존하지 않으므로, 두 개의 network ($\Sigma_{\theta}(x_t, t)$, $\epsilon_{\theta}(x_t, t)$)를 모두 학습시키기 위한 새로운 training object</p>
<p>$$
L_{\text{new}}=L_{\text{simple}} + \lambda L_{\text{vlb}}
$$</p>
<p>를 정의한다. $L_{\text{vlb}}$ 는 </p>
<p>$$
L_{\text{vlb}} = L_0 + L_1 + \cdots + L_T \tag{22}
$$</p>
<p>이며, $L_{\text{vlb}}$ 내에서 $\epsilon_{\theta}(x_t, t)$ 에 관련된 gradient 는 업데이트를 진행하지 않게끔 해 오직 $\Sigma_{\theta}(x_t, t)$ 만을 update 하도록 한다. 결과적으로 $\Sigma_{\theta}(x_t, t)$, $\epsilon_{\theta}(x_t, t)$ 는 각각 $L_{\text{vlb}}$, $L_{\text{simple}}$ 을 통해서 업데이트 되는 것이다. 실제 학습 시에는 $L_{\text{vlb}}$ 에 importance sampling (IS) 을 적용하였다.</p>
<p>이를 통해 sample 의 품질을 크게 하락 시키지 않으며 더 빠른 sampling 이 가능하다. 이 논문에서도, 위 training object 를 이용해 학습을 진행한다.</p>
<p><a href="https://arxiv.org/abs/2010.02502">Song et al. (2020)</a> 에서는 DDIM 이 제안되었다. DDIM 은 DDPM 의 forward process 를 non-Markovian noising process 로 대체한 모델로, DDPM 에 비해 (1번의 sampling 당) 50회 적은 sampling step 을 사용할 수 있다. DDIM 의 forward process 에서 marginal distribution $q(\mathbf{x}_t | \mathbf{x}_0)$는 DDPM 과 동일하지만, sampling process 에서 reverse noise distribution 의 분산을 조정함으로써 DDPM 과는 다른 sampling 과정을 유도한다 (<em>deterministic sampling</em>). 분산을 0으로 고정한 것이 DDIM 으로, latent variable 과 image 사이의 deterministic mapping 을 유도하며 더 적은 step 만에 sampling 이 가능하도록 한다.</p>
<h3 id="22-sample-quality-metrics">2.2. Sample Quality Metrics</h3>
<p>서로 다른 모델이 생성한 sample 의 quality 를 비교하기 위해 아래와 같은 metric 들을 사용하였다.</p>
<p><strong>Inception Score (IS)</strong></p>
<p>모델이 ImageNet 의 각 class 에 대해 생성한 sample 의 집합이, 전체 class distribution 을 얼마나 잘 나타나는지 정량적으로 측정한다. 단점으로는, 전체 dataset 에 대한 작은 부분집합을 memorize 한 model 이 높은 IS 값을 가지게 된다는 점이다. </p>
<p><strong>Fréchet Inception Distance (FID score)</strong></p>
<p>IS 보다, 인간의 평가와 더 유사한 결과를 나타내는 척도로 알려져 있다. FID는 Inception-V3 latent 공간에서 서로 다른 두 이미지 분포 간의 대칭적인 measure 를 나타낸다. 최근에는 standard pooled feature 보다 spatial feature 를 사용하는 <em>sFID score</em> 가 제안되었다. sFID 는 FID 에 비해 공간 정보 간의 관계를 더욱 잘 capture 하며, 이미지의 분포가 일관적으로 high-level structure 를 따르게끔 한다. </p>
<p><strong>Precision and Recall</strong></p>
<p>Precision 은 모델이 산출한 sample 들 중 data manifold 에 존재하는 비율을 측정하며, Recall 은 sample 들에 의해 형성되는 manifold 에 속하는 data point 의 비율을 측정한다.</p>
<p><em>cf)</em> 머신러닝에서 사용되는 precision 과 recall 의 정의는 다음과 같다.</p>
<p>$$
\text{Precision} = \frac{\text{TP}}{\text{TP}+\text{FP}}
$$</p>
<p>$$
\text{Recall} = \frac{\text{TP}}{\text{TP}+\text{FN}}
$$</p>
<p>논문에서는 diversity 와 sample 의 품질을 동시에 정량적으로 측정 및 비교하기 위해, FID score 를 기본 metric 으로 사용한다. 추가적으로 Quality 측정을 위해 precision 과 IS 를, diversity 를 측정하기 위해 recall 을 사용한다.</p>
<h2 id="3-architecture-improvements">3. Architecture Improvements</h2>
<blockquote>
<p>💡 3. 절에서는 FID score 를 향상시키기 위한 모델 구조에 대해 설명한다.</p>
</blockquote>
<p>Diffusion model 에 대해 가장 좋은 quality 의 sample 을 추출하는 모델 구조를 탐색하였다.</p>
<p>DDPM 이 처음 제안된 <a href="https://arxiv.org/abs/2006.11239">Ho et al. (2020)</a> 에서는, <a href="https://arxiv.org/abs/2009.05475">Jolicoeur-Martineau et al. (2020)</a> 에서 denoising score matching 을 사용할 때 sample 의 품질을 높이기 위해 제안한 <strong>U-Net 구조를 사용</strong>한다. U-Net 구조를 요약하면 다음과 같다.</p>
<ul>
<li>Residual layer 와 downsampling layer 를 연속적으로 사용</li>
<li>Residual layer 와 upsampling convolution 역시 연속적으로 적용</li>
<li>위 layer 들 간 Skip-connection 을 적용</li>
<li>각 residual block 에 대해, global attention 을 적용 (# of attention head = 1, resolution $16 \times 16$) 하고 timestep embedding 의 projection 을 추가</li>
</ul>
<p>위 구조에 다음과 같은 변형을 추가하여 $128 \times 128$ size 의 ImageNet 에 대해 sample 의 diversity 와 quality 를 높였다.</p>
<ul>
<li>Model size 는 일정하게 유지하면서, <em>width 대비 depth</em> 를 증가시키기</li>
<li>Number of attention head 증가</li>
<li>Attention 의 resolution 으로 $32 \times 32$, $16 \times 16$, $8 \times 8$ 사용</li>
<li>Residual connection 의 scale 을 모두 $\frac{1}{\sqrt{2}}$ 배</li>
<li>Upsampling / downsampling 과정에서 BigGAN 의 residual block 을 사용</li>
</ul>
<p>모델은 $128 \times 128$ ImageNet 데이터셋에 대해 학습시켰으며, batch size = 256, sampling step = 250 으로 두었다. 여러가지 모델 구조에 대해 학습을 진행하며 FID score 를 측정하였다. 그 결과는 Table 1. 에 나타나 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/9674cdf1-73cf-4971-ac8e-d5ab81075b08/image.png" alt=""></p>
<p>Residual connection 에 대한 rescaling 외의 모든 기법은 성능을 향상시켰고, 복합적으로 좋은 효과를 가져왔다. Figure 2. (Left) 에 나타나 있듯, 모델의 depth 증가할수록 성능 역시 높아졌다. 그러나 학습에 소요되는 시간 역시 증가하고, width 가 더 큰 모델과 동일한 성능을 달성하기까지의 시간 역시 더 많이 소요되었다. 결과적으로 이후 실험에서는, depth 를 변화시키며 성능을 측정하지는 않았다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/0a169702-c9dd-445d-be49-5fb9904b2f7c/image.png" alt=""></p>
<p>논문에서는 Transformer 구조에서 제안된 attention 과 더 잘 일치하는 attention 구조에 대한 탐색 역시 진행하였다. Attention head 의 수 또는 하나의 head 에 존재하는 channel 의 수를 변화시키며 FID score 를 측정하였다. 변화시킨 조건 외에는 base channel 수는 128개, residual block 은 2개 (1개의 resolution 당)를 사용하였으며 multi-resolution attention, BigGAN up/downsampling 을 적용하였다. Table 2. 에 실험 결과가 나타나 있다. Head 의 수를 늘리거나 채널의 수를 줄이는 것이 높은 성능을 유도하는 것을 알 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/18c4b1b4-7c10-418c-bc28-499ee983657f/image.png" alt=""></p>
<p>Figure 2. (Right) 에서 알 수 있듯, 64 channel 을 사용하는 경우 시간적인 측면에서 가장 좋은 결과를 나타냈으므로, 이후 실험에서는 64개 채널을 기본으로 사용하였다. 이러한 선택은 최근에 제안된 transformer 구조와 잘 일치하며, 비슷한 FID score 값을 가진다.</p>
<h3 id="31-adaptive-group-normalization-adagn">3.1. Adaptive Group Normalization (AdaGN)</h3>
<p>AdaGN 은 group normalization 이 적용된 후, 각각의 residual block 에 대해 timestep 및 class embedding 을 추가한다. 과정을 수식으로 나타내면 아래와 같다. Timestep 및 class embedding 에 대한 linear projection 을 각각 $y_s, y_b$ 라 하고, residual block 내에서 convolution 이 한 번 적용되었을 때의 값을 $h$라고 하면, </p>
<p>$$
\text{AdaGN}(h, y) = y_s \cdot \text{GroupNorm}(h) + y_b
$$</p>
<p>Table 3. 에 AdaGN 의 사용 유무에 따른 성능을 나타내었다. AdaGN 이 적용되었을 때 모델의 성능이 더 좋음을 확인할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/e69ce1a6-c19d-4d02-96f4-fa85439f60f5/image.png" alt=""></p>
<p>따라서 앞으로의 실험에서는 기본적으로 AdaGN 을 적용시켰다. </p>
<p>모델에서 최종적으로 사용한 구조는 다음과 같다.</p>
<ul>
<li>2 residual blocks per resolution</li>
<li>Multiple heads with 64 channels/head</li>
<li>32, 16, 8 attention resolution</li>
<li>BigGAN up/downsampling</li>
<li>AdaGN</li>
</ul>
<h2 id="4-classifier-guidance">4. Classifier Guidance</h2>
<p>GAN 의 경우 특정 class 에 속하는 이미지를 생성하기 위해 class label 을 사용한다. 대부분의 경우 discriminator 가 특정 class 에 이미지가 속하는지 분류하는 classifier $p(y|x)$ 처럼 설계되어 class-conditional normalization 기법을 사용한다. GAN 의 특징으로부터, class label 에 conditional 한 diffusion 역시 설계할 수 있다. 3.1. 절에 제시된 것 처럼, 이미 정규화 층에는 class 에 대한 정보를 포함시켰다 ($y_b$). 논문에서는, 이와는 또 다른 방법을 도입한다. Diffusion generator 자체를 원하는 방향으로 변화시킬 수 있게 해 주는 classifier $p(y|x)$ 를 고려해 보자. Class label $y$에 속하는 이미지를 생성하도록 하기 위해, noise 가 가해진 이미지 $x_t$ 에 대한 classifier $p_{\phi}(y|x_t, t)$ 를 학습시키고 gradient $\nabla_{x_t} \log{p_{\phi}(y|x_t, t)}$ 를 이용해 sampling process 가 특정 class 의 이미지를 생성하도록 조정할 수 있다.</p>
<p>4 절에서는 classifier 를 도입하는 이론적인 방식 2가지에 대해 논의한다. 이후, 실제 sampling 과정에서 (in-practice) 적용될 수 있게끔 변형시키는 방법을 소개한다. Notation 의 경우 편의를 위해</p>
<p>$$
p_{\phi}(y|x_t) := p_{\phi}(y|x_t, t) \ \epsilon_{\theta}(x_t) :=\epsilon_{\theta}(x_t, t)
$$</p>
<p>로 표기한다.</p>
<h3 id="41-conditional-reverse-noising-process">4.1. Conditional Reverse Noising Process</h3>
<p>Unconditional diffusion model 은 sampling 과정에서 $p_{\theta}(x_t | x_{t+1})$ 을 사용한다. 이를 class label $y$에 conditional 하게 바꾼다면, sampling 의 각 step 이 아래 확률분포로부터 sample 을 추출하게끔 하면 충분하다. Normalizing 상수를 $Z$ 라고 하면,</p>
<p>$$
p_{\theta, \phi}(x_t | x_{t+1}, y) = Zp_{\theta}(x_t | x_{t+1}) p_{\phi} (y | x_t) \tag{2}
$$</p>
<p>식 (2)로부터 sampling algorithm 을 유도해 보자. 기존 diffusion model 의 $p_{\theta}$ 를 간소화 시켜 나타내면</p>
<p>$$
p_{\theta}(x_t | x_{t+1}) = \mathcal{N}(\mu, \Sigma) \tag{3}
$$</p>
<p>이고 이 분포로부터 reparameterization trick 을 사용해 sampling 을 진행했었다. 여기서, Class-conditional 특성을 도입하려면 $p_{\theta}(x_t | x_{t+1}) p_{\phi} (y | x_t)$  의 값을 계산해야 한다. 계산의 편의성을 위해 $\log{p_{\theta}(x_t | x_{t+1}) p_{\phi} (y | x_t)}$ 를 계산하고 log 를 다시 지우는 방식을 생각해 보자. 우선,</p>
<p>$$
\log{p_{\theta}(x_t | x_{t+1})} = -\frac{1}{2}(x_t - \mu)^{\top} \Sigma^{-1} (x_t - \mu) + C \tag{4}
$$</p>
<p>를 계산할 수 있다. </p>
<p>$\log{p_{\phi}(y|x_t)}$ 의 curvature 가 $\Sigma^{-1}$ 에 비해 작다고 가정하자. 이 가정은 diffusion step 의 수가 무한히 발산하지 않을 때 성립한다. 가정이 성립한다면, $x_t =\mu$ 근방에서의 테일러 전개에 의해</p>
<p>$$
\log{p_{\phi}(y|x_t)} \simeq \log{p_{\phi}(y|x_t)}|<em>{x_t = \mu} + (x_t - \mu) \nabla</em>{x_t}\log{p_{\phi}(y|x_t)}|_{x_t = \mu} \tag{5}
$$</p>
<p>식 (5)에서 $\log{p_{\phi}(y|x_t)}|<em>{x_t = \mu}$  는 상수이고, $\nabla</em>{x_t}\log{p_{\phi}(y|x_t)}|_{x_t = \mu} =:g$ 로 치환하면</p>
<p>$$
\log{p_{\phi}(y|x_t)} \simeq (x_t  - \mu)g + C_1 \tag{6}
$$</p>
<p>이 성립한다. 식 (4), (6) 을 이용해 $\log{p_{\theta}(x_t | x_{t+1}) p_{\phi} (y | x_t)}$ 를 계산해 보면</p>
<p>$$
\log{p_{\theta}(x_t | x_{t+1}) p_{\phi} (y | x_t)} = -\frac{1}{2} (x_t - \mu - \Sigma g)^{\top} \Sigma^{-1} (x_t - \mu - \Sigma g) + C \tag{9}
$$</p>
<p>식 (9)에 reparameterization trick 을 적용하면 $z \sim \mathcal{N}(\mu+\Sigma g, \Sigma)$ 에 대해</p>
<p>$$
\log{p_{\theta}(x_t | x_{t+1}) p_{\phi} (y | x_t)} = \log{p(z)} + C \tag{10}
$$</p>
<p>이 성립한다. 이제 식 (10)에서 log 를 지우는 과정을 생각하면, </p>
<p>$$
p(z) = p_{\theta}(x_t | x_{t+1}) p_{\phi} (y | x_t)\cdot \exp(C) :=Z p_{\theta}(x_t | x_{t+1}) p_{\phi} (y | x_t) = p_{\theta, \phi}(x_t | x_{t+1}, y)
$$</p>
<p>이다. 결과적으로 분포 $\mathcal{N}(\mu+\Sigma g, \Sigma)$ 로 부터 $z$를 추출하는 것이 sampling 과정에 해당하게 된다. 상수 $C$의 경우, 식 (2)에서 normalizing constant $Z$로 고려되었다. </p>
<p>즉, 식 (10)으로부터 conditional transition operator 는 평균값이 변한 unconditional transition operator 로 근사 될 수 있음을 알 수 있다. 이를 적용한 sampling algorithm 은 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/04037ec0-40eb-4dec-95eb-938686cd14dd/image.png" alt=""></p>
<h3 id="42-conditional-sampling-for-ddim">4.2. Conditional Sampling for DDIM</h3>
<p>4.1. 절의 방법은 stochastic sampling 과정에서만 적용될 수 있다. DDIM 과 같은 deterministic sampling 에는 적용될 수 없으며, 따라서 score-based trick 을 새롭게 소개한다. 데이터에 추가되는 noise 를 예측하는 network 를 $\epsilon_{\theta}(x_t)$ 라고 해 보자. Notaion 은 <a href="https://arxiv.org/abs/2006.11239">Ho et al. (2020)</a> 을 따른다. Perturbed data distribution $q(x_t)$ 에 대한 score function 을 계산하면</p>
<p>$$
\nabla_{x_t} \log{q(x_t)} = -\frac{\epsilon_{\theta}(x_t)}{\sqrt{1-\bar{\alpha}_t}} \tag{11}
$$</p>
<p>과 같다. 이에 대한 유도 과정은 다음과 같다.<sup><a href="#footnote_2">[2]</a></sup></p>
<hr>
<p>DDPM 에서</p>
<p>$$
s_{\theta}(x_t, t) \simeq \nabla_{x_t}\log(q(x_t)) = \mathbb{E}<em>q(x_0)[\nabla</em>{x_t} \log{q(x_t | x_0)}]
$$</p>
<p>이다. 이 때 아래 두 식이 성립하므로</p>
<p>$$
q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t}x_0, (1-\bar{\alpha}_t) I)
$$</p>
<p>$$
x_0 = \frac{1}{\bar{\alpha}<em>t}(x_t - \sqrt{1-\bar{\alpha}_t} \epsilon</em>{\theta}(x)t))
$$</p>
<p>Distribution $q$의 pdf 식에 이를 대입해 계산하면</p>
<p>$$
s_{\theta}(x_t, t) = - \frac{\epsilon_{\theta}(x_t, t)}{\sqrt{1-\bar{\alpha}_t}}
$$</p>
<p>이다.</p>
<hr>
<p>Class-conditional 조건을 위해 다음 분포 $q(x_t, y)=q(x_t)q(y|x_t)$ 를 고려해 보자. 앞서 정의한 classifier $p_{\phi}(y|x_t)$ 를 이용해 이에 대한 score function 을 구하면</p>
<p>$$
\nabla_{x_t} \log{q(x_t)q(y|x_t)} = - \frac{\epsilon_{\theta}(x_t, t)}{\sqrt{1-\bar{\alpha}<em>t}} + \nabla</em>{x_t} \log{p_{\phi}(y|x_t)} \tag{13}
$$</p>
<p>이제 joint distribution 의 score 를 이용해 network 를 update 시키는 과정을 생각하자. 식 (13)을 통해 update 하고자 하는 network 를 $\hat{\epsilon}(x_t)$ 라고 하자. 식 (11) 과 유사하게</p>
<p>$$
\nabla_{x_t} \log{q(x_t)q(y|x_t)} = -\frac{\hat{\epsilon}_{\theta}(x_t)}{\sqrt{1-\bar{\alpha}_t}}
$$</p>
<p>가 성립하고 따라서</p>
<p>$$
\hat{\epsilon}(x_t) := \epsilon_{\theta}(x_t) - \sqrt{1-\bar{\alpha}<em>t} \nabla</em>{x_t} \log{p_{\phi}(y|x_t)} \tag{14}
$$</p>
<p>로 정의할 수 있다. DDIM 과 동일한 sampling 과정을 사용할 수 있지만 $x_t$ 로부터 $x_{t-1}$ 을 sampling 하는 식 내의 $\epsilon_{\theta}$ network 가 $\hat{\epsilon}$ network 로 바뀌게 된다. 이에 대한 알고리즘은 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/21423a9e-e8dd-44b5-b214-92fc4105cc64/image.png" alt=""></p>
<h3 id="43-scaling-classifier-gradients">4.3. Scaling Classifier Gradients</h3>
<p>Generation task 에 classifier 를 적용하기 위해서는 우선 ImageNet 데이터에 대해 classifier 를 학습시킨다. 모델 구조의 경우 U-Net 을 기본적으로 사용하며 $8 \times 8$ size 의 layer 를 downsampling 시켜 분류 문제를 해결하게끔 변형하였다. Diffusion model 에서 사용한 noise 와 동일한 분포에 대해 classifier 를 학습시켰고 과적합 방지를 위해 randomcrop augmentation 역시 적용하였다. 학습이 종료된 후에는 식 (10)을 이용해 diffusion 모델과 classifier 를 결합시켰다.</p>
<p>그러나 실제 실험에서는, classifier 에 의한 gradient 를 1보다 비율로 scaling 시켜 주어야 함을 발견하였다. Scale = 1 을 사용한 경우 class 에 할당된 확률이 50% 근처로 계산되었고 생성된 sample 들은 해당 class 에 속하지 않은 경우가 많았다. 반면 1보다 큰 scale factor 를 사용한 경우 특정 class 에 속할 확률이 100% 부근의 값으로 계산되었고 올바른 sample 들이 생성되었다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/a91bf469-41f9-494f-9578-ca85bfd93152/image.png" alt=""></p>
<p>Scaling 의 효과는 다음 수식으로부터 설명될 수 있다 : 임의의 상수 $C$에 대해,</p>
<p>$$
s \cdot \nabla_x \log{p(y|x)} = \nabla_x \log{\left(\frac{1}{C}p(y|x)^s \right)}
$$</p>
<p>가 성립한다. Classifier distribution 이 $p(y|x)^s$ 에 비례하게끔 re-normalize 된 classifier 로부터 conditioning 이 일어나게 된다. $s&gt;1$ 일 경우 분포 $p(y|x)$ 가 더 sharp 해 지게 되고, 이는 해당되는 class 에 대한 gradient scale 을 증가시킨다. 결과적으로 확률분포가 특정 class 에 대해 높아지고 나머지 class 에 대해서는 낮아지기 때문에 sample 의 diversity 는 낮아지지만 fidelity (quality; 품질) 가 높아지게 된다.</p>
<p>지금까지는, 사용하는 diffusion model 은 unconditional model 이라고 가정하였다. 그러나, diffusion model 자체를 conditional model 로 사용할 수도 있다. Classifier guidance 는 동일한 방식으로 적용된다. 모델의 종류와 classifier guidance 유무에 따른 sampling 결과를 Table 4. 에 나타내었다. Conditional model 과 guidance 를 같이 사용함으로써 가장 좋은 FID score 를 얻을 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/741aabd8-6a03-4b4a-95ca-428ae3e0087a/image.png" alt=""></p>
<p>2.2. 절에서 소개한 여러 가지 metric 을 살펴보자. Recall 은 diversity 를, Precision 과 IS 는 quality 를, FID 와 sFID 는 둘을 종합적으로 고려한 지표이다. Table 4. 로부터 sample quality 와 diversity 사이의 trade-off 를 관찰할 수 있다. Gradient scale 을 조정하며 더 구체적으로 trade-off 를 살펴본 결과를 Figure 4. 에 나타내었다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/1c413070-5059-4666-9005-1223c05c6ad2/image.png" alt=""></p>
<p>Figure 4. 에서 precision, recall 값을 통해 trade-off 현상을 확인할 수 있다. Gradient scale 이 커질수록 quality (IS, precision) 은 증가하는 반면 diversity (recall) 은 감소한다. FID, sFID score 는 이 둘을 종합적으로 고려하므로 중간 지점 ($s=1$ 부근) 에서 가장 좋은 결과를 가짐을 알 수 있다.</p>
<p>Figure 5. 는 classifier guidance 와 BigGAN-deep 의 performance 를 정량적으로 비교한다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/b7bcaca1-4cc1-465a-b9e8-be7b6435bb43/image.png" alt=""></p>
<p>BigGAN-deep 보다 classifier guidance 의 FID score 가 더 좋음을 알 수 있다.</p>
<h2 id="5-results">5. Results</h2>
<p>첫 번째로 개선시킨 모델 구조를 test 하기 위해 LSUN 데이터셋 중 bedroom, horse, cat class 에 대해 모델을 학습시켰다. 두 번째로 classifier guidance 의 효과를 검증하기 위해 ImageNet dataset ($128 \times 128, 256  \times 256, 512 \times 512$) 에 대해 학습을 진행하였다.</p>
<h3 id="51-sota-image-synthesis">5.1. SOTA Image Synthesis</h3>
<p>모델 (<strong>ADM</strong> : <strong>A</strong>blated <strong>D</strong>iffusion <strong>M</strong>odel 이라고 표기한다)의 결과는 Table 5. 에 나타나 있다. 모든 task 에 대해 가장 좋은 FID score 를 달성하며, 1개의 task 를 제외하고 가장 좋은 sFID score 역시 달성한다. 개선된 모델 구조만을 이용해서도 LSUN 데이터셋과 $64 \times 64$ ImageNet 에 대해 SOTA 를 갱신하며, 더 높은 해상도의 ImageNet 데이터에 대해서는 classifier guidance 를 통해 GAN 보다 높은 품질의 이미지를 생성한다. GAN 보다 높은 품질의 이미지를 생성함과 동시에, recall 에 의해 측정되는 diversity 역시 높은 값을 유지한다. 또한 이 과정은 25번의 diffusion step 만을 필요로 한다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/5d7e49af-cd92-44dd-a66e-607fe04362ea/image.png" alt=""></p>
<p>Figure 6. 은 BigGAN-deep 모델과 가장 좋은 성능을 기록한 ADM 에 의해 생성된 이미지를 나타낸다. 이미지의 quality 는 비슷하지만 diffusion 이 더 다양한 이미지를 산출한다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/33dddef6-2324-4553-97c1-f9f67623e75a/image.png" alt=""></p>
<h3 id="52-comparison-to-upsampling">5.2. Comparison to Upsampling</h3>
<p>논문에서는 classifier guidance 의 결과를 two-stage upsampling stack 에 의한 결과와도 비교한다. <a href="https://arxiv.org/abs/2102.09672">Nichol and Dhariwal (2021)</a> 과 <a href="https://arxiv.org/abs/2104.07636">Saharia et al. (2021)</a> 에서, low-resolution diffusion model 과 upsampling diffusion model 을 결합하여 이미지를 생성하는 방법이 제시되었다 (two-stage). Low-resolution model 은 sample (image)를 생성하고, upsampling model 은 해당 sample 에 대해 upsampling 을 수행한다. 이 기법을 통해 ImageNet $256 \times 256$  image 에 대한 FID score 를 개선시켰지만, BigGAN-deep 만큼의 quality 를 얻지는 못하였다.</p>
<p>Table 6. 에는 guidance 와 upsampling 이 서로 다른 metric 에 대해 좋은 값을 나타낸다는 점이 나타난다. Upsampling 의 경우 높은 recall 값을 유지하며 precision 을 개선시키고, guidance 는 앞서 설명한 trade-off 를 유도한다. 두 기법을 동시에 사용해 가장 좋은 FID score (3.85) 를 얻었는데, low-resolution model 에 guidance 를 적용시키고 upsampling model 을 통과시킨 경우이다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/56f8a09a-c865-4c1a-978e-f48c2ec844ea/image.png" alt=""></p>
<h2 id="reference">Reference</h2>
<p><a name="footnote_1">[1]</a> Prafulla Dhariwal, Alex Nichol, Diffusion Models Beat GANs on Image Synthesis, <em>CVPR</em>, <a href="https://arxiv.org/abs/2105.05233">arXiv:2105.05233</a>, 2021.</p>
<p><a name="footnote_2">[2]</a> Lilian Weng, “<a href="https://lilianweng.github.io/posts/2021-07-11-diffusion-models/">What are Diffusion Models?</a>&quot;, 2021.07.11.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Denoising Diffusion Probabilistic Models]]></title>
            <link>https://velog.io/@philiplee_235/Denoising-Diffusion-Probabilistic-Models</link>
            <guid>https://velog.io/@philiplee_235/Denoising-Diffusion-Probabilistic-Models</guid>
            <pubDate>Sun, 22 Jan 2023 10:52:58 GMT</pubDate>
            <description><![CDATA[<p>최근에 많은 연구가 이루어지고 있는 Diffusion Model 이 가장 먼저 제안된 논문 (<a href="https://arxiv.org/abs/2006.11239">Ho et al., 2020</a>)을 리뷰해 보았다. Diffusion model 은 2020년에 처음 제안되었으며, 앞으로의 모든 포스팅에서 이 논문에서 제안된 Diffusion model 을 DDPM (Denoising Diffusion Probabilistic Model) 으로 표기할 예정이다.</p>
<h2 id="1-introduction">1. Introduction</h2>
<p>GAN, VAE, Flow model 과 같은 Deep generative model 들은 다양한 data 에 대해 높은 quality 의 sample 들을 생성하였다. 이미지 및 오디오를 합성하기까지 했으며, energy-based modeling 과 score matching 방법을 이용해서 GAN 의 성능을 넘어선 발전을 이루기도 하였다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/605cc9e4-6377-4aa5-9974-79e37921673c/image.png" alt=""></p>
<p>이 논문에서는 <strong>Diffusion probabilistic model</strong> (이하 “diffusion model”) 에 대해 소개한다. Diffusion model 은 매개화된 마르코프 체인으로, 일정한 시간 간격 이후의 data에 대응(match) 되는 sample 을 생성하는 variational inference 를 이용해 학습되었다. Chain 간의 transition 은 diffusion process 를 역행하도록 학습된다. 이 때 Diffusion process 란, signal 이 사라지지 않을 때 까지 data 에 noise 를 추가하는 마르코프 체인 과정을 의미하며, noise 는 sampling 과정의 역순으로 추가된다. 만약 diffusion 과정에서 작은 gaussian noise 가 지속적으로 더해진다면, sampling 이 일어나는 chain transition 을 conditional gaussian noise 가 추가되는 과정으로 볼 수 있으며 인공 신경망 매개화를 부분적으로 적용할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/64b6fe51-29d8-40b6-929e-6ef7c02c11cd/image.png" alt=""></p>
<p>Diffusion model 은 straightforward 하게 정의되며 효율적으로 학습시킬 수 있지만, (논문이 쓰여진 시점 기준) 현재로서는 해당 모델이 높은 quality 의 sample 을 생성한다고 보장할 수는 없다. 따라서 이 논문에서는 diffusion model 이 충분히 높은 quality 의 sample 을 생성할 수 있으며, 때로는 4. 절에 제시되어 있는 기존 생성 모델보다 더 나은 결과를 산출한다는 것을 보일 것이다. 더 나아가, diffusion model 에 특정한 매개화를 적용하는 경우는 다음 두 가지 case 와 동치 (equivalent) 임을 보인다.</p>
<ul>
<li>1) Diffusion model 의 학습 (Training) 과정이, multiple noise 에 대한 denoising score matching 와 동치</li>
<li>2) Diffusion model 의 sampling 과정이, annealed Langevin dynamics 와 동치</li>
</ul>
<p>논문의 저자들은 4.2 절에 소개된 매개화 기법을 이용해 가장 좋은 sampling quality 를 얻었으며, 위에 나타난 동치성을 이 논문의 주요 성과로 소개하고 있다.</p>
<p>Diffusion model 은 양질의 sample 을 생성함에도 불구하고, likelihood 를 기반으로 하는 다른 모델들과 경쟁할 만한 log-likelihood 를 가지지 않는다. 또한, Diffusion model 은 이미지의 미세한 부분까지 묘사할 수 있음을 발견하였다. 논문에서는 현상을 ‘손실 압축 (lossy compression)&#39; 이라는 개념을 이용해 더 정교하게 분석하며, diffusion model 의 sampling 과정은 progressive decoding<sup><a href="#footnote_1">1</a></sup> 의 한 종류임을 보인다. 이는 순차적으로 일어나는 autoregressive decoding<sup><a href="#footnote_2">2</a></sup> 과 유사하며 autoregressive model 에서 일반적으로 나타날 수 있는 현상을 일반화하는 형태이다.</p>
<h2 id="2-background">2. Background</h2>
<p>Diffusion model 은 latent variable 을 가지는 model 이며, 그 형태는 다음과 같다.
$$
p_\theta\left(\mathbf{x}<em>0\right)≔
\int{p</em>{\theta}(\mathbf{x}<em>{0:T})d\mathbf{x}</em>{1:T}}$$</p>
<p>위 식에서 $\mathbf{x}<em>1,\mathbf{x}_2,\cdots,\mathbf{x}_T$ 는 data $\mathbf{x}_0\sim q\left(\mathbf{x}_0\right)$ 와 같은 차원을 가지는 latent variables 이다. $p_\theta\left(\mathbf{x}</em>{0:T}\right)$ 는 joint distribution 으로 <em>reverse process</em> 라고 지칭하며, Gaussian transition 들로 학습된 마르코프 체인으로 정의된다. 이 때 Gaussian transition 은 다음과 같이 정의된다.</p>
<p>$$
p_\theta\left(\mathbf{x}<em>{0:T}\right)≔p(\mathbf{x}_T) \prod</em>{t=1}^T{p_{\theta}(\mathbf{x}_{t-1} | \mathbf{x}_t)}$$</p>
<p>$$
p\left(\mathbf{x}<em>T\right)=\mathcal{N}\left(\mathbf{x}</em>{T}:\mathbf{0},\mathbf{I}\right)$$</p>
<p>$$
p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)≔
\mathcal{N}(\mathbf{x}</em>{t-1}; \mathbf{\mu}<em>{\theta}(\mathbf{x}_t, t), \mathbf{\Sigma}</em>{\theta} (\mathbf{x}_t, t))$$</p>
<p>Diffusion model 과 다른 latent variable model 과의 차이점은 approximate posterior $q\left(\mathbf{x}<em>{1:T}\middle|\mathbf{x}_0\right)$ 에 있으며, 이를 _forward pass</em> 또는 <em>diffusion process</em> 라고 한다. 이는 Gaussian noise 를 지속적으로 더하는 마르코프 체인 과정을 따르며, gaussian noise 의 variance 는 $\beta_1,\beta_2,\cdots,\beta_T$ 에 의해 결정된다. 구체적인 수식은 다음과 같다.</p>
<p>$$
q\left(\mathbf{x}<em>{1:T}\middle|\mathbf{x}_0\right)≔\prod^T</em>{t=1} {q(\mathbf{x}<em>t | \mathbf{x}</em>{t-1})}$$</p>
<p>$$
q\left(\mathbf{x}<em>t\middle|\mathbf{x}</em>{t-1}\right)≔\mathcal{N}\left(\mathbf{x}<em>{t}:\sqrt{1-\beta_t} \mathbf{x}</em>{t-1}, \beta_t \mathbf{I}\right)$$</p>
<p>$$
\mathbf{x}_0\sim q\left(\mathbf{x}_0\right)$$</p>
<blockquote>
<p>즉, 우리가 이미지를 얻기 위해서는 ${q}\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)$ 의 값이 필요하지만, 이 값은 intractable 하다. 따라서 이를 parameterized neural network ${p}</em>{\theta}$ 를 이용해 표현하는 것이다. 뒤에서 다루겠지만, 현 시점에서 정성적으로 논해 보자면 ${p}<em>{\theta}\left(\mathbf{x}</em>{{t}-{1}}\middle|\mathbf{x}<em>{t}\right)$ 와 ${q}\left(\mathbf{x}</em>{{t}-{1}}\middle|\mathbf{x}_{t}\right)$ 의 ‘거리’ 를 가깝게 하는 것이 최종적인 학습의 목표이며, 이를 위해 다양한 trick 을 사용해 computational advantage 를 부여한다. 3. 절 및 4.3. 절에서 이와 관련된 추가적인 논의를 진행한다.</p>
</blockquote>
<p>모델 학습은 negative log-likelihood 로 정의된 일반적인 variational bound 를 최소화시키는 방향으로 진행된다. 수식으로 나타내면 아래와 같다.
$$
\mathbb{E}\left[-\log{p_\theta\left(\mathbf{x}<em>\mathbf{0}\right)}\right]\ \le\mathbb{E}_q\left[-\log{\frac{p_\theta\left(\mathbf{x}</em>{0:T}\right)}{q\left(\mathbf{x}<em>{1:T}\middle|\mathbf{x}_0\right)}}\right]=\mathbb{E}_q\left[-\log{p\left(\mathbf{x}_T\right)}-\sum</em>{t\geq1}\log{\frac{p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)}{q_\theta\left(\mathbf{x}_t\middle|\mathbf{x}</em>{t-1}\right)}}\right]\ =∶ \ L$$</p>
<p>부등호는 Jensen’s inequality 에 의해 성립한다. 또는 KL-Divergence 를 이용해서도 부등호가 성립함을 보일 수 있다.<sup><a href="#footnote_3">3</a></sup></p>
<hr>
<h4 id="1-jensens-inequality-이용">1) Jensen’s inequality 이용</h4>
<p>$$
\mathbb{E}\left[-\log{p_\theta\left(\mathbf{x}<em>{0}\right)}\right]=\mathbb{E}</em>{q(\mathbf{x}<em>0)}\left[-\log{p_\theta\left(\mathbf{x}</em>{0}\right)}\right]$$</p>
<p>이 때 $p_\theta\left(\mathbf{x}_0\right)$ 의 정의에 의해</p>
<p>$$
\mathbb{E}<em>{q(\mathbf{x}_0)}\left[-\log{p_\theta\left(\mathbf{x}</em>{0}\right)}\right]=\mathbb{E}<em>{q(\mathbf{x}_0)}\left[-\log{\int{{p}_\theta\left(\mathbf{x}</em>{0:T}\right)d\mathbf{x}_{1:T}}}\right]$$</p>
<p>가 성립한다. 식을 적절히 변형하면</p>
<p>$$
\mathbb{E}<em>{q(\mathbf{x}_0)}\left[-\log{\left(\int{{p}_\theta\left(\mathbf{x}</em>{0:T}\right)d\mathbf{x}<em>{1:T}}\right)}\right]\ =\mathbb{E}</em>{q(\mathbf{x}<em>0)}\left[-\log{\left(\int{\frac{p_\theta\left(\mathbf{x}</em>{0:T}\right)}{q\left(\mathbf{x}<em>{1:T}\middle|\mathbf{x}_0\right)}q\left(\mathbf{x}</em>{1:T}\middle|\mathbf{x}<em>0\right)d\mathbf{x}</em>{1:T}}\right)}\right] $$</p>
<p>$$
=\mathbb{E}<em>{q(\mathbf{x}_0)}\left[-\log{\left(\mathbb{E}</em>{q\left(\mathbf{x}<em>{1:T}\middle|\mathbf{x}_0\right)}\left[\frac{p_\theta\left(\mathbf{x}</em>{0:T}\right)}{q\left(\mathbf{x}_{1:T}\middle|\mathbf{x}_0\right)}\right]\right)}\right]$$</p>
<p>$-\log{x}$ 는 convex function 이므로, Jensen’s inequality 에 의해 </p>
<p>$$
\mathbb{E}<em>{q(\mathbf{x}_0)}\left[-\log{\left(\mathbb{E}</em>{q\left(\mathbf{x}<em>{1:T}\middle|\mathbf{x}_0\right)}\left[\frac{p_\theta\left(\mathbf{x}</em>{0:T}\right)}{q\left(\mathbf{x}<em>{1:T}\middle|\mathbf{x}_0\right)}\right]\right)}\right]\ \le\mathbb{E}_q\left[-\log{\left(\frac{p_\theta\left(\mathbf{x}</em>{0:T}\right)}{q\left(\mathbf{x}_{1:T}\middle|\mathbf{x}_0\right)}\right)}\right]$$</p>
<p>가 성립한다.</p>
<h4 id="2-kl-divergence-이용">2) KL-Divergence 이용</h4>
<p>이 부분은 VAE 의 lower bound 를 증명하는 부분과 유사하다. Diffusion model 이 auto-regressive model 인 점과 Figure 2. 로부터, VAE의 latent variable $Z$ 가 여기서는 $\mathbf{x}_{1:T}$ 에 해당되고 VAE data point $X_i$ 가 $\mathbf{x}_0$ 에 대응된다고 생각하면 그 과정은 동일하다.</p>
<p>$$
D_{KL}\ (q(\mathbf{x}<em>{1:T}|\mathbf{x}_0)||\ p_\theta\left(\mathbf{x}</em>{1:T}\middle|\mathbf{x}<em>0\right))=\mathbb{E}</em>{\mathbf{x}<em>{\mathbf{1}:\mathbf{T}}\sim q\left(\mathbf{x}</em>{1:T}\middle|\mathbf{x}<em>0\right)}(\log{\left(q\left(\mathbf{x}</em>{1:T}\middle|\mathbf{x}<em>0\right)\right)}-\log{(p_\theta\left(\mathbf{x}</em>{1:T}\middle|\mathbf{x}_0\right)}))$$</p>
<p>이 때 $p_\theta\left(\mathbf{x}_{1:T}\middle|\mathbf{x}_0\right)$ 을 살펴보면</p>
<p>$$
p_\theta\left(\mathbf{x}<em>{1:T}\middle|\mathbf{x}_0\right)=\frac{p_\theta(\mathbf{x}</em>{1:T},\ \mathbf{x}<em>0)}{p_\theta\left(\mathbf{x}_0\right)}=\frac{p_\theta(\mathbf{x}</em>{0:T})}{p_\theta\left(\mathbf{x}_0\right)}$$</p>
<p>가 성립한다. 이를 대입하면,</p>
<p>$$
D_{\text{KL}}\ (q(\mathbf{x}<em>{1:T}|\mathbf{x}_0)||\ p_\theta\left(\mathbf{x}</em>{1:T}\middle|\mathbf{x}<em>0\right))=\mathbb{E}_q\left[-\log{\left(\frac{p_\theta\left(\mathbf{x}</em>{0:T}\right)}{q\left(\mathbf{x}_{1:T}\middle|\mathbf{x}_0\right)}\right)}+\log{p_\theta\left(\mathbf{x}_0\right)}\right]\geq\mathbf{0}$$</p>
<p>가 성립한다 (KL-Divergence 가 non-negative 라는 성질을 이용하였다). 따라서, </p>
<p>$$
\mathbb{E}\left[-\log{p_\theta\left(\mathbf{x}<em>\mathbf{0}\right)}\right]\ \le\mathbb{E}_q\left[-\log{\left(\frac{p_\theta\left(\mathbf{x}</em>{0:T}\right)}{q\left(\mathbf{x}_{1:T}\middle|\mathbf{x}_0\right)}\right)}\right]$$</p>
<p>가 성립한다.</p>
<hr>
<p>등호는 $p_\theta\left(\mathbf{x}<em>{0:T}\right), q\left(\mathbf{x}</em>{1:T}\middle|\mathbf{x}_0\right)$ 의 정의에 의해 성립한다.</p>
<p>Forward process 의 분산 $\beta_t$ 는 재매개화 (reparameterization) 을 통해 학습되거나 모델의 hyperparameter 로써 상수로 유지될 수도 있다. 또한 reverse process $p_\theta\left(\mathbf{x}<em>{0:T}\right)$ 의 expressiveness (표현력, 여기서는 performance 와 유사한 개념으로 해석) 는 $p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t\right)$ 가 나타내는 conditional gaussian distribution 에 의존한다. $\beta_t$ 가 작을 때, forward / reverse process 모두 같은 함수 형태를 나타내기 때문이다. Forward process 의 중요한 특징은, 임의의 timestep $t$ 에서 $\mathbf{x}_t$ 를 sampling 한 결과를 closed form 으로 나타낼 수 있다는 점이다. $\alpha_t≔1-\beta_t$, $\bar{\alpha_t} \ ∶= \prod</em>{s=1}^{t}\alpha_s$ 로 치환하면</p>
<p>$$
q\left(\mathbf{x}_t\middle|\mathbf{x}_0\right)=\mathcal{N}\left(\mathbf{x}_t:\sqrt{\bar{\alpha_t}}\mathbf{x}_0,\left(1-\ \bar{\alpha_t}\right)\mathbf{I}\right)$$</p>
<p>으로 나타낼 수 있다. 이에 대한 증명은 다음과 같다.<sup><a href="#footnote_3">3</a></sup></p>
<hr>
<p>Reparameterization trick 을 이용해 증명할 수 있다.</p>
<p>$$
q\left(\mathbf{x}<em>t\middle|\mathbf{x}</em>{t-1}\right)≔\mathcal{N}(\mathbf{x}<em>t : \sqrt{1-\beta_t} \mathbf{x}</em>{t-1}, \beta_t \mathbf{I})$$</p>
<p>와 같이 정의되어 있음을 이용하자.  $\epsilon_{t-1},\epsilon_{t-2},\cdots\sim\mathcal{N}\left(\mathbf{0},\mathbf{I}\right)$ 라고 하자 (단, $\epsilon_{t-1},\epsilon_{t-2},\cdots$ are independent).
$\mathbf{x}<em>t$ 를 $\mathbf{x}</em>{t-1}$ 를 이용해 나타내면</p>
<p>$$
\mathbf{x}<em>t=\sqrt{\alpha_t}\mathbf{x}</em>{t-1}+\sqrt{1-\alpha_t}\epsilon_{t-1}$$</p>
<p>마찬가지로 $\mathbf{x}<em>{t-1}$ 을 $\mathbf{x}</em>{t-2}$ 를 이용해 나타내면</p>
<p>$$
\mathbf{x}<em>{t-1}=\sqrt{\alpha</em>{t-1}}\mathbf{x}<em>{t-2}+\sqrt{1-\alpha</em>{t-1}}\epsilon_{t-2}$$</p>
<p>이제 $\mathbf{x}<em>t$ 를 $\mathbf{x}</em>{t-2}$ 를 이용해 나타내면</p>
<p>$$
\mathbf{x}<em>t=\sqrt{\alpha_t\alpha</em>{t-1}}\mathbf{x}<em>{t-2}+\sqrt{1-\alpha_t}\epsilon</em>{t-1}+\sqrt{\alpha_t}\sqrt{1-\alpha_{t-1}}\epsilon_{t-2}$$</p>
<p>이 때</p>
<p>$$
\frac{\sqrt{1-\alpha_t}\epsilon_{t-1}+\sqrt{\alpha_t}\sqrt{1-\alpha_{t-1}}\epsilon_{t-2}}{\sqrt{1-\alpha_t\alpha_{t-1}}}≔\bar{\epsilon}_{t-2}$$</p>
<p>로 정의하면 여전히</p>
<p>$$
\bar{\epsilon}_{t-2} \sim\mathcal{N}\left(\mathbf{0},\mathbf{I}\right)$$</p>
<p>이다.</p>
<p>위 과정을 귀납적으로 적용해, $\mathbf{x}_t$ 를 $\mathbf{x}_0$ 를 이용해 나타내면 $\bar{\epsilon_0}\sim\mathcal{N}\left(\mathbf{0},\mathbf{I}\right)$ 에 대해</p>
<p>$$
\mathbf{x}_t=\sqrt{\bar{\alpha_t}}\mathbf{x}_0+\sqrt{1-\bar{\alpha_t}}\bar{\epsilon_0}$$</p>
<p>가 성립한다.</p>
<p>$$
\therefore q\left(\mathbf{x}_t\middle|\mathbf{x}_0\right)=\mathcal{N}\left(\mathbf{x}_t:\sqrt{\bar{\alpha_t}}\mathbf{x}_0,\left(1-\ \bar{\alpha_t}\right)\mathbf{I}\right)$$</p>
<hr>
<p>목적 함수 L의 각 항을 SGD 를 이용해 최적화함으로써 training 을 진행한다. L의 각 항을 KL-Divergence 를 이용해 다시 쓰면 아래와 같다.</p>
<p>$$
\mathbb{E}<em>q\left[{\underbrace{D</em>{\mathrm{KL}}\left(q\left(\mathbf{x}<em>T\middle|\mathbf{x}_0\right)\middle| p\left(\mathbf{x}_T\right)\right)}}</em>{L_T}+\sum_{t&gt;1}{\underbrace{D_{\mathrm{KL}}\left(q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t,\ \mathbf{x}_0\right)\middle|| p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t\right)\right)}}</em>{L_{t-1}}\ {\underbrace{-\log{p_\theta\ \left(\mathbf{x}<em>0\ \middle|\ \mathbf{x}_1\right)}}}</em>{L_0}\right]$$</p>
<p>위 식을 유도하는 자세한 과정은 부록 A. 에 나타나 있다. 과정을 나타내면 아래와 같다.</p>
<hr>
<p>$$
L\ =\ \mathbb{E}<em>q\left[-\log{\left(\frac{p_\theta\left(\mathbf{x}</em>{{0}:{T}}\right)}{q\left(\mathbf{x}<em>{{1}:{T}}\middle|\mathbf{x}</em>{0}\right)}\right)}\right]=\mathbb{E}<em>{q}\left[-\log{p\left(\mathbf{x}_T\right)}\ -\sum</em>{t\ \geq\ 1}\log{\frac{p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)}{q\left(\mathbf{x}_t\middle|\mathbf{x}</em>{t-1}\right)}}\right]$$</p>
<p>두 번째 등호는 2. Background 에서 정의한 $p_\theta\left(\mathbf{x}<em>{0:T}\right)$ 와 $q\left(\mathbf{x}</em>{1:T}\middle|\mathbf{x}_0\right)$ 의 정의로부터 성립한다. 식을 이어서 전개해 나가자. $\Sigma$ 에서 $t=1$ 에 해당하는 항을 별도의 항으로 분리하면,</p>
<p>$$
L\ =\ \mathbb{E}<em>q\left[-\log{p\left(\mathbf{x}_T\right)}\ -\sum</em>{t\ &gt;1}\log{\frac{p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)}{q\left(\mathbf{x}_t\middle|\mathbf{x}</em>{t-1}\right)}}-\log{\frac{p_\theta\left(\mathbf{x}_0\middle|\mathbf{x}_1\right)}{q\left(\mathbf{x}_1\middle|\mathbf{x}_0\right)}}\right]$$</p>
<p>조건부 확률의 성질에 의해</p>
<p>$$
L=\mathbb{E}<em>q\left[-\log{p\left(\mathbf{x}_T\right)}\ -\sum</em>{t\ &gt;1}\log{\frac{p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)}{q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t,\ \mathbf{x}_0\right)}\cdot\frac{q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_0\right)}{q\left(\mathbf{x}_t\middle|\mathbf{x}_0\right)}}-\log{\frac{p_\theta\left(\mathbf{x}_0\middle|\mathbf{x}_1\right)}{q\left(\mathbf{x}_1\middle|\mathbf{x}_0\right)}}\right]$$</p>
<p>log 의 성질과 telescoping 을 통해 식을 정리하면 아래 식이 성립한다.</p>
<p>$$
L=\mathbb{E}<em>q\left[-\log{\frac{p\left(\mathbf{x}_T\right)}{q\left(\mathbf{x}_T\middle|\mathbf{x}_0\right)}}\ -\sum</em>{t\ &gt;1}\log{\frac{p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)}{q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t,\ \mathbf{x}_0\right)}}-\log{p_\theta\left(\mathbf{x}_0\middle|\mathbf{x}_1\right)}\right]$$</p>
<p>마지막으로 KL-Divergence 의 정의를 이용하면,</p>
<p>$$
\mathbb{E}<em>q\left[D</em>{\mathrm{KL}}\left(q\left(\mathbf{x}<em>T\middle|\mathbf{x}_0\right)\middle| p\left(\mathbf{x}_T\right)\right)+\sum</em>{t&gt;1}{D_{\mathrm{KL}}\left(q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t,\ \mathbf{x}_0\right)\middle|| p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t\right)\right)}-\log{p_\theta\ \left(\mathbf{x}_0\ \middle|\ \mathbf{x}_1\right)}\right]$$</p>
<hr>
<p>결과적으로 KL-Divergence 를 이용한 식에서, forward process 의 posterior $q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)$ (measure 할 수 없는 값) 와 $p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t\right)$ 를 직접적으로 비교할 수 있다. Posterior 는 $q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t\right)$ 자체로는 계산할 수 없지만, $\mathbf{x}_0$ 에 대한 condition 이 주어졌을 때 베이즈 정리를 이용해 계산 가능하며 그 값은 아래와 같다.</p>
<p>$$
q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t,\mathbf{x}_0\right)=\frac{q\left(\mathbf{x}_t\middle|\mathbf{x}</em>{t-1},\mathbf{x}<em>0\right)q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_0\right)}{q\left(\mathbf{x}_t\middle|\mathbf{x}_0\right)}$$</p>
<p>then</p>
<p>$$
q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t,\mathbf{x}_0\right)=\mathcal{N}\left(\mathbf{x}</em>{t-1};\bar{\mathbf{\mu}_t}\left(\mathbf{x}_t,\mathbf{x}_0\right),\bar{\beta_t} \mathbf{I}\right)$$</p>
<p>where</p>
<p>$$
\bar{\mathbf{\mu}<em>{t}}\left(\mathbf{x}_t,\mathbf{x}_0\right)≔ \frac{\sqrt{\bar{\alpha}</em>{t-1}}\beta_t}{1-\bar{\alpha}<em>t}\mathbf{x}_0 + \frac{\sqrt{\alpha_t} (1-\bar{\alpha}</em>{t-1})}{1-\bar{\alpha}_t} \mathbf{x}_t$$</p>
<p>and</p>
<p>$$
\bar{\beta_t}≔\frac{1-\bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t}\beta_t$$</p>
<h2 id="3-diffusion-models-and-denoising-autoencoders">3. Diffusion models and denoising autoencoders</h2>
<p>Diffusion model 은 마치 latent variable model 중 제한된 일부만을 나타내는 것처럼 보이지만, 그 구현에 있어서는 자유도가 매우 높다. 구현을 위해서는 다음과 같은 값들을 결정해야 한다.</p>
<ul>
<li>1) 분산 $\beta_t$</li>
<li>2) 모델 구조</li>
<li>3) Reverse process 에서 나타나는 Gaussian distribution 의 매개화 ($\mathbf{\mu}<em>\theta\left(\mathbf{x}</em>{t},t\right),\mathbf{\Sigma}<em>\theta\left(\mathbf{x}</em>{t},t\right)$ 부분)</li>
</ul>
<p>논문의 경우, diffusion model 과 denoising score matching 간의 직접적인 연결을 도입하였으며, 이를 통해 simplified, weighted variational bound $L=L_T+\sum_{t=1}^{T-1}L_t+L_0$ 를 유도하였다. 이러한 design 이 적합함을 단순함 (simplicity)과 경험적인 결과 측면에서 보였다.</p>
<h3 id="31-forward-process-and-l_t">3.1. Forward process and ${L}_{T}$</h3>
<p>우선, 3.1. 에서는 $\beta_t$ 를 모두 학습 불가능한 상수로 가정한다. 따라서 이 경우 approximate posterior $q\left(\mathbf{x}_{{1}:{T}}\middle|\mathbf{x}_0\right)$ 에는 학습 가능한 파라미터가 존재하지 않으므로 ($q\left(\mathbf{x}_0\right)$ 의 경우 Data 의 분포이므로 역시 학습가능한 파라미터에서는 제외된다), 그 값은 상수이며 $L_T$ 역시 학습이 진행되는 전 과정에서 상수이다. 따라서 optimization 관점에서는 $L_T$ 가 무시될 수 있다. </p>
<h3 id="32-reverse-process-and-l_1t-1">3.2. Reverse process and ${L}_{1:T-1}$</h3>
<h4 id="321-training">3.2.1. Training</h4>
<p>이제 $1\ &lt;\ t\ \le T$ 에 대해, $p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)≔\mathcal{N}(\mathbf{x}</em>{t-1}: \mathbf{\mu}<em>{\theta}(\mathbf{x}_t, t), \mathbf{\Sigma}</em>{\theta}(\mathbf{x}_t, t))$ 를 결정하는 과정을 살펴보자. 첫 번째로, </p>
<p>$$
\mathbf{\Sigma}<em>\theta\left(\mathbf{x}</em>{t},t\right)=\sigma_t^2\mathbf{I}$$</p>
<p>와 같이 timestep 에만 의존하고 학습되지 않는 상수로 두자. $\sigma_t^2$ 값의 경우, 두 가지 값 ($\beta_t$ 와 $\frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t$)을 모두 시도해 본 결과 유의미한 차이는 나타나지 않았다. </p>
<p>두 번째로, </p>
<p>$$
\mathbf{\mu}<em>\theta\left(\mathbf{x}</em>{t},t\right)$$</p>
<p>을 고려해 보자. 위 항의 경우, 특정한 매개화를 통해 나타낼 수 있으며 ($\theta$에 대해 parameterized 된 neural networks 를 이용) 매개화 된 모델은 위에서 계산한 forward process posterior mean $\bar{\mathbf{\mu}<em>t}\left(\mathbf{x}_t,\mathbf{x}</em>{0}\right)$ 를 예측한다. KL-Divergence 의 정의를 생각해 보았을 때 $t=2,\ 3,\ \cdots,\ T$ 에 대해 두 분포 $q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t,\mathbf{x}_0\right)$ 와 $p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t\right)$ 의 ‘거리’ 가 가까워야 하므로 $p_\theta$의 평균값이 $q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t,\mathbf{x}_0\right)$ 의 평균값 $\bar{\mathbf{\mu}_t}\left(\mathbf{x}_t,\mathbf{x}</em>{0}\right)$ 와 ‘가까워져야’ 하는 것이다.</p>
<p>결과적으로 $p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)≔\mathcal{N}(\mathbf{x}</em>{t-1}:\mathbf{\mu}<em>{\theta}(\mathbf{x}_t, t), \sigma_t^2 \mathbf{I})$, $q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t,\mathbf{x}_0\right)=\mathcal{N}\left(\mathbf{x}</em>{{t}-{1}}:\ \bar{\mathbf{\mu}<em>t}\left(\mathbf{x}_t,\mathbf{x}</em>{0}\right),\ \bar{\beta_t}\mathbf{I}\right)$ 에 대해 $L_{t-1}$ 을</p>
<p>$$
L_{t-1}=\mathbb{E}_q\left[\frac{1}{2\sigma_t^2}\left|\bar{\mathbf{\mu}_t}\left(\mathbf{x}_t,\mathbf{x}_0\right)-\mathbf{\mu}_\theta\left(\mathbf{x}_t,t\right)\right|^2\right]+C$$</p>
<p>와 같이 나타낼 수 있다. 이 과정에서 다음 식이 사용된다. </p>
<hr>
<p>원래 $L_{t-1}$ 은 KL-Divergence 형태였음을 기억하자.</p>
<p>$$
D_{\text{KL}}(\mathcal{N}(\mu_1,\mathrm{\Sigma}_1)\ ||\ \mathcal{N}(\mu_2,\mathrm{\Sigma}_2))\ =\frac{1}{2}\left(\log\left(\frac{\det{\mathrm{\Sigma}_2}}{\det{\mathrm{\Sigma}_1}}\right)-d+\text{tr}\left(\mathrm{\Sigma}_2^{-1}\mathrm{\Sigma}_1\right)+\left(\mu_2-\mu_1\right)^{\intercal}\mathrm{\Sigma}_2^{-1}\left(\mu_2-\mu_1\right)\right)$$</p>
<p>위 식에 $p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)$, $q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t,\mathbf{x}_0\right)$ 의 정규분포 식을 대입하면 $L</em>{t-1}$ 에 대한 식을 얻을 수 있다.</p>
<hr>
<p>$C$는 parameter $\theta$에 의존하지 않는 항들을 모두 expectation 밖으로 정리한 상수이다. 이 때 위 식을 더욱 계산하기 적합한 형태로 정리할 수 있다. $q\left(\mathbf{x}_t\middle|\mathbf{x}_0\right)=\mathcal{N}\left(\mathbf{x}_t:\sqrt{\bar{\alpha_t}}\mathbf{x}_0,\left(1-\ \bar{\alpha_t}\right)\mathbf{I}\right)$ 에 reparameterization trick 을 적용해 보자. $\mathbf{\epsilon}\sim\mathcal{N}\left(\mathbf{0},\mathbf{I}\right)$ 에 대해 $\mathbf{x}_t\left(\mathbf{x}_0,\mathbf{\epsilon}\right)=\sqrt{\bar{\alpha_t}}\mathbf{x}_0+\sqrt{1-\bar{\alpha_t}}\mathbf{\epsilon}$ 로 치환하면</p>
<p>$$
L_{t-1}-C=\mathbb{E}<em>{\mathbf{x}_0,\mathbf{\epsilon}}\left[\frac{1}{2\sigma_t^2}\left|\bar{\mathbf{\mu}</em>{t}}\left(\mathbf{x}_t\left(\mathbf{x}_0,\mathbf{\epsilon}\right),\frac{1}{\sqrt{\bar{\alpha_t}}}\left(\mathbf{x}_t\left(\mathbf{x}_0,\mathbf{\epsilon}\right)-\sqrt{1-\bar{\alpha_t}}\mathbf{\epsilon}\right)\right)-\mathbf{\mu}_\theta\left(\mathbf{x}_t\left(\mathbf{x}_0,\mathbf{\epsilon}\right),t\right)\right|^2\right]$$</p>
<p>$$
=\mathbb{E}_{\mathbf{x}_0,\mathbf{\epsilon}}\left[\frac{1}{2\sigma_t^2}\left|\frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t\left(\mathbf{x}_0,\mathbf{\epsilon}\right)-\frac{\beta_t}{\sqrt{1-\bar{\alpha_t}}}\mathbf{\epsilon}\right)-\mathbf{\mu}_\theta\left(\mathbf{x}_t\left(\mathbf{x}_0,\mathbf{\epsilon}\right),t\right)\right|^2\right]$$</p>
<p>Distribution $q$에 대한 expectation 이 $\mathbf{x}_0,\mathbf{\epsilon}$ 에 대한 expectation 으로 치환된다. 첫 번째 등호는 단순히 변수 치환을 이용해 식을 전개한 것이고, 두 번째 등호의 경우 위에서 계산한 forward process posterior mean $\bar{\mathbf{\mu}_t}\left(\mathbf{x}_t,\mathbf{x}_\mathbf{0}\right)$ 에 대한 식을 대입해 계산한 결과이므로 성립한다.</p>
<p>Computational 관점에서 더욱 계산하기 간결한 형태로 정리할 수 있다. 위 식으로부터 매개화된 $\mathbf{\mu}_\theta$ 의 예측 결과값이</p>
<p>$$
\frac{1}{\sqrt{\bar{\alpha}_t}}\left(\mathbf{x}_t-\frac{\beta_t}{\sqrt{1-\ \bar{\alpha_t}}}\mathbf{\epsilon}\right)$$</p>
<p>가 되어야 한다는 점을 알 수 있다. 아래 식과 같은 매개화를 생각하자. $\mathbf{\mu}_\theta$는 $\mathbf{x}_t$에 의존하므로, $\mathbf{x}_t$ 로부터 우리가 가정한 분포 $\mathbf{\epsilon}$을 예측하는 _functional approximator _ $\mathbf{\epsilon}_\theta$ network 를 생각하자. 즉 $\mathbf{\epsilon}_\theta$ 내부의 파라미터 값을 학습시켜, $\mathbf{\mu}_\theta$ 의 예측값이 목표한 값이 되도록 매개화 한 것이다.</p>
<p>$$
\mathbf{\mu}<em>{\theta}\left(x_t,t\right)=\bar{\mathbf{\mu}</em>{t}}\left(\mathbf{x}<em>t,\frac{1}{\sqrt{\bar{\alpha_t}}}\left(\mathbf{x}_t-\sqrt{1-\bar{\alpha_t}}\mathbf{\epsilon}</em>{\theta}\left(\mathbf{x}<em>{t}\right)\right)\right)=\frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t\left(\mathbf{x}_0,\mathbf{\epsilon}\right)-\frac{\beta_t}{\sqrt{1-\bar{\alpha_t}}}\mathbf{\epsilon}_\mathbf{\theta}\left(\mathbf{x}</em>{t}\right)\right)$$</p>
<p>첫 번째 등호는 $\mathbf{x}_t=\sqrt{\bar{\alpha_t}}\mathbf{x}_0+\sqrt{1-\bar{\alpha_t}}\mathbf{\epsilon}$ 을 $\mathbf{x}_0$에 대해 정리하고 $\bar{\mu}$ 에 대입한 결과이고, 두 번째 등호는 모델의 예측값이 </p>
<p>$$
\frac{1}{\sqrt{\ \bar{\alpha_t}}}\left(\mathbf{x}_t-\frac{\beta_t}{\sqrt{1-\ \bar{\alpha_t}}}\mathbf{\epsilon}\right)$$</p>
<p>가 되어야 한다는 논리를 적용시킨 것이다. 위 수식을, $L_{t-1}$ 을 전개한 식에 대입하면 $L_{t-1}-C$ 의 값은</p>
<p>$$
\mathbb{E}_{\mathbf{x}_0,\mathbf{\epsilon}}\left[\frac{\beta_t^2}{2\sigma_t^2\alpha_t\left(1-\bar{\alpha_t}\right)}\left|\mathbf{\epsilon}-\mathbf{\epsilon}_\theta\left(\sqrt{\bar{\alpha_t}}\mathbf{x}_0+\sqrt{1-\bar{\alpha_t}}\mathbf{\epsilon},{t}\right)\right|^2\right]$$</p>
<p>와 같이 나타난다 (단, $t=2,\ 3,\ \cdots,\ T$). 위 식은 Langevin-like reverse process 의 variational bound 와 같다. 3.4. 절에서 더 간결한 형태의 training object 를 유도하고, 구체적인 학습 알고리즘에 대해 설명을 이어 나간다.</p>
<h4 id="322-sampling">3.2.2. Sampling</h4>
<p>이제 Sampling process 를 살펴보자. $\mathbf{x}<em>t$ 로부터 $\mathbf{x}</em>{t-1}$ 을 sampling 하면 되므로 이에 관련된 분포를 다시 한번 살펴보자. </p>
<p>$$
p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)≔\mathcal{N}(\mathbf{x}</em>{t-1}: \mathbf{\mu}_{\theta}(\mathbf{x}_t, t), \sigma_t^2 \mathbf{I})$$</p>
<p>$$
\mathbf{\mu}<em>\theta\left(\mathbf{x}</em>{t},t\right)=\frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha_t}}}\epsilon_\theta\left(\mathbf{x}_t,t\right)\right)$$</p>
<p>여기서도 reparameterization trick 을 사용하면 분포</p>
<p>$$
\mathbf{z}\sim\mathcal{N}\left(\mathbf{0},\mathbf{I}\right)$$</p>
<p>에 대해</p>
<p>$$
\mathbf{x}_{t-1}=\frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha_t}}}\epsilon_\theta\left(\mathbf{x}_t,t\right)\right)+\sigma_t\mathbf{z}$$</p>
<p>을 계산하는 과정이 바로 sampling 이다. $\mathbf{\epsilon}_\theta$의 경우 train된 network 이므로 $\mathbf{\epsilon}_\theta\left(\mathbf{x}_t,t\right)$ 의 값은 direct 하게 구할 수 있다. $t\ =\ T,\ T-1,\ \cdots,\ 1$ 에 대해 위 과정을 반복하며, 이를 pseudo-code 로 나타내면 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/4ed6626f-052c-4445-a58e-a9837fd434c4/image.png" alt=""></p>
<h4 id="323-summary">3.2.3. Summary</h4>
<p>Reverse process (noise 로부터 image 를 sampling 하는 과정) 은 두 가지 방법 중 하나를 이용해 학습시킬 수 있다.</p>
<p>1) $\theta$-parameterized reverse process mean function approximator $\mathbf{\mu}<em>\theta$ 가 $q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t,\mathbf{x}_0\right)$ 의 평균값 $\bar{\mathbf{\mu}_t}\left(\mathbf{x}_t,\mathbf{x}_\mathbf{0}\right)$ 에 가까워지게 끔</p>
<p>2) 재매개화를 통해 functional approximator $\mathbf{\epsilon}_\theta$ network 를 학습시킨다 :</p>
<p>$$
\bar{\mathbf{\mu}_t}\left(\mathbf{x}_t,\mathbf{x}_\mathbf{0}\right)=\frac{1}{\sqrt{\alpha_t}}\left(\mathbf{x}_t-\frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}}\mathbf{\epsilon}_\theta\left(\mathbf{x}_t,t\right)\right)$$</p>
<p>위 두 가지 방법 모두 $p_\theta\left(\mathbf{x}_{t-1}\middle|\mathbf{x}_t\right)$ 의 매개화를 이용하는 방법이다. 4. 절에서 2) 의 방법이 1)의  방법보다 더 효과적임을 보인다. 분포 $\mathbf{\epsilon}$ 를 예측하도록 하는 것은 training 과정의 object ( = variational bound) 를 denoising score matching 의 object 와 동일하게 만들고, sampling 과정이 Langevin dynamics 가 되게 해 준다. 이 내용에 대해서는 Score-Based Generative Modeling through Stochastic Differential Equations 논문을 참고하자.</p>
<h3 id="33-data-scaling-reverse-process-decoder-and-l_0">3.3. Data scaling, reverse process decoder, and ${L}_{0}$</h3>
<p>모든 이미지의 픽셀 값은 [-1, 1] 로 scaling 되었다고 가정한다. 이는 $p\left(\mathbf{x}_T\right)$ 로부터 시작되는, 모든 reverse process 가 항상 scaling 된 input 에 대해 일어난다는 것을 보장한다. 또한 이산적인 log-likelihood 를 얻기 위해, reverse process 의 가장 마지막 과정 ($\mathbf{x}_1$ 으로부터 $\mathbf{x}_0$ 를 sampling 하는 과정) 은 정규분포 $\mathcal{N}\left(\mathbf{x}_0;\mathbf{\mu}_\theta\left(\mathbf{x}_1,1\right),\sigma_1^2\mathbf{I}\right)$를 사용하는, 이전과 독립적인 discrete decoder 를 이용한다.</p>
<p>$$
p_\theta\left(\mathbf{x}<em>0\middle|\mathbf{x}_1\right)=\prod</em>{i=1}^{D}\int_{\delta_-\left(x_0^i\right)}^{\delta_+\left(x_0^i\right)}\mathcal{N}\left(x;\mu_\theta^i\left(\mathbf{x}_1,{1}\right),\sigma_1^2\right)dx$$</p>
<p>이 때</p>
<p>$$
\delta_{+}(x)\ =\ \begin{cases}\ \infty\ \ &amp;\ \text{if}\ x=1\ \ x+\frac{1}{255}\ &amp;\ \text{if}\ x&lt;1\ \end{cases}$$</p>
<p>$$
\delta_{-}(x)\ =\ \begin{cases}\ -\ \infty\ \ &amp;\ \text{if}\ x=-1\ \ x-\frac{1}{255}\ &amp;\ \text{if}\ x&gt;-1\ \end{cases}$$</p>
<p>D 는 데이터의 차원을 의미한다. 비록 conditional autoregressive model 처럼 매우 powerful 한 decoder 를 사용할 수도 있지만 이 논문에서는 해당 아이디어를 사용하지는 않았다. VAE 의 decoder 와 같이, 논문에서 정의한 decoder 는 Diffusion model 의 variational bound 가 data 에 별도로 noise 를 더하거나 log-likelihood 에 scaling 연산에 대한 야코비 행렬을 대입하지 않아도 이산적인 데이터의 lossless codelength 가 됨을 보장해 준다. Sampling 의 마지막 단계에서는 $\mu_\theta\left(\mathbf{x}_1,1\right)$ 에 <strong>별도의 noise 를 추가하지 않고</strong> 이를 그대로 출력한다. 위 내용으로부터 </p>
<p>$$
L_0=-\log{p_\theta\left(\mathbf{x}_0\middle|\mathbf{x}_1\right)}$$</p>
<p>를 얻을 수 있다.</p>
<h3 id="34-simplified-training-object">3.4. Simplified training object</h3>
<p>3.1. 절 부터 3.3. 절 까지의 과정을 통해 얻은 variational bound ($L_t, L_0$) 는 모두 $\theta$ 에 대해 미분 가능하고 학습 과정에서 사용된다. 그러나, 아래 식과 같은 variational bound 의 ‘변형’ 을 이용해 학습한다면 더욱 간단한 구현 과정을 통해 동일한 performance 를 얻을 수 있음이 확인되었다.</p>
<p>$$
L_{\mathrm{simple}}\left(\theta\right)≔\mathbb{E}<em>{t, \mathbf{x}_0, \mathbf{\epsilon}} [|| \mathbf{\epsilon} - \mathbf{\epsilon}</em>{\theta}(\sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1-\bar{\alpha}_t} \mathbf{\epsilon}, t)||^2]$$</p>
<p>$$\text{for }<br>t\sim\mathrm{Uniform}\left(1,\cdots,T\right)$$</p>
<p>결과적으로 Diffusion model 에 대한 Training object 는</p>
<p>$$
\mathbb{E}_{t\sim\mathrm{Uniform}\left(1,\cdots,T\right),\mathbf{x}_0,\mathbf{\epsilon}}\left[||\mathbf{\epsilon}-\mathbf{\epsilon}_\theta\left(\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\mathbf{\epsilon},t\right)||^2\right]+\text{Const}$$</p>
<p>이다. Const 는 parameter $\theta$에 의존하지 않는 항들을 의미한다. SGD 를 이용해 학습을 진행할 때는 미분값
$$
\nabla||\ \mathbf{\epsilon}-\mathbf{\epsilon}_\theta\left(\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\mathbf{\epsilon},t\right)\ ||^2\ ; \text{for } t ∼\text{Uniform}(1, \ \cdots,T)$$
을 계산하면 된다. Pseudo-code 는 아래와 같다. </p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/ae962cfe-8543-43a8-a70f-6b14d5f22830/image.png" alt=""></p>
<p>학습시키고자 하는 network 는 $\mathbf{\epsilon}_\theta$ 임을 다시 한번 확인할 수 있다.</p>
<h2 id="4-experiments">4. Experiments</h2>
<p>모든 실험 과정에서 $T=1000$ 으로 설정하였다. Forward process 의 분산 $\beta_t$ 들은 모두 상수로 두었다. $\beta_1={10}^{-4}$, $\beta_T=0.02$ 로 두고 다른 값들은 linear scale 로 계산하였다. 위 값들은 $\mathbf{x}_T$의 SNP 가 충분히 작은 값이 되게끔 설정한 값들이다.</p>
<p>$$
L_T=D_{\text{KL}}(q\left(\mathbf{x}_t\middle|\mathbf{x}_0\right) \left||\mathcal{N}\left(\mathbf{0},\mathbf{I}\right)\right)\simeq{10}^{-5}$$</p>
<p>Reverse process 에 사용된 NN 의 경우, U-Net 을 기반으로 한 PixelCNN++ 의 구조를 기반으로 구현하였다. </p>
<ul>
<li>weight normalization 대신 group normalization 사용</li>
<li>Self-attention block 도입</li>
<li>Time step t의 경우 Transformer 에서 도입된 positional encoding 을 기반으로 사용</li>
<li>CIFAR10, LSUN, CelebA-HQ Dataset 에 대해 학습 진행</li>
</ul>
<h3 id="41-sample-quality">4.1. Sample quality</h3>
<p>Diffusion model 의 FID score 는 다른 논문에서 제시된 모델들과 비교했을 때 높은 값을 나타냈다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/f7313a97-bb76-4b35-9cdf-f983cb1a7345/image.png" alt=""></p>
<h3 id="42-reverse-process-parameterization-and-training-object-ablation">4.2. Reverse process parameterization and training object ablation</h3>
<p>직접 $\bar{\mu}$ 값을 예측 시키는 경우, Simplified learning object 처럼 RMSE 를 이용하는 경우 ($\left|\left|\mathbf{\mu}-\bar{\mathbf{\mu}_\theta}\right|\right|^2$) 학습이 진행되지 않았으며 simplify 되기 전의 true variational bound 를 이용하는 경우에만 학습이 진행됨이 확인되었다. </p>
<p>Variational bound 에 $\mathbf{\Sigma}<em>\theta\left(\mathbf{x}_t\right)$ 에 대한 항을 직접적으로 포함시키고 대각행렬 $\mathbf{\Sigma}_\theta$ 자체를 학습시키는 것은 높은 성능을 가져다 주지 못함이 확인되었으며, 학습 역시 불안정하게 진행되었다. 따라서 3.2.1. 절에 나타난 바와 같이, 분산 $\sigma_t^2$ 을 고정된 상수 $\beta_t$ 또는 $\frac{1-\bar{\alpha}</em>{t-1}}{1-\bar{\alpha}_t}\beta_t$ 로 두고 학습을 진행하였다.</p>
<p>가장 좋은 FID Score 는 $L_{\mathrm{simple}}$ 을 training object 로 이용한 경우에 얻어졌다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/1a504ae9-5b08-41e6-8230-21f5d89c484c/image.png" alt=""></p>
<h3 id="43-progressive-coding">4.3. Progressive coding</h3>
<p>Table 1. 에는 CIFAR-10 데이터셋에 대한 모델의 성능과 실행 속도에 대한 지표 (codelength, Table 1. 상에서 NLL)가 bits/dim 단위로 나타나 있다. Train 과 test 의 차이는 최대 0.03 bits/dim 으로, 이때까지 발표된 likelihood 기반의 모델들과 비교할 만한 값을 나타내며 과적합이 일어나지 않았다는 것을 알 수 있다. 그러나, codelength 가 다른 likelihood 기반의 생성 모델 (Sparse transformer 등)에 비해서는 뒤쳐진다. 이에 대한 자세한 내용은 부록 D 에 서술되어 있다.</p>
<p>그럼에도 불구하고 논문에서 제시한 DDPM 은 높은 품질의 샘플을 생성하므로, diffusion model 이 좋은 lossy compressor 로 써 작용하게 하는 inductive bias<sup><a href="#footnote_4">4</a></sup> 가 존재한다고 결론지을 수 있다. $L_0$ 를 distortion 으로 취급하고, $L_1+L_2+\cdots+L_T$ 를 rate 로 본다면 CIFAR-10 데이터셋에 대한 모델의 rate 는 (전체 NLL 3.75 중) 1.78 bits/dim, distortion 은 1.97 bits/dim<sup><a href="#footnote_5">5</a></sup> 이다. 즉 codelength 의 절반 이상 ($1.97/3.75\ &gt;\ 0.5$)이 imperceptible distortions 을 표현한다.</p>
<h4 id="431-progressive-lossy-compression">4.3.1. Progressive lossy compression</h4>
<p>Diffusion Model 의 training object 에 대응되는 lossy compression 을 통해, rate-distortion 양상을 조사해 볼 수 있다. 우선 다음과 같은 Algorithm 3, 4 를 생각해 보자.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/d1a8d45c-9c56-4b2c-a5a9-39f43b3789bb/image.png" alt=""></p>
<p>Algorithm 3, 4 는 임의의 두 분포 $p,\ q$ 에 대해 receiver 에 주어진 분포가 $p$ 뿐일 때 (즉, 분포 $q$가 주어지지 않았을 때) $D_{\text{KL}}\left(q\left(\mathbf{x}\right)\middle| p\left(\mathbf{x}\right)\right)$ 의 bit 로 $\mathbf{x}\sim q\left(\mathbf{x}\right)$ 를 sampling 하는 과정을 나타낸다. $\mathbf{x}<em>\mathbf{0}\sim q\left(\mathbf{x}_\mathbf{0}\right)$ 가 주어졌을 때, Sender 에서는 $\mathbf{x}_T,\mathbf{x}</em>{T-1},\cdots,\mathbf{x}<em>0$ 를 순차적으로 Receiver 에게 보낸다. 각각은 $p_\theta\left(\mathbf{x}_t\middle|\mathbf{x}</em>{t+1}\right)$ 을 이용해서 sampling 된다. Receiver 에서는 순차적으로 receive 되는 각각의 $\mathbf{x}<em>T,\mathbf{x}</em>{T-1},\cdots$ 에 대해 순차적으로 $\mathbf{x}_0$ 를 estimate 한다. 앞서 $\mathbf{x}_t=\sqrt{\bar{\alpha}_t}\mathbf{x}_0+\sqrt{1-\bar{\alpha}_t}\mathbf{\epsilon}$ 와 같이 치환했으므로, </p>
<p>$$
\mathbf{x}_0\simeq\widehat{\mathbf{x}}_0=\left(\mathbf{x}_t-\sqrt{1-\bar{\alpha_t}}\mathbf{\epsilon}_\theta\left(\mathbf{x}_t\right)\right)/\sqrt{\bar{\alpha_t}}$$</p>
<p>와 같이 estimate value 를 산출할 수 있다. 물론</p>
<p>$$
\mathbf{x}_0\sim p_\theta\left(\mathbf{x}_0\middle|\mathbf{x}_t\right)$$</p>
<p>를 이용한 stochastic reconstruction 을 진행할 수도 있지만, computation 이 복잡하기에 논문에서는 다루지 않는다. 이 때 매 timestep $t$ 에서 distortion 의 경우 RMSE 값으로 정의되어 </p>
<p>$$
\mathrm{distortion}=\mathrm{RMSE}=\sqrt{\frac{\left|\left|\mathbf{x}_0-\widehat{\mathbf{x}}_0\right|\right|^2}{D}}$$</p>
<p>와 같이 계산되고, rate 는 <em>&quot;Timestep $t$ 까지 receive 된 bit 수의 누적 합&quot;</em> 으로 계산된다. Timestep 이 경과함에 따라 distortion 이 감소하고, rate 가 증가하는 과정이 Figure 5. 에 나타나 있다. Rate-distortion 그래프의 경우, rate 값이 낮은 영역에서 distortion 값이 급격하게 감소하는 양상이 나타난다. 이는 대부분의 bit 가 imperceptible distortion 에 할당되어 있음을 나타낸다. 이 부분에 대한 자세한 내용은 LDM 을 소개한 <a href="https://arxiv.org/abs/2112.10752">Rombach et al. 2022</a> 에도 나타나 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/0a6e0e28-80dc-4586-8d4a-2670f23e804a/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/026ebd71-cbe0-42c0-a950-62b13c0ed8ff/image.png" alt=""></p>
<h4 id="432-progressive-generation">4.3.2. Progressive generation</h4>
<p>Figure 6. 은 Algorithm 2 를 이용한 sampling (reverse process) 의 각 시점에서 $\widehat{\mathbf{x}}_0$를 추출해보자. 큰 scale 의 feature (전체적인 이미지의 형태) 가 먼저 생성되고, 세부적인 부분이 나중에 나타나는 것을 확인할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/9a6c94ec-547a-4b7c-ba07-b4c96cd6f4e2/image.png" alt=""></p>
<p>Figure 7. 은 여러 가지 값의 t에 대해 $\mathbf{x}_0\sim p_\theta\left(\mathbf{x}_0\middle|\mathbf{x}_t\right)$ 를 추출한 결과를 보여준다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/88cab268-69d8-4d37-a47c-4af38d6a530c/image.png" alt=""></p>
<p>작은 값의 $t$에 대해서는 세부적인 detail 이 모두 유지된 반면, 큰 값의 $t$에 대해서는 전체적인 이미지 형태만 보존된다. 이를 통해 conceptual compression 에 대한 아이디어를 얻을 수 있다.</p>
<h4 id="433-connection-to-autoregressive-decoding">4.3.3. Connection to autoregressive decoding</h4>
<p>Variational bound</p>
<p>$$
\mathbb{E}<em>q\left[{{D</em>{\mathrm{KL}}\left(q\left(\mathbf{x}<em>T\middle|\mathbf{x}_0\right)\middle| p\left(\mathbf{x}_T\right)\right)}}+\sum</em>{t&gt;1}{{D_{\mathrm{KL}}\left(q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t,\ \mathbf{x}_0\right)\middle|| p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t\right)\right)}}\ {{-\log{p_\theta\ \left(\mathbf{x}_0\ \middle|\ \mathbf{x}_1\right)}}}\right]$$</p>
<p>는 다음 식과 동치이다.</p>
<p>$$
L=D_{\mathrm{KL}}\left(q\left(\mathbf{x}<em>T\right)\middle| p\left(\mathbf{x}_T\right)\right)+\mathbb{E}_q\left[\sum</em>{t\geq1}{D_{\mathrm{KL}}\left(q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)\middle|| p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t\right)\right)}\right]+H\left(\mathbf{x}_0\right)$$</p>
<p>이 때 $H\left(\mathbf{x}_0\right)$ 는 Entropy term 이다. 증명은 아래와 같다. </p>
<hr>
<p>$$
L\ =\mathbb{E}<em>q\left[-\log{p\left(\mathbf{x}_T\right)}\ -\sum</em>{t\ \geq\ 1}\log{\frac{p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)}{q\left(\mathbf{x}_t\middle|\mathbf{x}</em>{t-1}\right)}}\right]$$</p>
<p>베이즈 정리에 의해,</p>
<p>$$
L\ =\mathbb{E}<em>q\left[-\log{p\left(\mathbf{x}_T\right)}\ -\sum</em>{t\ \geq\ 1}{\log{\frac{p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)}{q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}<em>t\right)}}\cdot\frac{q\left(\mathbf{x}</em>{t-1}\right)}{q\left(\mathbf{x}_t\right)}}\right]$$</p>
<p>log 의 성질을 이용해 식을 정리하고, KL-Divergence 및 Entropy 의 정의를 이용하면 다음과 같다.</p>
<p>$$
L\ =\mathbb{E}<em>q\left[-\log{\frac{p\left(\mathbf{x}_T\right)}{q\left(\mathbf{x}_T\right)}}\ -\sum</em>{t\ \geq\ 1}\log{\frac{p_\theta\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)}{q\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t\right)}}-\log{q\left(\mathbf{x}_0\right)}\right]$$</p>
<p>$$
=D_{\mathrm{KL}}\left(q\left(\mathbf{x}<em>T\right)\middle|| p\left(\mathbf{x}_T\right)\right)+\mathbb{E}_q\left[\sum</em>{t\geq1}{D_{\mathrm{KL}}\left(q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)\middle|| p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t\right)\right)}\right]+H\left(\mathbf{x}_0\right)$$</p>
<hr>
<p>이 때, $T=D$ 로 두는 상황을 생각해 보자. Forward process 의 $q\left(\mathbf{x}<em>t\middle|\mathbf{x}</em>{t-1}\right)$ 이 $t$-th pixel 을 mask out 하도록 해당 과정을 정의하면, $p\left(\mathbf{x}_T\right)$ 는 noise 만이 존재하는 black image 가 되고 Reverse process 의 경우 매 step 마다 하나의 pixel 을 sampling 하게 된다. 따라서,</p>
<p>$$
D_{\text{KL}}\ (q(\mathbf{x}_T)\ ||\ p(\mathbf{x}_T))\ =\ 0$$</p>
<p>이 성립하고, </p>
<p>$$
\mathrm{minimize}\ D_{\text{KL}}\ (q\left(\mathbf{x}<em>{t-1}\middle|\mathbf{x}_t\right)\ ||\ p_\theta\left(\mathbf{x}</em>{t-1}\middle|\mathbf{x}_t\right))$$</p>
<p>와 같은 과정을 통해, $p_\theta$ 가 $t+1,\ t+2,\ \cdots,\ T$ step 의 pixel 을 copy 하고 $t+1,\ t+2,\ \cdots,\ T$ step 의 pixel 값을 이용해 $t$ step 의 pixel 을 예측하는 방향으로 학습된다. 결과적으로, $T=D$ 와 같은 설정이 적용된 Diffusion model 에서  $p_\theta$ 가 학습되는 과정은 autoregressive model 을 학습시키는 과정이다. 결과적으로 Gaussian Diffusion model 을 autoregressive model 의 한 종류로 해석할 수 있다.</p>
<h3 id="44-interpolation">4.4. Interpolation</h3>
<p>Source image $\mathbf{x}_0$ 와 $\mathbf{x}_0^\prime\sim q\left(\mathbf{x}_0\right)\left(=\mathrm{distribution\ of\ data\ points}\right)$ 를 latent space 에서 보간할 수 있다 (단 $q$는 stochastic encoder). 각각의 latent space representation 을 $\mathbf{x}_t,\mathbf{x}_t^\prime\sim q\left(\mathbf{x}_t\middle|\mathbf{x}_0\right)$ 라고 하면, linearly interpolated latent $\bar{\mathbf{x}}_t$ 를</p>
<p>$$
\bar{\mathbf{x}}_t=\lambda\mathbf{x}_0^\prime+\left(1-\lambda\right)\mathbf{x}_0$$</p>
<p>와 같이 정의하고 이에 대해 reverse process 를 적용해</p>
<p>$$
\bar{\mathbf{x}}_0\sim p\left(\mathbf{x}_0\middle|{\bar{\mathbf{x}}}_t\right)$$</p>
<p>를 얻을 수 있다. 이 과정이 Figure 8. (Left) 에 나타나 있다. Figure 8. (Right) 에 $256\ \times256$ size 의 CelebA-HQ 이미지에 대한 보간 결과가 나타나 있다. 서로 다른 $\lambda$ 값을 이용해 보간을 진행하였으며, 이 때 모든 과정에서 $\mathbf{x}_t$ 와 $\mathbf{x}_t^\prime$ 을 같게 해 주기 위해 noise 는 고정시켰다. </p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/9d139025-5239-4681-adc0-f53735c64087/image.png" alt=""></p>
<p>더 큰 값의 $T$ 를 사용해 다양한 보간 결과를 얻을 수 있다. Appendix D. 에 결과가 제시되어 있다.</p>
<h2 id="6-conclusion">6. Conclusion</h2>
<p>이 논문에서는 높은 품질의 이미지를 생성하는 Diffusion model (DDPM) 을 소개하였다. DDPM 과 마르코프 체인과의 관련성을 논하였으며, 학습 과정이 denoising score matching 을 따르고, inference 과정이 annealed Langevin dynamics 와 동치라는 점 역시 논하였다. 더 나아가, diffusion model 이 lossy compression 및 autoregressive decoding 의 관점으로 해석될 수 있다는 점 역시 보였다. Diffusion model 이 이미지에 대해 좋은 inductive biases 를 가지는 것으로 보이며, 새로운 종류의 생성 모델로서 다른 데이터와 결합되어 사용되거나 후속 연구가 진행되기를 기대한다.</p>
<h2 id="reference">Reference</h2>
<p>[1] Jonathan Ho, Ajay Jain, and Pieter Abbeel. Denoising diffusion probabilistic models. arXiv Preprint <a href="https://arxiv.org/abs/2006.11239">arXiv:2006.11239</a> (2020).</p>
<h2 id="footnotes">Footnotes</h2>
<p><a name="footnote_1">1</a>: Provides the ability to incrementally decode portions of an image from an incomplete image (Windows App Development, <a href="https://learn.microsoft.com/en-us/windows/win32/wic/-wic-progressive-decoding">https://learn.microsoft.com/en-us/windows/win32/wic/-wic-progressive-decoding</a>, 2022.04.06.).</p>
<p><a name="footnote_2">2</a>: 이전 time step 의 정보를 바탕으로 decoding 을 진행해, 현재 time step 에 해당되는 sample 을 생성하는 과정</p>
<p><a name="footnote_3">3</a>: Lilian Weng, “What are Diffusion Models?”, <a href="https://lilianweng.github.io/posts/2021-07-11-diffusion-models/">https://lilianweng.github.io/posts/2021-07-11-diffusion-models/</a>, 2021.07.11.</p>
<p><a name="footnote_4">4</a>: Inductive bias is the set of assumptions that the model uses to predict outputs of given inputs that it has not encountered. (Wikipedia, Inductive bias, <a href="https://en.wikipedia.org/wiki/Inductive_bias">https://en.wikipedia.org/wiki/Inductive_bias</a>). In case of CNN, translation invariance is corresponding inductive bias.</p>
<p><a name="footnote_5">5</a>: 이 값을 $[0, 255]$ scale 의 RMSE 로 변환하면 0.95 이다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise]]></title>
            <link>https://velog.io/@philiplee_235/Cold-Diffusion-Inverting-Arbitrary-Image-Transforms-Without-Noise</link>
            <guid>https://velog.io/@philiplee_235/Cold-Diffusion-Inverting-Arbitrary-Image-Transforms-Without-Noise</guid>
            <pubDate>Fri, 20 Jan 2023 14:18:32 GMT</pubDate>
            <description><![CDATA[<p>기존의 DDPM 에서 사용한 degradation 방식은 이미지에 Gaussian noise 를 추가하는 것이다. 이를 일반화해, noise 를 사용하지 않고 임의의 변환 (arbitrary transformation)을 사용해 이미지를 degrade 시키는 방식을 제안한 Cold Diffusion 논문 (<a href="https://arxiv.org/abs/2208.09392">Bansal et al., 2022</a>)을 리뷰해 보았다.</p>
<h2 id="abstract">Abstract</h2>
<p><a href="https://arxiv.org/abs/2006.11239">Ho et al. (2020)</a> 에서 제안된 DDPM 에서 적용된 image transformation (degradation) 은 Gaussian noise 를 추가하는 것이다. 그러나, diffusion model 은 image degradation 의 방식에 상관없이 작동하며, 여러 degradation 방식이 적용될 수 있다. Blur, masking 과 같은 방식이 적용될 수 있으며 이가 적용된 diffusion model 이 일반화되어 생성 모델을 만든다. Arbitrary process 에 대한 inverse 과정을 포함하는 diffusion model 의 일반화 결과를 얻을 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/847a46d3-70ee-4387-8b98-c12fb441df42/image.png" alt=""></p>
<h2 id="1-introduction">1. Introduction</h2>
<p>Diffusion model 은 generative modeling 에 있어서 좋은 성능을 나타내며, 대부분의 경우 다음 과정을 따른다.</p>
<ul>
<li>Training : Random Gaussian noise 가 가해진 image 에 대해 denoised image 를 산출하는 <em>denoising network</em> 를 학습시킨다.</li>
<li>Test : 학습시킨 denoising network 를 통해 pure gaussian noise 를 image 로 변환한다. Noise step 을 따라 gaussian noise 를 추가하고 denoising network 를 적용한다.</li>
</ul>
<p>Diffusion 은 <em>Langevin dynamics</em>    를 이용하는 sampling 과정으로도 볼 수 있다. <em>High temperature</em> (noise 가 많은 상태) 로 부터 시작해, noise 가 적은 <em>cold state</em> 로 변환하는 과정을 포함한다. 또한, variational inference 를 사용하는 denoising network 를 학습시키는 관점으로도 볼 수 있다.</p>
<p>논문에서는 diffusion model 에 사용되는 gaussian noise 의 필요성에 대해 논하며, 고전적인 DDPM 이 따르는 이론에서 벗어난, <em>generalized diffusion models</em> 를 제안한다. Gaussian noise 를 이용한다는 제약점을 넘어, blurring, downsampling 과 같은 임의의 image transformation 을 이용해 만들어진 모델을 고려한다. 이 변환을 inverse 하는 신경망을 학습시켜, photo-realistic image 를 생성해 내는 기법에 대해 연구한다.</p>
<p>학습 및 테스트 과정에 있어서 gaussian noise 를 필요로 하지 않는 <strong><em>cold diffusion</em></strong> 을 통해 고전적인 DDPM 에 사용된 이론에 대한 이해를 넓히며, 기존에 제시된 DDPM 과 매우 다른 성질을 나타내는 생성 모델이 만들어질 수 있다는 가능성 또한 연다.</p>
<h2 id="2-background">2. Background</h2>
<p>Data 에 gaussian noise 를 추가하는 것은 다음과 같은 특성을 가진다.</p>
<p>1) Score matching 과정에서, 데이터 분포에 대한 support 중 low-dimensional manifold 에 존재하는 것들을 ambient space 로 확장시켜 score matching 이 원활하게 일어나게 해 준다.</p>
<p>2) Low density region 에 대한 data augmentation 으로 해석될 수 있다. Langevin dynamics 에서 mode 간의 원활한 mixing 이 일어날 수 있게 해 준다.</p>
<p>논문에서는 diffusion model 에 있어서 noise 가 필수적이지 않으며, 여러 inverse problem 을 해결함에 있어서 noise 를 제거하는 것이 가져오는 영향을 관찰한다.</p>
<h2 id="3-generalized-diffusion">3. Generalized Diffusion</h2>
<p>고전적인 DDPM 은 2가지 구성 요소를 가진다.</p>
<p>1) Image degradation : image 에 gaussian noise 를 추가</p>
<p>2) Restoration : 학습된 restoration operator 를 사용해 denoising</p>
<p>→ Gaussian noise 에 국한되어 있지 않은, 임의의 degradation operation 을 사용하는 <em>generalized diffusion</em> 을 고려한다.</p>
<h3 id="31-model-components-and-training">3.1. Model components and training</h3>
<p>이미지 $x_0 \in \R^N$ 에 대해, severity $t$를 가지는 degradation operator $D$ 를 고려하자. 이 때 $x_0$에 대한 degradation 은</p>
<p>$$
x_t = D(x_0, t)
$$</p>
<p>이다. 이 때 $x_t$는 $t$에 대해 연속이어야 하며, $D(x_0, 0)=x_0$ 가 만족되어야 한다. Ho et al. (2020) 에서 제시된 DDPM 의 $D$는 분산이 $t$에 비례하는 Gaussian noise 를 추가하는 연산자이다. 이를 일반화 시켜, $D$가 blurring, masking, downsampling 과 같은 다른 변환을 수행하는 연산자가 되게 한다.</p>
<p>Restoration operator $R$은 $D$에 대한 inverse process 를 수행하며, 아래 성질을 만족한다.</p>
<p>$$
R(x_t, t) \simeq x_0
$$</p>
<p>연산자 $R$은 $\theta$에 대해 매개화된 인공 신경망을 통해 구현된다. Training object 는</p>
<p>$$
\min_{\theta} \mathbb{E}<em>{x \sim \chi} || R</em>{\theta}(D(x, t), t)- x||
$$</p>
<p>와 같다. 이 때 $\chi$는 data distribution 을 나타내며 $x$는 임의의 data point 에 해당된다.</p>
<h3 id="32-sampling-from-the-model">3.2. Sampling from the model</h3>
<p>적절한 $D$에 대한 $R_{\theta}$ 를 학습시킨 후, 이 연산자를 이용해 degradation 을 invert 시킬 수 있다. 작은 severity $t$에 대해서는, $R_{\theta}$를 통해 원본 이미지를 one-shot 만에 얻을 수 있다. 그러나 $R_{\theta}$가 simple convex loss 를 이용해 학습되었기 때문에, 큰 값의 $t$에 대해서는 좋은 결과를 가져다 주지 못한다. DDPM 에서는 image 에 가해지는 noise 의 크기를 점점 감소시키며 denoising operation 을 반복해서 적용한다. 이러한 Naive sampling 의 과정을 나타내면 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/6d0a0936-22f4-4a45-92c0-daffb90d39c5/image.png" alt=""></p>
<p>소개된 Algorithm 1. 은 noise 에 기반한 diffusion model 에 잘 적용된다. $R_{\theta}$ 가 gaussian noise 를 제거하게끔 잘 학습될 수 있기 때문이다. 그러나 cold diffusion 에 대해서는 잘 적용되지 않는다 (Figure 2.). 따라서, more smooth and cold degradation 을 이용하는 경우 적용할 수 있는 새로운 Algorithm 2. 를 제시한다. Restoration operator $R_{\theta}$가 degradation 을 완벽하게 invert 시키지 못해도, 좋은 reconstruction 을 생성할 수 있는 구조를 가지고 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/b8a39501-9d84-4bf9-b452-c1b0d5f7c9e2/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/fa687251-8fbf-4dd5-a442-f4f16305f149/image.png" alt=""></p>
<h3 id="33-properties-of-algorithm-2">3.3. Properties of Algorithm 2</h3>
<p>$R_{\theta}$ 가 $D$에 대한 완벽한 inverse 과정을 나타내는 경우, Algorithm 1, 2 모두 $x_0$를 reconstruct 한다. 그렇다면 $R_{\theta}$가 완벽하지 않은 경우 (오차를 가지는 경우)를 살펴보자.</p>
<p>작은 값의 $x, s$에 대해 Algorithm 2. 는 $R_{\theta}$ 의 오차에 민감하지 않다. 즉 알고리즘의 작동 방식은 <strong>어떠한 $R_{\theta}$ 를 선택해도, $R_{\theta}$ 가 $D$에 대한 완벽한 inverse 과정을 나타내는 경우와 동일하다.</strong> 이를 간단히 증명해 보자.</p>
<p><em>Proof</em>  벡터 $e$에 대한 선형 degradation function</p>
<p>$$
D(x, s) \simeq x+s\cdot e
$$</p>
<p>를 생각해 보자. $x=x_0, s=0$ 에서 $D(x, s)$의 테일러 전개가</p>
<p>$$
D(x, s) \simeq x + s \cdot e + \text{H.O.T}
$$</p>
<p>와 같음을 고려하자. $s$가 작은 값이므로 위와 같은 1차 근사를 생각할 수 있다. 이 때 테일러 전개 식의 0차항 (상수항)은 0이어야 한다. 앞서 $D$에 대한 가정 중</p>
<p>$$
D(x, 0)=x
$$</p>
<p>가 성립하기 때문이다. 이제 임의의 $R_{\theta}$ 에 대해, $\hat{x_0}$ 를 대입하면</p>
<p>$$
 x_{s-1} = x_s - D(R_{\theta}(x_s, s) , s) + D(R_{\theta}(x_s, s) , s-1)
$$</p>
<p>$x_s$의 정의로부터</p>
<p>$$
 x_{s-1} = D(x_0, s) - D(R_{\theta}(x_s, s) , s) + D(R_{\theta}(x_s, s) , s-1)
$$</p>
<p>테일러 전개를 이용하면</p>
<p>$$
 x_{s-1} \simeq x_0+s \cdot e - R_{\theta}(x_s, s) - s \cdot e+R_{\theta}(x_s, s) ,+(s-1) \cdot e
$$</p>
<p>식을 정리하면</p>
<p>$$
 x_{s-1} = x_0+(s-1) \cdot e = D(x_0, s-1)
$$</p>
<p>즉 $s&lt;t$ 인 모든 $s$에 대해 $R_{\theta}$ 의 선택에 상관없이 $x_s$를 생성한다. 이로써 알고리즘의 작동 방식은 <strong>어떠한 $R_{\theta}$ 를 선택해도, $R_{\theta}$ 가 $D$에 대한 완벽한 inverse 과정을 나타내는 경우와 동일함</strong>이 증명되었다.</p>
<p>반면 Algorithm 1. 은 이러한 특징을 나타내지 않는다. $R_{\theta}$ 가 $D$에 대한 완벽한 inverse 를 나타내지 못할 경우,</p>
<p>$$
x_0 = R_{\theta}(x, 0) \neq D(R(x, 0), 0)
$$</p>
<p>이므로 작은 값의 $s$에 대해서도 Algorithm 1. 은 오차가 존재하게 된다.</p>
<h2 id="4-generalized-diffusions-with-various-transformations">4. Generalized Diffusions with Various Transformations</h2>
<p>다양한 방식의 degradation 을 적용하고 이에 대한 performance 를 측정한다. MNIST, CIFAR-10, CelebA 에 대해 Algorithm 2. 를 이용한다.</p>
<h3 id="41-deblurring">4.1. Deblurring</h3>
<p>Gaussian blur 를 적용하는 diffusion model 을 생각해 보자. Step $t$ 가 증가할수록 blurred 된 정도는 심해진다. Step $t-1$에서 blurring 에 사용된 gaussian kernel 을 ${G_t }$ 라고 하면, blurring 과정은 convolution 으로 나타낼 수 있다.</p>
<p>$$
x_t = G_t  * x_{t-1} = G_t * \cdots * G_1 * x_0 = \bar{G_t} * x_0 = D(x_0, t)
$$</p>
<p>가 성립한다. 3.1. 절에 제시된 training object 를 이용해 학습을 진행하였으며, Algorithm 2. 를 이용해 sampling 을 진행하였다. 그 결과는 Figure 3. 와 Table 1. 과 같다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/718b2e8c-847c-484b-9a0c-9ddefe6ac9b0/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/6173a701-2b53-4eaf-9144-b0b85ee913c8/image.png" alt=""></p>
<p>Table 1. 에서, Algorithm 2. 를 이용하는 경우가 direct sampling 보다 더 좋은 (낮은) FID score 값을 가짐을 알 수 있다. 이로부터 일반화된 sampling 기법 (Algorithm 2. 내용)을 통해 실제 데이터 분포에 더 가까운 분포가 학습됨을 알 수 있다.</p>
<p>Blur operator 의 경우, 각 sampling step 에 주파수를 더해 주는 것으로 해석될 수 있다. Sampling 과정에서 나오는 항들 중</p>
<p>$$
D(\hat{x_0}, t)-D(\hat{x_0}, t-1)
$$</p>
<p>는</p>
<p>$$
\bar{G_t} <em>x_0 - \bar{G}_{t-1}</em>x_0
$$</p>
<p>와 같고, 이는 band-pass filter 로써 작용해 degradation 과정 (step $t$)에서 지워진 주파수를 다시 더해주는 역할을 한다.</p>
<h3 id="42-inpainting">4.2. Inpainting</h3>
<p>이번에는 이미지에서 순차적으로 픽셀들을 흑백화 하는 변환을 생각해 보자. 다음과 같은 Gaussian mask 를 적용한다.</p>
<blockquote>
<p>$n\times n$ size의 이미지에 대해 분산이 $\beta$인 2D gaussian curve (size $n \times n$) 를 정의한다. Peak 의 값이 1이 되게끔 정규화 하고, $1-\text{(mask)}$ 를 대입해 mask 의 중심값 (원래 peak 였던 값)이 0이 되도록 한다. 이렇게 해서 만들어진 mask 를 $z_{\beta}$ 라고 하자.</p>
</blockquote>
<p>증가수열 $\beta_i$ 에 대해 ${ z_{\beta_i}}$ 를 총 $T$번 적용한다고 하자. 픽셀이 지워지는 정도는 $\beta_i$ 의 값을 변경해 조절할 수 있다. Masking 과정을 나타내면</p>
<p>$$
x_t = D(x_0, t) =x_0 \cdot \Pi^t_{i=1}z_{\beta_i}
$$</p>
<p>라고 하자. Sampling 결과는 Figure 4. 와 Table 2. 에 나타나 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/29a2bc04-c82c-4547-a9b2-d4ce0d7701aa/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/403aa766-abe2-42da-a18e-00b23427124d/image.png" alt=""></p>
<p>Table 1. 과 마찬가지로, Algorithm 2. 를 이용하는 경우가 direct sampling 보다 SSIM score 는 낮지만 더 좋은 FID score 값을 가진다.</p>
<h3 id="43-super-resolution">4.3. Super-Resolution</h3>
<p>이번에는 매 step 마다 $n \times n$ size 의 image 를 $\frac{n}{2} \times \frac{n}{2}$ size 로 downsampling 하는 변환을 고려해 보자. MNIST, CIFAR-10 은 image size 가 $4 \times 4$ 가 될 때 까지, Celeb-A 는 image size 가 $2 \times 2$ 가 될 때까지 반복한다. Degraded 된 image 는 nearest-neighbor interpolation (최근접 보간법)을 통해 원본 image size 로 변환된다. Sampling 결과는 Figure 5. 와 Table 3. 에 나타나 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/94f94622-b6a5-46cb-a4ce-8fa7fb91a4c3/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/bbbaf133-6a79-41f5-8f2a-f97373178851/image.png" alt=""></p>
<h3 id="44-snowification">4.4. Snowification</h3>
<p>ImageNet-C 데이터셋에서 제안된 <a href="https://github.com/hendrycks/robustness">*snowification 변환 *</a>을 적용해 보자. 일반적이지 않은 degradation 연산에 대해서도, generalized diffusion 이 성공적으로 이미지를 생성해 냄을 보인다. 매 step 마다 증가하는 <em>snow</em> 를 가함으로써 degradation 을 진행한다. Sampling (<em>desnowification</em>) 결과는 Figure 6. 와 Table 4. 에 나타나 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/b22686a3-ff31-4066-aa51-512fa9f5f562/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/4dcc2279-c997-4e23-bb27-ef0d7d58aece/image.png" alt=""></p>
<h2 id="5-cold-generation">5. Cold Generation</h2>
<p>Diffusion model 은 데이터의 분포를 학습하고 높은 품질의 sample 을 생성해 낼 수 있다.</p>
<h3 id="51-generation-using-deterministic-noise-degradation">5.1. Generation using deterministic noise degradation</h3>
<p>Noise 를 이용한 image generation 을 먼저 논의해 보자. 생성에 앞서, noise 의 종류가 미리 고정되어 있는 경우인 <em>deterministic sampling</em> 과정을 생각하자. 먼저, data point 와 고정된 noise $z \in \mathrm{N}(0, 1)$ 에 대한 <em>deterministic interpolation</em> 을 다음과 같이 정의하자.</p>
<p>$$
D(x, t) = \sqrt{\alpha_t}x + \sqrt{1-\alpha_t} z
$$</p>
<p>이 때 ${ \alpha_t }$는 증가수열이다. </p>
<h4 id="fixed-noise-method">Fixed noise method</h4>
<p>고정된 noise $z$에 대해 degradation operator $D(x, s)$ 를 이용해 Algorithm 2. 를 적용할 수 있다.</p>
<h4 id="estimated-noise-method">Estimated noise method</h4>
<p>반면, step $t$에서의 reconstruction 에서 사용될 수 있는 noise vector $\hat{z}$ 를</p>
<p>$$
\hat{z}(x_t, t) = \frac{x_t - \sqrt{\alpha_t} R(x_t, t)}{\sqrt{1-\alpha_t}}
$$</p>
<p>를 이용해 구하고 Algorithm 2. 에 적용시킬 수도 있다. 식을 조금 더 자세히 풀어보자. $R(x_t, t) = \hat{x_0}$ 이므로</p>
<p>$$
\hat{z}(x_t, t) = \frac{x_t - \sqrt{\alpha_t} \hat{x_0}}{\sqrt{1-\alpha_t}}
$$</p>
<p>가 성립하고, </p>
<p>$$
D(\hat{x_0}, t) = \sqrt{\alpha_t} \hat{x_0} + \sqrt{1-\alpha_t} \hat{z}
$$</p>
<p>$$
D(\hat{x_0}, t-1) = \sqrt{\alpha_{t-1}} \hat{x_0} + \sqrt{1-\alpha_{t-1}} \hat{z}
$$</p>
<p>이를 Algorithm 2. 에 대입하면 (sampling),</p>
<p>$$
x_{t-1} = \sqrt{\alpha_{t-1}} \hat{x_0} + \sqrt{1-\alpha_{t-1}} \hat{z}
$$</p>
<p>과 같다. </p>
<p>Table 5. 는 fixed noise method 와 estimated noise method 를 이용해 CelebA 와 AFHQ 데이터셋에 대해 sampling 을 진행한 결과 (Hot diffusion)를 정량적으로 나타낸다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/e3cdc5ad-b0d7-487a-8fbb-53a2c424e4f4/image.png" alt=""></p>
<h3 id="52-image-generation-using-blur">5.2. Image generation using blur</h3>
<p>Noise 를 사용하는 diffusion 의 장점은 마지막 forward step 에서 degraded 된 image 는 isotropic gaussian distribution 을 따른다는 점이다. 따라서 isotropic gaussian distribution 으로부터 시작해 backward diffusion 을 적용하면 class-unconditional generation 을 수행할 수 있다.</p>
<p>Degradation operation 으로 blurring 을 사용할 경우, 완전히 degraded 된 이미지들은 sampling 을 진행할 수 있는 closed-form 으로 표현되지 않는다. 그러나 이 역시 간단한 method 를 통해 모델링 될 수 있는 분포에 해당한다. 매우 큰 값의 $T$에 대해, 모든 이미지 $x_0$가 모든 픽셀 값이 같은 색을 나타내는 $x_T$ 로 변형된다고 가정하자. 이 때 $x_T$의 일정한 픽셀 값 (RGB)은 원본 이미지 $x_0$ 의 RGB 채널의 평균값으로, 3차원 벡터를 통해 표현된다. 이러한 3차원 분포는 Gaussian mixture model (GMM) 을 통해 표현될 수 있다. GMM 을 이용한 sampling 으로부터, blur 정도가 약해진 random pixel 값을 가지는 이미지를 생성해 cold diffusion 을 적용시킬 수 있다.</p>
<p>논문에서는, $27 \times 27$ 크기의 gaussian kernel 을 통해 총 300번 이미지를 blur 시킨다. Kernel 의 표준편차는 1부터 시작해 0.01 의 비율로 증가한다. Sampling 은 다음과 같이 일어난다. 하나의 성분인 채널 별 평균의 분포를 따르게끔 GMM 을 생성하고, 이미지의 각 채널 별 평균을 GMM 으로부터 sampling (3차원 벡터) 한다. 이후 3차원 벡터를 $3 \times 128 \times 128$ 로 expand 하고 Algorithm 2. 를 적용한다. 이러한 방식으로 sampling 된 결과는 하나의 GMM 으로부터 채널 별 평균을 얻어져서 만들어진 결과이므로 pixel 간 perfectly correlated 되어 있으므로 <em>Perfect symmetry</em> 라고 표기한다. Symmetry 를 제거하기 위해 샘플링 된 $x_T$의 각 픽셀마다 작은 gaussian noise ($\sigma = 0.002$)를 추가한다 (<em>Broken symmetry</em>). 두 방식에 대한 비교는 Table 5. 에 나타나 있다. Figure 7. 은 blur 를 이용한 cold diffusion 의 sampling 결과를 나타낸다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/da992c6a-5e26-405d-a1bf-32464e999f73/image.png" alt=""></p>
<h3 id="53-generation-using-other-transformations">5.3. Generation using other transformations</h3>
<p>이제, 다양한 transformation 이 image generating 에 적용될 수 있음을 보이자. </p>
<h4 id="gaussian-mask">Gaussian Mask</h4>
<p>Mask transformation 을 적용하기 위해, 최종적으로 degraded 된 이미지가 원본 이미지에 대한 정보를 전혀 포함하지 않을 정도로 masking routine 을 수정하자. 물론 모든 원본 이미지를 검정 이미지로 변환할 수 도 있지만 이는 다양한 이미지 생성에 어려움을 가져온다. 대신에 모든 픽셀을 랜덤한 단색으로 변형시키는 변환을 생각한다. 이는 원본 이미지에서 정보를 지울뿐더러, 서로 다른 색상의 이미지에 Algorithm 2. 를 적용시켜 다양한 sample 을 생성할 수 있게 해 준다. Gaussian mask 를</p>
<p>$$
G_t = \Pi^t_{i=1} z_{\beta_i}
$$</p>
<p>에 대해, $x_t$를 다음과 같이 생성한다. 4.2. 절의 방법과 유사하지만 약간의 차이가 있다. 랜덤 색상의 이미지를 $c$라고 하면,</p>
<p>$$
x_t = G_t * x_0 + (1-G_t) * c
$$</p>
<p><em>cf )</em> In 4.2. Inpainting : $x_t = D(x_0, t) =x_0 \cdot \Pi^t_{i=1}z_{\beta_i}$</p>
<h4 id="super-resolution">Super-resolution</h4>
<p>Super-resolution 의 경우 이미지를 $2 \times 2$ 또는 $4 \times 4$ 로 downsampling 하였다. 이렇게 degraded 된 이미지들은 1차원 벡터로 표현될 수 있고, 하나의 gaussian distribution 을 통해 모델링 될 수 있다. 이후 blurring 과 같은 방식으로 sampling 을 하여서 학습된 super-resolution 모델을 이용하면 이미지를 얻을 수 있다.</p>
<h4 id="animorphosis">Animorphosis</h4>
<p>어떠한 형태의 변환이 적용될 수 있다는 점을 보이기 위해, <em>animorphosis</em> 라는 새로운 변환을 이용해보자. CelebA 데이터셋에서 인간의 얼굴을 AFHQ 의 동물 얼굴로 변환하는 것이다. 논문에서는 CelebA 와 AFHQ 데이터셋을 이용하였지만 어떠한 두 분포에 대해서도 근본적으로는 적용 가능하다.  과정을 수식으로 나타내면 아래와 같다. CelebA 의 이미지 $x$와 AFHQ 의 이미지 $z$에 대해,</p>
<p>$$
x_t = \sqrt{\alpha_t} x+ \sqrt{1-\alpha_t} z
$$</p>
<p>이는 noise 를 가하는 과정과 같지만, $z$가 (Gaussian) noise 가 아닌 AFHQ 이미지라는 차이점이 있다. Algorithm 2. 를 이용해 sampling 을 진행한다.</p>
<h4 id="results">Results</h4>
<p>Inpainting (Gaussian mask), Super-resolution, Animorphosis 를 적용한 각각에 대한 FID score 는 90.14, 92.91, 48.51 이다. 실제 sampling 결과는 Figure 1. 과 Figure 8. 에 나타나 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/97fa5a85-2acb-48b5-ac86-b2b42d2e55fe/image.png" alt=""></p>
<h2 id="6-conclusion">6. Conclusion</h2>
<p>현존하는 diffusion model 은 forward process 와 reverse process 두 과정 모두 gaussian noise 를 사용한다. 논문에서는 noise 를 사용하지 않고, 임의의 변환을 이용해서도 diffusion process 를 수행할 수 있음을 보였다. 이를 통해 diffusion model 을 일반화 (generalize) 하며, blurring, inpainting, downsampling 과 같은 변환으로 <em>deterministic degradation</em> 을 적용해 이미지를 생성한다. 이를 통해 diffusion model 의 활용 범위와 적용 방식을 확장시킨다.</p>
<br>

<h2 id="reference">Reference</h2>
<p>[1] Arpit Bansal, Eitan Borgnia, Hong-Min Chu, Jie S. Li, Hamid Kazemi, Furong Huang, Micah Goldblum, Jonas Geiping, Tom Goldstein. Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise, <em>CVPR</em>, <em><a href="https://arxiv.org/abs/2208.09392">arXiv:2208.09392</a></em>, 2022.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Generative Modeling by Estimating Gradients of the Data Distribution]]></title>
            <link>https://velog.io/@philiplee_235/Generative-Modeling-by-Estimating-Gradients-of-the-Data-Distribution</link>
            <guid>https://velog.io/@philiplee_235/Generative-Modeling-by-Estimating-Gradients-of-the-Data-Distribution</guid>
            <pubDate>Fri, 20 Jan 2023 13:37:16 GMT</pubDate>
            <description><![CDATA[<p>새로운 형태의 Generative Model 을 제안한 <a href="https://arxiv.org/pdf/1907.05600.pdf">Song &amp; Ermon (2019)</a> 논문을 리뷰해 보았다.</p>
<h2 id="abstract">Abstract</h2>
<p>이 논문에서는, score matching 를 통해 추정된 데이터 분포의 gradient를 이용한 Langevin dynamic 을 기반으로 새로운 ‘생성 모델’ 을 소개한다. 차원이 낮은 데이터의 경우, 그 gradient 를 추정하기 어렵거나 잘못된 값으로 정의될 수 있기에, 데이터에 서로 다른 Gaussian noise 를 추가해 ‘혼란’ 시키고, 대응되는 score  를 추정한다. Sampling 의 경우, 이 논문에서는 annealed 된 Langevin dynamic  을 제안한다. Sampling process 가 저점 noise 를 감소시키며 원본 data 에 가까워지면서 대응되는 gradient 를 계산한다. 논문에서 제안한 프레임워크에서, 모델의 구조는 flexible 하며 adversarial 한 method 를 적용하거나 학습을 하는 과정에서 sampling 이 필요하지 않고, 모델 비교를 위한 목적 함수를 유도한다. 제안한 모델은 MNIST, CelebA, CIFAR-10 데이터셋에 대한 GAN 의 결과와 비교할 만한 sample 을 생성하며, CIFAR-10 데이터셋에 대해서는 Inception score 8.87 이라는 결과 (SOTA)를 얻어냈다. 더 나아가, 모델이 image inpainting 을 통해 이미지로부터 효과적인 representation 을 학습한다는 것을 보여준다.</p>
<h2 id="1-introduction">1. Introduction</h2>
<p>생성 모델 (Generative model) 은 머신러닝 분야에서 많이 응용되고 있다. 응용 분야 중 일부를 나열해 보자면, 1) 고화질 이미지 생성 2) 음성 및 음악 합성 3) Semi-supervised learning 의 성능 향상 4) 비정상적인 데이터(anomalies) 및 상반되는 데이터(adversarial data) 감지 5) 모방학습 (Imitation learning) 이 있다. 최근에 제시되는 응용 사례는 두 가지 접근 1) likelihood 기반  방법 2) GAN 을 기반으로 한다. 전자의 경우 목적 함수로 log-likelihood 를 사용하며, 후자의 경우 모델이 예측한 데이터의 분포와 실제 데이터 분포 간의 f-divergence 또는 integral probability 로 정의된 목적 함수의 값을 최소화시키는 방향으로 학습이 진행된다. </p>
<p>비록 likelihood 기반 방법 및 GAN 이 generative model 분야에서 좋은 성능을 나타냈지만, 한계점을 가지고 있다. 예를 들어, 학습을 위해서는 likelihood 를 사용하는 모델 (e.g. 자기회귀 (autoregressive) 모델, flow model)의 경우 정규화된 확률 모델을 만들기 위한 특수한 모델 구조가 필요하며, EBM (energy-based model) 의 경우 contrastive divergence, VAE 의 경우 대리 손실함수 (surrogate loss) 가 필요하다. GAN 의 경우 이러한 한계점들 중 일부는 극복하지만, 경쟁적인 학습 과정으로 인해 학습이 불안정할 수 있다. Noise contrastive estimation 과 minimum probability flow 와 같이 생성 모델을 구축을 위한 training object 역시 존재하지만, 이러한 방법들은 낮은 차원의 데이터에 대해서만 잘 적용된다는 한계점을 지니고 있다. </p>
<p>이 논문에서는, 생성 모델을 구현하는 새로운 원리를 소개한다. 이는 logarithmic data density  의 Stein score 로 부터의 추정 및 샘플링에 기반한다. 즉 입력 데이터에 대한 log-density 가 가장 빠르게 증가하는 방향을 가리키는 벡터장을 이용하는 것이다. 데이터로부터 이러한 벡터장을 학습하기 위해, score matching 방법으로 학습된 인공 신경망을 사용한다. 이후 Langevin dynamic 을 이용한 sampling 으로부터 sample 을 생성한다. 임의로 생성된 (초기) sample 값을 추정된 벡터장을 따라 높은 density 를 가지는 영역으로 업데이트 하며, 원본 data 에 가까운 sample 을 생성하는 방향으로 이동하게 된다. 그러나, 이 방법에는 크게 2가지의 문제점이 있다. 첫 번째로, 만약 데이터의 차원이 낮다면 (실세계의 많은 데이터셋이 이러한 경우를 따른다), data point 주위의 영역에서 score 가 정의되지 않는 경우가 생기고 결과적으로 score matching 으로부터 올바른 score estimator 를 제공받지 못한다. 두 번째로, 데이터 밀도가 낮은 영역에서의 데이터가 희소한 점은 (즉, 대부분의 데이터가 존재하는 manifold 로부터 ‘멀리 떨어진’ 데이터들의 경우) score estimation 의 정확도를 감소시키며 Langevin dynamics sampling 과정을 느려지게 한다. 대부분의 경우 Langevin dynamics 는 데이터 분포에 대해 밀도가 낮은 영역에서 초기화되므로, 이 영역에서 부정확한 score estimation 이 일어난다면 샘플링 과정에 악영향을 미치게 된다. 더 나아가, 여러 분포가 mixing 되어 각 분포의 최빈값 간의 거리가 먼 경우 역시 sampling 이 어려워진다.</p>
<p>이러한 두 가지 문제점을 극복하기 위해, <strong><em>다양한 크기의 gaussian noise 를 data 에 추가해 data 분포에 혼란을 가져다주는 방법</em></strong>을 제안한다. Random noise 를 추가함으로써 데이터 분포가 낮은 차원에만 머물지 않게 한다. 큰 noise 의 경우 기존 data 분포 에 대해 낮은 밀도 영역 상의 sample 을 생성하므로, score estimation 과정이 잘 일어날 수 있게 한다. 결정적으로, noise level 에 의존하는 단일 score network 를 학습시켜 모든 크기(magnitude, level)의 noise 에 대한 score 를 추정한다. 그 다음으로, Langevin dynamics 의 annealed version 을 제안한다. Annealed version 의 경우, 가장 높은 noise level 에 대한 score 를 초기값으로 해, sampling 결과와 원본 데이터가 구분될 수 없을 때 까지  noise level 을 점점 감소시키며 score estimation 과정을 수행한다. </p>
<p>논문에서 제안한 접근 방식은 몇 가지 중요한 특징을 가진다. 첫 번째로, training object 를 최적화시키는 과정에서 adversarial training, MCMC sampling, 또는 다른 근사 기법이 필요하지 않으며, score network 설계를 위한 독특한 구조 또는 별도의 제약이 필요하지 않고, 대부분의 신경망 매개화 기법에 대해 training object 를 계산할 수 있다 (tractable). 또한 training object 를 이용해,  같은 데이터셋에 대한 서로 다른 모델의 성능을 정량적으로 비교할 수도 있다. 논문에서는 제안된 방식이 MNIST, CelebA, CIFAR-10 데이터셋에 대해 유효함을 보이며 최근에 제안된 likelihood-base model 및 GAN 의 결과와 비교할 만한 sample 을 생성함을 보인다. 특히 CIFAR-10 데이터셋에 대해서는, unconditional 생성 모델에 대한 inception score 8.87 의 값을 얻어 SOTA 를 갱신하고, FID score 25.32 를 얻었다. 마지막으로 image inpainting 을 통해 데이터에 대한 meaningful representation 을 학습함을 보인다.</p>
<h2 id="2-score-based-generative-modeling">2. Score-based generative modeling</h2>
<p>학습에 사용한 데이터셋이 분포 $p_{data}\left(\mathbf{x}\right)$ 을 따르는 i.i.d sample ${\mathbf{x}<em>i\ \in\R^D}</em>{i=1}^N$ 라고 가정하자. 확률 밀도 $p\left(\mathbf{x}\right)$ 에 대한 <em>Score</em> 는 다음과 같이 정의한다.</p>
<p>$$\nabla_\mathbf{x}\log
{p\left(\mathbf{x}\right)}$$</p>
<p>Score network 는 parameter $\theta$에 대해 매개화된 인공 신경망 $s_\mathbf{\theta}:\R^D\rightarrow\R^D$ 이며, $p_{data}\left(\mathbf{x}\right)$ 의 score 를 추정하도록 학습된다. <strong>Modeling 의 목표는 주어진 분포 $\mathbf{p}_{\mathbf{data}}\left(\mathbf{x}\right)$ 로부터 새로운 sample 을 생성하는 모델을 dataset 을 이용해 학습시키는 것이다.</strong> 이와 같이 score 에 기반하는 생성 모델에 대한 프레임워크는 1) score matching 과 2) Langevin dynamics 라는 요소를 가진다.</p>
<p>본문에서, ‘데이터 분포에 대한 밀도가 낮은 영역’ 은 데이터가 적게 분포하는 영역, ‘밀도가 높은 영역’ 은 데이터가 많이 분포하는 영역을 의미한다.</p>
<h3 id="21-score-matching-for-score-estimation">2.1. Score matching for score estimation</h3>
<p>Score matching 은 알 수 없는 데이터 분포 (unknown data distribution) 으로부터 추출된 i.i.d sample 에 의존하는 비 정규화된 통계 모델을 학습시키기 위해 제안된 것이 그 시초이다. 그러나 논문에서는 score matching 을 score estimation 이라는 다른 용도로써 사용한다. Score matching 을 이용해, $p_{data}\left(\mathbf{x}\right)$ 를 추정하는 별도의 모델 없이 score network $s_\mathbf{\theta}\left(\mathbf{x}\right)$ 가 $\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}$ 를 바로 추정하도록 직접적으로 학습시킬 수 있다. 이는 기존에 score matching 이 활용되던 방식과는 다르게, 고차원의 gradient 로 인한 추가적인 연산을 줄이기 위해 EBM 의 gradient 를 score network 로써 사용하지 않는다. 최소화 시키고자 하는 object 는</p>
<p>$$\frac{1}
{2}\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\left|s_\mathbf{\theta}\left(\mathbf{x}\right)-\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}\right|_2^2\right]$$</p>
<p>로, 이는 아래 식과 동치이다. (단, $\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)$ 는 $s_\mathbf{\theta}\left(\mathbf{x}\right)$ 의 야코비 행렬</p>
<p>$$\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\text{tr}\left(\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\right)+\frac{1}
{2}\left|s_\mathbf{\theta}\left(\mathbf{x}\right)\right|_2^2\right]$$</p>
<p>증명은 아래와 같다.</p>
<hr>
<p>$$\frac{1}{2}\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\left|s_\mathbf{\theta}\left(\mathbf{x}\right)-
\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}\right|_2^2\right]$$</p>
<p>을 전개해 보자. 나오는 항들 중</p>
<p>$$
\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}|\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)|_2^2}$$</p>
<p>는 상수이다. 따라서 training object 에서 omit 할 수 있다.</p>
<p>$$
-\frac{1}{2}\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\left|s_\mathbf{\theta}\left(\mathbf{x}\right)\cdot\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}\right|_2^2\right]
$$</p>
<p>항의 경우, integration by parts 에 의해</p>
<p>$$
\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\text{tr}\left(\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\right)\right]
$$</p>
<p>와 동치이다. 여기에</p>
<p>$$
\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\frac{1}{2}\left|s_\mathbf{\theta}\left(\mathbf{x}\right)\right|_2^2\right]
$$</p>
<p>를 더하고 상수 1/2 을 omit 시키면, Training object 는 </p>
<p>$$
\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\text{tr}\left(\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\right)+\frac{1}{2}\left|s_\mathbf{\theta}\left(\mathbf{x}\right)\right|_2^2\right]
$$</p>
<p>와 동치이다.</p>
<hr>
<p>연산 과정에서 $\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}$ 는 데이터셋을 통해 비교적 쉽게 구할 수 있지만, $\text{tr}\left(\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\right)$ 는 구하는 과정에서 문제가 발생하는데, 고차원의 데이터에 대해서 score matching 이 적용되기 어려워진다. 따라서 large scale 에 대한 score matching 을 위한 두 가지 방법에 대해 논의한다.</p>
<h4 id="211-denoising-score-matching--estimates-the-scores-of-perturbed-data">2.1.1. Denoising score matching : estimates the scores of perturbed data</h4>
<p>Denoising score matching 은 trace 를 계산하지 않는 변형된 score matching 이다. 우선, 데이터 point $\mathbf{x}$ 에 사전에 정의된 noise distribution $q_\sigma\left(\tilde{\mathbf{x}}\middle|\mathbf{x}\right)$ 를 이용해 noise 를 추가한다 (perturb). Noise 가 추가된 데이터의 분포 $q_\sigma\left(\tilde{\mathbf{x}}\right)$ 는</p>
<p>$$
\int{q_\sigma\left(\tilde{\mathbf{x}}\middle|\mathbf{x}\right)p_{data}\left(\mathbf{x}\right)d\mathbf{x}}
$$</p>
<p>가 되고, 이에 대해 score matching 을 진행한다. Training object 는 다음과 같이 변형된다.</p>
<p>$$
\frac{1}{2}\mathbb{E}<em>{q_\sigma\left(\tilde{\mathbf{x}}\middle|\mathbf{x}\right)p</em>{data}\left(\mathbf{x}\right)}\left[\left|s_\mathbf{\theta}\left(\tilde{\mathbf{x}}\right)-\nabla_{\tilde{\mathbf{x}}}\log{q_\sigma\left(\tilde{\mathbf{x}}\middle|\mathbf{x}\right)}\right|_2^2\right]$$</p>
<p>식을 전개하고 적분 형태로 변형해 다음 식을 유도할 수 있다.</p>
<p>$$
\frac{1}{2}\mathbb{E}<em>{q_\sigma\left(\tilde{\mathbf{x}}\right)}\left[\left|s_\mathbf{\theta}\left(\tilde{\mathbf{x}}\right)-\nabla</em>{\tilde{\mathbf{x}}}\log{q_\sigma\left(\tilde{\mathbf{x}}\right)}\right|_2^2\right]$$</p>
<p>이는 2.1. 에서 정의한 training object 와 $\nabla_{\tilde{\mathbf{x}}}\log{q_\sigma\left(\tilde{\mathbf{x}}\right)}$ 부분에서 차이가 있다 ($\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}$ 와 다름). 이 때, 위 식을 최소화하는 optimal score network $s_{\mathbf{\theta}^\star}\left(\mathbf{x}\right)$ 는,</p>
<p>$$
s_{\mathbf{\theta}^\star}\left(\mathbf{x}\right)=\nabla_\mathbf{x}\log{q_\sigma\left(\mathbf{x}\right)}$$</p>
<p>를 (대부분의 경우) 만족한다. 두 식의 차이를 없애기 위해서는</p>
<p>$$
q_\sigma\left(\mathbf{x}\right)\simeq p_{data}\left(\mathbf{x}\right)$$</p>
<p>가 만족될 정도로 noise 가 충분히 작아야 한다.</p>
<h4 id="212-sliced-score-matching--estimates-the-scores-of-unperturbed-data">2.1.2. Sliced score matching : estimates the scores of unperturbed data</h4>
<p>Sliced score matching 의 경우 
$\text{tr}\left(\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\right)$ 값을 추정하기 위해 적절한 projection 을 사용한다. Random vector (e.g. multivariate standard normal distribution)의 분포를 $p_\mathbf{v}$ 라고 하면, ($\mathbf{v}$ 에 대한 정사영을 생각해 보면) training object 는</p>
<p>$$
\mathbb{E}<em>{p_\mathbf{v}}\mathbb{E}</em>{p_{data}}\left[\mathbf{v}^T\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\mathbf{v}+\frac{1}{2}\left|s_\mathbf{\theta}\left(\mathbf{x}\right)\right|_2^2\right]$$</p>
<p>와 동치이다. 증명은 다음과 같다.</p>
<hr>
<p>우선,</p>
<p>$$
\mathbb{E}<em>{p_\mathbf{v}}\mathbb{E}</em>{p_{data}}\left[\frac{1}{2}\left|s_\mathbf{\theta}\left(\mathbf{x}\right)\right|<em>2^2\right]\ =\ \mathbb{E}</em>{p_{data}}\left[\frac{1}{2}\left|s_\mathbf{\theta}\left(\mathbf{x}\right)\right|_2^2\right]$$</p>
<p>이다. 또한, </p>
<p>$$
\mathbf{v}^T\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\mathbf{v}=\text{tr}\left(\mathbf{v}^T\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\mathbf{v}\right)=\text{tr}\left(\mathbf{v}\mathbf{v}^T\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\right)$$</p>
<p>가 성립한다. 만약 $\mathbf{v}$가 multivariate standard normal distribution 을 따른다면,</p>
<p>$$
\mathbb{E}<em>{p_\mathbf{v}}\left[\mathbf{v}\mathbf{v}^T\right]=\mathbb{E}</em>{p_\mathbf{v}}\left[\left|\mathbf{v}\right|<em>2^2\right]=\text{Var}</em>{p_\mathbf{v}}[\mathbf{v}]- \mathbb{E}_{p_\mathbf{v}}[\mathbf{v}] = 1$$</p>
<p>이므로 </p>
<p>$$
\mathbb{E}<em>{p_\mathbf{v}}\mathbb{E}</em>{p_{data}}\left[\mathbf{v}^T\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\mathbf{v}\right]=\mathbb{E}<em>{p</em>{data}}\left[\text{tr}\left(\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\right)\right]$$</p>
<p>가 성립한다.</p>
<hr>
<p>$\mathbf{v}^T\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\mathbf{v}$ 항은 forward mode 의 자동 미분을 통해 효율적으로 계산 가능하다. Denoising score matching 이 perturbed 된 data 에 대해 추정을 한다면, sliced score matching 은 unperturbed data 에 대한 score estimation 을 제공한다. 그러나, sliced score matching 은 자동미분 과정으로 인해 denoising score matching 보다 약 4배의 연산이 더 필요하다.</p>
<h3 id="22-sampling-with-langevin-dynamics">2.2. Sampling with Langevin dynamics</h3>
<p>Langevin dynamics 는 score function $\nabla_\mathbf{x}\log{p\left(\mathbf{x}\right)}$ 만을 이용해 확률밀도함수 $p\left(\mathbf{x}\right)$ 로부터 샘플을 생성할 수 있다. $\forall\epsilon&gt;\ 0$, 사전 분포 $\pi$ (e.g. uniform noise) 에 대한 초기값 $\tilde{\mathbf{x}}_0\sim\pi\left(\mathbf{x}\right)$, $\mathbf{z}_t\sim\mathcal{N}\left(0,I\right)$ 에 대해, Langevin method 는 재귀적으로 다음과 같이 값을 계산한다.</p>
<p>$$
\tilde{\mathbf{x}}<em>t=\tilde{\mathbf{x}}</em>{t-1}+\frac{\epsilon}{2}\nabla_\mathbf{x}\log{p\left(\tilde{\mathbf{x}}_{t-1}\right)}+\sqrt\epsilon\mathbf{z}_t$$</p>
<p>$\epsilon\rightarrow0,\ T\ \rightarrow\ \infty$ 일 때 $\tilde{\mathbf{x}}_t\ \sim p\left(\mathbf{x}\right)$ 가 성립한다. 즉 일부 조건 하에, $\tilde{\mathbf{x}}_t$가 $p\left(\mathbf{x}\right)$ 로부터 추출한 sample 이 되는 경우에 해당한다.</p>
<p>$\epsilon&gt;\ 0,\ T\ &lt;\ \infty$ 일 때 위 식의 오차를 보정하기 위해 Metropolis-Hastings update 가 필요하나, 대부분의 경우 실제로는 무시 가능하다. 논문에서는 $\epsilon$ 이 작고 $T$가 큰 경우 오차가 무시 가능하다고 가정한다.</p>
<blockquote>
<p> 2.2.에 나타난 과정을 이용해서 샘플링 하는 과정은 단지 $\nabla_\mathbf{x}\log{p\left(\mathbf{x}\right)}$ 만을 필요로 한다. 따라서 $p_{data}\left(\mathbf{x}\right)$ 로부터 샘플을 얻기 위해서는, 우선 $\mathbf{s}<em>\mathbf{\theta}\left(\mathbf{x}\right)\simeq \mathbf{\nabla}_\mathbf{x}\log{p</em>{data}\left(\mathbf{x}\right)}$ 를 만족하는 score network 를 학습시키고, 두 번째로 Langevin dynamics 를 이용해 $\mathbf{s}_\mathbf{\theta}\left(\mathbf{x}\right)$ 로부터 유사하게 sampling 을 진행한다. </p>
</blockquote>
<p>이것이 논문에서 제안한 <em>score-based generative modeling</em> 프레임워크의 핵심 아이디어이다.</p>
<h2 id="3-challenges-of-score-based-generative-modeling">3. Challenges of score-based generative modeling</h2>
<p>3절에서는 2절에서 소개한 아이디어를 보다 구체적으로 분석한다. 이 아이디어를 적용하는 데 있어서, 2개의 제약점이 있다는 것을 밝힌다.</p>
<h3 id="31-the-manifold-hypothesis">3.1. The manifold hypothesis</h3>
<p>Manifold hypothesis 는 실세계의 데이터가 고차원 공간 (ambient space)에 내장된 낮은 차원의 manifold 에 존재한다는 점을 나타낸다. 이 가설은 여러 데이터셋에 대해 경험적으로 성립하며, manifold learning 의 시초가 되었다. Manifold hypothesis 하에, 논문에서 제안한 score-based generative model 은 2가지 문제점을 마주친다. 1) 정의한 score $\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}$ 는 ambient space 에서 계산된 gradient 이므로, 만약 $\mathbf{x}$가 낮은 차원의 manifold 에 존재한다면 gradient 가 정의되지 않는다. 2) 식</p>
<p>$$
\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\text{tr}\left(\nabla_\mathbf{x}s_\mathbf{\theta}\left(\mathbf{x}\right)\right)+\frac{1}{2}\left|s_\mathbf{\theta}\left(\mathbf{x}\right)\right|_2^2\right]$$</p>
<p>은 데이터가 전체 공간에 분포할 때만 적절한 score estimator 를 제공하며, 데이터가 낮은 차원에 밀집해 있는 경우 올바르지 않은 score estimating 이 일어난다.</p>
<p>Figure 1. 에서 manifold hypothesis 가 score estimation 에 가져다주는 악영향을 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/9a1844cc-9986-4f45-97c1-25c2276bbca6/image.png" alt=""></p>
<center>Figure 1. SSM (Sliced score matching) loss with respect to iterations. <br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>


<p>Figure 1. 은 CIFAR-10 에 대한 score 를 추정하기 위해 ResNet 을 학습시키는 과정을 나타낸다. Left figure 는 데이터에 noise 가 추가되지 않은 경우, right figure 는 데이터에 $\mathcal{N}\left(0,{0.01}^2\right)$ 을 따르는 noise 가 추가된 경우를 나타낸다.Score matching 의 경우 Sliced score matching 을 사용하였다. Left side 의 경우 loss 가 처음에는 감소하지만 이후 불규칙하게 증가와 감소를 반복하며, Right side 처럼 작은 gaussian noise 를 데이터에 추가한 경우 loss 는 점점 작은 값으로 수렴한다. 여기서 추가한 noise 는 $\mathcal{N}\left(0,{0.01}^2\right)$ 를 따르는 값으로 인간의 눈으로는 구분이 불가능 할 정도이며, [0, 1]의 픽셀값을 가지는 이미지 기준으로도 매우 작은 값이다.</p>
<h3 id="32-low-data-density-regions">3.2. Low data density regions</h3>
<p>데이터 밀도가 낮은 영역에서의 데이터가 희소한 점은, score matching 을 통한 score estimation 과정과 Langevin dynamic 을 이용한 sampling 과정에 어려움을 야기한다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/4697e4a0-dcdf-49fc-9a76-c27f54857cd9/image.png" alt=""></p>
<center>Estimated scores are only accurate in high density regions. <br>
Figure source : Yang Song, “Generative Modeling by Estimating Gradients of the Data Distribution”, 
2021.05.05, <a herf="https://yang-song.net/blog/2021/score/">https://yang-song.net/blog/2021/score/</a></center>

<br> 

<h3 id="321-inaccurate-score-estimation-with-score-matching">3.2.1. Inaccurate score estimation with score matching</h3>
<p>데이터 밀도가 낮은 영역의 경우, data sample 의 수가 부족하므로 score matching 이 score 를 정확하게 estimate 를 하지 못한다. Score matching 을 통해</p>
<p>$$
\frac{1}{2}\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\left[\left|s_\mathbf{\theta}\left(\mathbf{x}\right)-\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}\right|_2^2\right]$$</p>
<p>의 값을 최소화 하고자 함을 다시 생각해 보자 (2.1. 절 참고). 실제 과정에서는 $p_{data}\left(\mathbf{x}\right)$ 로부터 추출된 i.i.d sample ${\mathbf{x}<em>i}</em>{i=1}^N$ 을 이용해 기댓값을 추정한다. 그렇다면 다음과 같은 영역 $\mathcal{R}\in\mathbf{R}^D$ 를 고려해 보자.</p>
<p>$$
\mathcal{R}\in\mathbf{R}^D;;\mathrm{s.t.};;;p_{data}\left(\mathcal{R}\right)\simeq0$$</p>
<p>대부분의 경우, </p>
<p>$$
{\mathbf{x}<em>i}</em>{i=1}^N\cap\mathcal{R}=\phi$$</p>
<p>이며, score matching 을 통해 $\mathbf{x}\in\mathcal{R}$ 에 대한 $\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}$ 의 값을 추정하기에는 데이터 sample 이 충분하지 않다.</p>
<p>이러한 문제점을 증명하기 위해, Toy experiment 를 시행하였다. 이 실험에서 데이터의 분포 $p_{data}$ 는 mixture of Gaussian 으로 두었다.</p>
<p>$$
p_{data}=\frac{1}{5}\mathcal{N}\left(\left(-5,-5\right),I\right)+\frac{4}{5}\mathcal{N}\left(\left(5,5\right),I\right)$$</p>
<p>우선 $p_{data}\left(\mathbf{x}\right)$ 에 대한 score function 과 density function 을 도시하면 아래 Figure 와 같다. </p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/a003f338-e88b-488d-aff3-f63b6f305517/image.png" alt=""></p>
<center>Figure source : Yang Song, “Generative Modeling by Estimating Gradients of the Data Distribution”, 
2021.05.05, <a herf="https://yang-song.net/blog/2021/score/">https://yang-song.net/blog/2021/score/</a> </center>

<br>

<p>Toy experiment 의 결과는 Figure 2. 와 같다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/4f19b575-f7f3-46cd-9485-a3f78591b211/image.png" alt=""></p>
<center>Figure 2. Result of Toy experiment.<br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>

<p>Figure 2. 에서, 주황색 부분은 $p_{data}$의 분포를 나타낸다. 어두운 영역은 데이터의 밀도가 높은 부분을 나타내며, 빨간색 점선 테두리의 직사각형은 $\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}\simeq s_\mathbf{\theta}\left(\mathbf{x}\right)$ 가 성립하는 부분을 나타낸다. Left figures 는  $\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}$ 를 도시한 결과이며, right figure 는 $s_\mathbf{\theta}\left(\mathbf{x}\right)$ 를 도시한 결과이다. Figure 2. 에서 나타나듯이, 데이터 밀도가 높은 영역, 즉 $p_{data}$ 의 최빈값과 근접한 부분에서만 score estimation 이 정확 (reliable) 하다.</p>
<h3 id="322-slow-mixing-of-langevin-dynamics">3.2.2. Slow mixing of Langevin dynamics</h3>
<p>데이터 분포의 두 최빈값이 밀도가 데이터 낮은 영역에 의해 분리될 경우, Langevin dynamics 는 두 최빈값에 대한 상대적인 가중치를 적절한 시간 내에 산출하지 못하며, 결과적으로 sampling 의 결과가 true distribution 으로 수렴하지 못한다.</p>
<p>결합 분포 $p_{data}\left(\mathbf{x}\right)=\pi p_1\left(\mathbf{x}\right)+\left(1-\pi\right)p_2\left(\mathbf{x}\right)$ 를 생각해 보자. $\pi\in\left(0,1\right)$ 이고, $p_1\left(\mathbf{x}\right)$와 $p_2\left(\mathbf{x}\right)$는 disjoint support 를 가지는 정규화된 분포이다. Support $p_1\left(\mathbf{x}\right)$ 만을 고려할 경우,</p>
<p>$$
\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}=\nabla_x\left(\log{\pi}+\log{p_1\left(\mathbf{x}\right)}\right)$$</p>
<p>가 성립하고, support $p_2\left(\mathbf{x}\right)$ 만을 고려할 경우,</p>
<p>$$
\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}=\nabla_x\left(\log{\left(1-\pi\right)}+\log{p_2\left(\mathbf{x}\right)}\right)$$</p>
<p>가 성립한다. 두 경우 모두, score $\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}$ 는 $\pi$에 의존하지 않는다. 2.2. 절에 나와 있듯, Langevin dynamic 은 $p_{data}\left(\mathbf{x}\right)$ 로부터 sampling 을 위해 $\nabla_\mathbf{x}\log{p_{data}\left(\mathbf{x}\right)}$ 를 필요로 하므로, 얻어진 sample 들 역시 $\pi$에 의존하지 않는다. 실제로는, 서로 다른 최빈값이 approximately disjoint support 를 가지더라도 이러한 분석이 성립한다. 이 경우 이론적으로는 Langevin dynamic 을 통해 올바른 sample 을 생성할 수 있지만, mixing 을 위해서는 매우 작은 step size와 많은 step 이 필요하다.</p>
<p>이 분석이 타당함을 보이기 위해, 논문에서는 3.2.1.절에서 사용한 mixture of Gaussian 과 동일한 분포에 대해 Langevin dynamics 를 적용해 sampling 을 수행하며, 그 결과는 Figure 3. 와 같다. Figure 3. (b) 는 3.2.2. 에서 설명하고 있는 경우인 “데이터 분포의 두 최빈값이 밀도가 데이터 낮은 영역에 의해 분리될 경우” 에 해당하며, (a) 와 비교해 보았을 때 분석에 의한 결과와 동일하게 Langevin dynamics 가 두 최빈값의 밀도를 잘못 추정함을 알 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/ce6a51b9-9808-44ea-aa6f-92cfcb848163/image.png" alt=""></p>
<center>Figure 3.     Mixture of Gaussian 으로부터의 sampling. 3가지의 서로 다른 방법을 사용하였다. (a) 분포로부터 직접적인 sampling (b) Langevin dynamics 를 이용한 sampling (c) annealed Langevin dynamics 를 이용한 sampling. (b) 의 결과로부터, 데이터 분포의 두 최빈값으로부터 상대적인 weight 를 잘못 추정함을 볼 수 있다. (c) 의 경우, 앞서 소개된 Langevin dynamics 의 annealed version 을 이용한 것으로 weight 를 올바르게 추정함을 볼 수 있다.<br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>


<br>

<h2 id="4-noise-conditional-score-networks--learning-and-inference">4. Noise Conditional Score Networks : learning and inference</h2>
<p>데이터를 random Gaussian noise 를 이용해 perturb 시키는 것이 데이터 분포가 score-based gradient modeling 을 잘 따르게 함을 확인하였다. 첫 번째로, Gaussian noise 분포의 support (지지집합)은 (모든 차원을 포함하는) 전체 공간이므로, perturb 된 데이터 분포의 경우 낮은 차원의 공간에만 국한되어 있지 않고, 이는 3.1. 에 제시된 manifold hypothesis 로부터 발생되는 문제점을 방지하고 score estimation 이 잘 일어날 수 있게 한다. 두 번째로, 큰 gaussian noise 는 원래의 (unperturbed) 데이터 분포에 대해 밀도가 낮은 영역을 채워주는 효과가 있고, 따라서 score estimation 이 더욱 정확해 진다. 더 나아가, 여러 noise level 을 사용함으로써 true data distribution 에 수렴하는 noise-perturbed distribution 의 집합을 얻을 수 있다. 이렇게 모인 distribution 과 simulated annealing, annealed importance sampling 을 사용해 다봉분포에 대한 Langevin dynamics 의 mixing rate 를 증가시킬 수 있다.</p>
<p>위 내용에 기반해, 논문에서는 score-based generative modeling 을 다음과 같은 방법을 이용해 발전시키고자 한다. 1) 다양한 level 의 noise 를 통한 data perturbing 2) 단일 conditional score network 학습을 통해, 모든 noise level 에 대응되는 score 를 동시에 추정하는 것. 학습이 끝난 후 샘플링을 위해 Langevin dynamics 를 사용할 때 가장 큰 noise 에 대한 score 를 초기값으로 사용하고, noise level 을 점차 감소시킨다. 이는 perturbed 된 데이터가 원본 데이터와 거의 구분될 수 없을 정도의 수준으로 noise level 을 낮추는 데 있어서 높은 noise level 의 이점을 유연하게 전달해준다. 지금부터는 score network 의 구조, training object, 그리고 Langevin dynamics 의 annealing 에 대해 보다 구체적으로 설명한다.</p>
<h3 id="41-noise-conditional-score-networks">4.1. Noise Conditional Score Networks</h3>
<p>${\sigma_i}_{i=1}^L$ 을 </p>
<p>$$
\frac{\sigma_1}{\sigma_2}=\cdots=\frac{\sigma_{L-1}}{\sigma_L}&gt;1$$</p>
<p>을 만족하는 양의 기하급수라고 하자. Perturbed data distribution 을 나타내는 $q_\sigma\left(\mathbf{x}\right)$ 를 다음과 같이 정의하자.</p>
<p>$$
q_\sigma\left(\mathbf{x}\right)=\int{p_{data}\left(\mathbf{t}\right)\mathcal{N}\left(\mathbf{x}\middle|\mathbf{t},\sigma^2I\right)d\mathbf{t}}$$</p>
<p>Noise levels  ${\sigma_i}_{i=1}^L$ 은 다음과 같이 선택한다.</p>
<p>  $\sigma_1$ : 3. 에 제시된 문제점들을 완화시키기에 충분히 큰 값
  $\sigma_L$ : data 에 미치는 영향을 최소화하는 충분히 작은 값</p>
<p>모든 perturbed data 분포에 대한 score 를 공동으로 추정하게끔 Noise Conditional Score Network (NCSN) $s_\mathbf{\theta}$ 를 학습시킨다. 즉,</p>
<p>$$
\forall\sigma\in{\sigma_i}_{i=1}^L:s_\mathbf{\theta}\left(\mathbf{x},\sigma\right)\simeq\nabla_\mathbf{x}\log{q_\sigma\left(\mathbf{x}\right)}$$</p>
<p>가 성립하게끔 학습을 진행한다. $\mathbf{x}\in\mathbf{R}^D$ 일 때 $s_\mathbf{\theta}\left(\mathbf{x},\sigma\right)\in\mathbf{R}^D$ 이다.</p>
<p>Likelihood 에 기반한 생성 모델 및 GAN 과 유사하게, 좋은 품질의 sample 을 생성에 있어서 모델 구조 설계는 매우 중요하다. 이 연구에서는 이미지 생성에 유용한 구조에 주로 집중하며, 다른 응용 분야에 적용될 수 있는 구조들은 후속 연구로 남겨둔다. NCSN 의 출력값이 입력되는 이미지 $\mathbf{x}$ 와 동일한 shape 를 가지므로, 이미지의 dense prediction (e.g. 의미론적 분할) 에서 좋은 결과를 나타낸 모델 구조를 참고한다. 구현의 경우 U-Net 의 구조와 dilated/atrous convolution 의 구조를 결합한 모델을 사용한다. 더 나아가, NCSN 에 $\sigma_i$ 에 대한 conditioning 을 위해 변형된 conditional instance normalization 을 적용한다.</p>
<h3 id="42-learning-ncsns-via-score-matching">4.2. Learning NCSNs via score matching</h3>
<p>NCSN 학습을 위해, 2.1. 에 소개된 sliced score matching 과 denoising score matching 모두를 사용할 수 있다. 논문에서는 더 빠르고 noise로 perturbed 된 데이터 분포에 대해 score 를 추정하는 denoising score matching 을 사용한다. 그러나, 실험적으로 봤을 때 sliced score matching 역시 denoising score matching 만큼 NCSN 을 잘 학습시킬 수 있다. Noise 의 분포가</p>
<p>$$
q\left(\tilde{\mathbf{x}}\middle|\mathbf{x}\right)=\mathcal{N}\left(\tilde{\mathbf{x}}\middle|\mathbf{x},\sigma^2I\right)$$</p>
<p>이 되게끔 하고, 따라서,</p>
<p>$$
\nabla_\mathbf{x}\log{q\left(\tilde{\mathbf{x}}\middle|\mathbf{x}\right)}=\frac{\tilde{\mathbf{x}}-\mathbf{x}}{\sigma^2}$$</p>
<p>가 성립한다. 주어진 $\sigma$에 대한 score matching object 는, 2.1. 절에서 유도한 바와 같이</p>
<p>$$
l\left(\mathbf{\theta};\sigma\right)=\frac{1}{2}\mathbb{E}<em>{p</em>{data}\left(\mathbf{x}\right)}\mathbb{E}_{\tilde{\mathbf{x}}\sim\mathcal{N}\left(\mathbf{x},\sigma^2I\right)}\left[\left|s_\mathbf{\theta}\left(\tilde{\mathbf{x}},\ \sigma\right)+\frac{\tilde{\mathbf{x}}-\mathbf{x}}{\sigma^2}\right|_2^2\right]$$</p>
<p>위 식을 $\forall\sigma\in{\sigma_i}_{i=1}^L$ 에 대해 결합해 하나로 통일된 object 를 유도하면</p>
<p>$$
\mathcal{L}\left(\mathbf{\theta};{\sigma_i}<em>{i=1}^L\right)=\frac{1}{L}\sum</em>{i=1}^{L}\lambda\left(\sigma_i\right)l\left(\mathbf{\theta};\sigma_i\right)$$</p>
<p>여기서 $\lambda\left(\sigma_i\right)$ 는 양의 값으로 $\sigma_i$ 에 의존하는 계수 함수이다. $s_\mathbf{\theta}\left(\mathbf{x},\ \sigma\right)$ 의 capacity 가 충분히 크다고 가정하면, $\mathbf{s}<em>{\mathbf{\theta}^\star}\left(\mathbf{x},\ \mathbf{\sigma}\right)$ 가 $\mathbf{L}\left(\mathbf{\theta};{\mathbf{\sigma}_\mathbf{i}}</em>{\mathbf{i}=\mathbf{1}}^\mathbf{L}\right)$ 을 최소화 시키는 필요충분조건은 $\forall\mathbf{i}\ \in{\mathbf{1},\ \mathbf{2},\ \cdots,\ \mathbf{L}}$ 에 대해 </p>
<p>$$
\mathbf{s}<em>{\mathbf{\theta}^\star}\left(\mathbf{x},\ \mathbf{\sigma}_\mathbf{i}\right)\ =\ \mathbf{\nabla}_\mathbf{x}\log{q</em>{\sigma_i}\left(\mathbf{x}\right)}$$</p>
<p>를 만족하는 것이다.</p>
<p>함수 $\lambda$ 에는 다양한 선택지가 있다. 이상적인 경우는 모든 ${\sigma_i}_{i=1}^L$ 에 대해 $\lambda\left(\sigma_i\right)l\left(\mathbf{\theta};\sigma_i\right)$ 가 (대략적으로) 같은 크기를 가지는 것이다. 실험적으로 봤을 때 학습을 통해 score network 를 최적화 시킨 경우 근사적으로</p>
<p>$$
\left|s_\mathbf{\theta}\left(\mathbf{x},\ \sigma_i\right)\right|_2\propto\frac{1}{\sigma}$$</p>
<p>가 성립한다. 이로부터, $\lambda\left(\sigma_i\right)l\left(\mathbf{\theta};\sigma_i\right)$ 가 $\sigma$에 의존하지 않게 하기 위해서는</p>
<p>$$
\lambda\left(\sigma\right)=\sigma^2$$</p>
<p>로 두어야 함을 알 수 있다. 왜냐하면 이 경우</p>
<p>$$
\lambda\left(\sigma_i\right)l\left(\mathbf{\theta};\sigma_i\right)\ \ =\ \sigma^2\ l\left(\mathbf{\theta};\sigma_i\right)\ \ =\frac{1}{2}\mathbb{E}<em>{p</em>{data}} \left(\mathbf{x}\right)\mathbb{E}_{\tilde{\mathbf{x}}\sim N\left(\mathbf{x},\sigma^2I\right)}\left[\left|\sigma s_\mathbf{\theta}\left(\tilde{\mathbf{x}},\ \sigma\right)+\frac{\tilde{\mathbf{x}}-\mathbf{x}}{\sigma}\right|_2^2\right]$$</p>
<p>가 성립하고, </p>
<p>$$
\left|\sigma s_\mathbf{\theta}\left(\tilde{\mathbf{x}},\ \sigma\right)\right|\propto1,;\frac{\tilde{\mathbf{x}}-\mathbf{x}}{\sigma}\sim\mathcal{N}\left(0,I\right)$$</p>
<p>이므로 $\lambda\left(\sigma_i\right)l\left(\mathbf{\theta};\sigma_i\right)$ 의 값이 $\sigma$에 의존하지 않는다.</p>
<p>논문에서는 training object $\mathcal{L}\left(\mathbf{\theta};{\sigma_i}<em>{i=1}^L\right)$ 가 1) adversarial training 을 필요로 하지 않고 2) surrogate loss 을 사용하지 않으며 3) training 과정에서 sampling 이 필요하지 않음을 강조한다. 또한, $s_\mathbf{\theta}\left(\mathbf{x},\ \sigma\right)$ 가 tractable 해지기 위해 특별한 구조를 필요로 하지 않는다. 추가적으로, $\lambda$ 와 ${\sigma_i}</em>{i=1}^L$ 가 고정되어 있는 경우 서로 다른 NCSN 들을 정량적으로 비교하는 데에도 사용할 수 있다.</p>
<h3 id="43-ncsn-inference-via-annealed-langevin-dynamics">4.3. NCSN inference via annealed Langevin dynamics</h3>
<p>NCSN $s_\mathbf{\theta}\left(\mathbf{x},\ \sigma\right)$ 을 학습시킨 후, annealed Langevin dynamics 라는 sampling 기법을 적용한다. Algorithm 은 아래와 같다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/b9f1a2a9-4b27-4009-b42c-297728073448/image.png" alt=""></p>
<center>Algorithm for annealed Langevin dynamics.<br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>

<p>사전에 정의된 분포 (e.g. uniform noise) 로부터 초기 sample $\tilde{\mathbf{x}<em>0}$을 얻는다. 이후 재귀적으로 sampling 을 진행하는데, $q</em>{\sigma_{i-1}}\left(\mathbf{x}\right)$ 를 초기 sample 로 하는 Langevin dynamics 를 이용해 $q_{\sigma_i}\left(\mathbf{x}\right)$ 를 얻는다 (총 $T$번 sampling). Noise level 이 감소할수록, step size $\alpha_i$ 역시 감소시킨다. 최종적으로, $q_{\sigma_L}\left(\mathbf{x}\right)$ 로부터 Langevin dynamics 를 이용해 $\sigma_L\simeq0$ 일 때 $p_{data}\left(\mathbf{x}\right)$ 와 가까운 sample 을 얻는다.</p>
<p>모든 분포 ${q_{\sigma_i}}<em>{i=1}^L$ 가 Gaussian noise 에 의해 perturb 되었으므로, 각각의 지지집합은 전체 (실수) 공간을 형성하며, manifold hypothesis 에서 발생하는 문제점을 방지해 score 가 잘 정의된다. $\sigma_1$ 이 충분히 크다면, 분포 $q</em>{\sigma_1}\left(\mathbf{x}\right)$ 의 밀도가 낮은 부분이 줄어들고, 최빈값은 비교적 가까워지게 된다 (less isolated). 이전에 논의된 바와 같이, 이러한 특징은 더욱 정확한 score estimate 를 가능하게 해 주며, mixing process 를 빠르게 해 준다. 따라서 Langevin dynamics 가 $q_{\sigma_1}\left(\mathbf{x}\right)$에 대한 좋은 sample 을 생성함을 알 수 있다. 이 때 생성된 sample 들은 분포 $q_{\sigma_1}\left(\mathbf{x}\right)$의 밀도가 높은 영역에서 추출되었을 가능성이 높으며, 이는 분포 $q_{\sigma_2}\left(\mathbf{x}\right)$에 대해서도 밀도가 높은 영역에 속할 가능성이 높음을 의미한다. Score estimation 과 Langevin dynamics 는 데이터 밀도가 높은 영역에서 더 좋은 결과를 만들어 내므로, $q_{\sigma_1}\left(\mathbf{x}\right)$으로부터 얻은 sample 은 $q_{\sigma_2}\left(\mathbf{x}\right)$에 대해 좋은 initial sample 로써 작용한다. 이러한 과정이 반복되어, $q_{\sigma_{i-1}}\left(\mathbf{x}\right)$은 $q_{\sigma_i}\left(\mathbf{x}\right)$를 얻기 위한 좋은 initial sample 이 되며, 결과적으로 $q_{\sigma_L}\left(\mathbf{x}\right)$ 으로부터 높은 quality 의 sample 을 얻을 수 있다.</p>
<p>Step size $\alpha_i$ 를 정하는 데에는 여러 가지 방법이 있다. 논문에서는 Langevin dynamics 의 SNR (Signal-to-Noise Ratio) 을 고정시켜 주기 위해 다음과 같이</p>
<p>$$
\alpha_i\propto\sigma_i^2
$$</p>
<p>설정하였다. 증명은 아래와 같다.</p>
<hr>
<p>우선, SNR 은 다음과 같이 정의된다.</p>
<p>$$
\mathrm{SNR}=\frac{\alpha_is_\mathbf{\theta}\left(\mathbf{x},\sigma_i\right)}{2\sqrt{\alpha_i}\mathbf{z}}$$</p>
<p>$$
\mathbf{z}\sim\mathcal{N}\left(0,I\right)$$</p>
<p>이 때, </p>
<p>$$
\mathbb{E}\left[\left|\mathrm{SNR}\right|_2^2\right]=\mathbb{E}\left[\left|\frac{\alpha_is_\mathbf{\theta}\left(\mathbf{x},\sigma_i\right)}{2\sqrt{\alpha_i}\mathbf{z}}\right|_2^2\right]\simeq\mathbb{E}\left[\frac{\alpha_i\left|s_\mathbf{\theta}\left(\mathbf{x},\sigma_i\right)\right|_2^2}{4}\right]$$</p>
<p>여기서 $\alpha_i\propto\sigma_i^2$ 를 대입하면</p>
<p>$$
\mathbb{E}\left[\left|\mathrm{SNR}\right|_2^2\right]\propto\frac{1}{4}\mathbb{E}\left[\left|\sigma_is_\mathbf{\theta}\left(\mathbf{x},\sigma_i\right)\right|_2^2\right]$$</p>
<p>이 때 4.2. 절에 기술된 것 처럼 score network 를 최적화 시킨 경우 근사적으로</p>
<p>$$
\left|s_\mathbf{\theta}\left(\mathbf{x},\ \sigma_i\right)\right|_2\propto\frac{1}{\sigma}$$</p>
<p>가 성립함을 발견하였으므로, 결과적으로</p>
<p>$$
\mathbb{E}\left[\left|\mathrm{SNR}\right|_2^2\right]\propto\frac{1}{4}$$</p>
<p>가 성립한다. 즉 SNR 은 $\sigma_i$ 에 의존하지 않는 상수가 되는 것이다.</p>
<hr>
<p>Annealed Langevin dynamics 의 타당성을 입증하기 위해, Toy example 실험을 시행하였다. ${\sigma_i}<em>{i=1}^L$ 는 기하급수로 정의하였으며, $L=10$, $\sigma_1=10$, $\sigma</em>{10}=0.1$ 로 두었다. 자세한 내용과 분석 결과는 Figure 3. 에 기재되어 있다.</p>
<blockquote>
<p>요약하자면, score network 가 주어진 noise level $\sigma_i$ 에 대해 perturbed data 의 log-density 가 가장 빠르게 증가하는 방향 ($\nabla_\mathbf{x}\log{q_{\sigma_i}\left(\mathbf{x}\right)}$) 을 가리키게끔 학습된다. Sampling 과정에서는 이전 noise level 에서의 결과를 score network 가 가리키는 방향 (즉 원본 데이터 분포에 가까워지는 방향) 으로 이동시키고 noise $(z_t)$ 를 추가하면서 sampling 을 진행한다. 하나의 noise level 에 대해 sampling 은 총 $T$번 진행된다. </p>
</blockquote>
<br>

<h2 id="5-experiments">5. Experiments</h2>
<p>5절에서는 NCSN 이 자주 사용되는 주요 이미지 dataset 에 대해 높은 품질의 sample 을 생성함을 보인다. 더 나아가, image inpainting 을 통해 NCSN 이 image 에 대한 적절한 representation 을 학습함을 보인다.</p>
<h3 id="51-setup">5.1. Setup</h3>
<p>데이터셋으로는 MNIST, CelebA, CIFAR-10 을 사용한다. 모든 이미지들의 픽셀값은 [0, 1] 로 scaling 되었다. CelebA의 경우 중심부를 $140\ \times140$ size 로 잘라낸 후 $32\ \times32$ 로 resize 되었다. ${\sigma_i}<em>{i=1}^L$ 은 기하급수로 정의되었으며 $\sigma_1=1, \sigma</em>{10}=0.01, L=10$ 으로 두었다. $\sigma=0.01$인 Gaussian noise 는 인간의 눈으로는 거의 구분 불가능하다는 점을 참고하자. Annealed Langevin dynamics 에서는 $T=100$, $\epsilon=2\times{10}^{-5}$, 사전에 정의된 noise 분포로는 균등 분포(uniform) 를 사용하였다.</p>
<h3 id="52-image-generation">5.2. Image generation</h3>
<p>Figure 5. 는 각각 MNIST, CelebA, CIFAR-10 에 대해 annealed Langevin dynamics 를 통해 sampling 된 결과를 보여준다. Figure 5. 에서 볼 수 있듯이, NCSN 을 통해 생성된 이미지들은 최신 연구들에서 제안된 likelihood-based model 또는 GAN 보다 품질이 더 높거나 비교할 만하다. Intermediate sample 의 경우 Figure 4. 에 나타나 있다. 각 행은 각각의 sample 이 random noise 로부터 어떻게 생성되는지 그 과정을 나타낸다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/1f62c7a5-b663-4707-bfd5-540428597949/image.png" alt=""></p>
<center>Figure 4. Annealed Langevin dynamics 의 intermediate sample. <br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>


<br>

<p><img src="https://velog.velcdn.com/images/philiplee_235/post/6ceed78b-314a-4568-9339-f7fb272ee58e/image.png" alt=""></p>
<center>Figure 5. Sampling result from NSCN (a) MNIST (b) CelebA (c) CIFAR-10<br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>

<br>

<p>여러 noise level 에 대한 conditional score network 와 annealed Langevin dynamics 의 중요성을 시험해 보기 위해, baseline 모델과 NSCN의 결과를 비교한다. Baseline 모델은 하나의 noise level ($\sigma_1=0.01$) 만을 사용하며, Langevin dynamics 를 annealed version 이 아닌 vanilla version 을 사용한다. 비교 결과는 Figure 7. 에 나타나 있다. Baseline model 의 경우 제대로 된 sample 을 생성하지 못함을 확인할 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/77e58f9e-054b-426f-8d59-99ea334d8420/image.png" alt=""></p>
<center>Figure 7. Sampling result from baseline model (a) MNIST (b) CelebA (c) CIFAR-10<br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>

<br>

<p>정량적인 비교를 위해, CIFAR-10 데이터셋에 대한 inception score 와 FID score 를 Table 1. 에 나타내었다. 논문에서 제안한 NSCN 은 inception score 8.87 을 달성하였으며 Unconditional model 에 대한 SOTA 를 갱신한다. </p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/832db14e-ca55-46a1-97cf-b93d2830bc17/image.png" alt=""></p>
<center>Table 1. Inception score and FID score of various models on CIFAR-10 dataset<br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>


<p>MNIST 와 CelebA 에 대한 score 는 잘 알려지지 않았기에 생략하였다. 또한 CelebA 의 경우 다양한 전처리 과정 (논문의 경우 center crop) 을 적용할 수 있기에 절대적인 수치를 이용해 비교하는 데 어려움이 있다.</p>
<h3 id="53-image-inpainting">5.3. Image inpainting</h3>
<p>Figure 6. 에서, NCSN 이 일반적이고 의미론적인 이미지의 표현 (representation) 을 학습해 image inpainting 을 가능하게 함을 보인다. PixelCNN 과 같은 이전 모델들의 경우, raster scan  을 따라서만 이미지를 색칠할 수 있다. 이와 달리, NCSN은 annealed Langevin dynamics 에 약간의 변형을 가하면 임의의 모양으로 지워진 (occluded) 이미지를 처리할 수 있다. </p>
<p><img src="https://velog.velcdn.com/images/philiplee_235/post/7fcca054-212e-47ee-8917-b97825fe1564/image.png" alt=""></p>
<center>Figure 6. Image inpainting using NSCN (a) CelebA (b) CIFAR-10. <br>각 dataset 에 대한 이미지 중 가장 오른쪽 열이 원본 이미지를 나타낸다.<br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a>
</center>

<p><img src="https://velog.velcdn.com/images/philiplee_235/post/0fed38ff-0ab8-42d0-8263-c33feb2a6ac1/image.png" alt=""></p>
<center>Algorithm for image inpainting. <br> Source : <a herf = "https://arxiv.org/abs/1907.05600">Song & Ermon. (2019)</a></center>

<br>

<h2 id="reference">Reference</h2>
<p>[1] Yang Song and Stefano Ermon. Generative Modeling by Estimating Gradients of the Data Distribution. <a href="https://arxiv.org/abs/1907.05600">arXiv:1907.05600</a>, 2019.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Convolutional Neural Networks]]></title>
            <link>https://velog.io/@philiplee_235/Convolutional-Neural-Networks</link>
            <guid>https://velog.io/@philiplee_235/Convolutional-Neural-Networks</guid>
            <pubDate>Thu, 29 Dec 2022 14:17:29 GMT</pubDate>
            <description><![CDATA[<p>이 자료는 인공지능 교육 비영리단체 OUTTA 에서 출판한 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》 를 바탕으로 제작되었습니다. </p>
<p>Remnote 자료는 <a href="https://www.remnote.com/a/-ml-dl-2-5-cnn-/6353acb8dbe54f4b4944f391">링크</a>를 통해 확인하실 수 있습니다.</p>
<p>Made by <a href="https://github.com/frogyunmax"><em>Hyunsoo Lee</em></a> (SNU Dept. of Electrical and Computer Engineering, Leader of Mentor Team for 2022 Spring Semester)</p>
<hr>
<h2 id="51-컴퓨터가-이미지를-인식하는-방식">5.1. 컴퓨터가 이미지를 인식하는 방식</h2>
<h3 id="511-비트맵-이미지">5.1.1. 비트맵 이미지</h3>
<ul>
<li><p>각 위치의 픽셀들이 어떤 색상 정보를 담고 있는지 저장</p>
</li>
<li><p>흑백 이미지의 경우?</p>
<ul>
<li><p>검은색 0, 흰색 255를 기준으로 정도를 표현</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/Vg75RFu7stf0ql-o4FCZJ5MfelPRuJd4nxdIdK69uwtNp3nJyK0KguZZLqKA2Kn27T-XUAQJliq_sHkTUozlxtT5XhESSN9TLeeBwfsl-UofLWkd5wfbja1XRi-Bm58s.png" width="150"></p>
</li>
</ul>
</li>
<li><p>이미지가 흑백이 아닌 경우?</p>
<ul>
<li><p><strong>빛의 3원색</strong> (R, G, B) 이용</p>
</li>
<li><p>이미지가 흑백이 아닌 경우, 색을 만들어내는 데 빛의 삼원색(빨강, 초록, 파랑)을 얼마나 합성시켜야 하는지를 나타내면 된다. 각각의 색이 합성되는 정도를 표현할 때, 합성되지 않음을 0으로, 최대한으로 합성됨을 255로 나타낸다.</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/eCc7LMAYSmAxjF_pmq1A-3RomjdwCWPvvbt5YE6DJ8oYmhb5aTbbhCk7SNmKN4VAgBaanI7E5BZsvwl2oGBj8CY87zVuBRWdKxGM0h6gGV7myJV9fdNiq1V6nksNKYkM.png" width="170"></p>
</li>
</ul>
</li>
<li><p>채널</p>
<ul>
<li><p>이미지를 구성하는 요소, <strong>색상과 같은 의미</strong> (R/G/B 채널)</p>
</li>
<li><p>이미지 픽셀을 입력으로 받아, 출력으로 픽셀을 내보내는 사상 (Mapping)</p>
</li>
<li><p>이미지로부터 <strong>추출할 수 있는 어떠한 정보를 격자 형태로 배열해둔 것</strong> </p>
</li>
</ul>
</li>
</ul>
<br>

<h3 id="512-벡터-이미지">5.1.2. 벡터 이미지</h3>
<ul>
<li>점들을 연결하여 선을 만들고, 선들을 연결하여 면을 형성되는 정보 자체를 저장하는 방식</li>
</ul>
<br>

<h2 id="52-밀집-신경망에서-cnn으로">5.2. 밀집 신경망에서 CNN으로</h2>
<ul>
<li><p>이미지 처리 분야에 밀집 신경망 (FC Layer)이 사용 불가능한 이유?</p>
<ul>
<li><p>밀집 신경망의 경우 1차원으로 입력을 받음</p>
<ul>
<li>2차원 데이터의 경우 Flatten 된 형태로 입력됨</li>
</ul>
</li>
<li><p>즉, <strong>이미지의 공간적 정보를 나타내지 못함!</strong></p>
</li>
<li><p>CNN : 공간적 정보를 유지하며 학습하는 신경망</p>
</li>
</ul>
</li>
</ul>
<br>

<h2 id="53-cnn의-구조">5.3. CNN의 구조</h2>
<p>Convolutional Neural Networks 를 소개한 &#39;An Introduction to Convolutional Neural Networks&#39; 라는 논문에서는 아래와 같은 구조를 제시하였다.</p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/942afe8c-e0d2-40f1-988b-35aa89a5d12a/image.png"></p>
<p align = "center">
Figure source : O'Shea, K. & Nash, R. (2015).
</p>

<ul>
<li><p>Convolution + ReLU + Pooling 이 총 3번 이루어진 후, 출력층으로 FC Layer 를 사용하고 있다.</p>
</li>
<li><p>이 외에도, 다양한 논문에서 Convolution Layer 를 이용한 모델 구조를 제시하였다.</p>
<ol>
<li><p>AlexNet</p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/75fd9c24-45bb-4655-ba99-11caff819013/image.png"></p>
<p align = "center">
Figure source : Krizhevsky, A., Sutskever, I. & Hinton, G. E. (2012). 
</p><br>
</li>
<li><p>GoogleNet</p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/d62410a5-6f94-4527-8be2-89bd806c1559/image.png"></p>
<p align = "center">
Figure source : Szegedy, C., Liu, W., Jia, Y., Sermanet, P., Reed, S., Anguelov, D., Erhan, D., Vanhoucke, V. & Rabinovich, A. (2015)

</p>




</li>
</ol>
</li>
</ul>
<br>

<h2 id="54-합성곱-신경망">5.4. 합성곱 신경망</h2>
<h3 id="541-1개-채널에-대한-convolution">5.4.1. 1개 채널에 대한 Convolution</h3>
<ul>
<li><p>필터 (Filter) = Kernel</p>
<ul>
<li><p>&quot;<strong>합성곱 연산을 수행시킬 필터</strong>&quot; 를 의미한다. 필터의 채널이 1개임을 확인하자.</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/kuOa08j2JPDRLjmnhsoGvNqfbi6DtLgd3jA74XyQhILCyG9RLvB5fhRFFXqTC7jyjt1DVW3WWmQod2IFU9FgjRiibwK62E0qxfhD5npoJ2gYXE60klxcId88kYlDL9pJ.png" width="90"></p>
</li>
<li><p>Filter Size : Hyperparameter</p>
</li>
</ul>
</li>
<li><p>Convolution 연산</p>
<ul>
<li><p>수학적 정의</p>
<p>$$(f*g)(x) = \int_{-\infin} ^{\infin} f(t)g(x-t)dt
$$</p>
</li>
<li><p>신경망에서의 정의</p>
<p>입력값 A, 필터 B 에 대해 Convolution 연산 A ◎ B 를 수행해보자. Stride = 1 로 가정하자 (Stride 는 필터 연산을 적용할 위치의 간격으로, 자세한 내용은 잠시 후에 설명한다).</p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/c4c44092-498e-43f2-8460-1732ddc30768/image.png" width="480"></p>

<p>입력값 A의 왼쪽 상단부터, B를 포개고 원소별 곱을 계산한 후 이를 모두 더한 값을 계산한다. 이후, 행렬 B를 오른쪽으로 1칸씩 이동시키고, 더 이상 오른쪽으로 이동할 수 없다면 한 줄 아래의 맨 왼쪽위치로 이동시킨 뒤 동일한 작업을 반복한다. 처음 3단계를 나타내면 아래 그림과 같다.</p>
</li>
<li><p><em>Step 1.*</em></p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/a03fda1f-d313-45f8-be96-7f39b679f0a2/image.png" width="700"></p>
</li>
<li><p><em>Step 2.*</em></p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/9416a9b2-5d63-43b3-96c9-e1ed44e84f75/image.png" width="700"></p>
</li>
<li><p><em>Step 3.*</em></p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/a80aceef-6bfb-41a7-b88a-f255fa420835/image.png" width="700"></p>

<p>위 과정을 반복하면 최종적으로 다음과 같은 결과를 얻을 수 있다.</p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/1ae0affc-abb3-4b31-a20e-74706f2a0e99/image.png" width="200"></p>

<ul>
<li><p>편향 (bias)이 존재하는 경우 : 편향이 더해지는 방식에 유의하며 아래 그림을 살펴보자.</p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/c14557ea-5baf-45d3-9910-8bb7699c1049/image.png" width="750"></p>
</li>
<li><p>지금까지 2차원 행렬 A, B 에 대한 Convolution 연산이 어떻게 이루어지는지 살표보았다. 이 과정을 Python 으로 구현하면 아래와 같다. 아래 구현은 Numpy 를 이용해 scratch 부터 구현한 것으로, 가장 효율적인 구현 방식은 아니다.</p>
<pre><code class="language-python">def calculate(arrayA, arrayB, bias):
arrayC = np.zeros((arrayA.shape[0] - arrayB.shape[0] + 1, arrayA.shape[1] - arrayB.shape[1] + 1))
for i in range(arrayA.shape[0] - arrayB.shape[0] + 1):
    for j in range(arrayA.shape[1] - arrayB.shape[1] + 1):
        for k1 in range(arrayB.shape[0]):
            for k2 in range(arrayB.shape[1]):
                arrayC[i][j] += arrayA[i+k1][j+k2] * arrayB[k1][k2]
arrayC += bias
return arrayC</code></pre>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Stride</p>
<ul>
<li><p>Filter 가 이동하는 칸 수 (필터 연산을 적용할 위치의 간격)</p>
</li>
<li><p>Stride = $1$ 의 경우</p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/7ae7f4e0-fb1a-40d0-8c61-d490d524781c/image.png" width="870"></p>  
</li>
<li><p>Stride = $2$ 의 경우</p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/235671f2-1711-45ec-87dc-974528c47818/image.png" width="840"></p>
</li>
</ul>
</li>
<li><p>Padding</p>
<ul>
<li><p>가장자리쪽의 픽셀은 이미지 안쪽의 픽셀보다 <strong>Filter가 거쳐 가는 횟수가 적음</strong> </p>
</li>
<li><p>따라서 가장자리 데이터는 합성곱 신경망의** 순전파를 진행할 때 약하게 전달<strong>될 것이며, 가장자리에 중요한 데이터가 포함되는 경우 **학습 효율에 악영향</strong>을 미침</p>
</li>
<li><p><strong>패딩</strong> : 합성곱 연산을 거치기 전, <strong>입력 데이터 주변을 특정 값 (0)으로 적절히 채워 넣는 기법</strong> </p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/d04113e8-ad84-4c91-8d14-5492fc3d993c/image.png" width="770"></p>


</li>
</ul>
</li>
</ul>
<pre><code>- 패딩을 사용한 후, 동일한 필터 연산을 수행하면 입력 데이터의 **가장자리와 내부 픽셀은 동일한 횟수의 필터 연산**을 거치게 됨

- 패딩의 이점 (2가지)
    1) **가장자리 정보 소실 방지**

    2) 입력 이미지의 크기를 증가시키는 효과 ⇒ **출력값의 Size가 너무 작아지는 문제 방지** </code></pre><ul>
<li><p>출력값의 Shape 계산하기</p>
<ul>
<li><p>입력값의 (채널 1개 당) Shape : $(H_{in}, W_{in})$ </p>
</li>
<li><p>Filter Shape : $(f_1, f_2)$</p>
</li>
<li><p>Padding : $P$</p>
</li>
<li><p>Stride : $S$</p>
</li>
<li><p>출력값의 Shape : $(H_{out}, W_{out})$ </p>
<p>  $$H_{out} = 
  \frac{H_{in} + 2P - f_1}{S} + 1$$</p>
<p>  $$W_{out} = 
  \frac{W_{in} + 2P - f_2}{S} + 1$$</p>
<ul>
<li>cf) Stride 역시 가로/세로 방향에 대해 다르게 설정할 수 있다. 여기서는 각 방향으로 움직이는 정도가 같다고 가정하고 공식을 유도하였다.</li>
</ul>
</li>
</ul>
</li>
</ul>
<br>

<h3 id="542-2개-이상의-채널로-표현되는-이미지에-대한-convolution">5.4.2. 2개 이상의 채널로 표현되는 이미지에 대한 Convolution</h3>
<ul>
<li><p>입력받는 데이터 채널 수와 필터 채널 수를 동일하게 설정</p>
<ul>
<li>ex) RGB : 입력 데이터 채널 3개 $\rightarrow$ 필터 채널 <strong>3개</strong></li>
</ul>
</li>
<li><p><strong>필터 개수는 1개</strong> / 채널 수 <strong>3개</strong> (두 개는 다른 개념이므로 주의할 것!)</p>
<ul>
<li><p>Tensor 형태로 나타낸다면 Filter 의 Shape 는</p>
<p>$$1 \times 3 \times
f_1 \times f_2$$</p>
</li>
</ul>
<ul>
<li><p>예를 들어, 아래와 같은 연산을 생각해보자. 필터의 개수는 1개이고 (B), 입력값과 필터 모두 3개의 채널을 가진다.</p>
<p align="center"><img src ="https://velog.velcdn.com/images/philiplee_235/post/7561b308-020c-4dec-ae83-dee35a5dd49e/image.png" width="750"></p>

<p>이 때 연산은 다음과 같이 수행된다. 컨볼루션 연산이 각 채널별로 이루어진 후, 동일한 위치 (이미지의 경우 픽셀) 에 대응되는 값들이 모두 더해져 채널이 1개인 결과값을 산출한다. 아래 그림을 통해 이해해보자.</p>
<p>*<em>Step 1. *</em></p>
<p align="center"><img src ="https://velog.velcdn.com/images/philiplee_235/post/dd2b5e70-1c76-4f76-bb7b-ea30e559333d/image.png" width="750"></p>

<p>*<em>Step 2. *</em></p>
<p align="center"><img src ="https://velog.velcdn.com/images/philiplee_235/post/441903d3-c573-4313-88bd-61381144f418/image.png" width="750"></p>

<p>$$\vdots
$$</p>
<p>*<em>Step 9. *</em></p>
<p align="center"><img src ="https://velog.velcdn.com/images/philiplee_235/post/dc7ae198-7294-4be8-babb-30cf729b11b8/image.png" width="750"></p>
</li>
</ul>
</li>
<li><p>편향이 존재하는 경우 : 이 경우에도 편향은 스칼라이다. 필터 1개마다 고유한 편향 값을 가지게 되며, 필터의 채널 수에는 의존하지 않는다. 마지막에 편향 (스칼라) 값이 A ◎ B 값에 더해진다. 즉, 편향이 더해지는 방식은 필터의 채널이 1개인 경우와 동일하다.</p>
</li>
</ul>
<br>

<h3 id="543-여러-개의-필터를-사용하는-convolution">5.4.3. 여러 개의 필터를 사용하는 Convolution</h3>
<ul>
<li><p>필터 하나에 대해 합성곱 연산을 적용한다면 <strong>채널이 1인 출력값</strong>을 얻음</p>
<ul>
<li><p>입력값의 Shape 가 $(C_{in}, H, W)$ 이고 Filter 1개의 Shape 가 $(C_{in}, H, W)$ 이라면, 각 채널별로 컨볼루션 연산을 진행한 뒤 같은 위치(픽셀)의 값들을 모두 더하게 됨. $\rightarrow$ 이게 채널이 1인 출력값이 되는 것이다.</p>
</li>
<li><p>Filter 의 개수가 여러개일 경우, 이러한 작업이 Filter 의 개수만큼 일어나고 각각의 결과들이 모아지게(Concat) 된다. 아래의 &#39;필터 뱅크&#39; 설명을 참고하자.</p>
</li>
</ul>
<ul>
<li><p><strong>필터 뱅크 (Filter Bank)</strong> : 여러 개의 필터를 모아 놓은 것</p>
<ul>
<li><p>입력값의 Shape 가 </p>
<p>  $$(C_{in}, 
  H, W)$$</p>
<p>  이고 이 입력값들에 대한 필터 1개의 Shape가 $(C_{in}, f_1, f_2)$ 일 때, 필터가 $N$ 개 있다면 Filter Bank 의 Shape 는</p>
<p>  $$(N, C_{in}, 
  f_1, f_2)$$</p>
<p>  가 된다. 이 때 출력값의 채널 수는 $N$ 이 되므로, $N=C_{out}$ 이다. 결과적으로 Filter Bank 의 Shape 는 아래와 같이 표현할 수 있다.</p>
<p>  $$(C_{out}, 
  C_{in}, f_1, f_2)$$</p>
<p>  이 때 출력값의 Shape는</p>
<p>  $$(C_{out}, </p>
<pre><code> H_{out}, W_{out})$$ </code></pre><p>  이 되며 $(H_{out}, W_{out})$ 의 값은 위에서 정의한 것과 같이</p>
<p>  $$H_{out} = </p>
<pre><code> \frac{H_{in} + 2P - f_1}{S} + 1$$</code></pre><p>  $$W_{out} = </p>
<pre><code> \frac{W_{in} + 2P - f_2}{S} + 1$$</code></pre><p>  이다.</p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>예를 들어 아래와 같이 3개의 필터를 사용하는 Convolution 연산을 생각해 보자. 각 필터는 3개의 채널로 이루어져 있다. 출력값의 채널 수는 필터 수와 동일하게 <strong>3개</strong>가 된다.</p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/4dec8555-34ce-4393-a597-d9c9cf3fed56/image.png" width="800"></p>

<ul>
<li><p>연산의 결과는 아래와 같다. 각각의 필터를 적용한 결과를 모아주면 (Concat) 된다.</p>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/aed36a48-e52c-4d67-9001-b6d28e42c80b/image.png" width="800"></p>

<ul>
<li><p>편향(bias) 을 적용할 경우 그 결과는 아래와 같다. 편향의 개수가 필터의 개수와 같음에 유의하자.</p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/a7940286-06ea-4440-a359-b6881153d3a1/image.png" width="780"></p>
</li>
<li><p>정리하자면, <strong>입력층에 대해 사용한 필터 수 $(N_{filter}) =$ 출력층의 채널 수 $(C_{out})$</strong> 가 성립한다. 모델을 구현할 때 이 점을 유의하여 설계해야 한다.</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>합성곱 신경망의 가중치가 Update 되는 방식 : <strong>필터와 편향값의 가중치가 갱신됨</strong></li>
</ul>
<p>지금까지 5.4. 절에서는 신경망에서 일어나는 <strong>2D Convolution</strong> 에 대해 알아보았다.</p>
<h2 id="55-풀링-계층pooling-layer">5.5. 풀링 계층(Pooling Layer)</h2>
<ul>
<li><p>데이터의 크기 (Size)를 줄이기 위해 사용하는 층</p>
<ul>
<li>단, 채널 수는 변하지 않음.</li>
</ul>
</li>
<li><p>별도의 <strong>학습이 일어나지 않음</strong> </p>
<ul>
<li>풀링 계층의 경우 학습 가능한 (Trainable) 파라미터가 없음.</li>
</ul>
</li>
<li><p>$n \times m$ 풀링 : $n \times m$ 영역을 그 영역을 대표하는 원소 하나로 축소하여 나타내는 연산</p>
<ul>
<li><p>Max Pooling</p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/dd4da50c-3407-4993-9e70-b92c04ad6e28/image.png" width="750"></p>
</li>
<li><p>Average Pooling</p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/dc4161c0-da48-4662-bd56-057a70bb536f/image.png" width="750"></p> 



</li>
</ul>
</li>
</ul>
<ul>
<li><p>입력 데이터의 변화에 민감하지 않다. 이유는,</p>
<ul>
<li>Max pooling 을 수행하는 경우 최댓값이 변화하지 않는 이상 결과값은 그대로일 것이며, Average pooling 을 수행하는 경우에도 값의 변화가 평균에 반영되며 작게 나타날 것이다.</li>
</ul>
</li>
<li><p>여러 채널의 데이터의 경우 : 각 채널에 대해 Pooling 연산이 진행된다.</p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/b9929634-21a8-4fed-9506-7035a43168c3/image.png" width="800"></p>


</li>
</ul>
<br>

<h2 id="56-cnn-학습시키기">5.6. CNN 학습시키기</h2>
<ul>
<li><p>순전파 과정 : 입력 ⇒ 합성곱 계층 ⇒ 활성화 함수 ⇒ 풀링 계측 ⇒ (반복)</p>
</li>
<li><p><strong>벡터화 (Vectorization, Flatten)</strong></p>
<ul>
<li><p>이미지 <strong>분류 작업</strong>을 진행하기 위해, <strong>밀집층에 입력하기 위한 형태인 일렬 데이터</strong>로 나타내는 과정</p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/xC-VTMg9-URGW1CqHUsxkY8mcD_sRGiWLYdbSjuKT9kGPN7MySZRGFWRp5EnLaMqUbI8MByrsBLfj_bd7TwL_MoXu0wIngcIQndCi6CvHcyWgTh2P5eALBWvxEZMp4Hm.png" width="280"></p>
</li>
<li><p>Flatten 이후 사용하는 활성화 함수? : 소프트맥스 함수</p>
</li>
</ul>
</li>
<li><p>손실함수를 통해 모델을 평가하면서, 모델 파라미터인 <strong>필터, 그리고 밀집층의 가중치와 편향을 갱신</strong></p>
</li>
<li><p>최종적으로, 합성곱 계층에서 연산에 사용되는 필터 = <strong>이미지의 특징을 추출</strong>해주는 필터</p>
</li>
<li><p>층 깊이에 따른 추출 정보</p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/be300cc0-839a-49dc-90a7-b4645aff8030/image.png" width="800"></p>

  <p align="center">Figure source : Donglai Wei, Bolei Zhou, Antonio Torralba, William T. Freeman. (2015).</p>

<ul>
<li>합성곱 계층을 더 많이 구성할수록 <strong>더 추상적인 정보</strong>를 얻을 수 있음</li>
</ul>
</li>
</ul>
<br>

<h3 id="references">References</h3>
<blockquote>
<p>별도의 출처가 표기되지 않은 Figure의 경우 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》에서 가져왔거나 원본을 기반으로 직접 그린 Figure 입니다.</p>
</blockquote>
<ul>
<li><p>OUTTA, 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》</p>
</li>
<li><p>O&#39;Shea, K. &amp; Nash, R. (2015). An Introduction to Convolutional Neural Networks.. <em>CoRR</em>, abs/1511.08458.</p>
</li>
<li><p>Krizhevsky, A., Sutskever, I. &amp; Hinton, G. E. (2012). ImageNet Classification with Deep Convolutional Neural Networks. In F. Pereira, C. J. C. Burges, L. Bottou &amp; K. Q. Weinberger (ed.), *Advances in Neural Information Processing Systems 25 *(pp. 1097--1105) . Curran Associates, Inc. .</p>
</li>
<li><p>Szegedy, C., Liu, W., Jia, Y., Sermanet, P., Reed, S., Anguelov, D., Erhan, D., Vanhoucke, V. &amp; Rabinovich, A. (2015). Going deeper with convolutions. , .</p>
</li>
<li><p>Donglai, W., Bolei, Z., Antonio, T., William T, Freeman. (2015) mNeuron:A Matlab Plugin to Visualize Neurons from Deep Models, Massachusetts Institute of Technology.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Neural Networks]]></title>
            <link>https://velog.io/@philiplee_235/Neural-Networks</link>
            <guid>https://velog.io/@philiplee_235/Neural-Networks</guid>
            <pubDate>Thu, 29 Dec 2022 12:42:15 GMT</pubDate>
            <description><![CDATA[<p>이 자료는 인공지능 교육 비영리단체 OUTTA 에서 출판한 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》 를 바탕으로 제작되었습니다. </p>
<p><a href="https://www.remnote.com/a/-ml-dl-2-4-/63539d474d226e6f6b88fc60">Remnote 자료</a>와 <a href="https://github.com/frogyunmax/OUTTA_2022AIBootcamp/blob/main/ML_Chap2-4_NN_Lecture.pdf">Lecture PPT</a>는 링크를 통해 확인하실 수 있습니다.</p>
<p>Made by <a href="https://github.com/frogyunmax"><em>Hyunsoo Lee</em></a> (SNU Dept. of Electrical and Computer Engineering, Leader of Mentor Team for 2022 Spring Semester)</p>
<h2 id="41-신경망-활용의-이점-universal-approximation-theorem">4.1. 신경망 활용의 이점: Universal Approximation Theorem</h2>
<ul>
<li><p><strong>신경망 (Neural Networks, NN)</strong> : 입력(input) 데이터와 출력(output) 데이터 사이의 관계를 하나의 함수 관계로 연결해 표현해주는 인공지능 모델</p>
</li>
<li><p>신경망을 이용하면, 특정 조건을 만족하는 함수들에 대해 충분한 근사치를 얻을 수 있음이 증명되었음 : Universal Approximation Thm.</p>
</li>
<li><p><em>Universal Approximation Theorem</em></p>
<p>  $\varphi, I_m, C(I_m), f$ 를 아래 표와 같이 정의하자.</p>
<table>
<thead>
<tr>
<th align="center">Notation</th>
<th>Meaning</th>
</tr>
</thead>
<tbody><tr>
<td align="center">$\varphi$</td>
<td>Nonconstant, continuous, bounded, and monotonically increasing non-linear function</td>
</tr>
<tr>
<td align="center">$I_m$</td>
<td>$R^m$의 닫힌 유계 부분집합</td>
</tr>
<tr>
<td align="center">$C(I_m)$</td>
<td>$I_m$ 에서 $\mathbb{R}$ 로 가는 연속함수의 집합</td>
</tr>
<tr>
<td align="center">$f$</td>
<td>$C(I_m)$ 에 속하면서 $\varphi$ 와 독립인 임의의 함수</td>
</tr>
</tbody></table>
<p>  위 표의 조건을 만족하는 $\varphi$ 에 대해, </p>
<p>  $$F(\left\lbrace v_i \rbrace\right., \left\lbrace \textbf w_i \rbrace\right., 
  \left\lbrace b_i \rbrace\right. ; \textbf x) = \sum\limits_{i=1}^{N} v_i \varphi(\textbf{x} \cdot \textbf{w}_i + b_i)$$</p>
<p>  와 같이 함수 $F$ 를 정의하면, 역시 위 표의 조건을 만족하면서 정의된 임의의 함수 $f$ 에 대해,</p>
<p>  $$^{\forall} \epsilon &gt; 0, ^{\exists} \left\lbrace v_i \rbrace\right., \left\lbrace \textbf{w}_i \rbrace\right., 
  \left\lbrace b_i \rbrace\right. \text{ s.t. } |F(\textbf{x}) - f(\textbf{x})| &lt; \epsilon$$ </p>
<p>  즉, Universal Approximation Theorem 은 Proper 한 비선형 함수 $\varphi$ 를 이용해, $F(\left\lbrace v_i \rbrace\right., \left\lbrace \textbf{w}_i \rbrace\right., \left\lbrace b_i \rbrace\right.; \textbf{x})$ 가 $C(I_m)$ 에 속하면서 $\varphi$ 와 독립인 임의의 함수 $f$ 에 매우 가까워지게 하는 파라미터 $\left\lbrace v_i \rbrace\right., \left\lbrace \textbf{w}_i \rbrace\right., \left\lbrace b_i \rbrace\right.$를 항상 찾을 수 있음을 의미한다.</p>
<p>  다시 말하자면, $\textbf{x}$ 값에 대해 적절한 선형 및 비선형 연산을 적용한다면, $f(\textbf{x})$ 의 값으로 근사시킬 수 있다. &#39;선형 및 비선형 연산&#39; 은 파라미터와 비선형 함수로 표현할 수 있고, 이 파라미터을 신경망 모델로 표현하고 적절한 값을 찾아내는 것이 모델 학습(Training)의 과정이다.</p>
<blockquote>
<p>Universal Approximation Theorem 에 대한 자세한 내용은 &lt;인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기&gt; 본문을 참고해 주시기 바랍니다.</p>
</blockquote>
</li>
</ul>
<br>

<h2 id="42-신경망의-구조">4.2. 신경망의 구조</h2>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/Z2uU83wVrmax1zVov15o81-pkBgPOBboDjy9tR3iHT-2-9Ft4b-UeXcncMdTw2xzEByRucb9GQ7z8kh-vSKw3esM8uTYVX4kLddpa4VV_mXcZ3ZqKUnjQWQujsh0VuvO.png" width="250"></p>


<ul>
<li>In Universal Approximation Thm (위 표에 나타난 모든 가정을 만족하는 상태에서),</li>
</ul>
<p>$$F(\left\lbrace v_i \rbrace\right., \left\lbrace \textbf w_i \rbrace\right., \left\lbrace b_i \rbrace\right. ; \textbf x) =
\sum\limits_{i=1}^{N} v_i \varphi(\textbf x \cdot \textbf w_i +b_i )$$</p>
<p>$$(v_i, b_i \in \mathbb{R}, 
\textbf w_i \in \mathbb{R}^m)$$ </p>
<br>

<h3 id="420-신경망과-방향-그래프">4.2.0. 신경망과 방향 그래프</h3>
<ul>
<li><p>$N=5$일 때 <strong>일변수함수</strong> $F$의 모식도를 방향 그래프 (Directed Graph)로 나타내기</p>
<p>  $$F(\left\lbrace v_i \rbrace\right., \left\lbrace w_i \rbrace\right., \left\lbrace b_i \rbrace\right. ; x) =
  \sum\limits_{i=1}^{5}v_i \varphi( x \cdot  w_i +b_i)$$ </p>
<ul>
<li><p>방향 그래프 구성 요소 : 1) 노드,  2) 간선 (노드를 이어주는 선) - 간선은 방향을 가짐</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/-UzDBy62Aztr5UueetRGUYoDTtwR5yB0IBcZM4x0dnc3k8jNNUwM2z_G8Ehf5BNKpIqded71ri20XiUP2_GmIckexgGPhk9cD2tdGG1K1jbbAIXmEcowWGusvnOKOGk-.png" width="300"></p>


</li>
</ul>
</li>
</ul>
<pre><code>  그래프의 가중치와 편향은? 

   - 가중치 : $w_i$  (입력값에 곱해주는 값)

   - 편향 : $b_i$  (함수 $\varphi$에서 더해주는 값)</code></pre><ul>
<li><p>참고) 무방향 그래프 : 간선의 양방향으로 모두 이동할 수 있는 그래프</p>
<ul>
<li><p><strong>편향을 가중치로 취급</strong>하는 방법?</p>
<ul>
<li><p>모델의 입력값을 $x$와 &#39;1&#39; 두 개로 생각</p>
<p>  $$F(\left\lbrace v_i \rbrace\right., \left\lbrace w_i \rbrace\right., \left\lbrace b_i \rbrace\right. ; x) = 
  \sum\limits_{i=1}^{5}v_i \varphi( x \cdot  w_i + 1\cdot b_i )$$ </p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/EqgbOKdcQleoU0uH69djlTjbNq6FKVw_t0VciYlwpTqWPYOf93viEpWY7m7tIieBzyamPv8NNWTvN9ZA6TWg-woH5biMQJctWUn5eBMS24LMVHkBDFD9o7I9dRpfV2Gc.png" width="400"></p>

</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>$N=5$일 때 <strong>이변수함수</strong> $F$의 모식도를 방향 그래프 (Directed Graph)로 나타내기 </p>
<p>  $$F(\left\lbrace v_i \rbrace\right., \left\lbrace \textbf w_i \rbrace\right., \left\lbrace b_i \rbrace\right. ; \textbf x) = 
  \sum\limits_{i=1}^{5}v_i \varphi(\textbf x \cdot \textbf w_i +b_i )$$ </p>
<p>  $$\textbf{x} = (x_1, x_2)^T, ; 
  \textbf{w}<em>i = (w</em>{i_1}, w_{i_2})^T$$ </p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/GxcmQshz2Ze-J41pzVzri6vA6JVU3She7VOtjtLOISdJMucZaOQ299Lu-3emDDQAly1Xni1YxgizjZvIeSWVkCkNM7S-l-BN_Z2Ko8ZAdzsf1lF9esJx2_ade4LA3_KN.png" width="380"></p>

<ul>
<li><p>편향을 가중치처럼 본다면?</p>
<p>$$F(\left\lbrace v_i \rbrace\right., \left\lbrace \textbf w_i \rbrace\right., \left\lbrace b_i \rbrace\right. ; \textbf x) = 
\sum\limits_{i=1}^{5}v_i \varphi(\textbf x \cdot \textbf w_i + 1 \cdot b_i )$$ </p>
</li>
</ul>
</li>
</ul>
<p>   $$\textbf{x} = (x_1, x_2)^T, \textbf w_i 
   = (w_{i_1}, w_{i_2})^T$$</p>
   <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/LYa2O3GpwH_QfUmfVIYqmK9YKdR97nIRj3KE_Vmsw28oQgsuadfsKNg_vkXgeeQWDCWTVX7Osc5a2Gpe4aLHy3M2u0iobEevMDXt8b2l6yriHQU3hvjQ1bSnAL4UZd6Y.png" width="380"></p>

<br>

<h3 id="421-신경망의-기본-구조">4.2.1. 신경망의 기본 구조</h3>
<ul>
<li><p>노드와 간선으로 이루어진, 방향이 정해져 있는 그래프</p>
</li>
<li><p>신경망 전체에 걸쳐 <strong>한 방향</strong>으로만 데이터가 전달됨</p>
</li>
<li><p>신경망과 뉴런의 유사성</p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/uSbS361-Syfuygn16UQskJ0bkYZFhJvOc6WJUzdK7FFrfxzQkfW_6jeT__zSxuTyGytCIUopVImkVMXxsKHuwTej2UjByAbT5RnyZfOSJNrpJz9zK13TWcDwMx5VWAD6.png" width="530"></p>

<ul>
<li><p>노드 $\rightarrow$ 뉴런 (수상돌기)</p>
</li>
<li><p>간선 $\rightarrow$ 축삭돌기</p>
</li>
</ul>
</li>
<li><p>계층 (Layer) : 같은 선상에 있는 노드들</p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/3MwoHtiaUA77hzjxcHAk0HaejrOMFKWke0bdvUXzX9elp5a-WgbrL0V5jjgryeeXUyhqVgCUeZJc-eVVW1dpvCm5RFMTze8IS4eE1K7yrlDRMV0Uoo2itaB4Xs276OMv.png" width="450"></p>

<ul>
<li><p>입력층(Input Layer) : 신경망에 데이터가 처음 입력되는 부분</p>
</li>
<li><p>출력층(Output Layer) : 신경망을 통과한 결과가 출력되는 부분</p>
</li>
<li><p>은닉층(Hidden Layer) : 입력층으로부터 입력받은 데이터에 대해 처리를 진행해, 처리 결과를 출력층으로 전달하는 부분</p>
</li>
</ul>
</li>
<li><p><strong>심층 신경망</strong> (Deep Neural Network, DNN) : 은닉층의 개수가 2개 이상인 신경망</p>
<ul>
<li><strong>딥러닝 (Deep Learning, DL) : 심층 신경망에 대한 머신러닝</strong></li>
</ul>
</li>
</ul>
<br>

<h3 id="422-각-뉴런의-역할">4.2.2. 각 뉴런의 역할</h3>
<ul>
<li><p>뉴런(노드)이 가지고 있는 동일한 규칙</p>
<p>1) 각 뉴런에 입력되는 값은 여러 개 가능, 그러나 출력되는 값은 오직 하나</p>
<p>2) 각 뉴런에 입력되는 값에는 가중치가 곱해짐</p>
<p>3) 출력되는 값은 활성화 함수를 통과함</p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/TVFx2HmhvLS57BOK8f_P-Yxe0eQ2Yu6p1d86h0JmdSXiMc3xnlhvcgBJXePRyQW8fv-OwxslxZDmD29JKJkhqNof-oNfbjjShodaoYA7GQdy-V5_GvqGs-g0HLa_eIej.png" width="350"></p>

</li>
</ul>
<br>

<h3 id="423-가중치-곱">4.2.3. 가중치 곱</h3>
<ul>
<li><p>용어 정의</p>
<ul>
<li><p>밀집층 (Dense Layer) : 모든 입력 데이터에 대해 가중치를 곱하여 더해주는 Layer</p>
</li>
<li><p>완전연결 계층 (Fully-connected Layer) : 각 층의 노드들끼리 완전하게 연결된 신경망의 Layer</p>
</li>
</ul>
</li>
<li><p>입력 데이터 $\textbf x = [x_1, x_2, x_3]$, 각각에 대응되는 가중치 $\textbf w_i = [w_{i_1}, w_{i_2}, w_{i_3}]$ 일 때 가중치 곱은?</p>
<p>  $$\textbf x  \cdot \textbf w_i = 
  x_1 w_{i_1} + x_2 w_{i_2}+x_3 w_{i_3}$$</p>
</li>
<li><p>데이터가 2차원 이상일 경우?</p>
<ul>
<li><p>벡터화 (Vectorization, flatten) : $n$차원 $\rightarrow$ 1차원으로 차원을 변환하는 과정</p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/YsgZz3Vbi7VHZSIDn681S9Fsmv5G2O1bjAaf0fNeyYXHaNGtD4K5CXn8Rprr3LyAEce_WqxftJXWFL8KjZxx16EkVDPNPgiKZX6Rn3dI6HRbxZPOKJ1Dkp0b-HKb3MmT.png" width="250"></p>
</li>
<li><p>벡터화 과정의 문제점</p>
<ul>
<li><p>여러 행의 데이터를 하나의 행으로 이어서 합쳐주기 때문에, <strong>데이터가 가진 공간적인 정보가 무시</strong>됨</p>
</li>
<li><p>따라서, 단순히 밀집층에서 가중치를 곱하는 방법 외에도 다른 가중치 곱이 존재 (ex. CNN (<em>Convolutional Neural Network</em>))</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<br>

<h3 id="424-활성화-함수">4.2.4. 활성화 함수</h3>
<ul>
<li><p>뉴런 (또는 Node)에서 최종적인 값을 내보내기 전에 통과 시켜주는 함수</p>
<ul>
<li><p>주로 비선형 함수를 지칭</p>
</li>
<li><p>선형 함수의 예시로는 항등함수가 존재</p>
</li>
</ul>
</li>
<li><p>Universal Approximation 에서 활성화 함수 : $\varphi(\cdot)$ 에 대응됨</p>
</li>
</ul>
<hr>
<p><strong>a. 활성화 함수의 종류</strong></p>
<blockquote>
<p>4.2.4.a. 절에 사용된 그림의 출처는 유원준 $\cdot$ 안상준 님의 저서인 <a href="https://wikidocs.net/60683">Pytorch 로 시작하는 딥 러닝 입문</a>임을 밝힙니다.</p>
</blockquote>
<p><strong>1. 항등함수</strong></p>
<p>$$\varphi(x) 
= x$$</p>
<ul>
<li><p>주로 <strong>출력층에서 사용</strong>됨, 별도의 계산과정이 없음</p>
</li>
<li><p>ML 실습 4 역시 활성화 함수로 항등함수를 활용하였음!</p>
</li>
<li><p><strong>회귀 문제</strong>에서 많이 사용됨</p>
</li>
</ul>
<br> 

<p>비록 활성화 함수의 첫 번째 예시로 항등함수를 소개하였지만, 일반적으로 활성화 함수는 <strong>비선형 함수</strong> 여야 한다. 선형 함수를 활성화 함수로 사용할 경우, 은닉층의 가중치 값이 바뀐 것과 같은 효과를 가져오기 때문이다. 즉, 비선형성을 부여하지 못하고 결과적으로 활성화 함수를 추가하는 의미가 사라지게 된다. 이제부터는 비선형 함수들에 대해 살펴보도록 하자.</p>
<br>

<p><strong>2. Sigmoid 함수</strong></p>
<p>$$\varphi(x) =
\frac{1}{1+e^{-x}}$$</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/6dBGecdvhTh9O5738Zh2Zq88bH25cXQSD4eWRXkQIxf94VRkCBxHdF2___ltsgVQSmMLsVJ3IKc7NAnEvN_ALTvB7T-CCR1zVQxi1ZAEl3ZE3OengGPnaa8rjqA-7rO4.png" width="360"></p>

<ul>
<li><p><strong>분류 문제</strong>에 많이 사용됨. 이유는?</p>
<ul>
<li><strong>출력값이 0과 1 사이의 값</strong>을 가지므로, Binary Classification 에 활용 가능 (1에 가까울 경우 class A로 분류, 0에 가까울 경우 class B로 분류)</li>
</ul>
</li>
</ul>
<ul>
<li><p>딥러닝에서는 잘 활용되지 않음 : <strong>Gradient Vanishing</strong> 문제를 가짐</p>
</li>
<li><p>Gradient Vanishing</p>
<ul>
<li>$x$가 0 근방의 값이 아닌, 매우 큰 값이나 매우 작은 값을 가지는 경우 <strong>sigmoid 함수의 기울기가 0에 수렴</strong>하게 됨.</li>
</ul>
</li>
</ul>
<pre><code>    &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://remnote-user-data.s3.amazonaws.com/hQyLTKcYj3hWyBFjus-1kgUMVOXe64DJmi9k2U00i2I99dJBIJrsYcXPiQVFyvqcd5Lrw4BfCrNBSxg1fFpAAm_RrX8r7ea0fk2mKAHDKFadlIfaZVGuyCtXexprahH5.png&quot; width=&quot;360&quot;&gt;&lt;/p&gt;

- 이 때 오차 역전파 과정에서 미분이 일어나고, 활성화 함수의 기울기(미분계수)가 곱해지므로 **0에 가까운 값들이 계속해서 곱해지게 됨**.

- 결과적으로 맨 처음 층까지 Loss function의 기울기 값이 전달되지 않고, **가중치 업데이트가 일어나지 않음** (또는 느리게 일어남).


    &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://remnote-user-data.s3.amazonaws.com/UlHv1Wi8lU1b_5coYE6uRdai3oW0nlncCmMRXB3HEF_lbiEVEk9947fP6LNgAvEB44bAHILkf7IHgYVkGfEBAuS_lXc4sh0ZoILEEkNgMykenU2IKb6KidMh1ycZCyIP.png&quot;&gt;&lt;/p&gt; </code></pre><ul>
<li>또한 함수의 중앙값이 0이 아니라는 문제점 (중앙값은 0.5) 역시 가짐 </li>
</ul>
<br>

<p><strong>3. tanh 함수</strong></p>
<p>$$\varphi(x) = 
\frac{e^x - e^{-x}}{e^x + e^{-x}}$$</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/5gDrns75GYgr-KbQeozJ9e7rj9wFXYsEZiMv1h6TbLW6AVndkwYsxo-nnjIp3bMecDufFpLj7dQuq37N6Rl9KJ6DrkvK4hTlfWaJxFT3LiRyPROGdqemCdHLO97JnHc2.png" width="380"></p>

<ul>
<li><p>Sigmoid 함수의 중앙값이 0이 아닌 문제를 해결</p>
<ul>
<li>Sigmoid 에 비해 함수값의 변화가 더 큼</li>
</ul>
</li>
<li><p>그러나, 여전히 Gradient Vanishing 문제를 겪음</p>
<ul>
<li><p>중앙값이 0이므로, Sigmoid 함수에 비해서는 Gradient Vanishing 이 적은 빈도로 발생</p>
</li>
<li><p>결과적으로 Sigmoid 보다는 더 많이 사용됨</p>
<ul>
<li><p>물론, 현대의 인공 신경망에서는 두 활성화 함수 모두 사용 빈도가 낮음.</p>
</li>
<li><p>두 함수 (sigmioid, tanh) 를 사용한 서로 다른 두 신경망은 <strong>수학적으로 동일</strong> (즉, 가중치를 잘 설정해 동일한 신경망으로 만들 수 있다.)</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<br>

<p><strong>4. ReLU 함수</strong></p>
<p>$$\varphi(x) = 
\max(x, 0)$$</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/8qGFFajhz8P8HXm61bMMh4kIkl7zTmahLXMUuRQCKqk0ItpYiQh7GqfCUX5Eggegu_EEpjIR50N2KjXHk7ZCMqzZgejQaWF8YLYu7MM6xxSyYbXi46WOO7qfM_M-bEpK.png" width="360"></p>


<ul>
<li><p>현대 딥러닝 모델에서 가장 많이 사용되는 대표적인 활성화 함수</p>
</li>
<li><p>Sigmoid 함수의 기울기 소실 해결 가능</p>
</li>
<li><p>그러나 입력값이 음수일 경우 기울기가 0 ⇒ 여전히 문제 발생 : <strong>&quot;Dying ReLU&quot;</strong> </p>
<ul>
<li>Dying ReLU 해결 방안 : <strong>Leaky ReLU</strong> </li>
</ul>
</li>
</ul>
<br>

<p><strong>5. Leaky ReLU 함수</strong></p>
<p>$$\varphi(x) =
\text{max}(ax, x)$$ </p>
<p>$$(0 &lt; a 
&lt; 1)$$</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/2aRyMFceyEmlMS39HUFH1Doy87NyboOAz3tMUrBQx6UwaD8ulniDzAi0crG8qfL-zjLwzjwE5Wu_P7-jgQvEpR7AtqrhfxoGvjMWlWPNVHUfy-U5Jbzpwf8vqgOvxi25.png" width="380"></p> 

<ul>
<li><p>기울기가 0이 되지 않으므로, Dyning ReLU 문제점을 해결 가능</p>
</li>
<li><p>그러나 새로운 Hyperparameter (음의 기울기 $a$) 를 지정해 주어야 한다는 문제점을 가짐.</p>
</li>
</ul>
<br>

<p><strong>6. Softmax 함수</strong></p>
<ul>
<li>입력값이 $x_1, x_2, \cdots, x_n$, 출력값이 $y_1, y_2, \cdots , y_n$일 때</li>
</ul>
<p>$$y_k = \text{softmax}(x_k)=
\frac{e^{x_k}}{\sum\limits_{i=1}^{n} e^{x_i}}$$</p>
<ul>
<li><p>$0 &lt; \varphi(x_k) &lt; 1$, $\sum\limits_{i=1}^n \varphi(x_k) = 1$ ⇒ <strong>분류 문제</strong>에서 <strong>각 class 에 속할 확률</strong>로 해석 가능</p>
</li>
<li><p><strong>다중 클래스 분류 문제</strong> 해결에 많이 사용됨</p>
</li>
</ul>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/AgQFwoBTAf8OOoI_HGcOHZnutqn9g2xCeNwf1yn0g2dIb-4Ef--CPneOMe7abrFnCOO1T5MgDRgqWtVPdlJcZnTUf5xDEr9iJl33idnhAL9CujbAxwheVU-d6EMqu3N0.png" width="570"></p> 

<hr>
<p><strong>b. 활성화 함수의 필요성</strong></p>
<ol>
<li><p>활성화 함수를 곱해주지 않는다면, <strong>선형 모델밖에 표현하지 못함.</strong> </p>
<ul>
<li><p>가중치를 곱해주는 과정은 입력 데이터에 대한 선형결합 (Linear Combination) 이므로.</p>
<p>$$\textbf{x} \cdot \textbf{w}_i \rightarrow
(\textbf{x} \cdot \textbf{w}_i) \cdot \textbf{w}_j \rightarrow ((\textbf{x} \cdot \textbf{w}_i) \cdot \textbf{w}_j) \cdot \textbf{w}_k$$</p>
</li>
<li><p>따라서 비선형 함수인 활성화 함수를 곱해, <strong>보편적인 수학 모델을 표현</strong>할 수 있으며 입출력 데이터 간의 규칙성을 모델링 가능.</p>
</li>
</ul>
</li>
</ol>
<br>

<ol start="2">
<li><p>활성화 함수가 없다면, 신경망의 층 수를 증가시키는 것이 의미가 없어짐. </p>
<ul>
<li><p><strong>선형 결합을 여러 층에 걸쳐 반복해도, 결국 선형결합</strong>이므로 같은 결과를 내는 하나의 층으로 나타낼 수 있기 때문.</p>
</li>
<li><p>활성화함수가 존재하면 <strong>신경망의 층수를 증가시키는 것이 의미 있어지며</strong>, 신경망의 층 수에 따라 비선형성이 추가됨.</p>
<p>$$\textbf{x} \cdot \textbf{w}_i \rightarrow f(\textbf{x} \cdot \textbf{w}_i) \cdot \textbf{w}_j \rightarrow 
f(f(\textbf{x} \cdot \textbf{w}_i) \cdot \textbf{w}_j) \cdot \textbf{w}_k$$</p>
</li>
</ul>
</li>
</ol>
<br>

<h2 id="43-신경망의-학습">4.3. 신경망의 학습</h2>
<p>신경망 학습 과정은 크게 4단계로 구성된다.</p>
<p>1) 데이터 전처리</p>
<p>2) 신경망 모델 구축</p>
<p>3) 손실함수 정의</p>
<p>4) 손실함수 최적화 (역전파)</p>
<br>

<h3 id="431-데이터-전처리">4.3.1. 데이터 전처리</h3>
<p>여러 가지 데이터 전처리 기법 중 특성 스케일링(Feature Scaling) 또는 정규화(Normalization)에 대해서 알아보자. ML 실습 4 에서 이를 직접 구현해 볼 것이다. 아래와 같은 예시를 살펴보자.</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/NKBszTQLDVJ2i6031fBpEIDS0qbDkceFmP546Zrazw2FahwaDD_r74hcsum2nE-1ym3PyhISrR4yq8PThl1IYsjTXvYDLllS2hwqSQuxLovNkyuav6wXlWUJ-qQeXvwW.png" width="550"></>

<ul>
<li><p>키와 몸무게의 스케일(규모, scale)이 다름 (키 값이 몸무게 값의 약 2-3배)</p>
</li>
<li><p>발생할 수 있는 문제점?</p>
<ul>
<li><p>머신러닝 모델은 단위를 제외한 값만을 가지고 문제를 해결</p>
</li>
<li><p>따라서 <strong>키 값의 중요도가 증가</strong>하게 됨</p>
</li>
<li><p>경사하강법에서, <strong>특정 변수 (Scale 이 작은 변수, 여기서는 몸무게)에 대한 가중치의 업데이트가 잘 일어나지 않음</strong></p>
<ul>
<li><p>ML 실습 4 참고 (직접 확인)</p>
</li>
<li><p>순전파 과정에서, $x_i$가 $n$배가 되면 $w_i$는 $\frac{1}{n}$배가 됨 $\rightarrow$ <strong>기울기 값 감소, 가중치 수렴 속도 감소</strong> </p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>해결 방안 : 모든 특성 (feature)들의 scale 을 통일 시켜주기</p>
<ul>
<li><p>최대-최소 정규화</p>
</li>
<li><p>Z-점수 정규화</p>
</li>
</ul>
</li>
</ul>
<br>

<p><strong>(1) 최소 - 최대 정규화</strong></p>
<p>$$x&#39;_k = 
\frac{x_k-\min(x_i )}{\max(x_i)-\min(x_i)}$$</p>
<p>$$\therefore 
0\leq x_k&#39; \leq1$$</p>
<ul>
<li><p>단점 : <strong>Outlier</strong>가 있는 경우, 나머지 데이터들의 값이 0 또는 1에 가까워짐</p>
<p>  ex)  </p>
<p>  $$ [0, 0, 1, 1
  , 1, 2, 2, 2, 3, 100] $$</p>
</li>
</ul>
<pre><code>$$ \downarrow
$$

$$ [0, 0, 0.01, 0.01, 0.01,
0.02, 0.02, 0.02, 0.03, 1]$$</code></pre><br>

<p><strong>(2) Z-점수 정규화</strong></p>
<p>$$x_k&#39; = 
\frac{x_k - \mu}{\sigma}$$</p>
<ul>
<li>Outlier의 영향을 Max-min Normalization 보다 적게 받음</li>
<li>0을 중심으로 하는 대칭적인 분포로 변환</li>
</ul>
<br>

<h3 id="432-신경망-모델-구성">4.3.2. 신경망 모델 구성</h3>
<ul>
<li><p>층 수</p>
</li>
<li><p>층의 종류</p>
</li>
<li><p>활성화함수 등을 정의</p>
</li>
</ul>
<br>

<h3 id="433-손실함수-정의-및-계산">4.3.3. 손실함수 정의 및 계산</h3>
<p>여러 손실함수 (Loss Function)의 종류에 대해 알아보자.</p>
<ol>
<li><p>SSE (Sum of Squares of Error)</p>
<p> $$\mathscr L_{SSE} = 
 \sum\limits_{i=1}^n (\hat{y_i} - y_i)^2$$  </p>
<p> Q) 모델의 출력값이 [0.2, 0.5, 0.3]이고, 실제 값이 [0, 1, 0]일 때 SSE는?  <em>0.38</em></p>
</li>
</ol>
<ol start="2">
<li><p>MSE (Mean Squared Error) </p>
<p> $$\mathscr L_{MSE} =
 \frac{1}{n} \sum\limits_{i=1}^n (\hat{y_i} - y_i)^2 = \frac{\mathscr L_{SSE}}{n}$$ </p>
</li>
</ol>
<ol start="3">
<li><p>$\text{|Residuals|}$</p>
<p> $$\mathscr L_{abs} =
 \sum\limits_{i=1}^n |\hat{y_i} - y_i|$$ </p>
</li>
</ol>
<ol start="4">
<li><p>CEE (Cross-Entropy Error) </p>
<p> $$\mathscr L_{CEE} = </p>
<ul>
<li>\sum\limits_{i=1}^n y_i \log {\hat{y_i}}$$ </li>
</ul>
</li>
</ol>
<br>

<h3 id="434-손실함수-최소화-training">4.3.4. 손실함수 최소화 (Training)</h3>
<ul>
<li><p>Training Data 이용</p>
</li>
<li><p>Optimizer 활용 (SGD, Adam, RMSProp 등)</p>
<ul>
<li>GD 의 여러 가지 변형 : SGD, Cyclic SGD, Shuffled Cyclic SGD, etc...</li>
</ul>
</li>
<li><p>오차역전파법 (Error Backpropagation) : <strong>가중치 업데이트</strong> </p>
<ul>
<li><p>순전파 : 입력값에 가중치를 곱하고, 활성화 함수를 통과시키는 과정</p>
</li>
<li><p><strong>역전파</strong> : 손실함수의 편미분 계수들을 이용해 가중치를 업데이트 하는 과정</p>
<ul>
<li><p>수치 미분 없이, 편미분 계수를 효율적으로 구할 수 있음</p>
</li>
<li><p>자동미분 라이브러리 이용 (ML 실습 3 참고)</p>
</li>
<li><p>Chain Rule 기반 </p>
</li>
<li><p>Recap : GD at $k$ th iteration</p>
<p>$$\textbf w_{k+1}=
\textbf w_{k} − \delta \cdot \left.\nabla \mathscr{L} (\textbf{w}) \right|_{\textbf{w}=\textbf w_k}$$</p>
<p>즉, 특정 가중치를 Update 하기 위해서는 <strong>해당 가중치에 대한 편미분계수</strong>를 구해야 한다.</p>
</li>
</ul>
</li>
<li><p>Backpropagation Example 1</p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/QmTrkAweLWWLcI26sj02yznU4H-LipjygVwiZiNbhfAAXkqs_NkktfPNRQ_SzK_wRfi14pAHB_HheS-CJ8KvidAljVDP92YOV8qJP6UQZwlAI11ORPopIfrObvXSjaiw.png" width="400"></p>

<p>  위 그림에서, 가중치 $w_{z1_2}$ 와 $w_{z2_2}$ 에 대해 역전파가 어떻게 일어나는지 알아보자. 구해야 하는 값은</p>
<p>  $$\frac{\partial \mathscr{L}}{\partial w_{z1_2}}, 
  \frac{\partial \mathscr{L}}{\partial w_{z2_2}}$$</p>
<p>  이다. 수식을 통해 하나씩 전개해 보자. 출력층에 가까운 Layer 로부터 손실함수에 대한 편미분 계수를 구해 간다. 출력층에 가까운 Node 에서 구한 편미분계수가, 다음 층의 편미분계수를 구할 때 이용된다.</p>
<hr>
<p>  [1] $\frac{\partial \mathscr{L} }{\partial w_{z1_2}}$ </p>
</li>
</ul>
</li>
</ul>
<pre><code>    &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://remnote-user-data.s3.amazonaws.com/rkghcLoA6E-8RUlLqBUPOzlqEzeMBwumrBoCTlV8WmsP0TAk82d_Lx5gZu5n1sF8ePf-NXJA3Uc2t63NGU_HjCSysAW1DPPaI2BvNBW9cv2MBWsN2qGkPdeVMVF3Wurd.png&quot; width=&quot;630&quot;&gt;&lt;/p&gt;

    $$\frac{\partial \mathscr{L} }{\partial w_{z1_{2}}} = 
    \frac{\partial \mathscr{L} }{\partial z_1} \frac{\partial z_1}{\partial w_{z1{2}}}$$

    이 때, $z_1 = \varphi(y_1) w_{z1_{1}}+ \varphi(y_2) w_{z1_{2}}+ \varphi(y_3) w_{z1_{3}}$ 이므로

    $$\frac{\partial z_1}{\partial w_{z1_{2}}} = 
    \varphi(y_2)$$

    따라서, 
    $$\frac{\partial \mathscr{L} }{\partial w_{z1_{2}}} =
    \frac{\partial \mathscr{L} }{\partial z_1} \cdot \varphi(y_2)$$

    ---

    [2] $\frac{\partial \mathscr{L} }{\partial w_{z2_2}}$

    &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://remnote-user-data.s3.amazonaws.com/LWWnPr3AUBk_65UrWWr2xcwGO-Koxv-J5f6ZE4uBUggzFJ51lEmvHN6Qp72dryKtTwL6ViiZW8MAolNCBnYVcrKhbST5iv7UCgXosxoryLjzTk60mNoQSPAo_WQ62JGC.png&quot; width=&quot;630&quot;&gt;&lt;/p&gt;

    $$\frac{\partial \mathscr{L} }{\partial w_{z2_{2}}} = 
    \frac{\partial \mathscr{L} }{\partial z_2} \frac{\partial z_2}{\partial w_{z2_{2}}}$$

    이 때, $z_2 = \varphi(y_1) w_{z2_{1}}+ \varphi(y_2) w_{z2_{2}}+ \varphi(y_3) w_{z2_{3}}$ 이므로

    $$\frac{\partial z_2}{\partial w_{z2_{2}}} = 
    \varphi(y_2)$$

    따라서, 

    $$\frac{\partial \mathscr{L} }{\partial w_{z2_2}} =
    \frac{\partial \mathscr{L} }{\partial z_2} \cdot \varphi(y_2)$$

    [1], [2] 에서 최종적인 값을 구하기 위해서는

    $$\frac{\partial \mathscr{L} }{\partial z_1}, 
    \frac{\partial \mathscr{L} }{\partial z_2}$$

    의 값을 구해야 한다. 역시 Chain Rule 을 이용해 구하면 아래와 같다.

    ---

    [3] $\frac{\partial \mathscr{L} }{\partial z_1}, \frac{\partial \mathscr{L} }{\partial z_2}$

    $$\frac{\partial \mathscr{L} }{\partial z_1} = 
    \frac{\partial \mathscr{L} }{\partial \varphi(z_1)} \cdot \frac{\partial \varphi(z_1) }{\partial z_1}$$

    $$\frac{\partial \mathscr{L} }{\partial z_2} = 
    \frac{\partial \mathscr{L} }{\partial \varphi(z_2)} \cdot \frac{\partial \varphi(z_2) }{\partial z_2}$$

    ---

    이와 같이 가중치 $w_{z1_2}$ 와 $w_{z2_2}$ 에 대한 편미분계수를 구해 보았다. 이제는, 조금 더 복잡하게 가중치 $w_{y2_2}$ 에 대한 편미분계수를 구해 보자.

    [4] $\frac{\partial \mathscr{L} }{\partial w_{y2_2}}$ 

    &lt;p align=&quot;center&quot;&gt;&lt;img src=&quot;https://remnote-user-data.s3.amazonaws.com/l6okzYDKcFkwY8OJ4sjg4YgkGSwiy69MK6QsHdnJDAAA4L3c2diRani2i2L5vGgqCjTb0mhAvxtlIZwWn5jhuvN_GPhapVJ9HuZ9Kk7u3K38rpBUo8TxliTUFd5PZDY-.png&quot; width=&quot;630&quot;&gt;&lt;/p&gt;

    우선, Chain Rule 에 의해

    $$\frac{\partial \mathscr{L} }{\partial w_{y2_{2}}} = 
    \frac{\partial \mathscr{L} }{\partial y_2} \frac{\partial y_2}{\partial w_{y2_{2}}}$$

    가 성립한다. 이 때

    $$\frac{\partial y_2}{\partial w_{y2_{2}}} =
    x_2$$

    임을 이용하자. 이제 

    $$\frac{\partial \mathscr{L} }
    {\partial y_2}$$

    를 구해보자. Chain Rule 에 의해

    $$\frac{\partial \mathscr{L} }{\partial y_2} = 
    \frac{\partial \mathscr{L} }{\partial \varphi(y_2)} \cdot \frac{\partial \varphi(y_2) }{\partial y_2}$$

    이 성립한다. 즉, 

    $$\frac{\partial \mathscr{L}}
    {\partial \phi(y_2)}$$ 

    의 값을 구해야 한다.

    ---

    [6] $\frac{\partial \mathscr{L}}{\partial \varphi(y_2)}$

    By chain rule,

    $$\frac{\partial \mathscr{L}}{\partial \varphi(y_2)} =
    \frac{\partial \mathscr{L}}{\partial z_1} \frac{\partial z_1}{\partial \varphi(y_2)} + \frac{\partial \mathscr{L}}{\partial z_2}\frac{\partial z_2}{\partial \varphi(y_2)}$$

    In the same way,

    $$\frac{\partial z_1}{\partial \varphi(y_2)} =
    w_{z1_{2}}, \; \frac{\partial z_2}{\partial \varphi(y_2)} = w_{z2_{2}}$$


    Therefore, 

    $$\frac{\partial \mathscr{L}}{\partial \varphi(y_2)} = 
    \frac{\partial \mathscr{L}}{\partial z_1} \cdot w_{z1_{2}} + \frac{\partial \mathscr{L}}{\partial z_2} \cdot w_{z2_{2}}$$ 

    이 때 

    $$\frac{\partial \mathscr{L}}{\partial z_1}, 
    \frac{\partial \mathscr{L}}{\partial z_2}$$ 

    의 값은 [3] 과정에서 구하였으므로, 해당 값을 이용해 최종적인 편미분계수를 구할 수 있다.

    ---

- [Backpropagation Example 2](https://github.com/frogyunmax/OUTTA_2022AIBootcamp/blob/main/ML_Chap2-4_NN_Lecture.pdf) : pp. 65 - 80</code></pre><br>

<ul>
<li><p><em>Remark 1 :</em> 위 과정을 &#39;Local Gradient&#39; 와 &#39;Downstream Gradient&#39; 를 이용해 더 간결하게 일반화 할 수 있다. 관심이 있다면 구글링을 통해 조사해 보자.</p>
</li>
<li><p><em>Remark 2 :</em> Use Matrices </p>
<p>  $$\textbf{z} = [z_1, z_2]=
  [\varphi(y_1)w_{z_{11}} + \varphi(y_2) w_{z_{12}} + \varphi(y_3) w_{z_{13}}, \varphi(y_1)w_{z_{21}} + \varphi(y_2) w_{z_{22}} + \varphi(y_3) w_{z_{23}}]$$  </p>
<p>  순전파 결과를 행렬을 이용해 표현하면</p>
<p>  $$Z=(z_1 ; z_2) =
  YW$$</p>
<p>  where</p>
<p>  $$(Y = \begin{pmatrix}\varphi(y_1) &amp; \varphi(y_2) &amp; \varphi(y_3) \end{pmatrix}, W =\begin{pmatrix} \textbf{w}<em>{\textbf{z1}} &amp; \textbf{w}</em>{\textbf{z2}} \end{pmatrix} = 
  \begin{pmatrix} w_{z_{11}} &amp; w_{z_{21}} \\ w_{z_{12}} &amp;w_{z_{22}} \\ w_{z_{13}} &amp; w_{z_{23}}\end{pmatrix})$$</p>
<p>  이 때, 행렬곱을 이용해 밀집층의 역전파를 계산하면 아래와 같다.</p>
<p>  $$\frac{\partial \mathscr{L}}{\partial Y} = \begin{pmatrix} 
  \frac{\partial \mathscr{L}}{\partial \varphi(y_1)} &amp; 
  \frac{\partial \mathscr{L}}{\partial \varphi(y_2)} &amp;
  \frac{\partial \mathscr{L}}{\partial \varphi(y_3)} 
  \end{pmatrix}
  = \begin{pmatrix} 
  \frac{\partial \mathscr{L}}{\partial z_1} &amp; 
  \frac{\partial \mathscr{L}}{\partial z_2}
  \end{pmatrix}
  \begin{pmatrix} 
  w_{z1_1} &amp; w_{z1_2} &amp; w_{z1_3} \<br>  w_{z2_1} &amp; w_{z2_2} &amp; w_{z2_3}
  \end{pmatrix}
  = \frac{\partial \mathscr{L}}{\partial Z}W^T$$</p>
<p>  $$\frac{\partial \mathscr{L}}{\partial W} = \begin{pmatrix} 
  \frac{\partial \mathscr{L}}{\partial w_{z1_1}} &amp; 
  \frac{\partial \mathscr{L}}{\partial w_{z2_1}} \<br>  \frac{\partial \mathscr{L}}{\partial w_{z1_2}} &amp; 
  \frac{\partial \mathscr{L}}{\partial w_{z2_2}} \<br>  \frac{\partial \mathscr{L}}{\partial w_{z1_3}} &amp; 
  \frac{\partial \mathscr{L}}{\partial w_{z2_3}} 
  \end{pmatrix} = \begin{pmatrix} \varphi(y_1) \\ \varphi(y_2) \\ \varphi(y_3) \end{pmatrix}
  \begin{pmatrix} 
  \frac{\partial \mathscr{L}}{\partial z_1} &amp; 
  \frac{\partial \mathscr{L}}{\partial z_2}
  \end{pmatrix}
  = Y^T \frac{\partial \mathscr{L}}{\partial Z}$$</p>
</li>
</ul>
<br>



<h2 id="44-순전파와-역전파의-반복">4.4. 순전파와 역전파의 반복</h2>
<ul>
<li><p><strong>1 Iteration</strong> 의 정의</p>
<ul>
<li><p>순전파 + 역전파 </p>
</li>
<li><p>손실함수에 대한 역전파, Optimizer 통해 가중치 업데이트</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/L6VmbEbMz94FiQbTU6kfkP-_ZEmJ7Rqjn3o8fiq27AkRx-BBk82xV6bWBiF3z_VcxJpSMQgMWrZte7jYSURaz3SwlEX-Vjeh4IO2zZ-gKSVIxxdGMmvi_JuVjuWZ_QbH.png" width="220"></p>
</li>
</ul>
</li>
<li><p><strong>batch</strong> 의 정의 : 신경망에 한 번에 입력해주는 데이터 묶음</p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/i4tmg6xERBEB0LD8mFU6RV61Eq-vU8omLNo6E70rccQHb7W6MBG-BNylthrAKKSopWPKaYxaYHsyPiypaaGhlz6ezLOhfIZVj2jcfNgjpy5gjXjTXGs3IsDuMGY6w5_Q.png" width="450"></p> 

<ul>
<li><p>batch size : 1개의 batch에 들어 있는 데이터의 개수 $(M)$</p>
</li>
<li><p>batch 구성 방식 : 전체 데이터에서 $M$개 랜덤 추출</p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p><strong>1 epoch</strong> 의 정의 </p>
<ul>
<li><p>전체 데이터가 $D$개, batch size가 $M$일 때 $D/M$ 번의 iteration을 통해 가중치 업데이트가 1회 일어나는 과정</p>
</li>
<li><p>1 epoch = $D/M$ iterations</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/QKWLwy_ZWIZpdLOxLXyixqWZu0OYEtnUhpAF28ZN4BeL6q95UoM1zGGkThLD_Qw4DTw6uYNtdj0S0eKJPfqMiBHItYukreGuUgBdNhH_1_jQlSN8NTWSygGcZFwC6Obj.png" width="400"></p> 


</li>
</ul>
</li>
</ul>
<ul>
<li><p><em>Remark :</em> batch 를 사용할 때의 이점</p>
<ol>
<li><p>최적의 가중치를 향해 연속적이고 부드럽게 이동할 수 있음</p>
<p> 손실함수의 그래디언트는 <strong>데이터 별로 상당히 큰 차이</strong>가 있을 수 있다. 따라서 개별 데이터에 대해 가중치 업데이트를 각각 진행할 경우에는 <strong>가중치가 역동적으로 움직이는 문제</strong>가 발생할 수 있다. 그러나 batch size가 M인 batch의 평균적인 손실 함수에 대해 생각 하는 경우, 가중치 업데이트의 <strong>역동성이 완화되어 좀 더 안정적이게 된다</strong>.</p>
</li>
<li><p>메모리의 효율적 사용, 학습 속도 향상</p>
<p> 데이터 전체를 한 번에 신경망에 입력해주는 경우, 데이터셋을 이루는 <strong>모든 데이터에 대한 오차</strong>를 메모리에 전부 저장해야 한다. 이로 인해 메모리 공간을 많이 사용하여 <strong>학습 속도가 저하</strong>된다. 그러나 batch로 <strong>분할하여 학습하면 메모리 공간 절약</strong>에 의해 학습 속도가 향상된다.</p>
</li>
</ol>
</li>
</ul>
<br>

<h2 id="45-하이퍼파라미터-hyperparameter">4.5. 하이퍼파라미터 (Hyperparameter)</h2>
<ul>
<li><p>딥러닝 모델의 성능에 영향을 주는 변수</p>
</li>
<li><p>사용자가 직접 설정, 입력</p>
</li>
<li><p>Weight initialization</p>
</li>
<li><p>Learning rate</p>
</li>
<li><p>Early Stopping</p>
</li>
<li><p>Depth of Layer </p>
</li>
<li><p>Numbers of nodes in one Layer</p>
</li>
<li><p>Activation Function</p>
</li>
<li><p>Loss Function</p>
</li>
<li><p>Optimizer</p>
</li>
<li><p>batch size</p>
</li>
<li><p>patch size</p>
</li>
<li><p>Dropout ratio</p>
</li>
<li><p>etc...</p>
</li>
</ul>
<h3 id="references">References</h3>
<blockquote>
<p>별도의 출처가 표기되지 않은 Figure의 경우 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》에서 가져왔거나 원본을 기반으로 재구성 된 Figure 입니다.</p>
</blockquote>
<ul>
<li>OUTTA, 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Gradient Descent]]></title>
            <link>https://velog.io/@philiplee_235/Gradient-Descent</link>
            <guid>https://velog.io/@philiplee_235/Gradient-Descent</guid>
            <pubDate>Thu, 29 Dec 2022 12:25:39 GMT</pubDate>
            <description><![CDATA[<p>이 자료는 인공지능 교육 비영리단체 OUTTA 에서 출판한 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》 를 바탕으로 제작되었습니다. </p>
<p>Remnote 자료의 경우 <a href="https://www.remnote.com/a/-ml-dl-2-3-/6352a69ff90f29c65d085487">링크</a>를 통해 확인하실 수 있습니다.</p>
<p>Made by <a href="https://github.com/frogyunmax"><em>Hyunsoo Lee</em></a> (SNU Dept. of Electrical and Computer Engineering, Leader of Mentor Team for 2022 Spring Semester)</p>
<h3 id="31-일반적인-상황에서의-손실함수-표기">3.1. 일반적인 상황에서의 손실함수 표기</h3>
<ul>
<li>Model Parameters : $w_1, w_2, \cdots , w_M$  </li>
<li>Data points : $(x_n, y_n)_{n=0} ^{N-1}$</li>
<li>Loss function : $\mathcal{L}(w_1, w_2, \cdots, w_M ; (x_n, y_n)_{n=0} ^{N-1})$ </li>
</ul>
<br>

<h3 id="32-경사하강법에-대한-정성적-설명">3.2. 경사하강법에 대한 정성적 설명</h3>
<ul>
<li>극소점, 극대점, 안장점</li>
</ul>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/cbdcdc4e-695a-45b2-ba0c-4b1db2e33bfa/image.png" ></p>

<ul>
<li>경사하강법의 과정 (그림)</li>
</ul>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/5d28e66e-4e49-4932-89bd-ecd94407d434/image.png" width="600"></p>

<ul>
<li>경사하강법에서 최소점 찾기에 실패한 경우 (그림)</li>
</ul>
<p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/5b0bd18e-c528-4107-9c96-72ecd80782de/image.png" width="600"></p>


<h3 id="33-일변수함수에-대한-경사하강법">3.3. 일변수함수에 대한 경사하강법</h3>
<ul>
<li><p>원리 : $\mathcal{L}(w)$ 에서 순간변화율이 음수인 경우 $w$ 증가, 양수인 경우 $w$ 감소</p>
</li>
<li><p>One Step (Equation) : </p>
<p>  $$w_{k+1} = 
  w_{k} - \delta \cdot \left. \frac{d\mathcal{L}}{dw} \right|_{w = w_k}$$ </p>
<ul>
<li><p><strong>학습률</strong> (Learning rate, $\delta$) : 한 번의 Step 에서 가중치$(w)$ 값을 얼마나 변화 시킬지에 대한 척도</p>
<ul>
<li><p>적절한 학습률 값을 설정해야 한다.</p>
  <p align="center"><img src="https://velog.velcdn.com/images/philiplee_235/post/553704d6-1d73-4bbc-b963-0b8417ffe221/image.png" width="850"></p> 
</li>
<li><p>각각 적절한 학습률의 경우 (좌), 학습률이 너무 큰 경우 (우)</p>
</li>
</ul>
</li>
<li><p>종료 조건 : $w=w_{old}$ 일 떄 $\frac{d \mathcal{L}}{dw} \approxeq 0$ </p>
</li>
<li><p>$w$의 출발점 (Initial Value) 역시 영향을 줌</p>
</li>
</ul>
</li>
<li><p>Example</p>
</li>
</ul>
<pre><code class="language-python">    import numpy as np
    def descent_down_parabola(w_start, learning_rate, num_steps):
        w_values = [w_start] 
        for _ in range(num_steps):
            w_old = w_values[-1] 
            w_new = w_old - learning_rate * (2 * w_old)
            w_values.append(w_new)
        return np.array(w_values)</code></pre>
<br>

<h3 id="34-다변수함수에-대한-경사하강법">3.4. 다변수함수에 대한 경사하강법</h3>
<ul>
<li><p>Model Parameter가 $M$개라고 가정 $(w_1, w_2, \cdots , w_M)$  </p>
</li>
<li><p><strong>Equation for GD</strong> :</p>
<p>  $$\textbf w_{k+1} =
  \textbf w_{k} - \delta \cdot \left. \nabla \mathcal{L}(\textbf w) \right|_{\textbf w = \textbf w_k}$$</p>
<p>  $$\textbf w_k=
  \begin{pmatrix} w_1 \\ w_2 \\ \vdots \\ w_M \end{pmatrix}_k, \left. \nabla \mathcal{L}(\textbf w) \right| _{\textbf w = \textbf w_k} = \begin{pmatrix} \frac{\partial \mathcal{L}}{\partial w_1} \\ \frac{\partial \mathcal{L}}{\partial w_2} \\ \vdots \\ \frac{\partial \mathcal{L}}{\partial w_M}\end{pmatrix}_k$$ </p>
</li>
<li><p>Example : $L(w_1, w_2) = 2 w_1^ 2 + 3 w_2^2$ 에 대한 GD</p>
<pre><code class="language-python">import numpy as np
def descent_down_2d_parabola(w_start, learning_rate, num_steps):
    xy_values = [w_start] for _ in range(num_steps):
    xy_old = xy_values[-1] 
    xy_new = xy_old - learning_rate * (np.array([4., 6.]) * xy_old) 
    xy_values.append(xy_new) 
    return np.array(xy_values)</code></pre>
<br>

</li>
</ul>
<h3 id="35-경사하강법의-하이퍼파라미터">3.5. 경사하강법의 하이퍼파라미터</h3>
<ul>
<li>경사하강법의 Hyperparameter : 1) $\textbf w_{old_0},$ 2) $\delta$, 3) Criteria for stopping &#39;step&#39;</li>
</ul>
<ol>
<li><p>$\textbf w_{old_0}$</p>
<ul>
<li><p>Gaussian Random Distribution (정규분포)으로 Randomly choose</p>
</li>
<li><p>이 외에도 Xavier 초기화, He Normal 초기화 등 사용</p>
</li>
</ul>
</li>
<li><p>$\delta$ </p>
<ul>
<li><p>Gaussian Random Distribution (정규분포)으로 Randomly choose</p>
</li>
<li><p>10의 거듭제곱을 학습률로 사용해 경향 살펴보기, 이후 성능이 좋았던 값 근방의 값들에 대해 다시 성능 평가를 진행해 적절한 학습률 값 구하기</p>
</li>
<li><p>Example)</p>
 <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/yeIzj60kM3gP5abXyHx4Obfelx7BZwiLzMaLHfz9JOM-lqqCA3yytbxJEZnTd41l2Db2K4cdSZwp7z7GY2aGbzCg2aLEDBvGFhC1Dq4oj7Fy1i5YfL30VqK300MYQ6ej.png" width="600"></p>
</li>
<li><p>위 Graph에서 Optimal 한 Learning rate $\approxeq 10^{-1}$ </p>
<ul>
<li><p>$10^{-1}$ 근방의 값 조사</p>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/02dklRjR7O02Pk9Ti5eLoGaUFUaBKICKzShAUL3xV9uTFmcmpqaQiVzdS8SRRvaQIvflOvq4uLqrc8v5xZoROsfxTcTuaAuuBhcDcl6kRROKsUYBgT7R8_WHw1mas_6q.png" width="600"></p>
</li>
<li><p>Optimal Learning rate value  $\approxeq 0.52$ </p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>종료 조건 (Criteria for stopping &#39;step&#39;) </p>
<ul>
<li><p>Gradient 의 값을 그래프에 나타낸 뒤 사용자가 판단</p>
</li>
<li><p>Auto-stopping option : $n$번 반복할 때 값이 변화하지 않으면 학습 종료</p>
</li>
<li><p>Thresholding : 특정 값 이하로 Gradient가 감소하면 종료</p>
</li>
</ul>
</li>
</ol>
<br>

<h3 id="reference">Reference</h3>
<ul>
<li>OUTTA, 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Linear Regression]]></title>
            <link>https://velog.io/@philiplee_235/Linear-Regression</link>
            <guid>https://velog.io/@philiplee_235/Linear-Regression</guid>
            <pubDate>Thu, 29 Dec 2022 05:03:02 GMT</pubDate>
            <description><![CDATA[<p>이 자료는 인공지능 교육 비영리단체 OUTTA 에서 출판한 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》 를 바탕으로 제작되었습니다. </p>
<p>Remnote 자료의 경우 <a href="https://www.remnote.com/a/-ml-dl-2-2-/63525e35b8761d1e84ad3586">링크</a>를 통해 확인하실 수 있습니다.</p>
<p>Made by <a href="https://github.com/frogyunmax"><em>Hyunsoo Lee</em></a> (SNU Dept. of Electrical and Computer Engineering, Leader of Mentor Team for 2022 Spring Semester)</p>
<h3 id="20-용어-정의">2.0. 용어 정의</h3>
<ul>
<li><p>모델 (Model) : 관찰한 데이터로부터 예측과 결정을 얻어내는 수학적 함수</p>
</li>
<li><p>모델 파라미터 (Model Parameters): 올바른 예측과 결정을 얻기 위해 조정(tuning)하는 변수들 모델의 함수식을 결정하는 역할을 하는 변수들</p>
</li>
<li><p>손실 함수 (Loss function) : 모델의 질을 평가하는 함수</p>
</li>
</ul>
<h3 id="21-선형-회귀의-정의">2.1. 선형 회귀의 정의</h3>
<ul>
<li><p>선형 회귀 (Linear Regression) : 독립변수와 종속변수에 대해, 두 변수의 관계를 설명할 수 있는 선형 함수를 찾아내는 과정</p>
</li>
<li><p>종속 변수 : $X$, 독립 변수 : $Y$</p>
</li>
</ul>
<h3 id="22-선형-모델-세우기">2.2. 선형 모델 세우기</h3>
<ul>
<li>$F(m, b; x)=mx+b$ </li>
<li>모델 파라미터 : $(\text{slope}); m, ; (\text{intercept});b$ </li>
<li>최적의 모델을 위한 m, b의 값을 찾아내는 방법 : <strong>최소제곱법</strong></li>
</ul>
<h3 id="23-최소제곱법-mse">2.3. 최소제곱법 (MSE)</h3>
<ul>
<li>이상치 (Outlier) : 주어진 데이터의 전체적인 경향성에서 크게 벗어난 값</li>
</ul>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/4BbnXRei4wQJjEfe3OUI6VX8E_irW1zt2HaSx8FCThuLvTnqTBwrh0qicQs4cd7eIH5fM60SkGliQswXdpmVw55Ni3uob2Gk4OBPIc9yJcn1bwoh4Uv4e4YfqipaWmTW.png" width="400"></p>

<ul>
<li>최소제곱법을 사용하는 경우, 이상치가 없어야 (적어야) 잘 적용됨.</li>
</ul>
<p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/Mopgwl2FejpdOI-L5evN_DprmAMDo3dUHcupPaW-n4v3GUSXketulRhGDctDaHecpVflq-EhGwLkV69ZXd0yvOaKFvmhCiJMyogIm8HLldkVsRW0LMcxIwRl3SZvqpDH.png" width="400"></p>

<ul>
<li><p>수학적 모델링</p>
<ul>
<li><p>Data points </p>
<ul>
<li><p>전체 데이터 개수 $N$개</p>
</li>
<li><p>True Data points : $(x_i, y_i ^{(true)}), ; 0 \leq i \leq n - 1$ </p>
</li>
<li><p>Expected Data points : $(x_i, y_i ^{(pred)}), ; y_i^{(pred)} = mx_i + b, ;0 \leq i \leq n - 1$ </p>
</li>
</ul>
</li>
<li><p>잔차 (Residual)</p>
<ul>
<li><p>잔차 : $d_i = (y_i^{(true)} - y_i ^{(pred)})$ </p>
</li>
<li><p><strong>잔차 제곱합 (RSS)</strong> </p>
<p>  $$RSS 
  = \sum_{n=0}^{N-1} d_i^2 = \sum_{n=0}^{N-1}(y_i^{(true)} - y_i ^{(pred)})^2$$  </p>
<ul>
<li><p>Q) 잔차의 합 대신 제곱을 사용하는 이유? </p>
<p>A) 잔차의 부호가 고려되지 않기 때문. +, - 부호가 섞여 있는 경우 <strong>잔차의 합은 선형 회귀 모델의 오차를 Perfectly represent 하지 못한다.</strong> </p>
</li>
<li><p>Q) 잔차의 절댓값 합 대신 제곱합을 사용하는 이유? </p>
<p>  A) 절댓값을 사용한 경우 모델 오차로써의 의의는 가지지만, <strong>이를 최적화 하는 과정이 제곱합을 이용했을 때에 비해 복잡하기 때문</strong>. 여러 최적화 기법 중 미분을 사용하는데, 절댓값의 합으로 이루어진 함수를 미분해 최소값을 찾는 과정은 복잡함. 반면 제곱합을 미분해 최솟값을 찾는 과정은 상대적으로 컴퓨터가 연산하기 수월함.</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>선형 회귀 모델이 학습을 통해 최소화 하고자 하는 값 $=$ <strong>RSS</strong> </p>
<ul>
<li><p>손실 함수 (Loss Function)</p>
<ul>
<li><p>RSS를 이용해서 정의 </p>
<p>$$L(m, b)
= \sum_{n=0}^{N-1}(y_i^{(true)} - F(m, b;; x_n ))^2$$ </p>
</li>
</ul>
</li>
<li><p>최소제곱법 </p>
<ul>
<li><p><strong>손실 함수</strong> $L(m, b)$를 최소화하는 $m^{\star}, b^{\star}$ 구하기</p>
<p>$$m^{\star}, b^{\star} = 
\mathrm{argmin}_{m, b \in \mathbb{R}}(L(m, b))$$</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>위험도와 경험적 위험도 최적화</p>
<ul>
<li><p>Definition of  MSE (Risk, 위험도)  </p>
<p>$$\frac{1}{N}
\sum_{n=0}^{N-1}(y_n ^{(true)}  - y_n ^{(pred)})^2$$</p>
</li>
<li><p>경험적인 위험도 (Empirical Risk) : 학습용 데이터셋에 대해, 개별 데이터 각각의 <strong>손실의 평균</strong>을 구한 것</p>
<ul>
<li><p>ex) MSE, |Residual|, Cross-Entropy </p>
</li>
<li><p><strong>경험적 위험도 최적화</strong> : Train Datasets의 경험적인 위험도를 감소시켜 Optimal Model 을 찾는 과정</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<br>

<ul>
<li><p>과적합 (Overfitting) : Train data 수가 적을 때, Train data에 모델이 과하게 학습되어 Test data에 대한 성능이 감소하는 경우</p>
<ul>
<li><p>구조적 위험도 최소화(Structural Risk Minimization) </p>
<ul>
<li><p>기존의 오차 함수 (경험적 위험도)에 <strong>Model의 Complexity에 관한 Penalty 항을 추가</strong>해, 모델의 Performance와 Complexity 간의 균형을 맞추는 학습 방법</p>
</li>
<li><p>Overfitting 방지</p>
</li>
<li><p>Ex) 가중치 규제(Weight Decay), 배치 정규화(Batch Normalization), 규제(Regularization), etc... </p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<br>

<h3 id="24-mstar-와-bstar-구하기">2.4. $m^{\star}$ 와 $b^{\star}$ 구하기</h3>
<ul>
<li><p>Method 1 : 직접 구하기 (Brute-Force)</p>
  <p align="center"><img src="https://remnote-user-data.s3.amazonaws.com/BC3zZ4AGWaarvp2IAxw8nMf33jN_VZvFamevNDLUe7A97_KmQFe3yMZ-lwqMZzWsozP1HUK-2arB6dRBfb95dzWFHaOa4ZAnMhaRNAv7XrCv-gKGK5Dqrb6UHSwnIAEX.png"></p>

<p>(0) 원리 : 손실 함수가 최솟값을 가질 때 : </p>
<p>$$\nabla L(m, b)| 
_{m=m^{\star}, ;b=b^{\star}} = 0$$</p>
<p>(1) 손실 함수 $L(m, b)$ 전개</p>
<p>$$\mathscr{L}(m, b; (x_n, y_n)^{N-1}_{n=0}) 
= \sum _{n=0} ^{N-1}{(y_n - (mx_n + b))^2} 
= \sum _{n=0} ^{N-1}{(m^2 x_n^2 + b^2 + y_n ^2  + 2bmx_n - 2mx_n y_n - 2by_n)}$$</p>
<p>(2) $L(m, b)$을 $m, ; b$에 대해 <strong>편미분</strong> </p>
<p>$$\frac{\partial \mathscr{L} (m, b)}{\partial m} =
\sum_{n=0}^{N-1} (2mx_n^2 + 2bx_n - 2x_n y_n) = 0$$</p>
<p>$$\frac{\partial \mathscr{L} (m, b)}{\partial b} = 
\sum_{n=0}^{N-1} (2b + 2mx_n - 2y_n) = 0$$</p>
<p>(3) 편미분 식으로부터 $m^{\star}, b^{\star}$ 구하기</p>
<p>$$m^{\star} = 
\frac{\sum\limits_{n=0} ^{N-1} {x_{n} y_{n}} - \frac{1}{N} \sum\limits_{n=0} ^{N-1}{x_n} \sum\limits_{n=0} ^{N-1}{y_n}}{\sum\limits_{n=0} ^{N-1} {{x_n}^2} - \frac{1}{N} (\sum\limits_{n=0} ^{N-1}{x_n} )^2}$$</p>
<p>$$b^{\star} 
= \bar{y} - m^{\star} \bar{x}$$ </p>
<ul>
<li>이렇게 구한 $m^{\star}$와 $b^{\star}$ 를 &#39;<strong>최소제곱추정량</strong>&#39; 이라 한다. </li>
</ul>
<p>(4) 최소제곱법을 사용할 수 없는 경우 </p>
<ol>
<li>Dataset의 Data point 개수 $\leq$ 1</li>
<li>모든 Data point가 같은 $x_i$ 값을 가지는 경우</li>
</ol>
<p>(5) 일반화</p>
<p>$n$개의 data point $(x_1, y_1), \cdots (x_n, y_n)$ 에 대해, 변수를 다음과 같이 정의하자.</p>
<p>$$\textbf{y} = 
\begin{pmatrix} y_{1} \\ y_{2} \\ \vdots \\ y_{n} \end{pmatrix}, \textbf{X}= \begin{pmatrix} 1 &amp; x_1 \\ 1 &amp; x_2 \\ \vdots &amp;\vdots \\ 1 &amp; x_n \end{pmatrix}, \textbf{M}= \begin{pmatrix} m \\ b \end{pmatrix}, \textbf{e} = \begin{pmatrix} \epsilon_1 \\ \epsilon_2 \\ \vdots \\ \epsilon_n\end{pmatrix}$$  </p>
</li>
</ul>
<p>  이 때 앞서 정의한 손실 함수는 아래와 같다.</p>
<p>   $$\mathscr{L}(m, b; (x_n, y_n)^{N-1}_{n=0}) =
   RSS = (\textbf y  - \textbf X \textbf M)^{\top} (\textbf y  - \textbf X \textbf M)$$</p>
<p>   (2), (3)의 과정을 통해 $M^{\star}$ 의 값을 구하면 다음과 같다.</p>
<p>   $$\frac{\partial (RSS)}{\partial M^{\star}} = 
   -2 \textbf X^{\top} \textbf y + 2 \textbf X^{\top} \textbf X \textbf M^{\star} = 0$$</p>
<pre><code>$$\therefore M^{\star} 
= \begin{pmatrix} m^{\star} \\\ b^{\star}\end{pmatrix} = (\textbf X^{\top} \textbf X)^{-1} \textbf X^{\top} \textbf y$$ </code></pre><ul>
<li>Method 2: Gradient Descent<ul>
<li>In Chapter 2.3.</li>
</ul>
</li>
</ul>
<br>

<h3 id="reference">Reference</h3>
<ul>
<li>OUTTA, 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[Generative Adversarial Networks]]></title>
            <link>https://velog.io/@philiplee_235/Generative-Adversarial-Networks</link>
            <guid>https://velog.io/@philiplee_235/Generative-Adversarial-Networks</guid>
            <pubDate>Sun, 27 Nov 2022 14:59:10 GMT</pubDate>
            <description><![CDATA[<p>대표적인 Deep generative model 중 하나인 GAN (Generative Adversarial Network) 를 처음 소개한 논문을 리뷰해 보았다.</p>
<blockquote>
<p>Original Paper : <a href="https://arxiv.org/abs/1406.2661">Goodfellow, I. et al., 2014.</a></p>
</blockquote>
<h2 id="abstract">Abstract</h2>
<p>Adversarial process (경쟁 과정)을 통해 generative model 을 추정 (estimate)하는 새로운 프레임워크를 제안하였다.</p>
<ul>
<li><p>2개의 모델을 동시에 학습</p>
<ul>
<li><p><em>G</em> (Generator) : 데이터 분포를 학습, <em>D</em>가 실수할 확률을 최대화</p>
</li>
<li><p><em>D</em> (Discriminator) : 샘플된 데이터가 ‘G에 의해 생성된 데이터가 아니라 학습 데이터 (=실제 데이터)일 확률’ 을 추정</p>
</li>
<li><p>Minimax two-player game 을 통해 2개의 모델을 동시에 학습</p>
</li>
</ul>
</li>
<li><p>임의의 함수 집합에 속한 두 함수 <em>G, D</em> 에 대해 아래 조건을 만족하는 유일한 해가 존재</p>
<ul>
<li><em>G</em> : 훈련 데이터 분포 학습 <em>(논문에서는 recover 이라는 워딩을 사용하였지만, 이는 실제 학습 데이터의 분포를 완벽히 catch 한다고 해석)</em></li>
<li><em>D</em> : 함숫값이 0.5인 상수함수</li>
</ul>
</li>
<li><p><em>G, D</em> 를 다층 퍼셉트론으로 정의할 시 역전파를 통해 모델 학습 가능</p>
<ul>
<li>마르코프 체인은 필요하지 않음</li>
</ul>
</li>
</ul>
<br>

<h2 id="introduction">Introduction</h2>
<p>DL model 의 목표 : AI 에 활용될 수 있는 여러 종류의 데이터 (이미지, 음원 파형, 자연어 등)에 대한 확률 분포를 표현할 수 있는 계층적인 모델을 개발하는 것</p>
<ul>
<li><p>이러한 목표에 가장 가까웠던 시도들 중에는 ‘discriminative model’ 이 있음.</p>
</li>
<li><p>위와 같은 성공적인 시도들은 역전파 및 Dropout 에 기반한 시도들이 많음</p>
<ul>
<li>Piecewise linear unit (Dropout의 원리; 조각적인 선형 레이어) with well-behaved gradient</li>
</ul>
</li>
</ul>
<ul>
<li><p>반면, <em>Deep generative model</em> 은 이러한 목표에 대해 많은 영향력을 주지 못하였음.</p>
<ul>
<li><p>(1) MLE 와 같은 전략에서 발생하는 확률적 계산을 근사하는 데 어려움을 가졌기 때문</p>
</li>
<li><p>(2) piecewise linear unit 의 장점을 잘 반영하지 못함</p>
</li>
</ul>
</li>
</ul>
<br>

<p>이 논문에서는, (1) 및 (2)와 같은 단점을 극복할 수 있는 새로운 generative model 을 제안. </p>
<ul>
<li><p>논문에서 제안된 Adversarial net : generative model 과 discriminative mode 은 경쟁적 구도를 가짐</p>
<ul>
<li><p>Generative model : [<em>counterfeiters</em>] 거짓 정보를 생산하고 이가 감지되지 않게끔 하는 역할</p>
</li>
<li><p>Discriminative model : [<em>police</em>] 거짓 정보를 감지 및 판별</p>
</li>
<li><p>두 모델의 경쟁은 각각의 성능을 발전시키며, 결과적으로 거짓 정보가 실제 정보와 구분될 수 없을 때 까지 계속됨</p>
</li>
</ul>
</li>
</ul>
<br>

<p>해당 프레임워크 학습을 위해서는 다양한 종류의 최적화 알고리즘이 사용될 수 있음</p>
<ul>
<li><p>이 논문에서는, <em>G</em>가 다층 퍼셉트론으로 구성되어 있고 각 층에서 random noise 를 추가해 이미지를 생성하는 경우 그리고 <em>D</em>가 다층 퍼셉트론으로 구성되어 있는 경우에 대해서 다룸</p>
</li>
<li><p>이를 <em>adversarial net</em> 이라고 지칭</p>
<ul>
<li>두 개의 모델을, 역전파 / dropout / 순전파를 통한 <em>G</em>에 대한 sampling 만을 통해 학습</li>
<li>마르코프 체인과 Appoximate Inference 와 같은 기법은 사용하지 않음</li>
</ul>
</li>
</ul>
<br>

<h2 id="adversarial-nets">Adversarial nets</h2>
<p>Adversrial modeling framework → 두 개의 모델이 모두 다층 퍼셉트론으로 구성되어 있을 때 가장 직관적, 이 연구에서도 이를 사용</p>
<p><strong>Model 정의 및 Notation</strong></p>
<p>1) Global notation </p>
<ul>
<li>학습 데이터 = $G$로부터 생성되지 않은 true data = training examples</li>
</ul>
<p>2) Generative model : $G$</p>
<ul>
<li>$G$를 통과한 데이터 ($x$) 의 분포 : $p_g$</li>
<li>Input noise variables (to <em>G</em>) : $p_{\bold{z}} (\bold{z})$</li>
<li>다층 퍼셉트론의 parameter : $\theta_g$</li>
<li>치역 (mapping space) : $G(\bold{z}; \ \theta_g)$
→ ** 거짓 이미지가 학습 데이터에 가까워지도록 학습 → minimizing $\log(1-D(G(\bold{z}))$**</li>
</ul>
<p>3) Discriminative model : $D$</p>
<ul>
<li>다층 퍼셉트론의 parameter : $\theta_d$</li>
<li>$D(\bold{x}, \ \theta_d)  \in \R$   → $\bold{x}$가 $p_g$ 가 아닌, 학습데이터에 속할 확률을 나타냄
  → <strong>1) Training example 과 2) $G$로부터 sample 된 data에 대해 올바른 label 을         부여할 확률을 최대화하는 방향으로 학습</strong></li>
</ul>
<br>

<p><strong>Minimax game</strong></p>
<aside>
💡 Discriminator and Generator are playing two-player minimax game!

</aside>


<p>목적 함수를 $V(G, D)$ 라고 하면 minimax game 을 나타낸 수식은</p>
<p>$$
\min <em>G \max_D V(D, G) = \mathbb{E}</em>{\bold{x} \sim p_{data} (\bold{x})} [\log D(\bold{x})] + \mathbb{E}<em>{\bold{z} \sim p</em>{\bold{z}}(\bold{z})} [\log(1- D(G(\bold{z})))]
$$</p>
<p>첫 번재 항은 <em>D</em> 에 대한 최적화를, 두 번째 항은 <em>G</em> 에 대한 최적화를 나타낸다.</p>
<br>

<p><strong>Training Algorithm</strong></p>
<figure>
<img src="https://velog.velcdn.com/images/philiplee_235/post/20db0e0e-c457-43c7-a4e4-a7f15c5a7a5c/image.png" alt="Training algorithm of GAN" style="width:100%">
<figcaption align = "center">Figure 1. Algorithm for training GAN (Figure source : <A href = "https://arxiv.org/abs/1406.2661"> Goodfellow, I. et al., 2014.</A>)</figcaption>
</figure>


<p>학습 과정을 나타내는 loop 에서 D를 완전히 최적화 하는 것은 매우 많은 연산을 필요로 하며, 유한한 데이터셋에 대해 이를 수행할 경우 overfitting 이 발생할 수도 있다.</p>
<ul>
<li>따라서, <em>G</em> 를 최적화 하는 step 마다 <em>D</em> 를 최적화 하는 step 을 $k$번 수행</li>
<li><em>G</em>는 천천히 학습되며, <em>D</em>가 optimal solution 근처에 머무르며 수렴하는 방향으로 학습이 진행됨</li>
<li>SML/PCD 에서 사용된 방식과 유사</li>
</ul>
<br>

<p>1) Training <em>D</em></p>
<p>$$
\max_D V(G,D) = \mathbb{E}<em>{\bold{x} \sim p</em>{data} (\bold{x})} [\log D(\bold{x})] + \mathbb{E}<em>{\bold{z} \sim p</em>{\bold{z}}(\bold{z})} [\log(1- D(\overline{G}(\bold{z})))]
$$</p>
<ul>
<li>maximize 를 위해 Gradient ascent 기법 사용<br></br></li>
</ul>
<p>2) Training <em>G</em></p>
<p>$$
\min_G V(G,D) = \mathbb{E}<em>{\bold{z} \sim p</em>{\bold{z}}(\bold{z})} [\log(1- \overline{D}(G(\bold{z})))]
$$</p>
<ul>
<li><p>실제 학습 시에는 $\log{(1-D(G(\bold{z})))}$ 를 minimize 하는 것 대신, $\log(D(G(\bold{z}))$ 를 maximize 하게끔 <em>G</em> 를 학습시킴.</p>
<ul>
<li>두 식 모두 $\bold{z}$에 대한 gradient 는 같으므로, <em>G, D</em> 를 모두 같은 point 로 수렴하게 함</li>
<li>학습 초기에 $\log{(1-D(G(\bold{z})))}$가 saturate 되는 문제를 방지하기 위해 사용된 기법</li>
</ul>
</li>
<li><p>학습 초기에는 <em>G</em> 의 성능이 좋지 않으므로, <em>D</em> 가 쉽게 학습 데이터와 거짓 이미지를 구분할 수 있고, 결과적으로 $\log{(1-D(G(\bold{z})))} \rightarrow \infin$ 가 발생 (saturate).</p>
</li>
</ul>
<br>

<p><strong>Training examples</strong></p>
<figure>
  <img src="https://velog.velcdn.com/images/philiplee_235/post/3782428a-782f-4bbb-a455-0f4dc594ae42/image.png">
  <figcaption align = "center">Figure 2. Distribution of variables. (Figure source : <A href = "https://arxiv.org/abs/1406.2661"> Goodfellow, I. et al., 2014.</A>)</figcaption>
</figure>


<p>1) Notation</p>
<ul>
<li>blue dashed line : distribution of <strong>discriminator</strong></li>
<li>black dotted line : distribution of <strong>data generating (real)</strong> → $p_{data}$</li>
<li>green solid line : distribution of <strong>generator’s generative distribution (fake)</strong> → $p_g$</li>
<li>lower horizontal line : domain of $\bold{z}$ (sampled) → in this case, <em>uniform distribution</em></li>
<li>upper horiziontal line : domain of $\bold{x}$</li>
<li>upward arrows : mapping $\bold{x} = G(\bold{z})$</li>
</ul>
<p>2) Explanation</p>
<ul>
<li><p>a)  $p_{data}$와 $p_g$는 유사하지만 완벽히 일치하지 않는다. Discriminator 의 경우, 비교적 정확한 분류를 해 낸다 (예측한 확률이 1에 가까운 부분과 0에 가까운 부분이 드러남)</p>
</li>
<li><p>b) <em>D</em> 를 optimize 하는 loop 를 통과한 후의 상태. a) 에 비해 discriminator 의 성능이 높아짐을 확인할 수 있으며, training data와 <em>G</em>에 의해 sample 된 데이터를 구분한다.</p>
</li>
<li><p>c) <em>G</em> 를 optimize 하는 loop 를 통과한 후의 상태. $G(\bold{z})$가 실제 학습 데이터에 가까운 부분을 나타내도록 학습되었다.</p>
</li>
<li><p>d) a) ~ c) 를 여러 번 반복해 학습된 후의 상태. 충분히 학습되었다면 $p_g = p_{data}$ 에 도달하고 더 이상 성능이 향상되지 않는다. <em>D</em> 는 학습 데이터와 <em>G</em> 로부터 sample 된 데이터를 구분할 수 없는 상태에 도달한다. 즉, $D(G(\bold{x})) = 1/2$ 인 상태이다.</p>
</li>
</ul>
<br>

<h2 id="theoretical-results">Theoretical Results</h2>
<p><em>G</em>가 정의하는 확률분포 $p_g$ : $\bold z \sim p_z$ 를 이용해 샘플링된 변수들 ($G(\bold{z})$)의 분포와 동일</p>
<ul>
<li>따라서, 위에 제시된 알고리즘이 충분한 자원/시간이 있다면 $p_{data}$에 대한 좋은 estimator 가 될 수 있음</li>
<li>이 절에서는 위 내용을 증명하고자 함</li>
</ul>
<hr>
<p><strong>Global Optimality of $p_g = p_{data}$</strong></p>
<aside>
💡 Minmax game has a global optimum.
</aside>
<br>

<p><strong>Prop 1</strong> 고정된 <em>G</em> 에 대해, <em>D</em>의 optimal solution 이 존재하며 이는 아래 식과 같다.</p>
<p>$$
D_G ^* (\bold{x}) = \frac{p_{data}(\bold{x})}{p_{data}(\bold{x}) + p_g (\bold{x})}
$$</p>
<p><em>Proof</em> 고정된 <em>G</em> 에 대한 optimization problem (for <em>D</em>) 는 다음 식과 같이 나타난다.</p>
<p>$$
\max_D V(G,D) = \mathbb{E}<em>{\bold{x} \sim p</em>{data} (\bold{x})} [\log D(\bold{x})] + \mathbb{E}<em>{\bold{z} \sim p</em>{\bold{z}}(\bold{z})} [\log(1- D(\overline{G}(\bold{z})))]
$$</p>
<p>이 때 $V(D)$를 다시 계산해보면,</p>
<p>$$
V(G,D) = \int_{\bold{x}}p_{data}(\bold{x}) \log (D(\bold{x}))dx + \int_{\bold{z}} p_{\bold{z}}(\bold{z}) \log(1-D(\overline{G}(\bold{z})))d\bold{z}
$$</p>
<p>적분변수를 $\bold{x}$로 통일하자. $\overline{G}(\bold{z}) = \bold{x}$ 로 두면, $\overline{G}(\bold{z})$ 의 분포는 $p_g$ 를 따르게 된다. 따라서,</p>
<p>$$
V(G,D) = \int_{\bold{x}}p_{data}(\bold{x}) \log (D(\bold{x}))+ p_{g}(\bold{x}) \log(1-D(\bold{x}))d\bold{x}
$$</p>
<p>가 성립한다. 이 때, 간단한 로그함수 예제를 살펴보면 $^\forall (a, \ b) \in \R^2 \ \backslash \ (0, 0)$  에 대해 $f(x) = a \log x+ b \log (1-x)$ 는 $x = \frac{a}{a+b}$  에서 최댓값을 가진다. 우리는 $V(D)$ 를 maximize 해야 하고, 피적분함수는 </p>
<p>$$
D^*(\bold{x}) = \frac{p_{data}(\bold{x})} {p_{data}(\bold{x}) + p_g (\bold{x})}
$$</p>
<p>일 때 최댓값을 가진다.<br></br></p>
<p>Prop 1을 이용해, minimax problem 을 아래와 같이 나타낼 수 있다. <em>Virtual training criterion $(C(G))$</em> 을 다음과 같이 정의하자. Fixed <em>G</em> 에 대한 optimization problem 에 $D_G ^* (\bold{x})$ 의 식을 대입하면,</p>
<p>$$
C(G) = \max_D V(G, D) = \mathbb{E}<em>{\bold{x} \sim p</em>{data} (\bold{x})} \left[\log \frac{p_{data}(\bold{x})}{p_{data}(\bold{x}) + p_g (\bold{x})}\right] + \mathbb{E}<em>{\bold{x} \sim p</em>{g}(\bold{x})} \left[\log\frac{p_{g}(\bold{x})}{p_{data}(\bold{x}) + p_g (\bold{x})}\right]
$$</p>
<br>


<p><strong>Thm 1</strong> $C(G)$가 최소가 되기 위한 필요충분조건은 $p_g = p_{data}$ 이며, 이 때의 최솟값은 $-\log4$ 이다.</p>
<p><em>Proof</em> 만약 $p_g = p_{data}$  가 성립한다면, 이 때 $C(G) = -\log4$ 이다. 따라서 $C(G)$ 에서 $\log 4$ 를 빼 보자. 이 때 KL-divergence 의 정의를 기억하자. 연속확률변수 $P, Q$ 에 대해서 각각의 확률밀도함수를 $p(x), q(x)$ 라고 하면</p>
<p>$$
D_{KL}(P || Q) = \int_{-\infin}^{\infin}p(x) \log \left(\frac{p(x)}{q(x)} \right)dx
$$</p>
<p>이다. 따라서,</p>
<p>$$
C(G) = -\log 4 + D_\text{KL}\left( p_{data} \left | \right| \frac{p_{data}+p_g}{2} \right)+D_\text{KL}\left( p_{g} || \frac{p_{data}+p_g}{2} \right)
$$</p>
<p>가 성립한다. KL-divergence 내부 분모 2가 $-\log 4$로부터 나온 항임을 기억하자. 이제 두 개의 KL-divergence 항을 Jensen-Shannon divergene 를 이용해 정리하자.</p>
<p>$$
\text{JSD}(P||Q) = \frac{1}{2} D_{\text{KL}}\left(P|| \frac{P+Q}{2}\right)+ \frac{1}{2} D_{\text{KL}}\left(Q|| \frac{P+Q}{2}\right)
$$</p>
<p>정의를 이용하면,</p>
<p>$$
C(G) = -\log 4 + 2 \text{JSD}(p_{data} || p_g)
$$</p>
<p>여기서 Jensen-Shannon divergene 의 성질 중, non-negative 한 성질을 이용하자. 결과적으로</p>
<p>$$
C(G) = -\log 4 + 2 \text{JSD}(p_{data} || p_g) \geq -\log 4
$$</p>
<p>가 성립하고 등호는 $p_{data} = p_g$ 일 때 성립한다. 따라서 $C(G)$의 최솟값은 $-\log4$ 이며, 이를 만족시키는 유일한 해는 $p_g = p_{data}$ 이다.</p>
<blockquote>
<p><strong>따라서, 논문에서 제시한 generative model 은 original data의 분포를 완전히 copy 할 수 있다.</strong></p>
</blockquote>
<hr>
<p><strong>Convergence of Algorithm 1</strong></p>
<p><strong>Prop 2</strong> 만약 1) <em>G, D<em>의 모델 크기가 충분하고, 2) Algorithm 1의 매 loop 마다 *D</em>가 해당 step 의 <em>G</em>에 대해 $D^</em>$에 도달할 수 있고, $p_g$가 $\mathbb{E}<em>{\bold{x} \sim p</em>{data} (\bold{x})} [\log D^<em><em>G(\bold{x})] + \mathbb{E}</em>{\bold{x} \sim p_{g}(\bold{x})} [\log(1- D^</em><em>G(\bold{z}))]$ 를 최대화 시키는 방향으로 학습된다면, $p_g \rightarrow p</em>{data}$. </p>
<p>$$
D_G ^* (\bold{x}) = \frac{p_{data}(\bold{x})}{p_{data}(\bold{x}) + p_g (\bold{x})}
$$</p>
<p><em>Proof</em> 앞서 $V(G, D)$에서 치환을 통해 $G$에 대한 항을 $p_g$를 이용해 표현하였으므로, $V(G, D)=U(p_g, D)$ 로 쓸 수 있다. 이 때, 다음과 같은 사실을 이용하자.</p>
<blockquote>
<p>만약 $f(x) = \sup_{\alpha \in A}f_{\alpha}(x)$ 이고 모든 $\alpha$에 대해 $f_{\alpha}(x)$가 convex 하다면, $\beta = \arg \sup <em>{\alpha \in A}f</em>{\alpha}(x)$ 에 대해 $\partial f_{\beta}(x) \in \partial f$ 가 성립한다.</p>
</blockquote>
<p>Prop 2 의 경우, $U(p_g, D)$가 $p_g$에 대해 convex 하고, 주어진 <em>G</em>에 대한 $D^*$에서 $p_g$에 대한 gradient 를 구하는 상황이다. $\sup_D U(p_g, D)$ 역시 $p_g$에 대해 convex 하며, Thm 1. 에서 증명한 바와 같이 유일한 최솟값을 가지므로, $p_g$에 대해 충분히 작은 양의 변화를 주면 $p_g$는 $p_{data}$ 로 수렴한다.</p>
<br>

<p><strong>In practice</strong></p>
<p><em>G, D</em> 2개의 layer는 다층 퍼셉트론이며, 각각은 파라미터 $\theta_g, \ \theta_d$ 로 표현된다. 따라서 실제로는 $p_g$ 를 이상적인 형태 ($p_{data}$)로 최적화 시키기 보다는 $\theta_g$에 대한 최적화를 진행한다. 따라서 모든 $p_g$를 나타내지는 못하며, parameter space 의 관점에서 볼 때는 주어진 최적화 문제를 해결하는 여러 개의 임계점 (critical point) 가 존재한다. 그러나, 위에 나타난 증명의 경우 모델이 infinite capacity 를 가진다고 가정한 상태 (parameter 와 같은 제한을 가지지 않는 상태)에서 성립한다. 따라서 실제 학습에서 사용한 모델이 위에서 제시한 이론적 배경을 완벽하게 만족하는 것은 아니다. 다만 다층 퍼셉트론을 이용한 경우에도 좋은 성능이 나타난 것으로부터, 다층 퍼셉트론은 이론을 완벽하게 만족하지 못하는 상태에서 사용하기에 <em>합리적인</em> 모델임을 알 수 있다.</p>
<br>

<h2 id="experiments">Experiments</h2>
<p><strong>기본 모델 세팅</strong></p>
<ul>
<li>사용한 데이터셋 : MNIST, TFD, CIFAR-10</li>
<li>Activation function<ul>
<li><em>G</em> : ReLU + Sigmoid</li>
<li><em>D</em> : maxout</li>
</ul>
</li>
<li>Dropout on <em>D</em></li>
<li><em>G</em>의 첫 번째 layer에 입력으로 noise 를 사용, 이후 layer 에서는 noise 를 따로 주지 않음</li>
</ul>
<p><strong>Results</strong></p>
<p>Gaussian Parzen window 를 이용해 test set 과 <em>G</em> 를 통해 생성된 데이터 사이 ($p_g$의 분포를 나타냄) 의 log-likelihood 측정.</p>
<ul>
<li>Gaussian 에서 parameter $\sigma$의 경우 validation data를 이용한 Cross-validation 을 통해 결정됨</li>
</ul>
<figure>
<img src="https://velog.velcdn.com/images/philiplee_235/post/fec3ba08-13a5-41ee-9b73-2352f027a51a/image.png" width="800">
  <figcaption align = "center">Figure 3. Parzen window 를 이용한 log-likelihood <br>측정 결과. 평균과 분산을 함께 나타내었다. <br>(Figure source : <A href = "https://arxiv.org/abs/1406.2661"> Goodfellow, I. et al., 2014.</A>)</br></figcaption>
</figure>


<ul>
<li>이러한 방식으로 log-likelihood 를 측정하는 것은 그 측정 결과의 분산도 크고 고차원 공간에서 좋은 결과를 나타내지 못하지만, (당시의) 지식 수준에서 사용할 수 있는 방법 중 가장 좋은 방법이었다.</li>
<li>Sampling 은 가능하지만, likelihood 를 정확히 측정할 수 없는 점은 후속 연구를 통해 개선될 여지가 있다.</li>
<li>아래 그림은 <em>G</em> network 를 학습시킨 후 sampling 한 결과를 나타낸다.</li>
</ul>
<figure>
<img src="https://velog.velcdn.com/images/philiplee_235/post/286ff995-2430-4aae-a55e-d443f1afbba9/image.png" width="800">
  <figcaption align = "center">Figure 4. G를 학습시킨 후 sampling 한 결과. 각각 a) MNIST b) TFD c) CIFAR-10 with fully-connected model d) CIFAR-10 with deconvolutional generator 를 이용해 sampling 한 결과이다.(Figure source : <A href = "https://arxiv.org/abs/1406.2661"> Goodfellow, I. et al., 2014.</A>)</figcaption>
</figure>

<br>

<figure>
<img src="https://velog.velcdn.com/images/philiplee_235/post/9dc6e85b-925c-4fbb-9174-03bbac1df921/image.png" width="800">
  <figcaption align = "center">Figure 5. Fully-connected generator model 에 대해,<br>z-space 의 좌표들 간 보간을 통해 얻은 결과를 나타낸다.</br>(Figure source : <A href = "https://arxiv.org/abs/1406.2661"> Goodfellow, I. et al., 2014.</A>)</figcaption>
</figure>




<br>

<h2 id="advantages-and-disadvantages">Advantages and disadvantages</h2>
<p>이전 모델들과의 비교를 통해 장/단점을 분석해 보면 아래와 같다.</p>
<p><strong>Disadvantages</strong></p>
<ol>
<li>$p_g (\bold{x})$를 직접적으로 표현할 수 없다.</li>
<li><em>G</em>와 <em>D</em>가 적절하게 반복되며 업데이트 되어야 한다. (Synchronizing 이 되어야 한다)<ul>
<li><em>D</em>를 업데이트하지 않고 <em>G</em>를 계속해서 업데이트 하는 것은 방지해야 한다.</li>
</ul>
</li>
</ol>
<p><strong>Advantages</strong></p>
<p>[Computational advantage]</p>
<ol>
<li>마르코프 체인이 전혀 필요하지 않다. Gradient 를 계산하기 위해서는 역전파 만으로도 충분하다.</li>
<li>학습 과정에서 inference 가 필요하지 않다.</li>
<li>여러 가지 미분가능한 함수들을 통해 모델을 구축할 수 있다.</li>
</ol>
<p>[Statistical advantage]</p>
<ol>
<li><p><em>G</em>는 학습 데이터로부터 직접적으로 업데이트 되지 않고, <em>D</em>에서 계산된 gradient 만을 이용해 업데이트 된다.</p>
<ul>
<li>즉, 입력되는 학습 데이터는 <em>G</em> network 에는 입력 (복사)될 필요가 없다.<br></br></li>
</ul>
</li>
<li><p>Sharp / degenerate distribution (퇴화 분포) 을 표현할 수 있다.</p>
<ul>
<li>마르코프 체인에 기반한 network 의 경우 이러한 분포들을 명확히 나타내지 못한다.</li>
</ul>
</li>
</ol>
<figure>
<img src="https://velog.velcdn.com/images/philiplee_235/post/24522aab-5e2a-4dfd-8918-fef13ef797ef/image.png" width="800">
  <figcaption align = "center">Figure 6. 여러 가지 deep generative model 의 특징 비교.<br>(Figure source : <A href = "https://arxiv.org/abs/1406.2661"> Goodfellow, I. et al., 2014.</A>)</br></figcaption>
</figure>

<br>

<h2 id="conclusions-and-future-work">Conclusions and future work</h2>
<p>이 논문에서 제시한 framework 는 다양한 확장 가능성을 가진다. 크게 5가지의 가능성을 제시한다.</p>
<ol>
<li><p>Conditional generative model</p>
<ul>
<li><em>G, D</em> network 에 모두 $\bold{c}$를 입력해 준다면, $p(\bold{x} | \bold{c})$ 를 얻을 수 있다.</li>
</ul>
</li>
<li><p>Learned approximate inference</p>
<ul>
<li>$\bold{x}$가 주어졌을 때 $\bold{z}$를 예측하는 auxiliary network (보조 신경망)을 학습시켜 수행할 수 있다.</li>
</ul>
</li>
<li><p>$p(\bold{x}<em>S | \bold{x}</em>{\not S})$ 을 근사적으로 모델링할 수 있다.</p>
<ul>
<li>$S$ : $\bold{x}$의 인덱스들로 이루어진 부분집합</li>
<li>parameter 를 공유하는 conditional model 집합을 학습시킴으로써 얻을 수 있다.</li>
</ul>
</li>
<li><p>Semi-supervised learning</p>
<ul>
<li>일부 데이터에 대해 label 이 존재한다면, <em>D</em>에서 추출된 feature 또는 inference net을 통해 classifier 의 성능을 향상시킬 수 있다.</li>
</ul>
</li>
<li><p>Efficiency improvements</p>
<ul>
<li><em>G, D</em> 를 학습시키기 위한 더 나은 방법을 각각 나누어서 제시하거나, 학습 과정에서 $\bold{z}$를 samling 하기 위한 분포를 바꾸어 학습을 가속화시킬 수 있다.</li>
</ul>
</li>
</ol>
<p>이 논문은 적대 신경망이 성공적이라는 것을 입증하였으며, 이러한 연구 방향이 유용할 수 있다는 것을 보여주었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[머신러닝을 위한 기초 수학]]></title>
            <link>https://velog.io/@philiplee_235/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B8%B0%EC%B4%88-%EC%88%98%ED%95%99</link>
            <guid>https://velog.io/@philiplee_235/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B8%B0%EC%B4%88-%EC%88%98%ED%95%99</guid>
            <pubDate>Sun, 27 Nov 2022 14:51:44 GMT</pubDate>
            <description><![CDATA[<p>이 자료는 인공지능 교육 비영리단체 OUTTA 에서 출판한 《인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기》 를 바탕으로 제작되었습니다. Remnote 자료의 경우 <a href="https://www.remnote.com/a/outta/63525bc8f90f29c65d084baf">링크</a>를 통해 확인하실 수 있습니다.</p>
<h2 id="1-mathbbrn--공간과-함수">1. $\mathbb{R}^n$  공간과 함수</h2>
<p><strong>1.1. $\mathbb{R}^n$ 공간과 벡터 ( $n$ 차원 유클리드 공간)</strong></p>
<ul>
<li><p>곱집합 $\Leftrightarrow$ $X \times Y=\left\lbrace (x, y): x \in X, y \in Y \rbrace\right.$ </p>
</li>
<li><p>$\mathbb{R}^n$ $\Leftrightarrow$ 실수로 구성된 $n$ 차원 벡터의 집합, $\left\lbrace (x_1, x_2, \cdots , x_n) : x_1, x_2, \dots x_n \in \mathbb{R} \rbrace\right.$ </p>
</li>
<li><p><strong>Vector Space</strong> $\Leftrightarrow$ 원소들 간의 합과 상수배가 정의된 공간</p>
</li>
<li><p>벡터 연산</p>
<ul>
<li><p>벡터의 경우 <strong>볼드체</strong>로 표기한다.</p>
</li>
<li><p>벡터의 덧셈 : $\textbf{x} + \textbf y = (x_1 + y_1, x_2+y_2, \cdots , x_n + y_n )$ </p>
</li>
<li><p>벡터의 상수배 : $c \textbf x = (cx_1, cx_2, \cdots, cx_n)$ </p>
</li>
<li><p>벡터의 뺄셈 : $\textbf x  - \textbf y = \textbf x + (-1) \textbf y$ </p>
</li>
<li><p>벡터의 나란함 : 두 벡터 $\textbf x, \textbf y$가 나란 $\Leftrightarrow$ $\exists s, t \in \mathbb{R}$ $s.t.$ $s\textbf x = t \textbf y$ </p>
</li>
<li><p>내적과 노름 </p>
<ul>
<li><p>(Norm) $||\textbf x|| = \sqrt{\textbf x \cdot }\textbf x$ </p>
</li>
<li><p>(Inner product) $\textbf x \cdot \textbf y = x_1y_1 + x_2y_2 + \cdots x_ny_n = \sum\limits_{i=1} ^{n} {x_i y_i}$ </p>
</li>
<li><p>(Inner product with angle) $\textbf x \cdot \textbf y = ||\textbf x|| ||\textbf y|| \cdot \cos\theta$ </p>
</li>
</ul>
</li>
</ul>
</li>
<li><p>내적과 노름 사이의 관계에 관한 부등식</p>
<ul>
<li><p>코시-슈바르츠 부등식</p>
<p>  $$(\textbf x \cdot \textbf y)^2 
  \leq ||\textbf x||^2 ||\textbf y||^2$$</p>
<ul>
<li><p>등호 성립 조건 $\Leftrightarrow$ $\textbf x // \textbf y$ </p>
</li>
<li><p>Proof) $\textbf{y}$가 영벡터 일 때는 임의의 $\textbf{x}$와 나란하고, 등호가 성립한다.
$\textbf{y}$가 영벡터가 아니라 가정하자. 그러면 임의의 실수 $t \in \mathbb{R}$에 대해 $|| \textbf{x}+t \textbf{y} || ^2 \geq 0$ 가 성립하므로, 다음 이차식 
$$||\textbf{x} + t\textbf{y} || ^2 = 
|| \textbf{
y}||^2 t^2 + 2(\textbf{x} \cdot \textbf{y})t + || \textbf{x}||^2$$ 
의 판별식은 0 이하이다. 즉, 
$$D/4 
= (\textbf{x} \cdot \textbf{y})^2 - ||\textbf{x} ||^2 ||\textbf{y}||^2 \leq 0$$</p>
<p>이 성립한다. 이 때, 등호가 성립하기 위해서는 이차식의 값이 0이 되어야 한다. Norm 의 성질에 의하여, 
$$|| \textbf{x} + t\textbf{y} || ^2 =
0 \Leftrightarrow \textbf{x} + t\textbf{y} = \textbf{0}$$ </p>
<p>가 성립하여야 한다. $\textbf{y}$가 영벡터가 아니고, $\textbf{x}$와 $\textbf{y}$가 나란하면 위의 식을 만족시키는 $t$가 유일하게 존재하므로 등호가 성립한다. <br></br></p>
</li>
</ul>
</li>
<li><p>삼각 부등식</p>
<p>$$||\textbf x + \textbf y|| 
\leq ||\textbf x|| + ||\textbf y||$$</p>
</li>
</ul>
</li>
</ul>
<p><strong>1.2. 다변수함수와 다변수 벡터함수</strong></p>
<ul>
<li><p>함수 :  두 집합 사이의 대응관계</p>
</li>
<li><p>다변수 함수</p>
<ul>
<li><p>$n-$변수 함수 : $f : U \rightarrow \mathbb{R}$ $(U \in \mathbb{R}^n)$ </p>
</li>
<li><p>내적 역시 $\mathbb{R}^n$ 에서 정의된 다변수함수</p>
</li>
</ul>
</li>
</ul>
<br>

<h2 id="2-행렬과-선형사상">2. 행렬과 선형사상</h2>
<p><strong>2.1. 일차함수</strong></p>
<ul>
<li><p>$f(x_1, x_2, \cdots , x_n) = a_1 x_1 + a_2 x_2 + \cdots a_n x_n +b$ </p>
</li>
<li><p>벡터로 표현된 $\mathbb{R}^n$ 의 일차함수 </p>
<ul>
<li><p>$f(\textbf{x})=\textbf{a} \cdot \textbf{x} + b$ (단, $\textbf{a} = (a_1, a_2, \cdots , a_n), \textbf{x} = (x_1, x_2, \cdots, x_n)$ ) </p>
</li>
<li><p>$a_i$ : $x_i$ 방향 기울기</p>
</li>
</ul>
</li>
<li><p>함수의 덧셈과 스칼라 곱 </p>
<ul>
<li><p>$(f+g)(x)=f(x)+g(x)$ </p>
<p>$(cf)(x)=c\cdot f(x)$ $(c \in \mathbb{R})$ </p>
</li>
</ul>
</li>
</ul>
<p><strong>2.2. 선형사상과 행렬</strong></p>
<ul>
<li><p>선형사상 : $L(\textbf x + c\textbf y) = L(\textbf x) + cL(\textbf y)$ 을 만족하는 사상 $L$ (단, $c \in \mathbb{R}$)</p>
<ul>
<li><p>$L : \mathbb{R}^n \rightarrow \mathbb{R}$ 의 경우, $L(\textbf x) = \textbf a \cdot \textbf x$ 로 표현 가능 $(\textbf{a}, \textbf{x} \in \mathbb{R}^n)$</p>
</li>
<li><p><strong>&quot;사상은 변환이다&quot;</strong></p>
</li>
</ul>
</li>
<li><p>다변수 벡터함수에서의 선형사상 $(L : \mathbb{R}^n \rightarrow \mathbb{R}^m )$ </p>
<ul>
<li><p>$L(\textbf x) = \textbf a_1 x_1 + \textbf a_2 x_2 + \cdots \textbf a_n x_n$ , 각 변수의 차원은? </p>
<ul>
<li><p>$\textbf a_i \in \mathbb{R}^m$  </p>
</li>
<li><p>$x_i \in \mathbb{R}$ </p>
</li>
</ul>
</li>
<li><p>$\textbf a_i = L(\textbf e_i )$ </p>
</li>
</ul>
</li>
<li><p>행렬과 선형사상 : $L(\textbf x) = A\textbf x$ </p>
<ul>
<li><p>$L(\textbf x) = \textbf a_1 x_1 + \textbf a_2 x_2 + \cdots \textbf a_n x_n$  에 대해,</p>
<p>$$A = \begin{bmatrix} a_{11} &amp; a_{12} &amp; \cdots &amp; a_{1n} \ a_{21} &amp; a_{22} &amp; \cdots &amp; a_{2n} \ \vdots &amp; \vdots &amp; \ddots &amp; \vdots \ a_{m1} &amp; a_{m2} &amp; \cdots &amp; a_{mn} \end{bmatrix} = 
\begin{bmatrix} | &amp; | &amp;  &amp; | \ \textbf{a}_1 &amp; \textbf{a}_2 &amp; \cdots &amp; \textbf{a}_n \ | &amp; | &amp;  &amp; | \end{bmatrix}$$</p>
<ul>
<li><p>$A = [a_{ij}]_{m \times n}$</p>
</li>
<li><p>$\textbf x \in \mathbb{R}^{n \times 1} , \in M_{n \times 1}$ (열벡터)</p>
</li>
</ul>
<ul>
<li><p>행렬 연산</p>
<ul>
<li><p>합</p>
<p>$$A+B = [a_{ij} + b_{ij}] 
= \begin{bmatrix} a_{11} + b_{11} &amp;  a_{12} + b_{12}&amp; \cdots &amp; a_{1n} + b_{1n} \\ a_{21} + b_{21} &amp;  a_{22}+ b_{22} &amp; \cdots &amp;  a_{2n}+ b_{2n} \\ \vdots &amp; \vdots &amp; \ddots &amp; \vdots \\ a_{m1} + b_{m1}&amp;  a_{m2}+b_{m2} &amp; \cdots &amp;  a_{mn}+b_{mn} \\ \end{bmatrix}$$</p>
</li>
<li><p>상수배</p>
<p>$$cA = [ca_{ij}] 
= \begin{bmatrix} ca_{11} &amp; ca_{12} &amp; \cdots &amp; ca_{1n} \\ ca_{21} &amp; ca_{22} &amp; \cdots &amp; ca_{2n} \\ \vdots &amp; \vdots &amp; \ddots &amp; \vdots \\ ca_{m1} &amp; ca_{m2} &amp; \cdots &amp; ca_{mn} \\ \end{bmatrix}$$</p>
</li>
<li><p>행렬곱</p>
<p>$$AB_{ij} 
= a_{i1} b_{1j} + a_{i2} b_{2j} + \cdots + a_{im} b_{mj} = [A]_{i} \cdot [B]^{j}$$  </p>
</li>
<li><p>일반적으로, 교환법칙이 성립하지 않음</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<br>
<br>


<p><strong>2.3. 함수의 합성과 행렬의 곱</strong></p>
<ul>
<li><p>$L_1 : \mathbb{R}^l \rightarrow \mathbb{R}^r$, $L_2 : \mathbb{R}^n \rightarrow \mathbb{R}^m$ 일 때 $(L_1 \circ L_2)(\textbf x)$ 은? (대응 행렬은 각각 $A, B$) </p>
<ul>
<li><p>$m=l$</p>
</li>
<li><p>$(L_1 \circ L_2)(\textbf x) = (BA) \textbf x$ , $(\forall \textbf x  \in \mathbb{R}^n)$ </p>
</li>
</ul>
</li>
<li><p>전치행렬과 대칭행렬</p>
<ul>
<li><p>$A \in \mathbb{R}^{m \times n}$ 에 대해, $A_{ij} = a_{ij}$ 의 전치행렬 $A^T$ 는 $A_{ij}^T = a_{ji}$ 를 만족</p>
</li>
<li><p>대칭행렬 : $A = A^T$ 인 행렬 $A$</p>
</li>
</ul>
</li>
<li><p>내적과 행렬곱</p>
<ul>
<li><p><strong>열벡터를 행렬로 바라볼 수 있다!</strong></p>
<p>  $$ \textbf{x} = 
  \begin{bmatrix}</p>
<pre><code>  x_1 \\
  x_2 \\
  \vdots \\
  x_n</code></pre><p>  \end{bmatrix} = \begin{pmatrix} x_1, ; x_2, ; \cdots, ; x_n \end{pmatrix}^T$$</p>
</li>
<li><p>$\textbf x \cdot \textbf y = \textbf x ^T \textbf y$</p>
<p>  Proof)</p>
<p>  $$ \textbf{x} \cdot \textbf{y} = x_1y_1 + x_2y_2 + \cdots + x_ny_n 
  = \begin{bmatrix} x_1 &amp; x_2 &amp; \cdots  &amp; x_n \end{bmatrix}
  \begin{bmatrix}</p>
<pre><code>  y_1 \\
  y_2 \\
  \vdots \\
  y_n</code></pre><p>  \end{bmatrix}$$</p>
</li>
<li><p><strong>선형사상이 행렬인 이유</strong>를 설명</p>
</li>
</ul>
</li>
</ul>
<br>

<h2 id="3-미분">3. 미분</h2>
<h3 id="31-미분과-선형사상"><strong>3.1. 미분과 선형사상</strong></h3>
<p><strong>3.1.1. 일변수함수의 미분</strong></p>
<ul>
<li><p>미분계수 </p>
<p>   $$f&#39;(x_0) = \lim_{x \rightarrow x_0}
   \frac{f(x)-f(x_0)}{x-x_0}$$</p>
</li>
<li><p>미분 가능 함수 : 정의역의 모든 점에서 미분계수가 존재하는 함수</p>
</li>
<li><p>도함수 </p>
<p>  $$f&#39;(x) = \lim_{h \rightarrow 0}
  \frac{f(x+h)-f(x)}{h}$$</p>
</li>
<li><p>미분계수의 기하하적 의미 : 접선의 방정식을 의미</p>
<ul>
<li><p>$y = f&#39;(x_0)(x-x_0) + f(x_0)$ </p>
</li>
<li><p>Proof) </p>
<p>$$\lim_{x \rightarrow x_0} \frac{f(x) - [f&#39;(x_0)(x-x_0) + f(x_0)]}{x-x_0} = \lim_{x \rightarrow x_0} \left( \frac{f(x) - f(x_0)}{x-x_0}  - f&#39;(x_0) \right) = f&#39;(x_0)-f&#39;(x_0) = 0$$</p>
</li>
</ul>
</li>
<li><p>&#39;근사&#39; 로서의 미분 : 그 함수와 가장 가까운 일차함수를 찾게 해주는 도구</p>
</li>
</ul>
<p><strong>3.1.2. 다변수함수의 미분</strong></p>
<ul>
<li><p>미분계수 $f&#39;(\textbf x_0)$ $(=Df(\textbf x_0))$ :</p>
<p>  $$\lim_{\textbf{x} \rightarrow \textbf{x}_0} {\frac{|f(\textbf{x})</p>
<ul>
<li><p>(\textbf{a}^T \textbf{x} + \textbf{b})|}{|| \textbf{x} - \textbf{x}_0 ||}} = 0$$</p>
<p>을 만족시키는 벡터 $\textbf a^T$ </p>
</li>
</ul>
</li>
<li><p>미분가능 조건 : 벡터 $\textbf a, \textbf b$  가 존재</p>
</li>
</ul>
<p><strong>3.1.3. 다변수 벡터함수의 미분</strong></p>
<ul>
<li><p>미분계수 $f&#39;(\textbf x_0)$ $(=Df(\textbf x_0))$ : </p>
<p>  $$\lim_{\textbf{x} \rightarrow \textbf{x}_0} 
  {\frac{|f(\textbf{x}) - (A \textbf{x} + \textbf{b})|}{||\textbf{x}-\textbf{x}_0||}} = 0$$</p>
<p>  을 만족시키는 행렬 $A$ </p>
</li>
<li><p>미분가능 조건 : 행렬 $A$, 벡터 $\textbf b$  가 존재</p>
</li>
</ul>
<p><strong>3.1.4. 함수의 연속</strong></p>
<ul>
<li><p>함수 $f(\textbf x)$가 $\textbf x_0$에서 연속 :</p>
<p>  $$\lim_{\textbf x \rightarrow \textbf x_0}
  f(\textbf x) = f(\textbf x_0)$$</p>
</li>
</ul>
<br>

<h3 id="32-다변수함수의-미분">3.2. 다변수함수의 미분</h3>
<p><strong>3.2.1. 편미분 (Partial Derivative)</strong></p>
<ul>
<li><p>다변수함수 $f:\mathbb{R}^n \rightarrow \mathbb{R}$에 대해, 점 $\textbf x_0 = (x_1, x_2, \cdots , x_n)^T$ 에서의 $i$번째 편미분계수</p>
<p>  $$\frac{\partial f}{\partial x_i} (\textbf x_0) =
  \lim_{x \rightarrow x_{i}} {\frac{f(x_1, \cdots, x, \cdots, x_n) - f(x_1, \cdots, x_i, \cdots, x_n)}{x-x_i} = \lim_{h \rightarrow 0}{\frac{f(\textbf{x}_0 + h\textbf{e}_i) - f(\textbf{x}_0)}{h}}}$$</p>
</li>
<li><p>다변수함수 $f:\mathbb{R}^n \rightarrow \mathbb{R}$에 대해, $i$번째 편도함수</p>
<p>  $$\frac{\partial f}{\partial x_i} (x_1, \cdots, x_n) = 
  \lim_{x \rightarrow x_i} {\frac{f(x_1, \cdots, x_i + h, \cdots, x_n) - f(x_1, \cdots, x_i, \cdots, x_n)}{h}}$$</p>
</li>
</ul>
<ul>
<li>편도함수의 기호 : $D_i f, f_i, \frac{\partial f}{ \partial x_i}$ </li>
</ul>
<p><strong>3.2.2. 그래디언트 벡터 (Gradient Vector)</strong></p>
<ul>
<li><p>다변수함수 $f:\mathbb{R}^n \rightarrow \mathbb{R}$에 대해, 점 $\textbf x_0$ 에서의 그래디언트 벡터 $(\nabla f(\textbf x_0))$ </p>
<p>  $$ \nabla f(\textbf{x}) = \left ( \frac{\partial f}{\partial x_1}(\textbf{x}), \frac{\partial f}{\partial x_2}(\textbf{x}), ;\cdots,;
  \frac{\partial f}{\partial x_n}(\textbf{x}) \right ) ^T$$</p>
<blockquote>
<p><strong>Theorem 2</strong>
  다변수함수 $f : \mathbb{R}^n \rightarrow \mathbb{R}$ 가 $\textbf x=\textbf x_0$ 에서 미분가능하다면, Gradient 는 미분가능한 다변수함수 $f$의 미분계수와 같다. 
$$f&#39;(\textbf{x}_0) = \nabla f(\textbf{x}_0)^T
$$</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li><p><strong>일급함수</strong> (<strong>$C^1$</strong> 함수) : 1계 미분가능하고, 각 편도함수가 모두 연속인 함수 <br></p>
<blockquote>
<p><strong>Theorem 3</strong>
  일급함수 <strong>$f : \mathbb{R}^n \rightarrow \mathbb{R}$</strong> 는 미분가능하고, Theorem 2 가 성립한다.</p>
</blockquote>
</li>
</ul>
</br>

<ul>
<li><p>야코비 행렬 $\left(J_f (\textbf x ) \right)$</p>
<p>  $$J_f(\textbf{x}) =  \begin{vmatrix} - &amp; \nabla f_1(\textbf{x})^T &amp; - \\ - 
  &amp; \nabla f_2(\textbf{x})^T &amp; - \\ &amp; \vdots &amp; \\ - &amp; \nabla f_m(\textbf{x})^T &amp; - \end{vmatrix} = \left[ \frac{\partial f_i}{\partial x_j} \right]_{m \times n}$$</p>
<blockquote>
<p><strong>Theorem 4</strong>
  다변수 벡터함수 $f : \mathbb{R}^n \rightarrow \mathbb{R}^m$ 가 $\textbf x = \textbf x_0$ 에서 미분가능하면, 야코비 행렬이 존재하고, 
$$f&#39;(\textbf x_0) 
= J_f (\textbf x_0 )$$</p>
</blockquote>
</li>
</ul>
<br>


<h3 id="33-연쇄법칙-chain-rule">3.3. 연쇄법칙 (Chain Rule)</h3>
<ul>
<li>$$\frac{d(g \circ f)}{dx} = 
\sum_{i=1} ^ n {\frac{\partial g}{\partial x_i} }\frac{df_i}{dx}$$</li>
</ul>
<blockquote>
<p><strong>Theorem 5 (Chain Rule)</strong>
   함수 $f : \mathbb{R}^n \rightarrow \mathbb{R}^m$ 가 $\textbf{x}_0$ 에서 미분가능하고, 함수 $g : \mathbb{R}^m \rightarrow \mathbb{R}^r$ 가 $f(\textbf{x}_0)$ 에서 미분가능할 때, 그 합성 $g \circ f$ 는 $\textbf{x}_0$ 에서 미분 가능하고 다음이 성립한다. 
$$(g \circ f)&#39;(\textbf{x}_0) =
   g&#39;(f(\textbf{x}_0))f&#39;(\textbf{x}_0) = J_g (f(\textbf{x}_0))J_f(\textbf{x}_0)$$</p>
</blockquote>
<br>

<h3 id="34-다변수함수의-최적화">3.4. 다변수함수의 최적화</h3>
<p><strong>3.4.0. 최적화 (Optimization)</strong> : 함수의 값을 최소화 혹은 최대화하는 작업</p>
<p><strong>3.4.1. 극대와 극소</strong> </p>
<ul>
<li><p>다변수함수 $f:\mathbb{R}^n \rightarrow \mathbb{R}$ 가 $\textbf{x} = \textbf{x}_0$ 에서 극대 $\Leftrightarrow$ $^\exists \epsilon &gt; 0$ $s.t.$ $||\textbf{x} - \textbf{x}_0|| &lt; \epsilon \Rightarrow f(\textbf{x}_0) \geq f(\textbf{x})$ </p>
<blockquote>
<p><strong>Theorem 6 (임계점 정리)</strong>
  미분가능한 함수 $f:\mathbb{R}^n \rightarrow \mathbb{R}$ 가 점 $\textbf{x}_0$ 에서 극값을 가지면 
$$\nabla f(\textbf {x}_0) = 
  \textbf 0$$</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li>임계점정리의 역은 성립하지 않음 : 안장점이 존재할 수 있기 때문</li>
</ul>
<p><strong>3.4.2. 방향미분계수</strong></p>
<ul>
<li><p>다변수함수 $f:\mathbb{R}^n \rightarrow \mathbb{R}$에서 단위 벡터 $\textbf{v}$에 대한 $\textbf{x} = \textbf x_0$에서의 $\textbf{v}-$방향 변화율 $(D_{\textbf{v}} f(\textbf x_0))$</p>
<p>  $$ D_\textbf{v} f(\textbf x_0) = 
  \lim_{h \rightarrow 0}{\frac{f(\textbf x_0 +h\textbf{v}) - f(\textbf x_0)}{h}}$$</p>
</li>
</ul>
<ul>
<li><p>$D_{- \textbf{v}}$ 에 대해 아래 식이 성립한다.</p>
<p>  $$D_{- \textbf{v}}f(\textbf{x}<em>0) =
  -D</em>{\textbf{v}}f(\textbf{x}_0)$$</p>
<blockquote>
<p><strong>Theorem 7</strong>
  미분가능한 다변수함수 $f:\mathbb{R}^n \rightarrow \mathbb{R}$ 와 임의의 단위 벡터 $\textbf{v}$에 대해, $\textbf {v}-$방향의 변화율이 존재하고 
$$D_{\textbf {v}}f(\textbf{x}_0) 
  = \nabla f(\textbf{x}_0)^T \textbf{v}$$</p>
</blockquote>
</li>
</ul>
<br>

<ul>
<li><p>가장 가파른 증가/감소 방향</p>
<ul>
<li><p>$|D_{\textbf {v}} f(\textbf {x}_0)| \leq||\nabla f(\textbf {x}_0)||$ </p>
</li>
<li><p>가장 가파른 증가 방향 : $D_{\textbf {v}}f(\textbf {x})$가 가장 큰 $\textbf{v}$ $\Leftrightarrow$ $\nabla f(\textbf{x}_0)/||\nabla f(\textbf{x}_0)||$ </p>
</li>
<li><p>가장 가파른 감소 방향 : $D_{\textbf {v}}f(\textbf {x})$가 가장 작은 $\textbf {v}$ $\Leftrightarrow$ $- \nabla f(\textbf{x}_0)/||\nabla f(\textbf{x}_0)||$ </p>
</li>
</ul>
</li>
</ul>
<br>

<h2 id="references">References</h2>
<p>[1] 인공지능 교육단체 OUTTA 와 함께 하는! 머신러닝 첫 단추 끼우기, OUTTA, 2022<br>
[2] 미적분학 1+, 김홍종, 서울대학교출판문화원, 2016<br>
[3] 미적분학 2+, 김홍종, 서울대학교출판문화원, 2016<br>
[4] 해석개론, 김성기, 김도한, 계승혁, 서울대학교출판문화원, 2011</p>
]]></description>
        </item>
    </channel>
</rss>