[17′ ICLR] DENSITY ESTIMATION USING REAL NVP (RealNVP) 핵심 리뷰

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

내용 요약

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라고 부릅니다. 식은 다음과 같습니다.

image 63
그림1. Affine Transformation

덕분에 NICE보다 더 복잡한 데이터를 표현할 수 있게 됩니다.

2-2. Properties

Triangular Matrix의 Determinant는 대각 성분의 곱으로 표현됩니다. 따라서 Affine Transform으로 표현되는 y의 Jacobian을 구해보면 다음과 같습니다.

2.jacobian
그림2. Jacobian

따라서 det(J)은 다음과 같습니다.

3.det(J)
그림3. Determinant of Jacobian

Jacobian의 Determinant가 NICE때 처럼 아주 간단하게 구해지는 모습을 볼 수 있습니다. 게다가 Jacobian의 Determinant를 구할 때 함수 s, t의 Jacobian을 구하지 않아도 되기죠. 따라서 s,t는 복잡한 함수를 사용할 수 있습니다. 그 말은 s, t는 DNN으로 표현할 수 있다는 의미죠.

또한 Inversion이 가능한 함수인지도 확인해야 하는데요. Affine Coupling Layer는 Inversion도 아래와 같이 쉽게 표현됩니다.

4.inverse-function
그림4. Inverse Function

2-3. Masked convolution

아직 개선해야 할 문제가 남아 있는데요. NICE에서는 Coupling Layer의 Input을 단순히 절반으로 나누었죠. 이렇게 되면 나눈 Input의 절반은 변하지 않고 그대로라는 문제가 있습니다. 이에 RealNVP 모델에서는 Coupling Layer의 Input Split을 위해 Masked Convolution을 사용합니다. 이렇게 되면 다양한 패턴으로 Input을 나눠 Coupling Layer로 구성해줄 수 있겠죠. Masked Convolution의 수식은 다음과 같습니다.

5.masked-convolution
그림5. Masked Convolution 수식

이때 Spatial Checkerboard Pattern과 Channel Wise Masking을 적용합니다. 따라서 Input은 아래 그림과 같이 분리되게 됩니다.

6.masked-convolution-그림
그림6. masked convolution 그림

2-4. Combining coupling layers

그래도 남아있는 문제는 Coupling Layer 절반의 x는 Transform 없이 그대로 남아 있다는 것입니다. 이를 해결하기 위해 아래 그림과 같이 Alternating Pattern으로 Coupling Layer를 구성해줍니다.

7.combining-coupling-layers
그림7. Combining Coupling Layers

2-5. Batch normalization

RealNVP에서는 Batch Normalization도 구현합니다. Batch Normalization은 Input x의 입장에서 보면 아래 그림과 같이 Rescaling Function을 적용한 것과 같습니다.

8.rescaling-function
그림8. Rescaling Function

Normalizing Flow에 적용하려면 이 Batch Normalization 함수도 Jacobian Determinant를 쉽게 구할 수 있어야 하는데요. Batch Normalization 함수의 Jacobian Determinant는 이렇게 표현됩니다.

9.batch-normalization-det(J)
그림9. Batch Normalization Det(J)

3. 실험 결과

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

3-1. Image generation

이렇게 학습한 RealNVP 모델이 생성한 이미지는 다음과 같습니다.

10.generated-image
그림10. Generated Image

NICE 모델에 비해 더 정교하게 표현하는 모습을 볼 수 있습니다.

Series Navigation<< [15′ ICLR] NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION 핵심 리뷰[18′ NIPS] Glow: Generative Flow with Invertible 1×1 Convolutions 핵심 리뷰 >>
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