본문 바로가기
머신러닝&딥러닝/논문리뷰

논문 리뷰: What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision

by Like_Me 2020. 10. 28.
"What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision"  (NIPS 2017) - Alex Kendal, Yarin Gal
  https://www.edwith.org/bayesiandeeplearning/joinLectures/14426

 

  이번 논문은 Computer Vision 분야에서 Uncertainty를 다룬 논문이다. 사실 Computer Vision에 관심이 있지는 않지만 Uncertainty에 대해 새로운 방법을 제시하여 읽어보았다. 


 

문제제기 및 해결책

  

  어플리케이션에서 AI가 흑인 여성 2명을 고릴라라고 판단한 사건이 있다. 이는 인종 차별 문제로 번져 문제가 되었다.(기사 링크) 또 자율주행 시스템이 하얀 트레일러를 하늘이라고 인식하여 사고를 내기도 하였다. 만약 둘 다 에러에 대한 더 높은 수준의 Uncertainty를 측정할 수 있었다면 그런 재앙은 피할 수 있었을 것이다. 그래서 본 논문에서는 2가지 Uncertainty를 사용하는 것을 제안한다.

 

1. Aleatoric Uncertainty (Data Uncertainty) : 데이터에 내재되어 있는 에러에 대한 불확실성. (ex. sensor noise, motion noise 등) -> 저번 글에서 "Simple and Scalable Predictive Uncertainty Estimation Using Deep Ensembles"을 리뷰할 때 model의 output으로 mean과 variance를 예측했는데 그와 같은 방법을 사용한다.

 

2. Epistemic Uncertainty (Model Uncertainty) : 모델에 내재되어 있는 에러에 대한 불확실성. 즉, 모델의 weight 분포(prior)를 보게 되는데 논문에서는 MC dropout을 사용한다.

 

각 Uncertainty의 특징

위의 사진들은 Aleatoric Uncertainty와 Epistemic Uncertainty의 차이를 나타낸다. Input images에 대한 segmentation을 수행한 것인데, Aleatoric Uncertainty의 경우 각 물체들의 경계 부분에서 높은 값을 가진다. 한편, Epistemic Uncertainty는 Ground Truth와 Predict 한 것이 많이 차이가 나는 부분들이 높게 나온 것을 볼 수 있다. 논문에서는 두 개의 Uncertainty 방법을 함께 사용할 수 있는 새로운 방법을 제시하면서 모델의 성능을 개선하는 것을 보여주었다.


 

Main Contribution

 

  1. Epistemic Uncertainty와 Aleatoric Uncertainty에 대한 이해를 높여 주었고 Classification을 할 때 기존과 다른 새로운 접근 방법을 제시하였다.

Epistemic Uncertainty를 알기 위해 Dropout variational inference를 사용하여 posterior를 추정하였다. Aleatoric Uncertainty는 input x에 대해 output y와 함께 variance를 추정하였다. 논문에서는 이 두 가지 Uncertainty를 합쳐서 함께 사용하도록 제안하였다. 그에 대한 Regression에서의 Loss function은 다음과 같다.

$$ L_{BNN}(\theta) = \frac {1} {D} \sum_{i} \frac {1} {2} \hat{\sigma_{i}} ^ {-2} ||y_{i} - \hat{y_{i}}||^{2} + \frac {1} {2} log \hat{\sigma_{i}}^{2}$$

$\hat{y_{i}} 와 \hat{\sigma}$는 model의 output으로 구하는 값이고 각각 mean과 variance를 의미한다.

 

위의 식은 $\sigma$가 0이 되면 분모가 0이 되므로 다음과 같이 처리하여 계산한다.

$$L_{BNN}(\theta) = \frac{1} {D} \sum_{i} \frac {1} {2} exp(-s_{i}) ||y_{i} - \hat{y_{i}}||^{2} + \frac {1} {2} s_{i}$$

($ s_{i} = log \hat{\sigma_{i}}^{2}$)

 

한편, Classification의 경우는 위의 방법과 같이 구할 수가 없다. 따라서 Reparameterized trick을 사용한다.

Image Segmentation을 진행할 때, Image의 각 pixel별로 softmax 값을 찾아야 한다. 그런데 여기서 모델의 output은 평균과 분산 값이다. 그러므로 평균에 대한 vector $f_{i}$, uncertainty에 대한 vector $\sigma_{i}$가 나온다. 각 픽셀 값에 대한 값은 $f_{i}, \sigma_{i}$를 각각 평균, 표준편차로 가지는 가우시안 분포에서 샘플링한 값이 된다. Network의 Parameter가 W일 때, 다음과 같이 나타낼 수 있다. $$ \hat{x_{i}}|W \sim N(f_{i}^{W}, (\sigma_{i}^{W}) ^ {2})$$

하지만 이렇게 샘플링한 값은 모델의 output을 계속 바꾸기 때문에 미분이 불가능하여 역전파가 되지 않는다. 따라서 reparameterized trick을 사용한다.

$$ \hat{x_{i,t}} = f_{i}^{W} + \sigma_{i} ^ {W} \epsilon_{t} $$

$ (\epsilon_{t} \sim N(0, I)) $

N(0, l)를 따르는 가우시안 분포의 값 $\epsilon$을 $\sigma$와 matmul 하여 $f_{i}$에 더해준다. 이렇게 하면 역전파가 가능해지고 variance도 x에 더해지므로 모델 학습에 반영이 된다.

 

$$ L_{x} = \sum_{i} log \frac {1} {T} \sum_{t} exp(\hat {x}_{i, t, c} - log \sum_{c'} exp(\hat {x}_{i, t, c'}))$$

그 후 T번 반복하여 softmax값을 구한 후 평균을 취해주고 Loss (NLL) 값을 구한다. 이전에는 분류를 할 때 Brier Score와 Ensemble을 사용하여 Uncertainty를 구했지만 여기서는 MC Dropout과 Loss function을 적절히 구하여 사용하는 새로운 방법을 제시하였다.

 

 

  2. Aleatoric Uncertainty방법으로 noisy 한 데이터는 덜 학습하게 하는 방법을 사용하여 모델의 퍼포먼스를 개선시켰다.

위의 식에서 $\sigma$가 2번 나오는데 각각의 역할을 이해하면 noisy한 데이터를 덜 학습하게 하는 방법을 이해할 수 있다.

 

1) 분모 term $\sigma$의 역할 : loss attenuation - $\sigma$ 값이 커지게 되면 $||y_{i} - \hat {y_{i}}|| ^ {2} $의 값이 작아진다. 따라서 Loss 값이 작아지므로 작은 값의 역전파가 일어나서 학습에 영향을 많이 못 미치도록 한다. 반대로 $\sigma$ 값이 작으면 반대로 역전파 값이 커져서 학습에 영향을 크게 해 준다. 즉, 확실한 정보(Uncertainty가 작은) 데이터에 대해서는 network를 크게 학습시키고 불확실한 정보(Uncertainty가 큰) 데이터에 대해서는 network를 작게 학습시킨다.

 

2) 더하는 $\sigma$의 역할 : $\sigma$값이 무한대로 커져서 loss가 0이 되지 못하도록 하는 regularization term이다.

즉, 모든 데이터가 불확실하다고 하지 못하게 한다.

 

  3. 각 Uncertainty방법의 특징을 파악하고 모델의 퍼포먼스와 추론 시간을 비교하여 trade-offs를 조사하였다.

데이터셋 변화에 따른 uncertainty 변화

Train dataset이 적을 때와 클 때를 비교하였을 때, Aleatoric variance는 비슷한 값을 가지나 Epistemic variance는 많은 변화가 일어난다. Epistemic variance의 경우 모델의 uncertainty를 나타내므로 학습을 많이 할수록 값이 줄어든다. Train set과 다른 Test set을 실험하였을 때도 Epistemic variance값이 큰 값을 가졌는데 이 또한 train set과 다른 데이터가 들어오면 학습을 하지 않은 것이므로 큰 Uncertainty를 갖게 되는 것이다. 그러므로 Epistemic variance는 이전까지 관찰되지 못한 데이터를 파악하는 것에 큰 도움이 되며 Safety-critical 한 곳에 필요하다. 그리고 데이터가 얼마 없는 곳에서 Uncertainty를 잘 줄 수 있다는 장점이 있다.

한편 Aleatoric variance데이터가 많아 Epistemic variance값이 잘 나오지 않는 경우 유용하며 Monte Carlo 기법을 사용하지 않아도 되므로 Real-time 측정이 필요한 곳에 유용하다. 


 

Experiments

 

성능향상 결과

 

 

Semantic segmentation이나 Monocular depth regression에서 Aleatoric variance와 Epistemic variance를 모두 사용하여 학습시킬 때 대부분 성능 향상이 일어났다. 그리고 Aleatoric uncertainty의 경우가 Epistemic Uncertainty보다 잘 되는 경우가 많은데 이는 loss attenuation으로 noisy 한 데이터에 대한 학습을 억제한 효과인 것 같다.

 

depth regression에 대한 결과를 보면 각 물체의 테두리에 해당하는 부분에서 aleatoric uncertainty가 높다. 이는 데이터 내에 존재하는 것으로 경계 부분에서 depth regression을 어떻게 할지 헷갈려한다는 뜻이다. epistemic uncertainty는 ground truth와 대비하여 예측한 값이 차이가 많이 나는 부분의 값이 높은 것을 볼 수 있다.


 

정리

  논문에서는 Aleatoric Uncertainty와 Epistemic Uncertainty의 특성을 밝힌다.

- Aletoric Uncertainty : Large data situations, Real-time applications

- Epistemic Uncertainty : Safety-critical applications, Small datasets

 

기존까지 두 가지를 따로 사용하였으나 본 논문에서는 함께 측정하는 방법을 제안한다. 

- 모델의 output으로 mu와 sigma를 가진다. 적절한 Loss function과 sigma를 이용하여 Aleatoric uncertainty를 예측하고 MC Dropout을 이용하여 Epistemic uncertainty를 예측한다. 

 

거기에 더해 Classification에서 사용할 수 있는 새로운 방법을 제시하여 실험에 성공한다. 

- Reparametrized trick을 이용하여 sampling.

 

T번 Sampling한 pixel y에 대한 total variance는 epistemic variance 와 aleatoric variance를 더한 다음과 같다. $$ Var(y) \approx \frac {1} {T} \sum_{t=1}^{T} \hat{y_{t}}^{2} - (\frac {1} {T} \sum_{t=1}^{T} \hat{y_{t}})^{2} + \frac {1} {T} \sum_{t=1}^{T} \hat{\sigma_{t}}^{2} $$

첫번째~두번째 term : Aleatoric Variance, 세번째 term : Epistemic Variance

 

반응형

댓글1

  • 한권수 2020.11.01 15:40

    혹시 깃헙 주소 알려주실수있나요 dual-stage attention 코드 작성하신거 보고싶습니다
    답글