머신러닝/불확실성

불확실성 (Uncertainty)

망나 2019. 4. 3. 15:27

본 포스트는 Eric Jang의 블로그 게시글을 번역하였습니다. 전문 번역가가 아닌 개인적인 공부 목적이기 때문에 이해가 안가시는 부분은 원문을 읽으시면 도움이 될 것 같습니다.


불확실성(Uncertainty)은 AI safety, risk management, portfolio optimization, scientific measurement, 그리고 insurance와 같은 분야에서 자주 언급이 됩니다. 예를 들어 보면,

  • "기계학습(머신러닝) 모델이 무엇을 모르는지를 스스로 알기를 원한다"
  • "AI가 환자의 증상과 조치에 대해 추천을 할 때, 그것이 어느정도로 신뢰 가능한 정보인지를 우리에게 알려줄 책임이 있다"
  • "Scientific calculations에서 significant figures는 측정의 불확실성을 나타냅니다"
  • "우리는 agent가 불확실한 곳(rewards or predictions)을 자동으로 탐험하고 희소 보상(sparse rewards)을 발견하기를 원한다"
  • "Portfolio optimization에서 우리는 위험을 제한하면서 보상을 최대화 하기를 원한다"
  • "미국 주식 시장은 2018년에 지정학적 불확실성의 증가로 인해서 실망스러운 결과로 종료했습니다"

그렇다면, 불확실성이란 정확히 무엇일까요?

 

Uncertainty는 확률 변수의 분산의 크기를 말합니다. 다른 말로, 확률 변수가 얼마나 "무작위(랜덤)"한지를 측정한 스칼라 값 입니다. 금융 분야에서는, risk(위험성)라고 합니다.

 

분산을 계산하는 여러가지 방법(standard deviation, variance, value-at-risk(VaR), and entropy)이 있기 때문에 Uncertainty를 계산하는 공식 또한 여러가지가 있습니다. 하지만, 단일 스칼라 값으로 전체 확률 변수의 무작위(randomness)성을 나타내는 것은 불가능 하다는 것을 명심해야 합니다.

 

그렇다고 해도, 최적화와 비교를 위해서 무작위성을 하나의 숫자로 나타내는 것은 유용할 수 있습니다. 중요한 사실은 "더 불확실" 할 수록 결과는 "더 좋지 않다"는 것 입니다. (시뮬레이션된 강화학습 실험은 예외)

 

불확실성의 종류

 

통계적 기계학습은 모델 p의 추정, 즉 미지의 확률 변수 p를 예측하는 문제입니다. 불확실성에도 여러가지 형태가 존재합니다. 불확실성은 고유한 무작위성(e.g. 동전 던지기의 결과는 불확실하죠?)을 뜻하기도 하고 다른 의미로는 우리가 예측한 최적의 모델 파라미터에 대한 불확실함(우리는 예측한 파라미터가 최적이라고 확신하지 못 합니다)을 뜻하기도 합니다.

 

조금 더 이해하기 위해서 일일 기압계 순차 데이터를 활용하여 오늘의 강수량을 예측하는 recurrent neural network (RNN)을 예로 들어 보겠습니다. 기압계는 대기압을 측정하며, 대기압은 비가 내릴 때 감소하는 모습을 보입니다. 아래 그림에서 강우량 예측 모델을 예로 들어 다양한 종류의 불확실성을 설명하고 있습니다.

Aleatoric Uncertainty

Aleatoric Uncertainty는 라틴어 aleatorius에서 파생된 단어로 데이터 생성과정에서 발생하는 무작위성을 뜻 합니다. 따라서 단순히 더 많은 데이터를 활용한다고 없앨 수 있는 불확실성이 아닙니다.

 

강수량 예측 분석에서, aleatoric noise는 기압계의 부정확성에 의해 발생합니다. 또한 데이터 수집 단계에서 관측되지 않는 중요한 변수들이 있습니다: 전일 강수량, 기압계의 압력 등. 이러한 미확인 변수들이 있기 때문에 단순히 현재의  데이터 수집 단계에서 이전과 동일한 데이터를 더 많이 수집한다고 해서 불확실성을 줄일 수 없습니다. 

 

Aleatoric 불확실성은 입력으로부터 모델 예측으로 전파됩니다. 정규 분포 입력 x ~ N(0,1)을 입력으로 받는 간단한 모델 y=5x가 있다고 가정해 보겠습니다. 이 경우, y ~ N(0,5)이기 때문에 예측 분포에 대한 aleatoric 불확실성은 σ = 5로 나타낼 수 있습니다. 물론, 랜덤한 형태의 입력 데이터 x를 모를 경우에 aleatoric 불확실성에 대한 예측은 더욱 어려워집니다.

 

우리는 aleatoric 불확실성을 줄일 수 없기 때문에 무시해도 된다고 생각할 수도 있습니다. No! 하지만 그렇지 않습니다. 우리는 모델을 훈련할 때 aleatoric 불확실성을 정확하게 표현할 수 있는 모델 출력을 선택해야 합니다. 표준 LSTM 모델은 확률 분포를 출력하지 않기 때문에 동전 던지기의 결과를 배우려고 한다면 그저 평균값으로 수렴하게 됩니다. 대조적으로, 언어 생성 모델은 순차적인 범주형 분포(단어 또는 문자)를 출력하기 때문에 문장 완성 작업에서의 모호성을 포착할 수 있습니다. (* 출력 형태를 분포값으로 함으로써 aleatoric 불확실성에 대해 추정?할 수 있다는 의미인 것 같습니다.)

 

Epistemic Uncertainty

"Good models are all alike; every bad model is wrong in its own way."

Epistemic 불확실성은 Knowledge about knowledge라는 의미를 가진 그리스어 episteme에서 파생되었습니다. 정확한 모델의 매개변수(파라미터)를 모르기 때문에 발생하는 불확실성을 뜻합니다. 즉 완벽하지 않은 모델에 의해 발생하는 불확실성입니다.

 

아래 그림은 1차원 데이터셋의 Gaussian Process Regression 모델입니다. 그림에서 보이는 confidence interval이 epistemic 불확실성을 나타냅니다; 훈련 데이터(붉은 점)에 대해서는 불확실성이 0이고,  훈련 데이터에서 멀어질 수록 모델의 예측 분포의 표준편차는 높아지게 됩니다.  Aleatoric 불확실성과 다르게, epistemic 불확실성은 더 많은 데이터를 수집하거나 지식이 부족한 입력을 "ironing out"(?) 함으로써 줄일 수 있습니다.

Deep Learning과 Gaussian Processes에는 깊은 연관성이 있습니다. 신경망의 표현력으로 우리는 가우시안 프로세스의 불확실성 인식 특성을 확장시킬 수 있습니다. 가우시안 프로세스는 대용량의 데이터에 대해서 확률적 미니배치로 설정하기 어렵기 때문에 큰 모델이나 데이터셋을 다루는데 어려운 점이 있습니다.

 

다양한 모델에서 최대한 유연한 모델을 선택하길 원한다면, 불확실성을 추청하는 대안으로 앙상블 모델을 활용하는 것 입니다. 앙상블 모델은 독립적으로 학습된 여러 모델들을 함께 사용하는 것을 뜻 합니다. GP(가우시안 프로세스) 모델은 분석적으로 예측 분포를 정의하지만, 앙상블 모델은 경험적 예측 분포를 계산하는데 사용됩니다.

 

모든 독립적인 모델은 훈련 과정동안 bias들을 randomiz하는 과정에서 error들을 발생시킵니다. 앙상블 모델이 강력한 이유는 정확히 예측된 모델에 의해서 다른 단일 모델의 특이한 오류를 잡아낼 수 있기 때문입니다.

 

그렇다면 우리는 어떻게 모델들을 무작위로 샘플링하여 앙상블을 만들수 있을까요? Ensembling with bootstrap aggregation에서, 먼저 원본 훈련 데이터셋에서 N크기의 M개의 데이터셋을 뽑아내어 N크기의 데이터셋으로 학습을 시작합니다. 총 M개의 모델이 각각의 데이터셋으로 학습이 되고 최종적으로 모두 모여서 경험적 예측 분포를 형성하여 결과를 예측하게 됩니다.

 

여러개의 모델을 학습시키는 비용이 너무 높다면(시간 | 메모리 | 비용적으로) Dropout 학습법을 사용하여 앙상블 모델과 비슷한 효과를 얻을 수 있습니다. 하지만, Dropout을 사용하면 추가 하이퍼 파라미터가 포함되기 때문에 단일 모델의 성능을 저하시킬 수 있습니다.

 

따라서, 많은 컴퓨팅 자원을 사용할 수 있는 경우(구글과 같은...)는 모델의 여러 복사본을 사용하여 재 훈련시키는 방법이 가장 쉬운 방법입니다. 이러한 방법은 성능의 저하 없이 앙상블 모델의 이점을 제공해 줍니다. Deep Ensembles 논문에서 앙상블에 대한 내용을 자세히 다루고 있습니다.

 

Out-of-Distribution Uncertainty

우리의 강수량 예측 예제에서, 만약 기압계의 데이터가 아니라 태양의 온도에 대한 데이터를 입력한다면 어떻게 될까요? 아니면 입력값이 모두 0이면? 또는 기압계의 데이터를 다른 단위의 값으로 입력하면? RNN 모델은 어떤 입력값을 받더라도 모델링된 값에 의해서 예측 결과를 출력하겠지만, 알다시피 무의미한 결과일 것 입니다.

 

우리의 모델은 우리가 사용한 훈련 데이터셋과 다른 방식으로 수집하거나 생성한 데이터셋에 대한 예측으로는 부적합하다고 할 수 있습니다. 이러한 문제는 ML 연구에서 자주 간과되는 오류의 형태인데, 왜냐하면 우리는 훈련, 평가, 그리고 테스팅 데이터셋이 모든 (전처리가 잘 된)데이터를 포함하고 있다고 가정하기 때문입니다.

 

입력값이 "유효"한지를 결정한는 문제는 ML을 배포하는 과정에서 잘 다루어져야할 문제이며 Out of Distribution (OoD) 문제라고 알려져 있습니다. OoD는 또한 model misspecification error 또는 anomaly detection을 뜻하기도 합니다.

 

ML 시스템을 향상시키는 것 뿐만 아니라도, anomaly detection은 유용한 기술입니다. 예를 들어서, 환자의 상태를 모니터링할 때, 이전의 패턴을 보지 않고도 뭔가 잘못되었을 때 경고하는 시스템을 구축하고자 할 때 사용할 수 있습니다. 또는, 데이터 센터의 상태를 관리하고 비정상적인 활동이 발생할 때 마다 이를 알고 싶을 수도 있습니다. (보안 위반, 하드웨어 오류 등)

 

OoD의 입력은 모델 테스트시에만 발생하기 때문에 모델에서 발생하는 이상 현상의 분포를 추정해서는 안됩니다. 이러한 이유로 OoD 탐지가 까다로워 집니다. 우리는 훈련 중에는 관찰되지 않는 입력에 대해서 모델을 강화해야 합니다. 이것이 바로 Adversarial Machine Learning에서 설명하는 표준 공격 시나리오 입니다.

 

기계학습 모델에서 OoD 입력을 처리하는 2가지 방법이 있습니다: 1) 모델에 입력이 되기 전에 잘못된 입력을 잡아내는 방법 2) 입력이 잘 못되었음을 뜻하는 "이상한 점"을 모델의 예측에 추가하는 방법.

 

첫번째 방법에서, 우리는 ML 모델의 계산에 대해서는 아무런 가정 없이, 간단하게 입력이 훈련 데이터 분포에 속하는지 아닌지를 고려합니다. 이러한 작업은 Generative Adversarial Networks (GANs) 모델에서 discriminators(판별자)가 맡게 됩니다. 하지만, 단일 판별자로는 견고한 판별이 어려운데 그 이유는 판별자는 실제 데이터 분포와 generators(생성자)가 생성한 분포에 대한 판별에만 좋은 성능을 보이도록 훈련되기 때문입니다; 두 분포에 있지 않은 입력에 대해 임의의 예측을 제공 할 수도 있습니다.

 

판별자 대신에, kernel density estimator 또는 Normalizing Flow를 데이터에 맞추는 밀도 모델을 만들 수 있습니다.

 

두번째 방법은, 모델에 OoD가 입력되었을 때, 불확실성 (epistemic)을 예측하는 방법이다. 이상적으로, 모델에 대한 잘못된 입력(OoD)는 이상한 예측 분포를 생성해야 합니다. 예를 들어, Hendrycks와 Gimpel은 OoD 입력이 예측 클래스에 in-distribution 입력보다 낮은 softmax 확률을 출력한다는 것을 보였습니다. 여기서, 불확실성은 max soft 확률로 모델링된 "신뢰도"에 반비례합니다. 우리는 가우시안 프로세스나 딥 앙상블을 통해 epistemic 불확실성을 측정할 수 있습니다.

 

강화합습에서 OoD는 실제로 좋은 입력으로 여겨집니다. 왜냐하면, 아직 모델이 해당 입력에 대해서 어떻게 처리할지 모른다는 의미이기 때문입니다. 자체적인 OoD 입력을 찾는 정책은 "본질적인 호기심"을 구현하여 모델이 아직 예측할 수 없는 지역을 탐색하게 합니다. 이러한 모델이 훌륭하다고 생각하지만, 만약 센서가 쉽게 파손될 수 있거나 다른 실험적 예외가 발생할 수 있는 실제 환경에서 이러한 curiousity-driven agent를 활용하면 어떤 일이 발생할지 생각해야 합니다. 어떻게 로봇이 "처음 보는 상태" (good)과 "센서 파손" (bad)를 구분할 수 있을까요? 이러한 판단을 위해 감각적인 매커니즘을 배우는 에이전트가 될 수 있을까요?

 

Who Will Watch the Watchdogs?

이전 단락에서 설명했듯이,  OoD 입력을 방어하는 방법 중 한 가지는 모델의 입력을 "감시"하는 우도(likelihood) 모델을 설정하는 것 입니다. 이 방법은 모델에서 aleatoric, epistemic 불확실성으로부터 OoD 입력 문제를 분리할 수 있다는 장점이 있다. 그렇게 되면 엔지니어링 측면에서 분석하기가 훨씬 수월해진다.

 

하지만 우리는 우도(likelihood) 모델 또한 근사 함수이며 아마도 자체적인 OoD 오류가 있다는 것을 잊으면 안된다. 우리는 우리의 연구 Generative Ensembles에서 (그리고 또, DeepMind에서 진행한 연구에서), CIFAR likelihood 모델에서 SVHN 이미지 데이터가 더욱 CIFAR 이미지 데이터의 in-distribution에 가깝다는 것을 보였다.

 

우도 측정은 근사 함수를 포함하기 때문에 OoD 입력에 영향 자체적으로 영향을 받을 수 있습니다. CIFAR의 우도 모델이 CIFAR 테스트 이미지보다 SVHN의 이미지에 더 높은 확률을 보였습니다!

하지만, 모든 것이 손실된 것은 아닙니다. 우도 모델의 epistemic 불확실성은 우도 모델의 자체에 대한 훌륭한 OoD 검출기라는 것이 밝혀졌습니다. 밀도 추정과 epistemic 불확실성을 연결함으로써, 우리는 우도 모델의 앙상블을 이용하여 모델에 의존하지 않는 방법으로 OoD 입력에 대해 기계 학습 모델을 보호할 수 있습니다.

 

Calibration: the Next Big Thing?

모델이 예측에 대한 신뢰 구간을 출력한다고해서 해당 신뢰 구간이 실제 결과의 확률을 반영한다는 의미는 아닙니다.

 

신뢰 간격(e.g. 2σ)은 예측 분포가 Gaussian-distributed라고 가정하지만 예측하려는 분포가 multi-modal 또는 heavy-tailed이면 모델이 잘 보정되지(calibrated) 않습니다.

 

우리의 강우량 예측 RNN 모델이 오늘 비가 올 확률이 N(4,1)이라고 예측했다고 가정해 봅시다. 만약 우리의 모델이 잘 보정되었다면, 동일한 조건에서 실험을 반복하더라도 우리는 항상 N(4,1) 분포의 강우량 예측 결과를 얻을 것 입니다. 오늘날의 학계에서 개발하는 기계 학습 모델을 대부분 테스트 정확도에 최적화 시키는 경우가 대부분입니다. 연구원들은 대부분 동일한 환경에서 반복적으로 실험을 해서 보정 오류를 측정하여 모델을 향상시키지 않기 때문에 모델을은 잘 보정되지 않는 경향이 있습니다.

 

만약 우리가 실세계에서 ML 시스템을 믿고 사용하려할 때, "우리 모델이 세상을 재대로 이해하고 있다"라고 증명하는 가장 확실한 방법은 모델을 통계적 보정(statistical calibration)을 위해 테스팅하는 것 입니다. 잘 보정된 모델은 그 정확도 또한 좋고 모델을 최적화 할 때 높은 기준이 됩니다.

 

 

Further Reading