현실적으로 상당히 중요한 문제를 GAN을 이용하여 해결한 논문이 나와 공유합니다. 이 논문에서 다루는 문제는 anomaly detection 입니다. 말그대로 정상치에서 벗어난 관측치들을 detect하겠다는 것이지요. One-class classification 혹은 one-class description이라고 부르기도 합니다.

이 anomaly detection 문제는 실제 여러 application에서 중요한 의미를 갖습니다. 보통 현실에서는 비정상 관측치가 거의 없는 경우가 많기 때문이지요. 예를 들어, 제조 공정에서 수집되는 데이터들을 보면 거의 정상 관측치인 경우가 대부분입니다. 요즘 제조 공정에서 관리되는 품질 수준이 ppm단위니까요. 이런 경우에는 정상 관측치를 모델링함으로써 그 모델에서 벗어나는 정도를 기반으로 fault detection을 하게 됩니다. 기본적인 관리도 개념이 이 anomaly detection의 전형적인 예라고 할수 있습니다.

이 논문에서는 정상 의료 영상 데이터를 이용하여 영상에서의 비정상 영역을 detection하는 것을 목표로 합니다. 의료 데이터도 대부분 정상 데이터가 차지하고 있기 때문에 중요한 접근 방식입니다. 사실 deep neural network를 이용하여 anomaly detection 문제를 해결하는 것은 굉장히 어렵습니다. Anomaly detection 문제도 label 정보 없이 데이터를 모델링한다는 측면에서 unsupervised learning의 특별한 경우가 될텐데 generative model로는 충분치 않고 density estimation까지 해야하기 때문입니다. 이 연구에서는 아래 그림처럼 정상 데이터로 학습시킨 GAN의 generator를 이용하여 비정상 영역을 찾아내고자 합니다.

fig1

 

GAN을 이용하여 정상 데이터 모델링하기

이 논문에서는 정상 데이터를 모델링하기 위해 GAN을 이용합니다. GAN 원 논문에 대한 자세한 리뷰는 전혀 초짜 대학원생이 아니신 유재준님의 초짜 대학원생 입장에서 이해하는 Generative Adversarial Nets 을 참고하시면 좋겠습니다. GAN은 크게 두 개의 neural network로 구성되어 있습니다. 하나는 generator라고 부르고, 나머지 하나는 discriminator라고 부릅니다. 명칭에서 알수 있다시피 generator는 뭔가를 생성하는 neural network이고 discriminator는 뭔가를 분류하는 neural network입니다.

GAN에서는 generator를 학습시키기 위해 재미있는 아이디어를 이용합니다. 바로 real sample과 generated sample을 분류하는 discriminator를 이용하는 것이지요. 이 discriminator를 속일수 있을 정도로 real에 가까운 sample을 생성하는 것이 generator의 목표가 되겠습니다. 수식으로 formulation하면 아래와 같습니다.

\min_G\max_DV(D,G)=E_{x \sim p_{data}(x)}[logD(x)]+E_{z \sim p_{z}(z)}[log(1-D(G(z)))]

여기서 G는 generator를, D는 discriminator를 의미합니다. 수식의 의미를 보면 GAN에서는 discriminator에 대해서는 분류 성능을 극대화하고, generator에 대해서는 이 분류 성능을 최소화시키는 방향으로 두 network를 학습시킨다는 것을 알수 있습니다.

그런데 실제로 GAN을 학습할때는 위의 formulation과는 약간 다른 식을 활용합니다. 만약 discriminator가 아주 강력하다면, 즉 아주 높은 성능으로 real과 generated를 분류해낸다면 generator를 학습시켜야할 error가 거의 0에 가까워지기 때문입니다. 이는 GAN 학습 초기에 자연스럽게 생기는 문제인데 학습되지 않은 generator가 생성한 데이터를 진짜와 구분하는 것은 discriminator 입장에서는 아주 쉬운 task라서 그렇습니다.

이를 해결하기 위해 GAN 원 논문에서는, generator를 학습시키기 위해 log(1-D(G(z)))를 minimize하지 않고 logD(G(z))를 maximize하는 heuristic한 방식을 제안합니다 (여기서 우리는 이 논문의 Eq. (2)에 log가 빠졌다는 것을 알 수 있습니다). 쉽게 얘기해서 원래는 generator가 생성한 데이터를 0이라고 맞추지 못하도록 학습시키는 것이었다면 heuristic한 방식은 generator가 생성한 데이터를 1로 맞추도록 학습시키는 것이지요.

logitVSloglike

이 두 방식의 차이는 위의 그림을 보면 쉽게 이해할 수 있습니다. 이 그림은 logit 값에 따른 log-likelihood 값을 나타내는데요, 왼쪽 그림은 기존 방식, 오른쪽 그림은 heuristic 방식을 나타냅니다. 보시다시피 discriminator가 generated를 잘 예측하는 경우, 즉 logit 값이 큰 음수를 가지는 경우에 기존 방식은 gradient 값이 거의 0에 가까운 반면 heuristic 방식은 큰 gradient값을 얻을 수 있다는 것을 알 수 있습니다.

GAN에 대한 설명이 너무 길었네요. 여하튼 이 논문에서는 정상 데이터의 generative model을 GAN을 이용하여 학습합니다.

 

새로운 영상을 latent space로 mapping하기

이렇게 얻은 GAN의 generator는 latent space를 실제 입력 데이터 space로 mapping 시키는 함수라고 볼 수 있습니다. 하지만 그 역방향의 mapping, 즉 어떤 입력 데이터의 latent representation은 얻을 수가 없지요. 이 latent representation을 얻기 위해 이 논문에서는 backpropagation을 통해 latent representation을 찾아 나갑니다. 구체적으로 얘기해서 임의의 z를 초기값을 삼아 이 z를 통해 generation된 영상과 실제 영상이 최대한 비슷해지도록 z를 찾는 것입니다.

이 mapping 과정에서 residual lossdiscrimination loss를 활용합니다. Residual loss는 Generator를 통해 나온 영상 G(z)와 실제 영상 x간의 차이이고 L_R(z_r)=\sum|x-G(z_r)| 로 나타냅니다. Discrimination lossz_r로 generation된 G(z_r)이 여전히 real image라고 판단되도록 하는 loss입니다. 여기서 저자들은 discriminator의 정보를 충분히 활용하기 위해 특정 layer f에서의 feature들을 이용합니다. 이렇게 새롭게 정의된 discrimination lossL_D(z_r)=\sum|f(x)-f(G(z_r))| 로 표현할 수 있습니다. 최종적으로 활용되는 loss는 이 두가지의 가중합으로 아래와 같습니다.

L(z_r)=(1-\lambda)L_R(z_r) + \lambda L_D(z_r)

이때 모든 weight를 고정한 채 backpropagation을 통해 위의 L(z_r)을 최소화하는 z를 찾아나갑니다.

아래 그림이 이 논문의 전체적인 윤곽을 잘 나타냅니다. (a)는 정상 데이터를 이용하여 GAN을 학습하는 걸 보여주고 (b)는 이렇게 학습된 GAN의 discriminator의 특정 layer feature를 t-SNE로 시각화한 것입니다. (b)를 보면 이 feature level에서도 정상 데이터와 비정상 데이터가 어느정도 구분되는 것을 알 수 있습니다.

fig2

그렇다면 최종적으로 anomaly인지는 어떻게 판단하게 될까요? 이 논문에서는 anomaly score라는 것을 제안하는데 단순히 그냥 최종적으로 얻어진 위의 L(z_r) 값이 되겠습니다. 정상 데이터로 학습된 GAN을 고정한 채 L(z_r)을 최소화하는 z를 찾아도 이 z에서 generation된 영상은 여전히 정상 데이터의 manifold상에 존재해야 하기 때문에 이 줄이지 못하는 margin, 즉 L(z_r)을 anomaly score로 해석할 수 있는 것이지요.

 

실험결과

실험부분을 간략히 한번 보도록 하겠습니다. 저자들은 이러한 anomaly detection 방식을 망막의 spectral domain optical coherence tomography (SD-OCT) 데이터에 적용했습니다. 데이터 전처리 및 학습 방식에 대한 자세한 설명은 논문을 참고하시면 되겠습니다. 결과만 한번 보도록 하죠. fig3

위의 그림은 anomaly score를 시각화한 것입니다. 왼쪽의 6개열에 해당되는 영상들은 실제 정상 영상들이고 오른쪽 6개열은 비정상 영상들을 나타냅니다. 빨간색으로 나타나는 영역이 anomaly score가 높은 영역들인데 가장 아래의 ground-truth와 비교해보면 일치도가 높음을 알 수 있습니다.

fig4

이 plot들은 실험 결과를 나타냅니다. Anomaly score를 기반으로 테스트 셋에 대해 분류 성능을 본건데요, AUC가 약 0.89의 값을 가지는 걸 확인할 수 있습니다. 활용한 데이터 셋 특성의 영향이 크겠지만 이 정도의 분류 성능이면 정상 데이터만을 학습에 활용했다는 것을 감안할때 훌륭하다고 생각됩니다.

 

결론

개인적으로 deep neural network를 이용하여 영상에 대한 anomaly detection을 수행했다는 점에서 아주 흥미로운 논문이었습니다. 하지만 inference할 때 매번 patch 단위로 backpropagation을 수행해야 한다는 부분은 앞으로 보완해야 할 부분으로 생각되네요. 최근 GAN에 inference network를 추가하여 함께 학습하는 여러 연구들이 있는데 이 연구들을 anomaly detection 문제로 확장해보는 것도 재미있는 주제들이라고 생각됩니다. 다음 기회에는 GAN + inference에 관련된 연구들을 한번 소개해보도록 하지요!

Posted by:Sangheum Hwang

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s