반응형

 

  •  요약
    1. forward diffusion process $q(\mathbf{x}t|\mathbf{x}{t-1})$: noise를 점점 증가 시켜 가면서 학습 데이터를 특정한(Gaussian) noise distribution으로 변환
    2. reverse generative process $p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)$: noise distribution으로부터 학습 데이터를 복원(=denoising)하는 것을 학습단 위과정을 Markov Chain으로 표현.
  • 왜 잘될까?
    • 기존의 AutoEncoder와 같은 모델의 경우 Encoder 부분에서 어느 정도로 data가 encoding이 될지 알 수 없고 조절할 수 없었지만 Diffusion 모델의 경우 각 time step 마다 약간의 noise가 추가되고 reverse할 때 그 지정된 만큼(?), 종류(?)의 noise를 복원해내면 되기 때문이지 않을까..(마치 작은 tasks로 쪼개서 문제를 해결해나가듯)

https://lilianweng.github.io/posts/2021-07-11-diffusion-models/


1. Introduction

diffusion probabilistic model은 샘플에 매칭되는 데이터를 생성하기위해 variational inference를 사용하여 훈련된 parameterized Markov chain이다.

** Variational Inference 참고

(기계학습, Machine Learning) Week 1 Variational Inference | Lecture 1

** Markov chain: 마르코프 성질을 가진 이산 확률과정을 뜻합니다. (from wiki)

마르코프 성질은 과거와 현재 상태가 주어졌을 때의 미래 상태의 조건부 확률 분포가 과거 상태와는 독립적으로 현재 상태에 의해서만 결정된다는 것을 뜻한다.

 

이 Transition은 signal이 파괴될때까지(?= $x_0$까지) 샘플링의 반대반향으로 데이터에 노이즈를 점진적으로 추가하는 Markov chain의 diffusion process를 reverse하도록 학습된다.

 

diffusion이 적은 양의 Gaussian noise로 구성된 경우 샘플링 프로세스의 전환도 조건부 Gaussian으로 설정하면 충분하기때문에 간단한 neural network parameterization이 가능하다.

 

또한 diffusion model의 특정 parameterization은 훈련 중 multiple noise level에서 denoising score matching하는 것과 샘플링 중 Langevin dynamics 문제를 푸는 것과 동등하다는 것을 발견했다.

** Langevin dynamics (https://yang-song.github.io/blog/2021/score/)

Langevin dynamics provides an MCMC procedure to sample from a distribution $p(x)$ using only its score function $\nabla_\mathbf{x}\text{log} p(\mathbf{x})$.

$s_\theta \approx \nabla_\mathbf{x}\text{log} p(\mathbf{x})$

Using Langevin dynamics to sample from a mixture of two Gaussians.

[Using Langevin dynamics to sample from a mixture of two Gaussians.]

 

이 논문에서는 diffusion model의 샘플링 프로세스가 autoregressive 모델로 일반화가 가능하다는 것과 autoregressive의 decoding과 유사한 일종의 점진적 decoding이라는 것을 보여준다.

** autoregressive decoder: 과거의 자기 자신을 사용하여 현재의 자신을 예측하는 모델이다. (from wiki)

$X_t = c+\Sigma_{i=1}^p \varphi_iX_{t-1} + \varepsilon_t$

 

2. Background

Forward process(diffusion process: from data to noise)

  • diffusion model이 다른 유형의 latent 모델과 구별되는 것은 대략적인 사후 확률$q(\mathbf{x}\_{1:T}|\mathbf{x}_0)$이 데이터에 variance shedule $\beta_1, \dots, \beta_T$ 에 따라 Gaussian noise를 점진적으로 추가하는 Markov Chain에 고정된다는 것이다.
    • $q({\bf x}_{1:T}|{\bf x}_0) := \Pi_{t=1}^T q({\bf x}_t|{\bf x}_{t-1}), \\ q({\bf x}_t|{\bf x}_{t-1}) := \mathcal{N}({\bf x}_t; \sqrt{1-\beta_t}{\bf x}_{t-1}, \beta_t \bf{I})$
  • forward process에서는 cosed form timestep $t$에서 $\mathbf{x}_t$를 샘플링하는 것을 허용한다. (한번에 0에서 t번째 샘플을 얻는 방법)
    • $\alpha_t := 1-\beta_t, \bar\alpha_t := \Pi_{s=1}^t \alpha_s$
    • $q(\mathbf{x}_t|\mathbf{x}_0) = \mathcal{N}(\mathbf{x}_t;\sqrt{\bar\alpha_t}\mathbf{x}_0, (1-\bar\alpha_t)\mathbf{I})$

Reverse process(generative process: from noise to data)

  • diffusion 모델은 $p_\theta(\mathbf{x}0):= \int p\theta(\mathbf{x}_{0:T})$형식의 latent variable 모델이다.
    • ($\mathbf{x}_1, \cdots, \mathbf{x}_T$ $\mathbf{x}_0 \sim q(\mathbf{x}_0$)과 같은 차원의 latents를 갖는다.)
  • $p_\theta(x_{0:T})$는 reverse process라고 하며 Markov chain으로 $p(\mathbf{x}_T)=\mathcal{N}(x_T;0, \mathbf{I})$에서 시작하는 trained Gaussian Transition 으로 정의된다.

 

Objective

  • NNL(negative log likelihood): 훈련은 NNL을 최적화하여 수행
    • $\mathbb{E}[-\text{log}p_\theta(\mathbf{x}0)] \le \mathbb{E}q[-\text{log}\frac{p\theta(\mathbf{x}{0:T})}{q(\mathbf{x}_{1:T}|\mathbf{x}0)}] \\ = \mathbb{E}q[-\text{log}p(\mathbf{x}T) - \Sigma{t\ge1}\text{log}\frac{p\theta(\mathbf{x}{t-1}|\mathbf{x}_t)}{q(\mathbf{x}t|\mathbf{x}{t-1})}] := L$

 

stochastic gradient descent으로 $L$의 random 항을 최적화함으로 효율적인 훈련이 가능하다. (Appendix A)

Loss_total

(모든 KL divergences는 Gaussian 분포들의 비교)

** KL divergences (from wiki)

: a measure of how one probability distribution P is different from a second, reference probability distribution Q.(=어떤 이상적인 분포에 대해, 그 분포를 근사하는 다른 분포를 사용해 샘플링을 한다면 발생할 수 있는 정보 엔트로피  차이를 계산한다.)

$D_{KL}(P||Q) = \Sigma P(x)log(\frac{P(x)}{Q(x)})$

** connections: Log likelihood, KL Divergence

The parameters that minimize the KL divergence are the same as the parameters that minimize the cross entropy and the negative log likelihood!

 

3. Diffusion models and denoising autoencoders

[detail은 논문 참고]

forward 프로세스의 분산 $\beta_t$와 reverse 프로세스의 model architecture, Gaussian distribution parameterization(mu)을 선택해야한다.

  1. Forward process: $\beta_t$를 상수 취급(are fixed)하기 때문에 $L_T$상수취급하여 훈련에서 무시
  2. Reverse process ($L_{1:T-1}$):
    • $\mu_\theta$를 평균 근사 훈련을 하여 $\tilde\mu_t$를 예측하거나 parameterization을 수정하여 $\epsilon$을 예측하도록 훈련.
    • $\mu_\theta(\mathbf{x}_t, t) = \tilde{\mu}_t(\mathbf{x}_t, \frac{1}{\sqrt{\hat\alpha_t}}\big(\mathbf{x}t - \sqrt{1-\bar\alpha_t}\epsilon\theta(\mathbf{x}_t))\big) = \frac{1}{\sqrt\alpha_t}\big(\mathbf{x}t - \frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon\theta(\mathbf{x}_t, t)\big)$
    • (${\bf x}_{0}$을 예측할 수 있지만 실험 초기에 샘플 품질이 더 나빠지는 것으로 나타남)
  3. Data scaling ($L_0$):(샘플링이 끝나면 $\mu_\theta({\bf x}_1,1)$ 를 noise를 제거하고 표시한다.)
    • 0 ~ 255로 구성되어있는 이미지 데이터는 $[-1, 1]$에서 선형 확장된다. 이렇게 하면 reverse process가 standard normal 사전분포 $p(\mathbf{x}_T)$에서 시작하여 일관되게 확장된 입력에 작동한다.
  4. Simplified training objective
    • Algorithm 1, 단순화된 objective를 이용한 전체 training 프로세스
      • variational bound의 변형에 대해 학습하는 것이 sample 품질(구현 더 간단)에 더 유리하다는 것을 발견함:
      • $L_{simple}(\theta) := \mathbb{E}_{t,{\bf x}0, \epsilon} [ ||\epsilon - \epsilon_\theta(\sqrt{\bar\alpha}{\bf x}_0 + \sqrt{1-\bar\alpha_t}\epsilon,t)||^2]$
    • Algorithm 2, 전체 샘플링 프로세스는 데이터 밀도의 학습된 gradient로 $\theta$를 사용하는 Langevin dynamics 과 유사하다. ($\epsilon_{\theta}$is a function approximator intended to predict $\epsilon$ from ${\bf x}_t$)

 

 

4. Experiments

[Details are in Appendix B.]

Our neural network architecture follows the backbone of PixelCNN++ [52], which is a U-Net [48] based on a Wide ResNet [72].

We replaced weight normalization [49] with group normalization [66] to make the implementation simpler.

Our 32 × 32 models use four feature map resolutions (32 × 32 to 4 × 4), and our 256 × 256 models use six.

All models have two convolutional residual blocks per resolution level and self-attention blocks at the 16 × 16 resolution between the convolutional blocks [6].

Diffusion time $t$ is specified by adding the Transformer sinusoidal position embedding [60] into each residual block.

 


정리하다 발견한 디테일한 노션정리: https://sang-yun-lee.notion.site/Denoising-Diffusion-Probabilistic-Models

 

읽어보면 좋은 논문)

Dall-e 2 : https://arxiv.org/pdf/2102.12092.pdf  (OpenAI)

Imagen : https://gweb-research-imagen.appspot.com/paper.pdf (Google Research, Brain)

 

반응형
반응형

1. Generative Model 이란

판별모델링 vs 생성모델링

  • 판별모델링: sample x가 주어졌을 때 레이블 y의 확률 $p(y|x)$를 추정
  • 생성모델링: sample x의 관측확률 $p(x)$를 추정, supervised learning의 경우 확률 $p(x|y)$를 추정

→ Goal: sample로 모델을 훈련 (distribution) → sample에 있을 법한 x 생성하기

https://ratsgo.github.io/

generative model은 데이터 범주의 분포를, disciriminative model은 결정경계를 학습한다.

https://ratsgo.github.io/

generative model은 사후확률을 간접적으로, disciriminative model은 직접적으로 도출한다.


기존 확률적 생성 모델의 난관

  1. 특성 간에 조건부 의존성이 매우 클 때 어떻게 대처할 것인가?
  2. 모델이 어떻게 고차원 표본 공간의 생성 가능한 샘플 중 만족할만한 하나를 찾을 것인가?

전통적인 확률생성모델은 하나의 확률분포 표현식 $P(X)$를 정의해야하는데, 일반적으로 다변량 결합확률분포의 밀도함수 $p(X_1,X_2,\cdots, X_N)$이며, 이에 기반해 likelihood 예측을 최대화한다(MLE).

이 과정에서 확률추론 계산이 빠질 수 없는데, 확률모델은 랜덤변수가 많을 때 매우 복잡해지기 때문에 확률 계산도 매우 어려워진다. 근사 계산을 한다고 하더라도 효과는 만족스럽지 못할 때가 많다.

⇒ Representation Learning (deep learning이 잘하는 것)

: 고차원 표본공간을 직접 모델링 하는 것이 아니라 저차원의 잠재공간(latent vector)을 사용해 훈련 셋의 각 샘플을 표현하고 이를 원본 공간의 포인트에 매핑하는 것

= 잠재공간의 각 포인트는 어떤 고차원 이미지에 대한 representation


2. VAE (AE)

AE (Auto-Encoder)

wiki

  • 인코더: 고차원 입력데이터를 저차원 representation vector로 압축
  • 디코더: 주어진 representation vector를 원본 차원으로 다시 압축을 해제

→ AE는 각 이미지가 잠재공간의 한 포인트에 직접 매핑됨

VAE (Variational Auto-Encoder)

VAE는 각 이미지를 잠재 공간에 있는 포인트 주변의 Multivariate Normal distribution에 매핑

  • Encoder
    • latent vector ( zero-mean Gaussian )$\sigma = exp(log(var)/2)$
    • $\epsilon \sim N(0,1)$
    • $z = \mu + \sigma * \epsilon$
    • 분산에 log를 취하는 이유: 신경망 유닛의 일반적인 출력은 $(-\infin, \infin)$범위의 모든 실수지만 분산은 항상 양수임
    • 평균과 벡터만 매핑하는 이유: VAE는 latent vector의 차원 사이에는 어떠한 상관관계가 없다고 가정함
  • Decoder⇒ 계산이 어렵기 때문에 KLD가 줄어드는 쪽으로 $q(z)$를 근사하는 방법으로 적용한다.
    • KLDivergence : 두 모델 분포들 간 얼마나 가까운지에 대한 정보 손실량의 기대값 (Symmetry하지 않음)
    • $D_{KL}(p||q) = E[log(p_i)-log(q_i)] = \Sigma_i p_i log\frac{p_i}{q_i}$
  • $q(z|x)$: 다변량 정규분포로 봄
  • encoder가 만든 𝑧를 받아서 원 데이터 𝑥'를 복원: $p(z|x)$

3. GAN

: Generative Model을 훈련시키는 방법 idea

https://www.samsungsds.com/kr/insights/Generative-adversarial-network-AI-2.html

  1. generator(생성알고리즘): 생성한 데이터를 discriminator가 진짜로 인식하도록 하는 것이 목표
  2. discriminator(판별알고리즘): generator로 부터 전달된 데이터를 가짜로 인식하도록 하는 것이 목표

→ 두 가지 네트워크가 서로 적대적(Adversarial)인 관계임

  • train 구조

  • minimax objective function학습의 의미: V(D,G)가 최대가 되도록 학습하는 것은 판별자(D), 최소화되도록 학습하는 것은 생성자(G)

  • issue
    1. 진동하는 loss (= 불안정)
    2. 유용하지 않은 loss (훈련방법이 기존과 달라서 이해하기 어려운 loss)
    3. mode collapse
    4. : 생성자가 판별자를 속일 수 있는 하나의 샘플(=mode)을 찾아내려는 경향이 있음
    5. hyper parameter (많고, 민감함) → 훈련이 어려움

4. Vision GAN

: GAN을 여러 데이터에 훈련시키는 방법 idea (based Vision Task)

Basic) convonvolution

http://taewan.kim

  • Convolition: 필터를 이미지의 일부분과 픽셀끼리 곱한 후 결과를 더하는 것
    • filter: 컬러 이미지의 경우 3개의 채널을 가짐, 여러개의 필터를 가짐
    • (이미지의 영역과 필터가 비슷할수록 큰 양수가 출력되고 반대일수록 큰 음수가 출력됨)
    • stride: 필터가 한 번에 입력 위를 이동하는 크기 → 채널의 수는 늘리고 텐서의 공간 방향 크기를 줄이는 데 사용할 수 있음
    • padding: padding="same"의 경우 입력 데이터를 0으로 패딩하여 strides=1일 때 출력의 크기를 입력 크기와 동일하게 만듬
  • 필터를 전체 이미지에 대해 왼쪽에서 오른쪽으로 위에서 아래로 이동하면서 합성곱의 출력을 기록

DCGAN

"GANs이 합성곱을 만났을 때!"

CNN은 이미지를 분할하여 화소 위치와 관련된 정보를 대량으로 유실한다. 분류 문제는 잘 해결할 수 있지만 고해상도를 가진 이미지를 출력할 수 없다.

→ Fractional-Strided Convolutions (deconvolutions)

각 층의 높이와 넓이가 줄지 않고 오히려 커져 최종적인 출력과 원래 입력이미지의 크기가 동일할 수 있도록 만들어줌

  • Conv_Transpose2D (=deconvolutions)

https://arxiv.org/pdf/1603.07285v1.pdf

  1. 파란 부분: original 이미지
  2. 이미지 사이에 padding 추가
  3. filter 통과
  • $Output\ Size = (input\ size -1)* stride + 2*padding + (kernel\ size)$

 

  • Architecture guidelines for stable Deep Convolutional GANs
    • Fully connected layer와 Pooling layer를 최대한 배제하고 Strided Convolution과 Transposed Convolution으로 네트워크 구조를 만들었습니다. Fully connected layer와 Max-pooling layer는 매개변수의 수를 줄일 수 있지만 이미지의 위치 정보를 잃어 버릴 수 있다는 단점이 있습니다.
    • Generator와 Discriminator에 배치 정규화(Batch Nomalization)을 사용하였습니다. 이는 입력 데이터가 치우쳐져 있을 경우의 평균과 분산을 조정해주는 역할을 합니다. 따라서 back propagation을 시행했을 때 각 레이에어 제대로 전달되도록해 학습이 안정적으로 이루어지는데 중요한 역할을 하였습니다.
    • 마지막 layer를 제외하고 생성자의 모든 layer에 ReLU activation를 사용하였습니다. 마지막 layer에는 Tanh를 사용하였습니다.
    • Discriminator의 모든 레이어에 LeakyReLU를 사용하였습니다.
    • Architecture summary

[test image]

made by euni (celeba hq dataset with DCGAN)

CycleGAN

목적: 도메인 A의 이미지를 도메인 B의 이미지로 혹은 그 반대로 바꾸는 모델 훈련하기

  • 유효성, 재구성, 동일성의 3박이 잘 이루어져야 훈련이 잘 됨
    1. 유효성 : 도메인 A의 이미지를 도메인 B의 이미지로 혹은 그 반대로 바꾸기 (기존 GAN loss) → $G_{BA}(b)=fake_a\ or\ G_{AB}(a) = fake_b$
    2. 재구성(cycle consistency loss) : 도메인 A의 이미지를 도메인 B의 이미지로 또 다시 도메인 A의 이미지로 바꾸기(원래 도메인에 해당하는 이미지로 돌아오는 가?) → $G_{AB}(G_{BA}(b))=reconstr_b \ or \ G_{BA}(G_{AB}(a))=reconstr_a$→ $X$와 $\hat{X}$사이에서 평균 절대 오차 계산
    3. 동일성(Identity loss) : ( 도메인 A에서 도메인 B으로 Generate하는 모델에 도메인 B 이미지를 넣었을 때 다시 B 도메인의 이미지로 생성을 할 수 있는가? ) $G_{BA}(a)= a \ or\ G_{AB}(b)= b$$Identity\ loss = |G(Y)-Y| + |F(X)-X|$ ⇒ 이미지에서 변환에 필요한 부분 이외에는 바꾸지 않도록 생성자에 제한을 가함

** cycleGAN과 pix2pix의 주된 차이점: 추가 손실 함수(cycle consistency loss)를 사용하여 쌍으로 연결된 데이터없이도 훈련을 할 수 있다. (pair 데이터를 구하기 어려움)

[test image]

made by euni (photo2vangogh)


5. NLP Generate Model

  • 이미지와 텍스트 데이터가 다른 점
    1. 텍스트 데이터는 개별적인 데이터 조각(문자나 단어)로 구성, 반면 이미지의 픽셀은 연속적인 색상스펙트럼 위의 한 점
    2. 텍스트 데이터는 시간 차원이 있지만 공간 차원은 없음, 이미지 데이터는 두 개의 공간 차원이 있고 시간 차원은 없음
    3. 텍스트 데이터는 개별 단위의 작은 변화에도 민감
    4. 텍스트 데이터는 규칙 기반을 가진 문법 구조
  • paper) MODERN METHODS OF TEXT GENERATION (2020)

 

Basic

  1. RNN: 시퀀스의 다음 단어 하나를 예측하는 것이 목적
    1. 기존 단어의 시퀀스를 네트워크에 주입하고 다음 단어를 예측
    2. 이 단어를 기존 시퀀스에 추가하고 과정을 반복
  2. Encoder-Decoder (ex, Seq2seq): 입력 시퀀스에 관련된 완전히 다른 단어의 시퀀스를 예측
    1. 원본 입력 시퀀스는 인코더의 RNN에 의해 하나의 벡터로 요약 → 문맥 벡터(context vector) : 이 벡터는 디코더 RNN의 초깃값으로 사용
    2. 각 타임스텝에서 디코더 RNN의 은닉 상태는 완전 연결 층에 연결되어 단어 어휘 사전에 대한 확률 분포를 출력(-) 긴 문장의 시작 부분에 정보는 문맥 벡터에 도달할 때 희석될 수 있음
    3. 언어번역, 질문-대답 생성, 텍스트 요약
  3. Attention: 인코더의 이전 은닉 상태와 디코더의 현재 은닉 상태를 문맥 벡터 생성을 위한 덧셈 가중치로 변환하는 일련의 층

 

Transformer (Attention Is All You Need)

AutoEncoder-Decoder 구조 (Seq2Seq 유사)

(개인적인 생각) GAN과 유사한 방법은 Electra or GPT

Elactra paper: https://arxiv.org/pdf/2003.10555.pdf

GPT paper: https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf

 

 


6. Multi-modal GAN

Zero-Shot Text-to-Image Generation [DALL*E]

 

reference

(book) 미술관에 GAN 딥러닝 실전 프로젝트

반응형

+ Recent posts