이 정리는 Spectral Normalization 논문에 관한 정리입니다. 이번 포스팅에서는 Lipschitz constant의 정의와 의미 그리고 Spectral Normalization이 무엇이고 이것이 어떻게 Lipschitz constant를 control하게 되는지에 대해 알아보겠습니다.
* 아래 포스팅에 등장하는 수식들은 번호 혹은 영어로 태그가 붙어 있습니다. 번호로 태그 된 수식은 논문에서 해당 번호로 똑같이 태그 되어 있는 수식들이고 영어로 태그된 수식은 논문에는 등장은 하지만 따로 태그가 붙어 있지 않은 수식들입니다.
이 조건을 만족하는 $K$의 최소값을 의미합니다. 이 때 $\lVert \cdot \rVert$은 아무 norm이나 가능합니다. 그리고 이러한 $K$가 존재한다면 함수 $f$는 Lipschitz continuous한 함수라고 합니다. 여기서 $\lVert \cdot \rVert$의 order가 정해지면 그 때의 $K$의 최소값을 Lipschitz constant라고 합니다. 보통 $\lVert \cdot \rVert$는 $L_2$를 사용하고 이 논문 역시 $L_2$를 사용합니다.
그리고 만약 여기서 $f$가 matrix $A$로 나타낼 수 있는 linear transformation이라면 $x$ 대신 어떤 vector $h$가 $A$에 의에 $Ah$로 linear transformation 된다면 위의 Lipschitz norm의 정의는 아래와 같은 조금 더 간결한 식을 만족하는 $K$입니다.
그렇다면 이 Lipschitz constant가 갖는 의미는 무엇일까요? 정의를 자세히 보면 알 수 있듯이 $f$의 Lipschitz constant는 $f$의 기울기 혹은 gradient의 최대값입니다. 아래 그림을 통해 조금 더 직관적으로 살펴보도록 하겠습니다.
$y=\sin x$ 그래프입니다. $y=\sin x$의 gradient의 최대값은 1입니다. 즉 $y=\sin x$의 Lipschitz norm은 1입니다. 그래서 위 그래프에서 볼 수 있듯이 $y=\sin x$ 그래프가 $y=x$와 $y=-x$로 만든 노란색 영역에 들어가지 않는 것입니다. 다른 예도 살펴보도록 하겠습니다.
Activation function으로 굉장히 많이 사용되는 ReLU입니다. ReLU의 gradient 의 최대값 역시 1이기 때문에 Lipschitz norm도 1이고 $y=\sin x$의 그림과 동일한 양상을 보입니다. 마지막으로 하나의 예만 더 살펴보도록 하겠습니다.
$y=x^2$ 그래프입니다. $y=x^2$는 gradient의 최대값이 존재하지 않고 무한으로 증가가 가능합니다. 그래서 이 함수는 Lipschitz continuous 하지 않고 $y=x^2$의 그래프가 노란색 영역 내부로 들어가는 것입니다.
이처럼 Lipschitz norm이 있다는 것은 $f$의 gradeint의 값에 제한이 걸린다는 의미입니다. 같은 내용을 다르게 표현하면 Lipschitz continuous한 함수 $f$는 기울기 혹은 gradient의 값이 무한하지 않고 제한되어 있다는 의미입니다. 최근 여러 연구 결과들에서 $D$의 Lipschitz constant를 bounded 하게 만들어 gradient가 폭발하는 것을 막는 것이 중요함을 밝히고 있습니다. 하지만 이전 포스팅인 Spectral Normalization - part.1의 식(4)에서 보였듯
$\bigtriangledown_x f^*(x) = {\partial{f^*(x)}\over\partial{x}} = \frac{1}{q_{data}(x)} \bigtriangledown_x q_{data}(x) - \frac{1}{P_G(x)} \bigtriangledown_x P_G(x) \tag{4}$
현재 $D$는 gradient 값에 아무 제한이 없어 Lipschitz continuous 하지 않습니다. 이 문제에 대해 이 논문에서는 $D$의 각 layer의 weight matrix $W$를 $W$의 Spectral Norm인 $\sigma (W)$로 나눠서 $D$의 Lipschitz constant를 1 이하로 만들고자 합니다. 이제 이것이 구체적으로 어떻게 이루어지는지 살펴보도록 하겠습니다.
하지만 특별히 지금과 같이 Neural Net의 layer 하나에 해당하는 $g$는 $g(h) = Wh$의 꼴을 갖는 Linear transformation이기 때문에 위의 정의를 아래와 같은 방법으로 훨씬 간결하게 만들 수 있습니다.
* 아래 포스팅에 등장하는 수식들은 번호 혹은 영어로 태그가 붙어 있습니다. 번호로 태그 된 수식은 논문에서 해당 번호로 똑같이 태그 되어 있는 수식들이고 영어로 태그된 수식은 논문에는 등장은 하지만 따로 태그가 붙어 있지 않은 수식들입니다.
Lipschitz constant
우선 Lipschitz norm, Lipschitz constant, Lipschitz continuous가 무엇인지 알아보겠습니다.
첫 번째로 함수 $f$에 대한 Lipschitz norm은
첫 번째로 함수 $f$에 대한 Lipschitz norm은
$\frac{\lVert {f(x) - f(x')}\rVert}{\lVert{x - x'}\rVert} \leq K\,for\,any\,x,\,x' \tag{a}$
그리고 만약 여기서 $f$가 matrix $A$로 나타낼 수 있는 linear transformation이라면 $x$ 대신 어떤 vector $h$가 $A$에 의에 $Ah$로 linear transformation 된다면 위의 Lipschitz norm의 정의는 아래와 같은 조금 더 간결한 식을 만족하는 $K$입니다.
$\frac{\lVert{Ah}\rVert}{\lVert{h}\rVert} \leq K \, for \, any \,h \neq 0 \tag{b}$
그렇다면 이 Lipschitz constant가 갖는 의미는 무엇일까요? 정의를 자세히 보면 알 수 있듯이 $f$의 Lipschitz constant는 $f$의 기울기 혹은 gradient의 최대값입니다. 아래 그림을 통해 조금 더 직관적으로 살펴보도록 하겠습니다.
* $y=\sin x$
$y=\sin x$ 그래프입니다. $y=\sin x$의 gradient의 최대값은 1입니다. 즉 $y=\sin x$의 Lipschitz norm은 1입니다. 그래서 위 그래프에서 볼 수 있듯이 $y=\sin x$ 그래프가 $y=x$와 $y=-x$로 만든 노란색 영역에 들어가지 않는 것입니다. 다른 예도 살펴보도록 하겠습니다.
* ReLU 함수
Activation function으로 굉장히 많이 사용되는 ReLU입니다. ReLU의 gradient 의 최대값 역시 1이기 때문에 Lipschitz norm도 1이고 $y=\sin x$의 그림과 동일한 양상을 보입니다. 마지막으로 하나의 예만 더 살펴보도록 하겠습니다.
* $y = x^2$
$y=x^2$ 그래프입니다. $y=x^2$는 gradient의 최대값이 존재하지 않고 무한으로 증가가 가능합니다. 그래서 이 함수는 Lipschitz continuous 하지 않고 $y=x^2$의 그래프가 노란색 영역 내부로 들어가는 것입니다.
이처럼 Lipschitz norm이 있다는 것은 $f$의 gradeint의 값에 제한이 걸린다는 의미입니다. 같은 내용을 다르게 표현하면 Lipschitz continuous한 함수 $f$는 기울기 혹은 gradient의 값이 무한하지 않고 제한되어 있다는 의미입니다. 최근 여러 연구 결과들에서 $D$의 Lipschitz constant를 bounded 하게 만들어 gradient가 폭발하는 것을 막는 것이 중요함을 밝히고 있습니다. 하지만 이전 포스팅인 Spectral Normalization - part.1의 식(4)에서 보였듯
$\bigtriangledown_x f^*(x) = {\partial{f^*(x)}\over\partial{x}} = \frac{1}{q_{data}(x)} \bigtriangledown_x q_{data}(x) - \frac{1}{P_G(x)} \bigtriangledown_x P_G(x) \tag{4}$
현재 $D$는 gradient 값에 아무 제한이 없어 Lipschitz continuous 하지 않습니다. 이 문제에 대해 이 논문에서는 $D$의 각 layer의 weight matrix $W$를 $W$의 Spectral Norm인 $\sigma (W)$로 나눠서 $D$의 Lipschitz constant를 1 이하로 만들고자 합니다. 이제 이것이 구체적으로 어떻게 이루어지는지 살펴보도록 하겠습니다.
Method - (2)
이제 어떻게 $D$의 각 layer의 weight matrix $W$를 $W$의 Spectral Norm인 $\sigma (W)$로 나누는 것이 $D$의 Lipschitz constant를 1 이하로 만들 수 있는지 따라가보도록 하겠습니다. 논문의 2.1 Spectral Normalization 부분에 해당합니다.
Discriminator function $f$의 하나의 layer인 $g : \mathbf{h_{in} \mapsto h_{out}}$에 대해 살펴보겠습니다. 여기서 $g$의 Lipschitz norm인 $\lVert{g}\rVert_{Lip}$은 정의상 아래와 같습니다.
$\lVert{g}\rVert_{Lip} = \sup_h \sigma(\bigtriangledown g(h)), \, where \, \sigma(A) := spectral \, norm(A) \tag{c}$
위 식에서 $g(h)$는 layer $g$에 $h$라는 input이 들어가 나온 output을 의미합니다. 따라서 $\bigtriangledown g(h) = {\partial{g(h)} \over \partial{h}}$로 볼 수 있습니다. 위의 정의를 말로 풀어쓰자면 $\sigma(\bigtriangledown g(h))$는 $g(h)$의 gradient matrix의 spectral norm입니다. 여기서 $h$가 무엇이냐에 따라 $\sigma(\bigtriangledown g(h))$의 값이 달라질텐데 그 앞에 붙은 $sup_h$는 쉽게 $h$에 대한 최대값으로 이해하시면 됩니다.
하지만 특별히 지금과 같이 Neural Net의 layer 하나에 해당하는 $g$는 $g(h) = Wh$의 꼴을 갖는 Linear transformation이기 때문에 위의 정의를 아래와 같은 방법으로 훨씬 간결하게 만들 수 있습니다.
$\lVert{g}\rVert_{Lip} = \sup_h \sigma(\bigtriangledown g(h)) = \sup_h \sigma({\partial{g(h)} \over \partial{h}}) = \sup_h \sigma(W) = \sigma(W) \tag{d}$
굉장히 깔끔한 결론이 나왔습니다. $\lVert{g}\rVert_{Lip} = \sigma(W)$입니다. 말로 풀어서 쓰면 layer $g$의 Lipschitz norm은 그 layer의 weight인 $W$의 spectral norm입니다. 거꾸로 논문에 소개된 Spectral norm의 정의(식 (6))를 통해 역으로 $W$의 spectral norm이 $g$의 Lipschitz constant라는 결론을 낼 수도 있습니다.
$\sigma(A) := \max_{h:h \neq 0} \frac{\lVert{Ah}\rVert_2}{\lVert{h}]\rVert_2} = \max_{\lVert{h}\rVert_2 \leq 1}\lVert{Ah}\rVert_2 \tag{6}$
식 (6)에서 $\max_{h:h \neq 0} \frac{\lVert{Ah}\rVert_2}{\lVert{h}]\rVert_2}$ 이 부분을 자세히 살펴본다면 위의 Lipschitz norm의 정의에 해당하는 식 (b)의 $\frac{\lVert{Ah}\rVert}{\lVert{h}\rVert} \leq K \, for \, any \,h \neq 0$와 일치합니다. 즉, $\sigma(W) := \max_{h:h \neq 0} \frac{\lVert{Wh}\rVert_2}{\lVert{h}\rVert_2} = \lVert{g}\rVert_{Lip}$ 로 식 (d)가 거꾸로도 유도가 가능합니다.
여기서 이미 간결해진 식 (d)를 한 번 더 간결하게 만들어주는 $\sigma(W)$의 특징이 존재합니다. 그것은 $\sigma(W)$가 단순히 $W$의 largest singular value와 같다는 것입니다.
지금까지의 내용을 정리하자면 식 (c)에서 layer $g$의 Lipschitz norm의 정의를 살펴보았습니다. 그리고 neural net의 layer인 $g$는 $Wh$로 나타낼 수 있는 Linear transformation이기 때문에 식 (d)처럼 간결하게 만들 수 있고 식 (6)의 Spectral norm의 정의로부터 역으로 식 (d)의 결과를 유도할 수도 있습니다. 이렇게 해서 얻은 결론은 layer $g$의 Lipschitz norm은 그 layer의 weight인 $W$의 spectral norm이라는 것이고 이 때 $W$의 spectral norm은 $W$의 largest singular value라는 것입니다.
여기서 이미 간결해진 식 (d)를 한 번 더 간결하게 만들어주는 $\sigma(W)$의 특징이 존재합니다. 그것은 $\sigma(W)$가 단순히 $W$의 largest singular value와 같다는 것입니다.
지금까지의 내용을 정리하자면 식 (c)에서 layer $g$의 Lipschitz norm의 정의를 살펴보았습니다. 그리고 neural net의 layer인 $g$는 $Wh$로 나타낼 수 있는 Linear transformation이기 때문에 식 (d)처럼 간결하게 만들 수 있고 식 (6)의 Spectral norm의 정의로부터 역으로 식 (d)의 결과를 유도할 수도 있습니다. 이렇게 해서 얻은 결론은 layer $g$의 Lipschitz norm은 그 layer의 weight인 $W$의 spectral norm이라는 것이고 이 때 $W$의 spectral norm은 $W$의 largest singular value라는 것입니다.
Method - (3)
위에서 하나의 layer $g$에 대한 Lipschitz norm은 $W$의 spectral norm임을 알게 되었습니다. 그럼 이제 이 여러 layer $g$들과 activation function이 모인 discriminator function $f$의 Lipschitz norm에 대해 살펴보겠습니다.
들어가기에 앞서 많이 사용되는 activation function들의 Lipschitz norm은 1 이하입니다. 이 논문에서는 activation function으로 ReLU를 사용하는데 ReLU는 Lipschitz norm이 정확히 1입니다. 이 사실 덕분에 아래의 부등식을 이용할 수 있습니다.
$\lVert g_1 \circ g_2 \rVert_{Lip} \leq \lVert g_1 \rVert_{Lip} \cdot \lVert g_2 \rVert_{Lip} \tag{e}$
식 (e)를 말로 풀어쓰자면 두 개의 layer $g_1$과 $g_2$로 이루어진 neural net의 Lipschitz norm은 각 layer의 weight matrix의 Lipschitz norm의 곱보다 작거나 같다는 것입니다. 이제 이 부등식을 이용해 총 $L+1$개의 layer를 갖는 discriminator function $f$의 Lipschitz norm을 표현해야 하는데 이것이 바로 논문의 식 (7)입니다.
$\lVert f \rVert_{Lip} \leq \lVert{(h_L \mapsto W^{L+1}h_L)}\rVert_{Lip} \cdot \lVert{ a_L}\rVert_{Lip} \cdot \lVert{(h_{L-1} \mapsto W^{L}h_L)}\rVert_{Lip} \\ \cdots \lVert{a_1}\rVert_{Lip} \cdot \lVert{(h_0 \mapsto W^1 h_0)}\rVert_{Lip} = \prod_{l=1}^{L+1} \lVert{(h_{L-1} \mapsto W^l h_{l-1})}\rVert_{Lip} = \prod_{l=1}^{L+1} \sigma (W^l) \tag{7}$
식이 다소 복잡해보이지만 위의 식 (e)의 확장판에 불과합니다. 하나씩 보도록 하겠습니다. 우선 $\lVert{(h_L \mapsto W^{L+1}h_L)}\rVert_{Lip}$는 $h_L$에서 $W^{L+1}h_L$로 가는 layer의 Lipschitz norm을 표시한 것입니다. 이것은 단순히 matrix $W^{L+1}$의 Lipschitz norm입니다. 그리고 $\lVert{a_L}\rVert_{Lip}$는 $L$번째 activation function의 Lipschitz norm입니다. 이 값은 1이기 때문에 식 (7)의 복잡한 두 번째 term을 세 번째 term으로 간단하게 만들 수 있습니다. 여기서 식 (e)가 사용되었습니다.
그리고 위에서 언급한 것 처럼 layer $g$의 Lipschitz norm은 그 layer의 weight인 $W$의 spectral norm 입니다. 그래서 모든 layer의 Lipschitz norm의 곱을 나타내는 세 번째 term이 모든 layer의 spectral norm의 곱을 나타내는 네 번째 term으로 바뀐 것입니다.
자 이제 거의 다 왔습니다. 식 (7)을 간단하게 요약하자면 $\lVert f \rVert_{Lip} \leq \prod_{l=1}^{L+1} \sigma (W^l)$입니다. 말로 풀어쓰자면 discriminator의 Lipschitz norm은 각 layer의 weight matrix의 spectral norm의 곱보다 작거나 같습니다.
이 논문의 목표 discriminator의 Lipschitz norm을 1 이하가 되도록 제한을 두는 것이었습니다. $f$의 Lipschitz norm이 각 layer의 spectral norm의 곱보다 작거나 같으므로 각 layer의 spectral norm이 1보다 작거나 같아진다면 모든 layer의 spectral norm을 곱해도 1보다 작거나 같아지므로 이 목표를 이룰 수 있습니다. 이는 각 layer의 weight matrix를 그 matrix의 spectral norm으로 나눠주면 간단하게 해결됩니다. 식으로 나타내자면 weight matrix를 아래의 식 (8)과 같은 방법으로 normalize 해주게 됩니다.
$\overline{W}_{SN}(W) := W / \sigma (W) \tag{8}$
이렇게 되면 $\sigma (\overline(W)_{SN}(W)) = 1$ 이 되고 $\lVert f \rVert_{Lip} \leq 1$이 되어 목표를 달성하게 됩니다. 그리고 이 Spectral norm인 $\sigma (W)$는 $W$의 Largest singluar value와 같습니다.
이번 포스팅의 내용은 여기까지입니다. 쓰고 나니까 굉장히 긴 포스팅이 되었네요ㅎㅎ 다음 포스팅에서는 이제 이 Spectral normalization을 통해서 무엇이 달라지고 어떠한 영향을 줄 수 있는지 알아보기 위해 Spectrally normalized weight의 gradient를 따져보고 그 의미에 대해 해석해보도록 하겠습니다.