- Diffusion Model 설명 – 기초부터 응용까지
- [22′ NIPS] Classifier Guidance : Diffusion Models Beat GANs on Image Synthesis
- [21′ NIPS workshop] Classifier Free Guidance : Classifier-free diffusion guidance
- [23′ PAML] SR3 : Image Super-Resolution via Iterative Refinement
- [22′ PMLR] GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models
- [22′ NIPS] Imagen : Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding
- [22′ arxiv] DALLE2 : Hierarchical Text-Conditional Image Generation with CLIP Latents
- [22′ CVPR] Stable Diffusion : High-Resolution Image Synthesis with Latent Diffusion Models
- [23′ CVPR] GLIGEN: Open-Set Grounded Text-to-Image Generation
- Normalizing Flow 설명 – 정의, 특징, 딥러닝 모델들
- [15′ ICLR] NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION 핵심 리뷰
- [17′ ICLR] DENSITY ESTIMATION USING REAL NVP (RealNVP) 핵심 리뷰
- [18′ NIPS] Glow: Generative Flow with Invertible 1×1 Convolutions 핵심 리뷰
- [22′ ICLR] SDEDIT: GUIDED IMAGE SYNTHESIS AND EDITING WITH STOCHASTIC DIFFERENTIAL EQUATIONS
- [23′ ICCV] ControlNet : Adding Conditional Control to Text-to-Image Diffusion Models
내용 요약
Affine Coupling Layer를 사용하여 Normalizing Flow 모델을 구현한 RealNVP의 핵심 내용을 살펴봅니다.
1. 들어가며
이번 글에서는 2017년 ICLR에 발표된 DENSITY ESTIMATION USING REAL NVP 논문을 리뷰하겠습니다. 이 논문은 RealNVP라고 불리며, 이 글에서도 RealNVP라고 지칭하겠습니다.
Normalizing Flow의 기본 개념과 기존 방법의 문제에 대해서는 딥러닝과 Normalizing Flow 글을 참고 바랍니다.
2. 제안 방법
RealNVP는 NICE모델을 일부 개선한 모델입니다. 바로 제안 방법을 살펴보겠습니다.
2-1. Affine coupling layers의 사용
NICE에서는 coupling layer를 사용하고 내부의 g function으로 additive function을 사용했었습니다. 덕분에 Inversion이 가능하고 Jacobian의 Determinant를 구하기 쉬워 Normalizing Flow를 구현할 수 있었죠. 하지만 내부 함수 g를 단순하게 +를 사용했기에 복잡한 데이터를 표현하기 어렵다는 한계가 있었습니다.
이를 개선하기 위해 RealNVP 에서는 내부 함수 g를 Affine Transformation으로 구성합니다. 이를 Affine Coupling Layer라고 부릅니다. 식은 다음과 같습니다.
덕분에 NICE보다 더 복잡한 데이터를 표현할 수 있게 됩니다.
2-2. Properties
Triangular Matrix의 Determinant는 대각 성분의 곱으로 표현됩니다. 따라서 Affine Transform으로 표현되는 y의 Jacobian을 구해보면 다음과 같습니다.
따라서 det(J)은 다음과 같습니다.
Jacobian의 Determinant가 NICE때 처럼 아주 간단하게 구해지는 모습을 볼 수 있습니다. 게다가 Jacobian의 Determinant를 구할 때 함수 s, t의 Jacobian을 구하지 않아도 되기죠. 따라서 s,t는 복잡한 함수를 사용할 수 있습니다. 그 말은 s, t는 DNN으로 표현할 수 있다는 의미죠.
또한 Inversion이 가능한 함수인지도 확인해야 하는데요. Affine Coupling Layer는 Inversion도 아래와 같이 쉽게 표현됩니다.
2-3. Masked convolution
아직 개선해야 할 문제가 남아 있는데요. NICE에서는 Coupling Layer의 Input을 단순히 절반으로 나누었죠. 이렇게 되면 나눈 Input의 절반은 변하지 않고 그대로라는 문제가 있습니다. 이에 RealNVP 모델에서는 Coupling Layer의 Input Split을 위해 Masked Convolution을 사용합니다. 이렇게 되면 다양한 패턴으로 Input을 나눠 Coupling Layer로 구성해줄 수 있겠죠. Masked Convolution의 수식은 다음과 같습니다.
이때 Spatial Checkerboard Pattern과 Channel Wise Masking을 적용합니다. 따라서 Input은 아래 그림과 같이 분리되게 됩니다.
2-4. Combining coupling layers
그래도 남아있는 문제는 Coupling Layer 절반의 x는 Transform 없이 그대로 남아 있다는 것입니다. 이를 해결하기 위해 아래 그림과 같이 Alternating Pattern으로 Coupling Layer를 구성해줍니다.
2-5. Batch normalization
RealNVP에서는 Batch Normalization도 구현합니다. Batch Normalization은 Input x의 입장에서 보면 아래 그림과 같이 Rescaling Function을 적용한 것과 같습니다.
Normalizing Flow에 적용하려면 이 Batch Normalization 함수도 Jacobian Determinant를 쉽게 구할 수 있어야 하는데요. Batch Normalization 함수의 Jacobian Determinant는 이렇게 표현됩니다.
3. 실험 결과
다음은 이렇게 제안한 방법의 실험 결과를 살펴보겠습니다.
3-1. Image generation
이렇게 학습한 RealNVP 모델이 생성한 이미지는 다음과 같습니다.
NICE 모델에 비해 더 정교하게 표현하는 모습을 볼 수 있습니다.