2018년 9월 22일 토요일

Image-to-image translation for cross-domain disentanglement

Task : Multimodal Img2Img Translation (Paired dataset)

Idea & Assumption

이 논문에서 제시한 가장 중요한 가정은 요즘 image translation 분야에서 자주 등장하는 disentangled representation입니다. Disentangled representation이란 어떤 이미지를 나타내는 latent variable이 여러 개로 분리 되어 각각 다른 이미지의 특성에 관한 정보를 담고 있는 것을 의미합니다. 

예를 들어, 남성 얼굴과 여성 얼굴 이미지가 있다고 가정해보겠습니다. 남성 얼굴과 여성 얼굴은 우선 눈, 코, 입이 있고 위 쪽에 머리카락이 있는 등의 공통적인 특징을 갖습니다. 그리고 남성 얼굴에는 머리카락이 짧고 수염이 있는 등의 남성만이 갖는 특징이 있고 여성 얼굴에는 머리카락이 길고 화장을 했고 등의 여성만이 갖는 특징이 있습니다.

이렇게 각 domain의 이미지는 모든 domain이 공통으로 갖는 특징이 있고 각 domain이 고유하게 갖는 특징이 있는데 공통으로 갖는 특징을 나타내는 latent variable을 이 논문에서는 shared representation, 각 domain이 고유하게 갖는 특징을 나타내는 latent variable을 exclusive representation이라고 부릅니다.

이 shared representation과 exclusive representation을 잘 학습하여 source image의 shared representation과 임의의 exclusive representation을 이용해 multimodal image translation을 하고자 하는 것이 이 논문의 목표입니다.

우선 이 섹션에서는 이 논문의 핵심이 되는 부분인 exclusive representation을 학습하는 방법에 대해 간단하게 알아보겠습니다. 여기에 사용된 핵심 아이디어는 $X$의 exclusive representation을 이용해 만든 이미지는 $Y$의 discriminator가 쉽게 가짜임을 알아볼 수 있어야한다 입니다. $X$의 exclusive representation은 $Y$의 정보가 전혀 담기지 않고 $X$의 정보만 담겨야 하니 직관적으로도 충분히 납득할 수 있는 아이디어입니다.

이제 어떻게 학습하는지 자세하게 알아보도록 하겠습니다.

Training objective

* Overview of model

1. Exclusive representation

Domain $X$와 $Y$가 있고 각 domain의 이미지를 $x$, $y$라고 하겠습니다. $x$를 Encoder $G_e$에 넣어 exclusive representation $E^x$와 shared representation $S^x$를 만듭니다. $E^x$만을 보고 이미지를 생성하는 작은 decoder $G_d^x$를 만들어 $E^x$를 통해 이미지 $\tilde{y}$를 만듭니다. 주목해야할 점은 $x$의 exclusive representation을 이용해 $Y$의 이미지를 만들었다고 가정한 것입니다. $\tilde{y}$와 $y$를 이용해 $Y$의 discriminator $D^Y$를 학습합니다. 그리고 $G_e$는 $D^Y$가 $\tilde{y}$를 진짜로 착각하도록 adversarial loss를 걸어주는데 gradient에 -를 붙여 오히려 $D_Y$가 더 쉽게 가짜임을 알아차릴 수 있는 $E^x$를 만들도록 학습합니다(GRL)

왜냐하면 $E_x$는 domain $X$만이 가지고 있는 exclusive latent variable이므로 이를 이용해 $Y$의 이미지 $\tilde{y}$를 만드는 것은 불가능 해야하고 이는 다시 말해 $D_Y$가 $\tilde{y}$는 가짜임을 쉽게 알아차릴 수 있어야함을 의미하기 때문입니다. $D_Y$가 쉽게 가짜라고 구분할 수 있는 $E^x$를 만들도록 학습함으로써 $E^x$는 $Y$의 정보가 전혀 담기지 않는 exclusive latent variable이 되는 것입니다.

2. Shared representation

Shared representation은 이 논문에서 paired dataset을 사용하기 때문에 아주 쉽게 구현할 수 있습니다. Paired dataset으로 가령 똑같은 이미지의 color image와 gray image를 생각해보겠습니다. 두 이미지가 공통으로 갖는 특징은 물체의 모서리 등일텐데 이전의 Unpaired인 남여 예시와 다르게 이번에는 완전히 똑같은 특징을 갖게 됩니다. 따라서 Shared representation도 완전히 동일할 것입니다.

다시 말해서 $x$를 Encoder $G_e$에 넣어 나온 shared representation $S^x$와 $y$를 Encoder $F_e$에 넣어 나온 shared representation $S^y$가 같으면 됩니다. 이를 수식으로 표현하면 아래와 같습니다.

$L_S = E_{x \sim X, \, y \sim Y}[\parallel S^X - S^Y \parallel] \tag{1}$

하지만 이 loss를 그대로 사용하면 $L_S$를 줄이기 위해 $S^X$와 $S^Y$의 값 자체를 최대한 작게 생성하도록 학습이 됩니다. 따라서 $S^X$와 $S^Y$에 $N(0, 0.1)$의 작은 noise를 더해 이 현상을 완화시켰습니다.

3. Reconstructing the latent space

Test 시에 Exclusive representation에 주로 $N(0, 1)$에서 sample된 random vector $z$를 이용해 diverse 한 image translation을 하게 됩니다. 하지만 학습해보면 generator는 이 $z$를 무시하고 diverse 한 이미지가 아닌 하나의 이미지를 만들게 됩니다. 이러한 문제 때문에 generator로 하여금 random vector $z$를 강제로 사용하도록 하는 힘이 필요합니다. 이를 위해 reconstructing the latent space을 사용합니다.
이는 random vector $z$를 이용해 이미지를 만들었으면 그 이미지를 encoder에 넣었을 때 다시 그 random vector가 나와야한다는 논리를 이용합니다. 구체적인 수식은 아래와 같습니다.

$L^X_{recon} = E_{x \sim X}[\parallel G_e(G_d(S^X, z)) - (S^X, z) \parallel] \tag{2}$

4. WGAN-GP loss

WGAN-GP 는 GAN에서 좀 더 안정적인 학습을 가능하도록 하는 Loss입니다. Discriminator와 generator의 loss를 $L^X_{Disc}$와 $L^X_{Gen}$이라고 표기 했습니다.

5. Cross-domain autoencoder

Cross-domain autoencoder는 shared representation에 좀 더 도움을 주는 부분입니다. Domain $X$의 가짜 이미지는 $Y$의 shared representation과 $X$의 exclusive representation으로 만들어집니다. 그리고 paired dataset에서 $X$의 shared representation과 $Y$의 shared representation은 정확히 같을 것을 가정합니다.

따라서 이미지 $y$의 shared representation과 이미지 $x$의 exclusive representation으로 만들어진 가짜 이미지 $x'$는 $x$와 정확히 일치해야합니다. $y$의 shared representation은 $x$의 shared representation과 정확히 일치하기 때문입니다. 이를 수식으로 나타내면 아래와 같습니다.

$L^X_{auto} = E_{x \sim X}[\parallel x' - x \parallel] \, where \, x' = F_d(S^y, E^x) \tag{5}$

6. Bi-directional image translation

지금까지의 loss들은 모두 한 방향의 translation에 대해서만 정의했습니다. Training 때는 이제 양방향으로 모두 translation 하여 동시에 학습을 진행하게 됩니다. 이를 수식으로 쓰면 아래와 같습니다.

$\begin{align}
L &= w_{GAN}(L^X_{GAN} + L^Y{GAN}) + w_{E_X}(L^{G_d^X}_{GAN} + L^{F_d^Y}_{GAN}) \nonumber\\
&+ w_{L1}(L_S + L^X_{auto} + L^Y_{auto} + L^X_{recon} + L^Y_{recon}) \tag{6}
\end{align}$

2018년 9월 19일 수요일

Fader Networks : Manipulating Images by Sliding Attributes

Task : Multiattribute Img2Img Translation


Idea & Assupmtion :

다른 attribute를 갖더라도 이미지는 이 attribute와 상관 없이 공통으로 갖는 특징이 있을 것입니다(ex. 남자, 여자는 다른 attribute를 갖지만 눈, 코, 입이 있다는 것은 동일합니다). 이러한 공통적인 특징을 나타내는 latent variable을 어떻게 하면 학습할 수 있을까요?

이 논문에서는 이를 위해 Label을 활용합니다. Label $y$를 갖는 이미지 $x$ 가 있다고 해보겠습니다. 임의의 이미지 $x$가 Encoder를 통해 latent variable $z$로 변환됩니다.

  • 우선 Discriminator는 $z$를 보고 올바른 label $y$를 predict 합니다. 
  • 그리고 Encoder는 Discriminator로 하여금 $z$를 올바른 label $y$로 predict하지 못하도록 $z$를 만드는 법을 학습합니다. 
이로써 Encoder가 만드는 $z$는 label $y$와 상관없는 Domain invariant label $z$가 됩니다.

Training objective


* Fader network

1. Image reconstruction

$L_{AE}(\theta_{enc}, \theta_{dec}) = \frac{1}{m} \sum_{(x, y) \in D} \parallel D_{\theta_{dec}}(E_{\theta_{enc}}(x), y) - x \parallel_2 $

$x$로부터 domain invariant feature $E_{\theta_{enc}}(x)$를 생성하고 이를 $x$의 label $y$를 이용해 이미지 $D_{\theta_{dec}}(E_{\theta_{enc}}(x), y)$ 를 생성합니다. 이는 $x$와 동일해야합니다. 이 때 domain invariant feature 만으로는 이미지 $x$를 생성할 수 없으므로 Decoder는 무조건 label $y$를 사용해야하는 constraint이 걸리게 됩니다.

2. Learning attribute-invariant latent representation

Decoder가 무조건 label $y$를 사용하게 하려면 $E(x)$에는 특정한 도메인과는 전혀 상관 없는 domain invariant feature가 되도록 해야합니다. 다른 일반적인 GAN이 이미지를 대상으로 adversarial training을 하는 것 과는 다르게 이 논문은 $E(x)$에 대해 adversarial training을 합니다. 핵심 아이디어는 $E(x)$를 보고 label $y$를 정확히 classify 할 수 있는 discriminator가 있을 때 $E$는 discriminator가 최대한 classify 할 수 없는 $E(x)$를 만들자는 것입니다.

구체적인 objective function은 아래와 같습니다.

- Discriminator objective


$L_{dis}(\theta_{dis} \mid \theta_{enc}) = - \frac{1}{m} \sum_{(x, y) \in D} \log P_{\theta_{dis}}(y \mid E_{\theta_{enc}}(x)) \\ where \, P_{\theta_{dis}}(y \mid E_{\theta_{enc}}(x)) = \sum_{k=1}^n \log P_{\theta_{dis}, k} (y_k \mid E(x))  \tag{1} $

우선 아래 줄의 식에서 $k$는 $k$번째 attribute를 의미합니다. 따라서 아래 식은 $E(x)$를 보고 각 attribute에 해당할 log probability의 합을 의미합니다. Discriminator는 이 log probability를 최대화 해야 하므로 윗 줄의 식에서 모든 데이터에 대한 log probability의 평균에 - 를 붙여주고 Gradient descent를 하게 됩니다.

- Adversarial objective

$L(\theta_{enc}, \theta_{dec} \mid \theta_{dis}) = \frac{1}{m} \sum_{(x, y) \in D} \parallel D_{\theta_{enc}}(E_{\theta_{enc}}(x), y) - x \parallel_2 - \lambda_E \log P_{\theta_{dis}}(1-y \mid E_{\theta_{enc}} (x)) \tag{2} $

시그마 내부의 왼쪽의 term은 위의 Image reconstruction에 해당합니다. 그리고 오른쪽 term인 $\log P_{\theta_{dis}}(1-y \mid E_{\theta_{enc}}(x)) $를 보고 Discriminator가 $y$가 아닌 $1-y$로 classify 할 log probability입니다. $y$는 0, 1 둘 중 하나이므로 $1-y$는 정확히 기존 label의 반대가 됨을 알 수 있습니다. 이 log probability를 maximize 해야 하므로 - 를 붙인 뒤에 Gradient descent를 해주게 됩니다.

이렇게 해서 Discriminator objective와 Adversarial objective를 합친 Learning algorithm은 다음과 같습니다.

$\theta_{enc}^*, \theta_{dec}^* = argmin_{\theta_{enc}, \theta_{dec}}{L(\theta_{enc}, \theta_{dec} \mid \theta_{dis}^*(\theta_{enc}))}$
$\theta_{dec}^*(\theta_{enc}) \in argmin_{\theta_{dis}} L_{dis}(\theta_{dis} \mid \theta_{enc})$

이 학습 과정은 discriminator가 $E(x)$를 제대로 classify 할 수 있는 능력을 갖춘 optimized discriminator임을 가정합니다. 하지만 현재의 $E$에 대해 optimize 될 때까지 discriminator를 학습시키는 것은 불가능합니다. 그래서 discriminator의 학습을 먼저 한 번 하고 이 때의 discriminator를 현재의 $E$에 대해서 optimize 된 discriminator라고 approximation을 합니다. 따라서 위의 식에 따라서 discriminator 1회 학습, Encoder와 Decoder 1회 학습을 번갈아가며 진행하게 됩니다.

학습이 완료되면 Training 때는 Binary attribute $y$로 하더라도 Test 때는 Continuous attribute $y$로 할 수 있다고 합니다.

2018년 9월 1일 토요일

Spectral Normalization - part.3

이 정리는 Spectral Normalization 논문에 관한 정리입니다. 이번 포스팅에서는 Lipschitz constant의 정의와 의미 그리고 Spectral Normalization이 무엇이고 이것이 어떻게 Lipschitz constant를 control하게 되는지에 대해 알아보겠습니다.

* 아래 포스팅에 등장하는 수식들은 번호 혹은 영어로 태그가 붙어 있습니다. 번호로 태그 된 수식은 논문에서 해당 번호로 똑같이 태그 되어 있는 수식들이고 영어로 태그된 수식은 논문에는 등장은 하지만 따로 태그가 붙어 있지 않은 수식들입니다.

Gradient analysis of the spectrally normalized weights

이번에는 gradient $\partial V(D, G) \over \partial W$를 따져봄으로써 spectral normalization을 통해 $W$가 어떻게 학습이 되는지를 자세하게 알아보도록 하겠습니다.

우선 $D$의 임의의 hidden layer가 있고 이 layer의 input $h$가 있다고 가정하겠습니다. 이 $h$는 weight $\bar{W}_{SN}(W)$와 곱해져 output으로 $\bar{W}_{SN}(W) h$가 나올 것입니다. 그리고 $\bar{W}_{SN}(W) = \frac{W}{\sigma (W)}$입니다. $\bar{W}_{SN}(W)$는 이제 간단하게 $\bar{W}_{SN}$으로 표기하도록 하겠습니다.

이제 궁극적으로 밝히고자 하는 것에 대해 먼저 명확하게 하고 넘어가겠습니다. 분석하고자 하는 것은 $\partial V(D, G) \over \partial W$ 입니다. 왜냐하면 이 값으로 $D$를 학습시키기 때문입니다. 중간에 있는 hidden layer $h$를 고려하여 이 식을 풀어 써보도록 하겠습니다. (행렬을 곱할 때 행렬의 크기를 맞춰야 하는 문제는 고려하지 않고 그냥 Scalar처럼 쓴 식이라 transpose나 곱의 순서 등이 정확하지 않을 수 있습니다 ㅜㅜ)

$\begin{align}
{{\partial {V(D, G)}} \over {\partial W}}
&= {{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}} {{\partial {\bar{W}_{SN} h}} \over {\partial {\bar{W}_{SN}}}} {{\partial{\bar{W}_{SN}}} \over {\partial{W}}}\tag{a} \\
&= {{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}} h {{\partial {\bar{W}_{SN}}} \over {\partial {W}}} \tag{b} \\
\end{align}$

식 (a)는 $h$를 포함해 chain rule로 나타낸 식이고 식 (b)는 $h$는 $W$와 관련이 없으니 미분 밖으로 빠져 나온 것입니다. 우선 ${{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}}$는 $V(D, G)$로부터 $h$까지 타고 내려온 gradient입니다. 이 부분은 Spectral normalization과 상관 없이 back propagation을 사용하면 무조건 생기는 upstream gradient term이므로 간단히 $\delta = {{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}}$라고 하겠습니다. 이렇게 하여 식 (b)를 다시 쓰면 아래와 같이 쓸 수 있습니다.

$\begin{align}
{{\partial {V(D, G)}} \over {\partial W}} = {\delta} h {{\partial {\bar{W}_{SN}}} \over {\partial {W}}} \tag{c}
\end{align}$

이제 여기서 $\delta$와 $h$는 크게 의미가 없습니다. 중요한 부분은 ${{\partial {\bar{W}_{SN}}} \over {\partial {W}}}$ 입니다. 이 term이 논문의 식 (9)와 식 (10)에 설명 되어 있습니다.

$\begin{align}
{{\partial{\bar{W}_{SN}(W)}} \over {\partial{W_{ij}}}}
&= \frac{1}{\sigma(W)} E_{ij} - \frac{1}{\sigma(W)^2} {{\partial{\sigma (W)}} \over {\partial{W_{ij}}}} W \tag{d} \\
&= \frac{1}{\sigma(W)} E_{ij} - \frac{[{u_1} {v_1^T}]_{ij}}{\sigma(W)^2} W \tag{9} \\
&= \frac{1}{\sigma(W)} E_{ij} - \frac{1}{\sigma(W)} [{u_1} {v_1^T}]_{ij} \frac{W}{\sigma(W)} \tag{e} \\
&= \frac{1}{\sigma(W)} (E_{ij} - [{u_1} {v_1^T}]_{ij} \bar{W}_{SN}) \tag{10} \\
\end{align}$

식 (e)는 논문에는 없지만 이해에 도움이 될 것 같은 식을 한 줄 추가한 것입니다. 먼저 식 (d)는 단순히 $\frac{W}{\sigma(W)}$를 곱의 미분법을 사용하여 $W$로 미분한 식입니다. $E_{ij}$는 $(i, j)$만 1이고 나머지는 전부 0을 갖는 행렬을 의미합니다. 이러한 $E_{ij}$가 나온것은 행렬의 미분 방법 때문입니다. 아래 식은 행렬 $W$를 scalar $W_{ij}$로 미분하는 식입니다.

$\frac{\partial \mathbf{W}}{\partial W_{ij}} =
\begin{bmatrix}
\frac{\partial W_{11}}{\partial W_{ij}} & \frac{\partial W_{12}}{\partial W_{ij}} & \cdots & \frac{\partial W_{1n}}{\partial W_{ij}}\\
\frac{\partial W_{21}}{\partial W_{ij}} & \frac{\partial W_{22}}{\partial W_{ij}} & \cdots & \frac{\partial W_{2n}}{\partial W_{ij}}\\
\vdots & \vdots & \ddots & \vdots\\
\frac{\partial W_{m1}}{\partial W_{ij}} & \frac{\partial W_{m2}}{\partial W_{ij}} & \cdots & \frac{\partial W_{mn}}{\partial W_{ij}} \tag{f} \\
\end{bmatrix}$

식 (f)의 분자에서 $W_{ij}$만이 변수로 취급되고 나머지는 모두 상수로 취급 되므로 미분한 결과가 $(i, j)$만 1이고 나머지는 0인 행렬 $E_{ij}$가 나오는 것입니다.

그리고 식 (9)에서 ${\partial{\sigma(W)} \over \partial{W_{ij}}} = [{u_1} {v_1^T}]_{ij}$ 임을 이용합니다. $u_1$과 $v_1$은 $W$를 Singular value decomposition을 한 $W = U \Sigma V^T$의 first left singular vector와 first right singular vector를 의미합니다. 이 부분에 대한 수학적인 증명이 있는데 그건 생략하도록 하고 그냥 Matrix의 spectral norm의 derivative에 대한 정의처럼 받아들이는 것이 좋을 것 같습니다. $\sigma(W)$가 $W$의 first singular value 임을 고려하면 직관적으로 와 닿기도 합니다.

이제 식 (10)을 식 (c)에 대입하여 ${\partial {V(D, G)}} \over {\partial W}$를 구할 수 있습니다. 그런데 이 부분을 그냥 바로 식으로 계산하는 것은 너무 복잡합니다. 행렬의 곱들로 이루어져 있고 행렬의 미분에 의해 생기는 행렬의 크기 변화 등의 문제 때문에 필요한 것들을 하나하나 맞추려면 해야할 것이 너무 많습니다.

이럴 때 저는 그냥 전부 행렬의 곱이 아니라 scalar의 곱으로 가정을 하고 computational graph를 그려서 확인합니다. 물론 이렇게 하면 완전히 정확한 식이 나오지는 않지만 gradient가 어디서 어떻게 만들어져서 어떻게 흘러가는지 등의 필요한 것들은 전부 얻을 수 있습니다. 아래 그림이 computational graph입니다.


< ${\partial V(D, G)} \over {\partial W}$ 의 computational graph >

위의 gradient는 행렬의 곱이 아니라 scalar의 곱으로 가정하고 chain rule만 적용한 gradient이므로 transpose나 곱셈의 순서등은 정확하지 않습니다.

그리고 위의 그림은 data가 1개일 때를 가정한 그림입니다. 이제 논문에서처럼 mini batch를 사용한다고 가정하겠습니다. 이는 간단하게 mini batch의 data의 모든 gradient들의 평균을 사용하면 됩니다. 이제 ${\partial V(D, G)} \over {\partial W}$은 아래와 같이 쓸 수 있습니다.

$\begin{align}
{{\partial {V(D, G)}} \over {\partial W}}
&= \hat{E}[{{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}} h {\frac{1}{\sigma (W)}}] - \hat{E}[{{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}} hW {\frac{1}{{\sigma (W)}^2}} u_1 v_1^T] \tag{g} \\
&= {\frac{1}{\sigma (W)}} \hat{E}[{{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}} h] - {\frac{1}{\sigma (W)}} \hat{E}[{{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}} h \frac{W}{\sigma (W)}] u_1 v_1^T \tag{h} \\
&= {\frac{1}{\sigma (W)}} \hat{E}[{{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}} h] - {\frac{1}{\sigma (W)}} \hat{E}[\delta h \bar{W}_{SN}] u_1 v_1^T \tag{i} \\
&= {\frac{1}{\sigma (W)}} \hat{E}[\delta h] - {\frac{1}{\sigma (W)}} \lambda u_1 v_1^T \tag{j} \\
& where \, \delta = {{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}}, \, \lambda = \hat{E}[\delta h \bar{W}_{SN}] \nonumber \\
\end{align}$

식 (j)와 논문에 나온 식 (12)를 비교했을 때 곱셈 순서나 transpose만 제외하면 정확히 일치함을 볼 수 있습니다. Spectral normalization의 gradient는 위의 computational graph처럼 만들어지는 것입니다. 순서와 transpose를 맞춘 논문에서 주어진 식 (12)를 보도록 하겠습니다.

${{\partial V(D, G)} \over {\partial W}} = \frac{1}{\sigma (W)} (\hat{E}[\delta h^T] - \lambda u_1 v_1^T) \, \, where \, \delta = ({{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}})^T, \, \lambda = \hat{E}[\delta^T (\bar{W}_{SN} h)] \tag{12}$

여기서 첫 번 째 term인 $\frac{1}{\sigma(W)} \hat{E}[\delta h^T]$는 위의 computational graph에서 $W$로 흘러들어가는 gradient 중 위 쪽 gradient에 해당합니다. 이는 $\sigma(W)$로 normalize 하지 않았어도 만들어지는 gradient입니다.

그리고 두 번 째 term인 $-\frac{1}{\sigma(W)} \lambda u_1 v_1^T$가 $\sigma (W)$로 $W$를 normalize 했기 때문에 추가적으로 생긴 gradient입니다. 즉, 첫 번 째 term은 spectral normalization과 상관 없이 원래 생기는 gradient이고 Spectral norm으로 인해 생긴 추가적으로 얻은 효과가 바로 두 번 째 term에 해당하는 것입니다.

이 두 번 째 term은 첫 번 째 term에 대한 regularization으로 해석할 수 있습니다. $\lambda$가 positive가 될 때 첫 번 째 term에 대해 regularization이 걸린다고 볼 수 있는데요. 이 $\lambda$가 positive가 될 가능성이 가장 높은 경우는 $\delta^T$와 $\bar{W}_{SN}$이 비슷한 방향을 가리키고 있을 때입니다.  예를 들어 $\delta^T$와 $\bar{W}_{SN}$의 각 요소들의 positive, negative가 전부 똑같다면 $\lambda$는 100% positive가 될 것입니다.

$\delta = {{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}}$는 $\bar{W}_{SN} h$가 학습되는 방향을 의미합니다. GAN에서 $D$는 $V(D, G)$를 maximize 하는 방향으로 움직이므로 gradient descent가 아니라 gradient ascent로 학습이 되기 때문에 $-{{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}}$가 아니라 ${{\partial {V(D,G)}} \over {\partial {\bar{W}_{SN} h}}}$로 학습이 됩니다.

이렇게 보면 $\lambda$가 positive가 되는 상황은 $\bar{W}_{SN} h$가 현재 가리키는 방향과 $\bar{W}_{SN} h$이 학습 되는 방향이 같을 때이고 이 때 regularization을 걸게 되는 것입니다. 이렇게 해서 spectral normalization을 통해 $D$의 각 layer가 한 쪽 방향으로 너무 sensitive해지는 것을 막아서 각 layer로 하여금 좀 더 여러 방향을 볼 수 있도록 하는 효과를 갖게 된다고 할 수 있습니다.

여기까지 Spectral normalization의 gradient analysis에 관한 포스팅이었습니다. 굉장히 험난한 과정이었네요ㅎㅎ 이번 포스팅은 여기서 마치도록 하겠습니다.