[18′ NIPS] Glow: Generative Flow with Invertible 1×1 Convolutions 핵심 리뷰

This entry is part 13 of 13 in the series Image Generative Model

내용 요약

Actnorm, Invertible 1×1 Convolution, Affine Coupling Layer를 사용하여 Normalizing Flow 모델을 구현한 Glow의 핵심 내용을 살펴봅니다.

1. 들어가며

이번 글에서는 2018년 NIPS에서 발표된 Glow: Generative Flow with Invertible 1×1 Convolutions 논문을 리뷰합니다.

Normalizing Flow의 기본 개념과 기존 방법의 문제에 대해서는 딥러닝과 Normalizing Flow 글을 참고 바랍니다.

2. 제안 방법

바로 제안 방법을 살펴보겠습니다. Glow의 Normalizing Flow는 Actnorm, Invertible 1×1 Convolution, Affine Coupling Layer로 구성됩니다.

그림1. GLOW Architecture
그림1. Glow Architecture

위 그림은 Glow의 Architecture를 표현한 그림입니다. 오른쪽에서는 Multi Scale Architecture를 표현하고 있고요. 왼쪽에는 핵심이 되는 Flow의 구성을 보여주고 있습니다. Flow는 Actnorm, Invertible 1×1 Covolution, Affine Coupling Layer로 구성된 모습을 볼 수 있습니다. 하나씩 자세히 살펴보겠습니다.

그림2. GLOW의 핵심 구성 요소
그림2. GLOW의 핵심 구성 요소

2-1. Actnorm

Actnorm은 Activation Output에 Affine Transformation을 적용하는것을 의미합니다. 결과적으로 Batch Normalization과 유사한 역할을 수행하게 되죠. 게다가 Inversion이 가능하고 Log Determinant 계산이 쉬워 Normalizing Flow에 적용하기 수월합니다.

2-2. Invertible 1×1 convolution

다음은 Invertible 1×1 Convolution 함수를 살펴보겠습니다. 이 함수는 Coupling Layer의 Input을 Split 하는 용도로 사용됩니다. 1×1 Convolution을 사용함으로써 계산 복잡도가 크지 않으면서도 쉽게 Log Determinant를 구할 수 있습니다.

2-3. Affine coupling layers

다음은 기존 방식에서 사용했던 Affine Coupling Layer의 사용입니다. 기존 방식 대비 세 가지 다른 포인트를 적용했습니다.

첫 번째로 Zero Initialization입니다.
학습을 시작할 때 Affine Coupling Layer가 Identity Function이 되도록 마지막 Convolution을 Zero로 세팅했습니다. 이는 매우 깊은 모델에서의 학습을 용이하게 합니다.

두 번째는 Split and Concatenation입니다.
채널을 나누는 방식으로 NICE와 같이 channel을 따라 절반을 나누는 방법이 있고 RealNVP처럼 checkerboard pattern으로 나누는 방법이 있습니다. Glow는 NICE 방식을 사용합니다.

세 번째는 Permutation입니다.
NICE는 Channel의 순서를 반대로 바꾸는 방법을 사용했습니다. RealNVP는 Fixed Random Permutation 방식을 사용했습니다. Glow는 1×1 convolution 방식을 사용했습니다.

3. 실험 결과

다음은 이렇게 제안한 방법의 실험 결과를 살펴보겠습니다.

3-1. Permutation 별 실험

먼저 세 가지 permutation 방식에 대한 실험입니다.

3.permutation-실험
그림3. Permutation 실험

Reverse, Shuffle, 1×1 Conv 방식의 Permutation을 실험한 결과입니다. 그래프를 보면 다양한 Permutation 방법들 중 1×1 conv 방식의 성능이 가장 좋은 모습입니다.

3-2. RealNVP와의 비교

다음은 다양한 데이터셋에 대한 RealNVP 모델과의 비교입니다. Bits per Dimension 성능을 측정했습니다.

4.RealNVP-비교
그림4. RealNVP와 성능 비교

GLOW는 모든 데이터셋에서 RealNVP 보다 좋은 성능을 보입니다.

3-3. Image synthesis

다음은 생성한 image입니다.

5.image-synthesis
그림5. Image Synthesis

확실히 NICE, RealNVP보다 훨씬 선명한 사진이 나오는 모습을 볼 수 있습니다.

3-4. Image interpolation

다음은 두 Image 간의 Interpolation입니다.

6.image-interpolation
그림6. Image Interpolation

두 개의 이미지를 각각 Latent Space z로 Encoding 한 뒤 Latent Space에서 Linearly Interplation 한 결과입니다. 부드럽게 잘 이어지는 모습을 볼 수 있습니다.

3-5. Semantic manipulation

다음은 미소, 피부색 등의 Semantic Maniplation 실험입니다. CelebA 데이터셋에는 Smiling, Blond Hair 등의 Label이 존재합니다. 일단 Label 없이 Normalizing Flow를 학습한 다음 True/False Label 데이터들의 Average(z)를 각각 구합니다. 그 다음 두 개의 점에서 Interpolation을 수행하며 Image를 생성해냅니다.

7.semantic-manipulation
그림7. Semantic Manipulation

3-6. Effect of temperature

다음은 temperature에 따른 효과입니다.

8.effect-of-temperature
그림8. Effect Of Temperature

Temperature가 높으면 Noisy 한 모습입니다.

3-7. Effect of model depth

다음은 Model Depth에 대한 실험입니다.

9.effect-of-model-depth
그림9. Effect Of Model Depth

모델이 적당히 깊을때 Long Range Dependency를 잘 학습하는 모습을 볼 수 있습니다.

Series Navigation<< [17′ ICLR] DENSITY ESTIMATION USING REAL NVP (RealNVP) 핵심 리뷰
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Scroll to Top