점점 읽은 논문은 쌓여가고 포스팅은 속도가 느려 따라가지 못하는 상황이 많이 발생합니다. 하루에 읽고 쓰고 처리할 수 있는 정보의 양이 한정적이란 것이 정말 아쉽습니다. 세상에 보고 읽고 공부해서 해봐야할 것들이 정말 많은데 좀 더 효율적인 방법 없을까..하는 생각이 들곤합니다. 머리에 GPU를 달 수도 없고...orz... 이럴땐 처리 속도가 빠른 천재들이 부럽습니다.
그런 의미에서!? 아직 InfoGAN에서 하고픈 얘기가 좀 남았지만 최근 읽은 논문 하나를 더 소개해보고자 합니다. (일단 저질르면 언젠가는 다 마무리하겠지..-_-...)
사실 순서대로 따지면 f-GAN을 한 번 소개하고 WGAN과 그 직전에 WGAN의 모태가 된 논문도 정리하고 뭐 할 것이 많지만....
어느 세월에 다 쓰나싶어 거두절미하고 이해하기 편하고 쓰기 편한 LSGAN부터 올리기로 했습니다! 이름부터 뭔가 편합니다. Least Square는 regression이나 optimization을 공부하면 가장 처음에 나오는 내용이죠. 매우 익숙한데 얘를 어떻게 이용하는지 한 번 살펴보겠습니다.
어느 세월에 다 쓰나싶어 거두절미하고 이해하기 편하고 쓰기 편한 LSGAN부터 올리기로 했습니다! 이름부터 뭔가 편합니다. Least Square는 regression이나 optimization을 공부하면 가장 처음에 나오는 내용이죠. 매우 익숙한데 얘를 어떻게 이용하는지 한 번 살펴보겠습니다.
Motivation
GAN은 궁극적으로 어떤 방향으로 학습을 하고 있는 것일까요? 뜬금없는 얘기처럼 들리실지 모르겠으나 오늘 소개할 LSGAN을 얘기하기 위해 나름 중요한 밑밥입니다.
개인적으로는 가장 처음 GAN 논문부터 최근 논문들에 이르기까지 결국 하고자 하는 바는
"어떻게 하면 잘 모델을 잘 학습시켜서 Generator가 내보내는 $p_g$가 실제 data 분포인 $p_{d}$를 근사하여 궁극적으로는 같은 distribution을 갖도록 할 것인가"로 정리할 수 있지 않을까 싶습니다.
특별히 새로운 애기는 아니지만 이 질문이 GAN 연구의 큰 줄기라고 생각합니다. GAN이 하는 일이 두 분포간 JS-divergence(JSD)를 최소화하는 것과 같다는 분석에서 시작해서, JSD 대신 다양한 함수 $f$를 끼어넣어 사용할 수 있다는 것을 보여준 f-GAN 논문이 있었고, 이어 아예 divergence 대신 거리 개념을 도입해서 Wasserstein distance를 줄이는 방향을 제시한 WGAN까지 모두 같은 흐름을 공유합니다.
사실 WGAN이 뒷받침하는 이론도 멋지고 적용도 그에 비해 매우 간단하고 결과는 드라마틱하고 참 좋긴 한데...(굳이 단점을 꼽자면) 특성상 학습이 느리며 실제 적용에서 약간의 노하우(weight clipping 범위) 등이 필요하고, 역시 가장 힘든건 이론이 조금? 버겁다는 것이죠.
"그럼 좀 더 단순하고 쉽고 직관적인 방법은 없을까?" 에 대한 대답을 해주는 것이 LSGAN 논문이 아닌가 싶습니다.
Regular GAN 대비 LSGAN의 장점
역시 논문을 소개하기 전에 기존 이론을 살짝은 까주고? 시작해야 제맛이죠. GAN에서는 discriminator에 sigmoid cross entropy loss 함수를 사용합니다. 즉, discriminator는 자신이 받은 sample이 진짜인지 가짜인지를 구별해서 받은 sample이 "진짜"일 확률을 내보내게 됩니다.
문제는 이 loss 함수 때문에 generator update시 vanishing gradient 현상이 일어난다는 점입니다. 아래 그림을 보며 설명하겠습니다.
Sigmoid decision boundary
그림을 보시면 sigmoid cross entropy loss 함수를 사용할 때 decision boundary와 진짜(o), 가짜(+) sample들이 있습니다. 일단 decision boundary가 왜 저렇게 생겼냐는 나중에 설명하기로 하고, 큰 흐름부터 말씀드리면 decision boundary를 기준으로 아래를 진짜 위를 가짜로 구별한다고 생각할 때, 별표로 표시된 가짜 sample들은 이미 진짜로 클래스가 구별되어있는 것을 보실 수 있습니다.
이 경우 generator 입장에서는 이미 discriminator를 매우 잘 속이고 있기 때문에 딱히 더 학습할 의지가 없습니다(vanishing gradient). 하지만 이렇게 생성한 별표 sample들을 보시면 실제 진짜 sample들이 모여 있는 분포에서는 멀리 떨어져 있죠.
이 부분을 해결하고 별표 sample들을 진짜 data 방향으로 끌고 와보자는게 이 논문의 핵심 아이디어입니다. 방법도 상당히 단순하고 직관적인데 매우 효과적입니다. 이쯤되면 논문의 제목이 뭘 의미할지도 예측이 되실겁니다.
Discriminator에 sigmoid cross entropy loss 대신 least square loss를 사용해서 decision boundary에서 멀리 있는 sample들에게 penalty를 주자는 것입니다. 결국 이 부분 하나 때문에 sample이 좀 더 real data에 가깝게 나오도록 generator를 학습할 수 있게 됩니다. 처음에 이거보고 좀 허탈해서 웃음이 나왔는데 나는 왜 못했는가 자괴감이 같이 옵니다...-_-
Least square decision boundary
그림이 참 직관적입니다. Least square decision boundary를 사용하면 저렇게 멀리 떨어져 있는 녀석들을 decision boundary 쪽으로 끌어올 수 있게 됩니다. 마치 분포간의 거리를 divergence가 아닌 least square error로 계산하는 것으로 생각할 수 있겠네요.
그런데 왜 하필 decision boundary가 저렇게 생겼는가?에 대한 의문이 아직 남아있죠. 일단 쉬운 것부터 풀어보겠습니다. Decision boundary가 true data distribution을 지나도록 그린 이유는 사실 간단합니다. 제대로 학습된 GAN의 discriminator에서 나온 decision boundary라면 진짜 data distribution을 지나게 되어있기 때문입니다.
Decision boundaries 비교
그럼 "왜 하필 sigmoid cross entropy loss로 인한 decision boundary가 저런 "$y=x$"와 같은 hyperplane이냐?" 라는 의문이 남습니다.
보통 $f$라는 smooth function을 사용해서 decision을 내린다고 하면 (여기서는 logistic),
If $f(z)>p$, classify "positive". Else, classify "negative"이런 rule에 따라 분류를 하게 됩니다. 여기서 $z$는 어떤 perceptron의 output이라고 생각하시면 됩니다. 즉, $z=\sum_i^n w_i x_i$.
Sigmoid 함수는 다음과 같이 생겼으니까,
sigmoid function (from 위키피디아)
보통 $p=0.5$를 사용하죠 (물론 $p\in[0,1]$에서 어떤 값이든 사용할 수 있습니다).
그럼 $p=0.5$라고 하고 decision boundary를 생각해보면 다음과 같이 나타낼 수 있습니다:
$\{\vec{x}|f(\sum_i w_ix_i)=0.5\}$. 만약 $f$가 우리의 경우처럼 sigmoid 함수라면, $f(\cdot)=0.5$일 때는 안에 argument의 값이 정확히 $0$일 때입니다. 즉, $\{\vec{x}|\sum_i w_ix_i=0\}$라는 얘기이고 이는 $\vec{w}$에 orthogonal한 hyperplane과 같습니다. 물론 굳이 저런 $y=x$와 같은 모양이 나올 필요는 없습니다. 제가 여기서 말씀드리고자 하는 바는 hyperplane이 나온다는 점이었습니다.
* 앞서 소개한 이 논문의 decision boundary 그림들을 보면 x-y축이 뭘 의미하는지 안 나와있어서 왜 decision boundary가 저렇게 나오나 싶어 한참 생각했습니다...굳이 저렇게 그린 이유는 아직도 조금은 아리송합니다.)
** 그나저나 LS loss에 대해서는 왜 저렇게 평행선인가....싶은데 아직은 뚜렷하게 아하!하고 오지는 않네요 누가 아시면 좀 알려세요..ㅋㅋ 저도 이해하는 순간 수정해서 올리도록 하겠습니다.
*** 일단은 그냥 예시와 같이 그림을 그린 것인가 의심 중입니다. 사실 sigmoid로 인한 hyperplane이라 하면 (0,0)을 지나야하는데 그림을 보면 또 그래보이지도 않거든요..
이 외에도 LSGAN이 WGAN처럼 regular GAN에 비해 stable한데 특성상 discriminator가 optimal에 가까워야해서 여러번 update 해줘야하는 WGAN보다는 학습이 훨씬 빠르다(수렴이 빠르다)는 장점이 있다고 하네요.
LSGAN
간단히 위의 아이디어를 수식으로 정리해보면 다음과 같습니다. 결국 기존의 GAN은 아래와 같은 minimax problem을 푸는 반면;
$$\min_G \max_D V(D,G) = \mathbb{E}_{x\sim p_{data}~(x)}[log D(x)] + \mathbb{E}_{z\sim p_z(z)}[log(1-D(G(z)))]$$
LSGAN은 다음과 같이 변형된 문제를 풀게 됩니다:
$$\begin{align}&\min_DV_{LSGAN}(D) = \frac{1}{2}\mathbb{E}_{x\sim p_{data}~(x)}[(D(x)-b)^2] + \frac{1}{2}\mathbb{E}_{z\sim p_x(z)}[(D(G(z))-a)^2] \\ &\min_G V_{LSGAN}(G) = \frac{1}{2}\mathbb{E}_{z\sim p_z(z)}[(D(G(z))-c)^2] \end{align}$$
여기서 b는 real label a는 fake label c는 G 입장에서 D가 믿도록 하고 싶은 값입니다.
조금만 생각해보면 수식이 매우 직관적임을 알 수 있습니다. LS이기 때문에 첫번째 식이 최소화 되려면 $(~\cdot~)^2$ 안쪽이 모두 0이 되어야합니다. 따라서 $D(x)\rightarrow b$일 수록 그리고 $D(G(z))\rightarrow a$일수록 값이 작죠. 즉, D 입장에서는 label이 모두 맞게 잘 분류해야 잘 학습하는 것이니 수식과 하고자 하는 바가 잘 맞습니다. G도 비슷하게 생각하실 수 있겠습니다.
다음편 예고
오늘은 이렇게 가볍게 LSGAN의 컨셉만 소개해드렸습니다. 다음 편에 이어서 실제 objective function이 어떻게 되는지와 LSGAN과 f-divergence와의 관계 등 좀 더 수식과 함께 구체적으로 얘기해보겠습니다.
그럼 좋은 밤 되세요~ :)
다음 읽을거리
- 초짜 대학원생의 입장에서 이해하는 LSGAN (2)
- 초짜 대학원생 입장에서 이해하는 Generative Adversarial Nets (1)
- 초짜 대학원생의 입장에서 이해하는 Domain-Adversarial Training of Neural Networks (DANN) (1)
- 초짜 대학원생의 입장에서 이해하는 Deep Convolutional Generative Adversarial Network (DCGAN) (1)
- 초짜 대학원생의 입장에서 이해하는 Unrolled Generative Adversarial Networks (1)
- 초짜 대학원생의 입장에서 이해하는 InfoGAN (1)
참고문헌:
[1] Least Squares Generative Adversarial Networks Xudong Mao et al. 2016
작성자가 댓글을 삭제했습니다.
답글삭제수식이 안되길래 삭제했는데 흔적이 남네요 ㅠㅠ 죄송합니다. (댓글에서 Latex를 다룰줄을 모르겠습니다) 적은 내용은,LS loss에 대해서는 왜 저렇게 hyperplane에 대하여 평행선인가 생각한 내용인데, Real Data와 fake Data가 (x=0,y=0)을 중심으로 분산되어 있는 데이터라, Least square를 계산하면 (Wx)^2 = 0이므로 간단히 방정식을 풀면 W가 전부 0으로 수렴하지 않나 생각했습니다. 블로그에 댓글을 처음 달아봐서 말씀드리기가 굉장히 힘드네요. 죄송합니다.
삭제abc를 1,0 값들 대신 기호로 한 이유가 있나요? 1,0이 아니라면 그걸 어떤 방식으로 찾아내나요?
답글삭제"decision boundary에서 x축을 D의 loss, y축을 G의 loss"라고 보면 될 것 같습니다.
답글삭제위와 같이 각 x, y축의 의미를 설정하고 다시 그래프를 해석해 봅시다.
먼저 잘 학습된 GAN은 언급해주신 바와 같이 Real Data를 관통해야 합니다.
그리고 loss 가 축소 되는 방향으로 학습이 진행될 것은 당연하기 때문에, Real Data는 (0, 0) 주변에 분포할 것입니다.
-> (0, 0)이 G와 D가 서로의 loss를 같이 줄일 수 있는 optimum point라고 생각해도 될 것 같습니다.
sigmoid와 least square 그래프에 찍힌 Real Data의 분포 모두
바로 위에서 제시한 조건은 잘 따르는 것을 확인할 수 있습니다.
---
이제 본격적으로 왜 그래프가 y=x, 그리고 수평선의 모양으로 형성되어야 하는지 생각해봅시다.
먼저, GAN의 학습이 진행되면서 fake sample들은 decision boundary와 수직인 방향으로 이동하려는 속성을 가집니다.
이 속성을 기반으로 하여 decision boundary가 어떻게 생겨야만 하는지 생각해보면,
sigmoid의 경우 G와 D의 loss들이 상반된 작용을 하며 fake sample들을 boundary로 끌어다니려는 속성을 없애버리고 있습니다.
따라서 이 경우엔 y=x의 그래프와 같이 decision boundary가 형성됩니다.
하지만. Least squared의 경우는 좀 다릅니다.
Loss function에 타겟을 설정해주고 least squared 속성이 들어가면서,
G의 loss가 학습 도중 계속해서 생성되는 fake sample들을 decision boundary와 수직인 방향으로 이동시키는 효과를 줍니다.
따라서 이를 표현하려면, 이 논문에서 표현한 그래프와 같이 수평선으로 decision boundary를 그려줘야합니다.