비전공생의 Learning Confidence for OOD detection in Neural Networks 논문리뷰
https://arxiv.org/pdf/1802.04865.pdf
Introduction
무언가를 결정할 때 어떤 것을 알고 모르는 것은 매우 중요하다. 그러나 최근 딥러닝 분류기는 성능이 좋기도 하지만 높은 값의 확률을 주면서 틀린 값을 주기도 한다. 또한 이러한 모델들은 OOD데이터에 대해서도 잘 구분하지 못한다. 이러한 문제점은 AI saftey 의 큰 문제점이라고도 할 수 있다. 따라서 해당 논문에서는 분류기로 하여금 confidence estimate를 각 input에서 뽑도록 훈련시킨다.
Confidence Estimation
모델로 하여금 input에 대해 confidence 를 산출하는 것은 어려운 일이다. 따라서 저자는 모델에게 인센티브를 따로주었다고한다.
해당 방법에 대한 motivation은 다음과 같다. 만약 시험을 보고 있는 상황에서 학생은 힌트를 받을 수 있다. 그러나 힌트를 받을 때마다 약간의 penalty(아마 약간의 마이너스점수?)를 받는다. 따라서 학생은 총점에서 좋은 점수를 받기 위해서는 자신있는 문제에 대해서는 그대로 풀고 자신 없는 문제에 대해 힌트를 받는 전략을 사용할 수 있다. 이러한 비슷한 방식으로 저자는 ground truth label없이 confidence estimate(ood 인지 아닌지 판별하는 지표)을 가르쳤다고 한다.
confidence estimation branch 는 기존 네트워크에서 추가로 layer가 붙어있으며 같은 input을 받는다. output으로는 0~1의 스칼라 값을 내뱉으며 sigmoid 함수를 가지고있다. confidence value c는 모델이 input에 대하여 correct prediction 을 뱉는지안뱉는지를 측정하는데 모델이 confident 하다면 1, 그렇지 않다면 0을 내뱉는다.
앞에서 언급한 힌트를 모델에게 주기위해 softmax prediction probabilities는 original prediction - target probability distribution인 y 사이에서 interpolation을 갖게된다. 이 interpolation의 정도는 confidence값을 이용한다.
식을 보면 알 수 있겠지만 만약 모델이 confident하다면 (c = 1) y값을 활용하지 않고 본인이 뱉은 값만을 이용할 것이고 confident하지 않다면 y값을 활용하게 된다.
Loss는 기본적으로 calibrated 된 NLL loss(Cross Entropy)를 사용하게 된다. 그러나 모델은 c = 0 값을 계속 뱉어 loss를 낮추는 방법을 사용할 수 있다. 따라서 추가적인 regularizer loss를 추가한다.
따라서 모델은 c값을 확실한 input에 대해서는 1과 가깝게 내도록 노력하고 확실하지 않은 input에 대해서는 0을 뱉도록 노력한다. 그러나 이러한 과정에서 모든 sample 에 대하여 c값을 loss가 낮도록 일정한 값을 내뱉는 것이 발견됐다고 한다. 따라서 앞에서 hyper parameter인 $\beta $를 도입해 confidence loss를 weighting 하는 $\lambda $를 조절한다.(해당 방법에 대해서는 논문에 잘 언급되어 있지 않은데 관심있으시다면 공식 github에서 확인하면 될 거 같다!)
Out of Distribution Detection
OOD데이터가 들어온다면 c값을 낮을 것이기 때문에 일정 threshold값을 두어 ood인지 아닌지 판별한다.
Result