Data Science/ML | DL

Anomaly Detection Model 공부를 위한 Normalizing Flow 정리

402번째 거북이 2022. 8. 30. 01:25

(아래 lilog 게시글을 참고하여 작성한 글이다.)

https://lilianweng.github.io/posts/2018-10-13-flow-models/

 

Anomaly Detection 간단정리😶

제조 과정에서 생기는 불량 제품 등을 이미지로 detect하는 문제다.

Anomalous data의 비율이 그렇지 않은 데이터에 비해 현저하게 적기 때문에, Supervised Learning을 위해 충분한 Anomalous data를 모으는 것은 어렵다.

 

그래서 Unsupervised Model을 사용할 수 있는데, 여러 종류의 모델 중 NF-based 모델은 Normalizing Flow를 활용하여 정상데이터의 distribution을 형성, 해당 distribution과 test 데이터를 비교했을 때 차이가 많이 나면 anomalous data로 분류한다.

여기서는 NF-based 모델이 기반으로 하고 있는 Normalizing Flow의 개념을 간단하게 정리할 것이다.

 


Flow Based Model😶

Anomaly Detection에서의 Unsupervised Learning은, trainig data x로부터 x의 모수 distribution을 잘 만드는 것이 핵심이다.

VAE와 GAN같은 다른 Generative Model은 "implicit"하게 distribution을 배운다.

( *여기서  Generative 모델은 training data를 input으로받아 그와 유사한 새로운 이미지를 만들어(generate)내는 모델이다.)

이는 data의 probability density function p(x)를 배우는 것이 intractable하기 때문이다.

 

 반면, Flow based generative 모델은, 일련의  invertible한 transformation으로 구성되어 있다.

여기서 invertible하다는 이야기는 역함수가 존재한다는 이야기고, 곧 tractable하다는 이야기.

따라서, 모델이 데이터 x의 distribution p(x)를 "explicit"하게 학습하는 것이 특징이다.

 

아래는 다른 Generative model과 Flow based model의 작동방식을 그림으로 나타낸 것이다.

 


Change of Variables😶

Normalizing Flow는 Change of Variables라는 이론을 기반으로 하는 아이디어다.

위의 Flow based generative model의 방식과 비슷하다.

 

아래 식을 보자.

input x를 feature extraction하여 latent variable z를 얻은 상황에서, 아래 식을 만족하는 함수  f가 있다고 하자.

$$x = f(z)$$

이때, 함수 f가 역함수를 가진다면 z는 아래와 같이 나타낼 수 있다.

$$z = f^{-1}(x)$$

그렇다면, p(x)를 나타내는 데에는 x에 역함수를 취한 값인 위 z를 활용하여 식을 세울 수 있을 것이다.

(정확하게 말하면, p(x)는 z의 pdf에 그 jacobian matrix의 절대값의 determinant의 역수를 곱한 것으로 나타내어진다.)

 

이렇게, invertible한 함수 f를 사용하여 input의 확률밀도를 알아낼 수 있다는 것이 change of variables의 핵심이다.

 


Normalizing "Flow"😶

위에서 change of variables theorem을 사용하면 inverse에 기반해 원래 데이터의 분포를 나타낼 수 있다고 했다.

Normalizing Flow는 이를 겹겹이 쌓음으로서, 간단한 확률분포를 복잡한 원래의 확률분포로 transform하는 것이라고 정의할 수 있다.

'Complex Distribution Building by Transforming the Simple One'

아래 그림으로 좀 더 잘 이해할 수 있었다.

즉, x만 있으면 x를 통해 만든 latent variables로 x의 분포를 학습할 수 있게 되는 것이다!

 


F의 조건😶

normalizing flow는 결국 그 invertible한 함수 f를 찾는 데 그 핵심이 있다.

f를 디자인할때는 아래와 같은 조건이 따른다.

 

1. invertible해야 한다.

위에서 이야기했다. f inverse로 x의 분포를 생성하므로 역함수가 존재해야 한다.

 

2. jacobian determinant를 구하기 쉬워야 한다.

jacobian 행렬을 구해 determinant를 계산해야 p(x)를 구할 수 있는데, 이 때 jacobian 행렬을 계산하는 computational cost가 작아야 할 것이다.