본문 바로가기
카테고리 없음

[머신러닝] 베이지안 최적화(Bayesian optimization): 베이즈 정리

by goms 2021. 11. 2.

입력값과 출력값의 관계를 나타내는 함수가 엄청나게 복잡해서,
예를 들어, 입력값을 넣으면 계산해서 결과를 얻는 데까지 1시간이 걸린다고 하자.
이때 출력값을 최대로 하는 입력값을 찾고 싶다면, 즉 변수를 최적화하고 싶다면?

주어진 입력값의 범위 내에서 가능한 조합을 도출하고, 이를 함수에 넣어서 값을 보고, 이러한 출력값들을 봐가면서 내가 넣어준 입력값이 최적의 값을 주는지 확인할 수 있을 것이다.

그런데, 입력변수가 하나가 아니고, 여러개이고, 만약 범위가 넓다면? 게다가 함수까지 복잡해서 한번 함수(모델)를 계산하는데 엄청난 시간이 걸린다면? 사실상 이런 방법으로는 최적화가 불가능할 것이다. 다시 말해서, random search, grid search 같은 방법은 입력 변수가 많아질 경우 가능한 조합의 수가 너무 많아지고, 현실적으로 함수를 평가하는 것이 불가능해진다.

즉, 크게 두가지
1) 최적해를 탐색하는 방식
2) 출력값을 도출하는 모델의 복잡성
에 따라 최적화의 효율성과 시간이 결정된다고 할 수 있다.

데이터간의 상관관계가 비선형적이라 예측하기 어렵거나, 함수를 통해 계산하는 데에 많은 시간이 걸리는 경우 등 다양한 이유로 입-출력 데이터 간의 상관관계를 도출해서 데이터의 차수를 감소시키는 기법이 주목을 받고 있다. 이를 Reduced order technique이라고도 하고, 여러 알고리즘이 있지만 인공신경망을 사용하는 방법도 복잡성을 감소시키고 입-출력 변수간의 상관관계를 빠르고 정확하게 예측할 수 있다는 점에서 인기가 많다.

인공신경망을 구성하는 여러 요소가 있는데, 모델의 정확도 등 성능을 결정짓는 요소를 하이퍼파라미터라고 한다. 하이퍼파라미터에는 각 layer 내의 뉴런의 수, hidden layer의 수, 활성화함수의 종류, loss function의 종류, optimizer의 종류, learning rate 등이 있다. 지금 이렇게만 봐도 종류가 6개인데, 각 항목마다 예를 들면, 뉴런의 수가 1개에서 500개까지 중에 어떤 것이 적합한가?를 알기 위해서 모든 하이퍼파라미터의 조합을 테스트 해볼수는 없다. 게다가, 머신러닝 모델이 그다지 복잡하지 않고 데이터 간의 상관관계가 명확하다면 모델을 평가하는 데에 오랜 시간이 걸리지 않겠지만, 머신러닝 모델이 아주 복잡한 경우에는 이마저도 어려운 선택지가 될 것이다.


베이지안 최적화


최적화를 Bayesian스럽게 하겠다라는 뜻인데, 그렇다면 Bayesian이란?

베이즈 정리 Bayes' theorem

"사전확률(prior)과 사후확률(posterior) 사이의 관계를 나타내는 정리"

"새로운 정보를 토대로 어떤 사건이 발생했다는 주장에 대한 신뢰도를 업데이트 하는 방법"




무슨 말일까? 먼저, 베이지안 확률의 의미에 대해서 살펴보자.

전통적인 관점에서의 확률은 빈도주의(frequentism)라고 할 수 있다. 즉, 예를 들어 동전의 앞면이 나올 확률이 50%라고 하는것은, 빈도주의 관점에서는 100번 동전을 던졌을 때 앞면이 50번 나온다는 의미이지만, 베이지안 관점에서는 동전의 앞면이 나왔다는 진술 자체의 신뢰도를 50%로 보겠다는 의미이다. 즉, "동전의 앞면이 나왔다"라는 진술 자체가 맞을 확률이 50%, 틀릴 확률이 50%라는 의미가 된다.

다시 말해서, 동전 던지기처럼 시행횟수를 반복해서 빈도를 측정하는 경우에는 이런 빈도 확률(frequentist probability)을 쉽게 계산할 수 있을 것이다. 그런데, 만약 시행횟수를 많이 할 수 없는 경우, 예를 들면 화산이 폭발할 확률에 대해서는 빈도 확률로 계산하는 것이 어려울 것이다. 뿐만 아니라 실제 일어나는 현상 중에는 빈도적인 확률로 확인해보고 구할 수 없는 일이 너무도 많다. 따라서 이러한 일어나지 않은 일에 대한 확률사건과 관련 있는 여러 가지 확률을 이용해 새로운 사건의 확률을 추정하는 것이 베이지안 확률(Bayesian probability)이다.


이러한 베이지안 확률은 조건부확률로 나타낼 수 있다.

  • 조건부확률(Conditional probability)

조건부확률이란 특정 조건 아래에서 사건이 일어날 확률을 말한다. 사건 A가 일어날 때 B가 일어날 확률은 아래와 같다.

P(B|A)=P(A∩B)/P(A) (단, P(A)≠0)


예를 들어, 1~20까지 적혀있는 20장의 카드 중에 카드 한장을 뽑는 경우를 생각해볼 수 있다. 두 가지 사건 A, B를 생각해본다.

A: 2의 배수를 뽑는 경우 (2, 4, 6, 8, 10, 12, 14, 16, 18, 20; 총 10가지 경우)
B: 3의 배수를 뽑는 경우 (3, 6, 9, 12, 15, 18; 총 6가지 경우)

사건 A가 일어날 확률, P(A)=10/20=0.5
사건 B가 일어날 확률, P(B)=6/20=0.3

만약, 2의 배수를 뽑았을 때(P(A)) 그것이 3의 배수였을 확률(P(A∩B))을 구하는 문제는 조건부 확률 문제라고 할 수 있다. 즉, 뽑은 2의 배수들 중에서 3의 배수인 경우에 대한 확률을 구하는 것이다. 따라서,

P(B|A)=P(A∩B)/P(A)=(3/20)/(10/20)=3/10 이다.

  • 베이지안 확률 계산

베이지안 확률은 서로 의존적인 관계에 있는 사건을 기반으로 하여 확률을 구하는 것으로, 조건부 확률로 나타낼 수 있다.

P(A|B) = P(B|A)*P(A) / P(B)
(이때, P(A): 사전확률, P(B|A): 우도확률, P(A|B): 사후확률)


예제를 통해 확인해보자.

빼빼로씨가 얼마 전에 대장암 검사를 받았는데 양성 판정을 받았다.
검사의 정확도는 90%로 알려져 있고, 대장암에 걸릴 확률은 1%라고 한다.
그렇다면, 양성 판정을 받았을 때 실제로 암에 걸렸을 확률은 어떻게 구할 수 있을까?


물론 실제 양성 판정을 받은 사람들 중에 암에 걸린 사람을 세볼 수도 있겠지만,
우리는 두가지의 사건과 관련된 확률 정보를 알고 있고, 이를 활용하여 답을 구할 것이다.

먼저, 조건부 확률로 표시하면 P(대장암|양성)이다.
따라서, P(대장암|양성) = P(대장암∩양성)/P(양성)이고, 위의 베이지안 확률의 정의에 따르면 다음과 같이 나타낼 수 있다.

P(대장암|양성) = P(양성|대장암)*P(대장암) / P(양성)


조건에 따르면,

검사의 정확도가 90%라는 의미는, 실제 암에 걸렸을 때 검사결과가 양성으로 나온 경우일 확률을 뜻한다. 즉, P(양성|대장암)=0.9이다. 그 말은, 대장암이 아닌데 양성으로 잘못 나왔을 확률(위양성)은 P(양성|대장암 아님)=0.1이다.

또한, 대장암에 걸릴 확률이 1%라는 의미는, P(대장암)=0.01이다. 그리고 대장암에 걸리지 않을 확률은 P(대장암 아님)=0.99이다.

두 확률변수(대장암, 양성)의 인과관계를 따져보게 되면, 대장암에 걸렸기 때문에 양성이 나오게 될 것이다.
즉, 원인대장암이 되고 결과양성이 되는 것이다. 이를 좀 더 고급스럽게 확률 용어로 표현하면 다음과 같다.

우리는 결과가 나타나기 전에(=양성이라고 판정을 받기 전에) 미리 결정되어 있는 원인의 확률(=대장암에 걸릴 확률)을 알고 있다. 이처럼, 결과가 나타나기 전에 결정되어 있는 원인의 확률을 사전확률(prior probabiltiy)라고 한다. 즉, P(대장암)=0.01이 사전확률이다.

또한, 대장암이 걸린 사람들 중에서 양성으로 판정을 받은 사람들의 확률을 알고 있다. 즉, 원인(대장암)이 발생하였다는 조건 하에서 결과(양성)가 발생할 확률을 알고 있다. 이를 우도확률(likelihood probability)라고 한다. 즉, P(양성|대장암)=0.9이 우도확률이다.

베이즈 정리를 사용하면 이 두가지 확률만을 가지고 빼빼로씨가 양성 판정을 받았을 경우 대장암에 걸렸을 확률을 알 수 있게 된다. 즉, 결과(양성)가 발생하였을 때 원인(대장암)이 발생하였을 확률을 알게 되고, 이를 사후확률(posterior probability)라고 한다.

P(대장암|양성) = P(양성|대장암)*P(대장암) / P(양성)


사후확률을 구하기 위해 마지막으로 필요한 것은 P(양성)이다.
P(양성)은 대장암이면서 양성으로 판정받은 확률인 P(대장암∩양성)과 대장암이 아닌데 양성으로 판정받은 확률인 P(대장암 아님∩양성)의 합으로 나타낼 수 있다. 즉,

P(양성) = P(양성|대장암)*P(대장암) + P(양성|대장암 아님)*P(대장암 아님)
= 0.9*0.01 + 0.1*0.99
= 0.108

P(대장암|양성) = P(양성|대장암)*P(대장암) / P(양성)

= 0.9 * 0.01 / 0.108
= 0.083


따라서, 빼빼로씨가 양성판정을 받았을 경우 실제로 대장암일 확률은 8.3%라고 계산할 수 있다.



다음에서 계속...


도움이 되셨다면 공감 ❤️ 댓글 💬 부탁드려요 💖

댓글