딥 러닝에서 Dropout을 이용해 불확실성 판단하기

김인근
CURG
Published in
9 min readJun 20, 2020

김인근 | ingeun92@naver.com | CURG

딥 러닝은 수집되고 학습된 특징점을 통해 들어온 데이터가 어떠한 것인지 판단을 내려 결과를 도출하는 큰 흐름을 가지고 있다. 이러한 딥 러닝의 특징을 이용해 이미지 인식이나 자율 주행 그리고 무인의료 등 여러 방면에서 무궁무진한 활용성을 보여주고 있다. 그렇다면 우리는 계속해서 발전해 나가고 있는 딥 러닝, 크게 보면 인공지능에 대해 충분한 확실함을 보장받고 있는 것일까?

이 논문[1]에서는 Uncertainty → 불확실성 이라는 주제에 포커싱하고 있다. 그렇다면 불확실성이 무엇인지에 대해 짚고 넘어가는 것이 좋을 듯 하다. 불확실성은 확실하지 않은 성질이나 극심한 변화로 인해 미래를 예측할 수 없는 상태를 묘사할 때 쓰는 말이라는 사전적 정의를 가지고 있다. 즉, 인공지능의 관점에서 불확실성이란 “판단이나 의사결정에 필요한 적절한 정보의 부족” 이며 이로 인해 잘못된 판단을 내릴 수 있는 가능성이라고도 볼 수 있다.

불확실성은 딥 러닝 분야에서 지금까지 주목받지 못한 주제이지만 굉장히 중요한 주제이기도 하다. 예를 들어, 자율 주행이나 무인 의료에 딥 러닝을 접목한 경우 불확실성을 판단하지 못하면 큰 사고가 발생할 수 있다. 또한, 실제 일어난 사건으로 보자면 불확실성을 제대로 해결하지 않은 구글 포토에서 사진 속 흑인을 고릴라로 인식하여 구글 측이 사과를 한 경우도 있었다[2]. 이렇게 보통의 딥 러닝 모델들은 도출 결과가 틀리면 틀렸지 “모른다”고는 말하지 못한다.

가장 대표적으로 Softmax 알고리즘은 딥러닝 모델의 마지막 단계에서 사용되는 활성화 함수로 다중 클래스 분류 문제에서 각 클래스에 대한 확률을 계산하는 데 사용된다. 이 알고리즘은 딥러닝의 결과를 확률로 표현하여 불확실성이 나타나는 것처럼 보이지만, softmax 알고리즘에서 나오는 확률은 결과의 불확실성을 나타내지 않는다. 왜냐하면, 학습 데이터와 형태가 다른 데이터가 인풋으로 들어올 경우 완전히 잘못된 결과를 출력하지만 이것을 마치 정확히 예측한 결과처럼 딥 러닝 모델이 표현하는 것 자체가 문제이기 때문이다.

이러한 딥 러닝 내에서의 불확실성을 제거하기 위해 베이지안 신경망 쪽에서는 이전부터 불확실성에 대해 다뤄왔다. 그러나 딥 러닝에 베이지안 신경망을 적용하기엔 너무 무겁고 리소스가 많이 들어가 실용적이지 않다는 문제가 있다. 따라서 이 연구에서는 불확실성 해결 적용 방안을 적은 리소스로 기존 딥 러닝 모델에 그대로 적용할 수 있는 방법을 제안했다.

이 논문에서 제안한 방식은 간단히 말하자면 가우시안 신경망을 Dropout을 이용해 불확실성을 반영할 수 있는 베이지안 신경망의 알고리즘과 동일시하는 것이다.

(이러한 동일시 작업은 수식을 바탕으로 하여 이루어지지만 글의 내용이 너무 깊고 딱딱해질 것을 우려하여 “최대한” 넣지 않은 점을 참고바란다.)

Bayesian Neural Networks

기본적으로 베이지안 신경망[3]은 학습을 통해 가중치가 고정되는 것이 아니라 가중치의 확률분포가 결정되는 것이다. 즉 가중치를 어떤 주사위 위에 적어놓고 주사위를 던질 때 마다 다른 가중치를 가지는 신경망이 튀어나오게 되는데, 이는 결국 여러 개의 신경망을 수행하는 효과를 가지게 된다.

일반적인 딥 러닝 vs 베이지안 딥 러닝

Neural Networks with Dropout

Dropout이 적용된 신경망[4]은 베이지안 신경망의 특징과 동일한 점이 많다. 우선 Dropout이 적용된 신경망은 신경망에 있는 모든 Layer에 대해 학습을 수행하는 것이 아니라 신경망에 있는 입력 Layer나 Hidden Layer의 일부 뉴런을 생략하고 줄어든 신경망을 통해 학습을 수행한다. 이렇게 되면 선택된 뉴런들의 조합에 따라 다른 가중치를 가지는 신경망이 튀어나오게 된다. 베이지안 신경망과 마찬가지로 여러 개의 신경망을 수행하는 효과를 가지게 되는 것이다.

기본적인 신경망 vs Dropout이 적용된 신경망

Neural Networks with Dropout = Bayesian Neural Networks

위에서도 언급한 것처럼 NN-Dropout과 BNN은 수행마다 다른 가중치를 가지는 신경망이 등장하며 이 점은 결국 여러 개의 신경망을 수행하는 효과를 가지게 한다는 공통점을 지닌다.

아래의 수식은 NN-Dropout과 BNN의 유사점을 나타낸 수식이다. Objective 유사성을 바탕으로 하여 차이점을 줄여나가는 방식으로 수식을 조정하면 NN-Dropout의 수식 결과값이 BNN의 수식 결과값과 거의 동일해지는 효과를 얻을 수 있다.

NN-Dropout과 BNN의 수식 유사성을 위한 조정 과정 (참고 문헌 [5] 영상의 캡처본 사용)

Sum Up

그렇다면 베이지안 신경망에서는 어떻게 불확실성을 계산을 했을까? 이 점을 NN-Dropout에 그대로 적용하면 이 논문에서 목표로 한 것을 이룰 수 있다.

불확실성을 계산하는 방법은 이렇다. NN-Dropout과 BNN 모두 수행마다 결국 다른 여러 개의 신경망이 생성된다는 특징이 있다. 이렇게 생성된 여러 모델에 동일한 인풋을 넣어 여러 개의 결과를 얻게 되면 이 결과들을 다시 모은다. 모인 결과들의 평균값과 분산값을 계산하고 계산된 분산은 불확실성으로 사용이 가능해진다.

Regression

NN-Dropout을 이용하여 실험을 한 결과는 아래와 같다. 여러 Regression 알고리즘에 Dropout을 적용했을 때 불확실성이 나타나는 것을 그래프로 나타낸 것이다. 파란색 점선까지는 학습 데이터로 학습을 시키는 과정이고 파란색 점선 이후는 학습 데이터에서 보지 못한 새로운 테스트 데이터 셋을 인풋으로 넣었을 때의 과정이다.

그래프 상에서 (b), (c), (d)는 짙은 파란색으로 음영으로 불확실성이 나타나는 것을 확인할 수 있다. (d)에서는 자세히 보면 아주 약하게 나타나는 것을 확인할 수 있는데 그 이유는 TanH를 이용한 모델은 ReLU에 비해 결과값에 대해 더 압축이 잘되어서 불확실성 또한 압축이 된 형태를 보이기 때문이다.

참고로 (c), (d)의 MC Dropout은 Monte Carlo Dropout이며 이것을 적용한 모델은 학습 과정과 테스트 과정에서 모두 Dropout을 사용한다는 특징이 있다.

Regression Result

Classification

숫자 이미지 판독 시의 불확실성 도출 결과를 살펴보자. 좌우 그래프의 가로축은 숫자 1의 회전된 이미지이며, 왼쪽 그래프의 세로축은 softmax로 들어오는 입력값에서 출력된 클래스에 대한 점수이다. 오른쪽 그래프의 세로축은 softmax에서 나오는 확률값 결과이다.

여기서 입력에 비해 출력 쪽에서 불확실성이 크게 나타나는데, 이것은 dropout을 통해 불확실성 요소가 반영된 결과이다. 특히, 숫자 1의 회전이 중간쯤 왔을 때 왼쪽 그래프에서는 이를 숫자 5로 판단하는 점수가 가장 크게 나왔다. 이 입력값이 softmax를 통과하고 나서 나온 결과인 오른쪽 그래프에서는 퍼지고 흐릿한 형태로 불확실성이 크게 나타난다.

이를 통해 중간 정도 회전된 숫자 1의 이미지를 숫자 5로 판단하는 것은 불확실성이 높으며, 이 부분에 대해 딥러닝의 결과를 신뢰하지 않고 다른 외부 의견을 참고하는 것이 좋다고 판단할 수 있다. 이를 통해, 딥러닝의 잘못된 결정을 그대로 받아들이는 것을 애초에 방지할 수 있다.

Classification Result

BNN의 특징은 그대로 가져가면서 기존 모델의 구조를 변경시키지 않고 사용되는 리소스가 적은 NN-Dropout에 대해 알아보았다. 이 논문에서 제안한 모델도 흥미롭지만 불확실성에 대한 연구 필요성과 Dropout에 대한 신선한 해석만 놓고 보아도 좋은 논문이라는 것이 필자의 생각이다. 특히, 논문을 따로 읽어보는 것도 좋지만 이 논문에 대해 설명을 해주는 유튜브 영상을 참고하는 것도 좋은 방법으로 추천한다[5].

참고 문헌

[1]Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning | Yarin Gal, Zoubin Ghahramani

[2] 흑인을 고릴라로 인식했던 구글… 3년이 지난 지금은 무엇이 변했을까 | 인터비즈 | https://m.blog.naver.com/businessinsight/221223724765

[3] Bayesian Deep Learning: Introduction | Taeoh Kim | https://taeoh-kim.github.io/blog/bayesian1/

[4] [Part 3. Neural Networks 최적화] 4. Dropout | 라온피플 머신러닝 아카데미 | https://m.blog.naver.com/PostView.nhn?blogId=laonple&logNo=220542170499&proxyReferer=https:%2F%2Fwww.google.com%2F

[5] PR-039: Dropout as a Bayesian approximation | 차준범 | PR12 딥러닝 논문읽기 모임 | https://www.youtube.com/watch?v=aU91bDGmy7I&list=PLlMkM4tgfjnJhhd4wn5aj8fVTYJwIpWkS&index=39

--

--