꺼내먹는지식 준

머신러닝 정리 8.5(2) - Naive Bayes는 Generative Model 본문

AI/머신러닝

머신러닝 정리 8.5(2) - Naive Bayes는 Generative Model

알 수 없는 사용자 2022. 11. 1. 13:59

Naive Bayes 가 Generative model 인 것을 확인하기 위하여 이전 글 에서 Generative Model에 대한 간략한 소개글을 작성했다. 해당 글을 원할하게 읽기 위해서는 이전 글을 간단하게 살펴보는 것을 추천한다. 

 

Naive Bayes를 classification task 로 사용하는 것은 익숙하나, data 생성용으로 사용된다는 것은 익숙하지 않다. 

 

하지만 놀랍게도 Naive Bayes는 데이터 생성에 가장 일찍 사용된 모델 중 하나이다. 물론, 복잡한 이미지 데이터에는 사용할 수 없었다. 

해당 글에서는 Naive Bayes가 어떻게 generative model 이며, 왜 해당 모델로 복잡한 데이터인 이미지나 글 생성에 사용될 수 없는지 정리한다. 

 

인스타그램에서 #패션스타그램 을 한다고 상상해보자. 

 

https://www.oreilly.com/library/view/generative-deep-learning/9781492041931/

 

위 사진을 보라, 당신은 피드에 패션스타그램으로 많은 글을 올렸다. 신규유입을 위해 계속해서 색다른 착장을 올리고 싶으나 적절하며 새로운 착장이 안떠오른다. Naive Bayes를 사용한 generative model이 적절하며 유니크한 조합을 당신에게 제시해줄 수 있을까? 

 

정답은 물론이다!

 

※ 다음을 읽기 전 아래 두가지를 전제조건으로 하고 넘어가자

1. 위 이미지에서 관측한 착장 외에 새로운 아이템은 없다. 아래 주어진 것들만이 'features' 이다. 

 

 

7(hairstyles) x 6 (hair color) x 3(specs) x 4 (tops) x 8 (colors)=4032 unique combinations 이다. 

그리고 training dataset은 당연히 이미지를 입력으로 바로 받는 것이 아니라, tabular data 의 형식으로 받는다. 

 

2. 상단 이미지는 아주 강력한 힌트를 제공한다 : 특정 카테고리의 몇몇 아이템을 고를 확률이 같은 카테고리의 다른 아이템을 고를 확률보다 더 높다. 예를 들면, silver-grey curly hair 를 다른 요소보다 선호할 수 있고, 유사하게 white tops 를 green tops 보다 선호할 수 있다. 모델이 내 선호도를 반영하면 좋겠다. 

 

2번째 전제조건이 수학적으로 어떤 의미가 있는가? 

 

모든 착장이 동일한 확률을 갖지 않고 어떠한 p_data 분포를 따른다는 것이다. (당연히 uniform 한 형태는 아니기에 pdf라고 부른다 ) 당신은 당신의 옷장에 있는 몇몇 아이템을 다른 아이템보다 선호한다. 

 

여기까지만 읽어도 뭔가 generative model 과 관련이 있어보인다. 

 

  • pdf 추정: 어떠한 pdf 에 사용된 p_data: 위 tabular data(dataset X)가 주어졌을 때의 p_model 
  • 추정된 pdf: p_model을 사용하여 새로우며 적절한 combination을 생성하여 새로운 인스타 이미지를 업로드한다.

 

 parametric modeling 사용하여 pdf:p_data 를 추정하려면 이 p_data 분포를 나타낼 수 있는(represet) parameter 를 추정해야한다. (말이 복잡하지만, p_data 분포를 나타내는 paramter 를 추정하는 것이 곧 최적화 된 p_model을 찾는 것). 현재 가장 novel 한 방식은 샘플 공간(sample space)의 가능한 모든 포인트를 파라미터로 고려하는 것이다. 그러므로 우리는 샘플 공간의 포인트들의 확률인 4032 (모든 combinations) - 1 =4031 개의 포인트를 parameter로 넘긴다. 

 

 

※ 왜 1을 뺄까?

 

4032 개의 포인트의 확률이 모두 합쳐 1이 되어야 하므로, 4031 개만 알면된다. 마지막 포인트는 1 - (4031 포인트 확률의 합) 으로 구할 수 있다. 

 

 

4031 개의 포인트의 확률은 어떻게 구할까? (여기서는 각 포인트가 하나의 착장)

 

P(아무 착장) = 샘플 data에서 관측된 착장의 빈번도 / 총 샘플 

 

만약 Red round Top 과 white hair & no glasses 착장을 100번의 인스타 이미지 중 4번 입었다면, 

 

P(Red & Round Top & White hair & No glasses) = 4/100 

 

그럼 본적 없는 combination 에 대해서는 어떨까? 그냥 확률이 0인걸까? 

 

물론 아니다.

 

combination이 데이터에 등장한 적 없었던 경우에 분자와 분모에 엡실론을 더하는, additive smoothing 을 수행하고, 이로 인해 unseen combinations 의 확률은 0이 아니다. 

 

그러나 숨겨진 문제는 여전히 존재한다. 

 

1. 앞에서 언급된 것과 같이, silver hair & white tops 을 선호한다. 그러므로, 논리적으로 따지면 silver hair 나 white topes, 혹은 둘다를 갖는 unseen combinations 높은 확률이어야 한다. 

 

2. 만약 옷장에 흰색과 굉장히 유사한, 달걀껍질 흰색의 옷이 있으면 어떻게 처리해야 할까? 흰색과 다름에도 굉장히 유사하다는 이유로 달걀껍질 흰색 옷을 포함하는 combination이 초록색이나 노랜색보다 조금 더 높은 확률을 가져야 할까? 

 

일단 문제 1에만 집중을 해서 해결해보자. 

 

위 시나리오에서 모든 combination의 확률은 다음으로 같이 계산된다. 

 

its total occurrence / total images else some 'k'

 

 

샘플 공간(sample space)의 모든 착장에 대하여 확률을 배정해주는 상단 접근방식은 모든 unseen combination 에 특정 확률 'k'를 부여하게 될 것이고 이는 우리가 원하는 pdf: p_data 가 아니다. unseen combination중 더 선호하는 아이템이 포함된 것이 모델로부터 더 높은 확률을 부여받아야 한다. 

 

좀 더 자세히 보면, 이러한 확률 부여 방식이 곧 모든 파라미터가 100% dependent 하다고 직접적으로 가정한 것을 의미한다. 하지만 실제로는 그러기도 하고 그렇지 않기도 하다. 이는 다음과 같은 큰 문제점을 갖는다. 

 

당신이 silver hair, white round tops, glasses 를 좋아 할 수 있지만, 안경을 쓰지 않고 나가는 combinations 착장은 생각도 못해봤을 수 있다. 이 착장의 (silver hair, white round tops, NO glasses) 선호도를 한번 계산해보자. 이전 접근 방식으로 계산하면 관측 되지 않았던 랜덤 hair, random 색상의 top, glass 유뮤와 동일한 확률을 부여한다. 보통 5개의 아이템 중 4개는 선호하는 것을 사용하는 취향을 고려했을 때 말도 안된다. 선호 하는 feature 중 그냥 하나의 feature (여기서는 no glasses)만 빠졌을 뿐인데, 왜 이 combination이 다른 어떤 random combination 같은 것처럼 보이게 만드는 걸까? 그런 random combination 보다는 확률이 높아야 정상이다! 

 

 

문제는 우리가 아래와 같이 가정할 때 발생한다. 

 

$P(A,B,C,D,E) = P(A \cap B \cap C \cap D \cap E) - 1번 식$

 

all or nothing. 즉, 모든 것이 한번이라도 동시에 일어나지 않으면, 확률은 'k' 이다. (unseen combinations 에 대한 상수) 

 

아래는 어떨까?

 

$P(A,B,C,D,E) = P(A) \times P(B) \times P(C) \times P(D) \times P(E) - 2번 식$

 

이 방식은 우리가 위에서 마주한 문제를 해결한다: 즉 all-or-nothing을 피하게 한다. 위에서 언급한 것과 동일한 상황을 가정해보자. 5개 중 4개의 attributes 가 선호도 높은 아이템 일 때, random combination 보다 해당 combination 이 더 높은 확률을 가능성이 높다.

 

이 것이 바로 Naive Bayes 가 기능이다. 모든 features 이 독립이라고 가정함으로써 hair style 을 고르는 것은 top color 를 고르는 것과 무관하고, top style 은 악세사리 등 뭐를 착용하던간에 그 것과 독립이다. 그러므로 우리의 확률 분포 함수는 1번 식에서 2번 식으로 변경된다. 

 

P(Black hair, long curly hair, pink top, round top, no glasses) = P(Balck hair) x P(long curly hair) x P(pink top) x P(round top) x P(no glasses) 

 

 

P(any element x) =  X의 등장 수 / total samples 이므로 

P(Balck Hair) = (Black hair)의 빈도/ Total insta images이다. 

 

Naive probability distribution function 을 사용하는 것만으로도 4031개의 파라미터를 23 개로 줄일 수 있다!! 

 

어떻게 가능한가?

 

 

Naive Bayes 는 모든 feature 가 독립이라고 가정한다. 즉, pdf 의 total parameters 개수는 아래와 같다. 

 

7(Hair style) -1 + 6(hair color) - 1 + 3(glasses) - 1+ 4(clothing type) - 1 + 8(clothing color) - 1 = 23

 

※ 왜 모든 feature에 대하여 a-1 을 할까? 

 

위에서 -1 을 했던 것과 동일하게 a-1 개의 확률이 정해지면 나머지 1개는 $1 - \sum_{i=1}^{a-1}(P(i))$ 로 정해지기 때문이다. 

 

※ 왜 총 파라미터의 개수가 곱셈이 아니고 덧셈일까? 

 

각 feature 가 독립이므로, 확률은 다음과 같이 계산된다. 

 

P(Black hair| pink top) = P(Black hair) x P(pink top) 

& P(Balck hair|round top) = P(Black hair) x P(round top)

 

P(Black hair) 는 상수이므로, 아까의 경우 parameter들이 dependent 하다고 가정했던 것과는 달리 위 두가지 경우를 계산할 때 모두 활용된다. 첫번 째 pdf 에서는 P(Black hair $\cap$ pink top) & P(Black hair $\cap$ round top) 를 계산하되 features를 dependent 하다고 보아 P(Black hair) 만으로는 계산이 불가능했다. 풀어 말하자면, Black hair 를 포함한 모든 착장의 확률이 개별적으로 계산되었다. 

 

여기까지 살펴본 것을 통해서 Naive Bayes 가 주어진 샘플(단순한)에 대하여 유사한 새로운 데이터를 생성하는 데 어떻게 도움이 되는지 알게 되었다. 

 

두줄 정리 

 

  • Discrimitative 모델이었다면 주어진 입력이 어디 카테고리에 속하는지 나누는 것이 목적이라면, Naive Bayes 는 당신이 인스타 그램에 새롭게 업데이트 할 옷을 추천해줄 수 있다. 
  • 다만 Naive Bayes 는 conditional independence 를 가정하는데, 해당 글은 마치 marginal independence 를 가정한 것 처럼 작성되어 있어서 읽을 때 유의가 필요할 것 같다. 

 

Naive Bayes 를 활용하여 이미지를 생성할 수는 없을까?

단순히 combinations 을 제안하는 것을 넘어 mock picture 를 생성하여 어떤 착장을 입을지 아이디어를 얻어보려고 한다. 또한 이번에는 tabular data로 학습하지 않는다. 이번에는 계정의 instagram에 올라왔던 원본 사진으로 학습시켜서 model 이 dress combination 을 제안시켜 보려 한다. 

 

Naive Bayes Model을 다음 이미지로 학습시킨다. 

https://www.oreilly.com/library/view/generative-deep-learning/9781492041931/

 

그러나 결과물은 아래와 같이 생성된다. 

 

https://www.oreilly.com/library/view/generative-deep-learning/9781492041931/

 

뭐가 잘 못 된 것일까?

이전 시나리오에서 Naive Bayes 를 [n x 7] 행의 데이터로 학습시켰다. (n = 샘플 개수 / image - 즉 50개). feature 값들은 직접적으로 tabular data로 제공되었다. 

 

반면 이번 시나리오에서 데이터는 복잡해졌다. 이번에 우리는 Naive Bayes를 [n x 64 x 64] 크기의 데이터로 학습시켰다. (64x 64 는 이미지의 차원이다). 관측한다면, 이 이미지들은 hair style 이나 top style 혹은 color 에 대해 어떤 힌트도 제공하지 않기에 Naive Bayes 로서는 특징을 뽑아내는 것이 굉장히 어렵다. 

 

이런 상황에서 Naive Bayes 를 사용하는 것은 아래와 같은 어려운 점이 있다. 

 

  • Naive Bayes 는 모든 features 가 독립이라고 가정하였다. 

이러한 가정은 다른 combinations 을 생성할 때 선호도등을 반영하고자 했던 첫번째 시나리오에는 적절하다. 하지만 이게 이제는 Bottle Neck이 되어버린다. 왜일까? 이제는 'top' 영역의 인접 pixels 이 하나의 독립체에 속하고 유사하게 보여야 한다는 것을 알 방법이 없다. (위 결과 사진을 보면 'top' 의 pixel의 중구난방한 것을 볼 수 있다.) 그러므로, training dataset을 통하여 얼굴 색이나 입술 색을 묘사하는 것은 꾀나 정확하나, 'tops' 의 색상은 이미지마다 계속해서 빠르게 변하므로 최종 결과물이 다소 pixels 들이 섞이게 된 것이다. 얼굴과 입술은 트레이닝 데이터 샘플에서도 일정하다보니 비교적 나을 수 밖에 없다. 재밌게도, training dataset에 존재하는 top colors 들이 거의 유사한 확률로  섞여가지고 최종 결과물의 'top' 영역에 드러났다. 비슷한 패턴이 머리 안경 등에서도 나타났다. 한마디로 관계나 상황을 따로 학습시킬 방법이 없다. 

 

  • 첫번째 케이스에서 샘플 공간(sample space)이 4032 points 로 굉장히 작았고 각 포인트가 가능한 유효한 combination을(선호 되지 않는 것도) 생성했다.  이미지를 고려할 때 각 픽셀이 255개의 고유한 값을 가질 수 있고 64 X 64 = 4096 픽셀까지 하면 샘픙 공간이 엄청나진다. 당연히, 모든 결합이 valid image가 되지는 못한다. 그러다보니 1) 샘플 공간에서 특정 파트를 딱 정해서 valid image가 생성되게 하는 것 자체가 어렵고 2) Naive Bayes 로 인해 픽셀간의 관계가 무시되어서 더 어렵다. 이미지의 pixels들은 주로 작은 patches 로 연관되어있다. (top, faces, lips 등). 이러한 연관관계는 절대 무시되면 안된다.

 

이러한 한계를 극복한 방법은 Autoencoders 와 Generative Modeling 의 아주 큰 주춧돌인 VAEs 를 통해 추후 알아보자. 

 

 

Comments