2019년, ML 과 수학 공부를 위해 모대학원 수학과에 입학하고

강의 도중 ML 강의의 가장 기본이 된다고 하는 Andrew ng 강의노트를 Study 하고 재밌는 실험을 해보았다.

Andrew Ng 의 강의 노트에서는 머신러닝을 학습하기위해

사용되는 모델들을 Generative 한 모델과 Discriminative 한 모델로 분류 하는데,

Discriminative 한 모델은 판별적인 모델로서, 우리가 가지고 있는 데이타로 특정문제에 대해 답을 직접적으로 찾아내는

보다 직관적인 학습방법을 통해 학습을 진행하고 솔루션을 찾아낸다.

그렇기 떄문에 목적이 있는 클러스터링이나 분류 등 판별문제에 대해서는 강한 면모를 보인다. 

 

Generative 한 모델은 생성적 모델로서 데이터 자체가 어떤 분포를 가지고 있는지 학습하고, 그 분포에 따라서 

우리가 찾는 문제가 O일지 X지에 대해서 확률적으로 계산한다.

 

언뜻 보기에는 비슷해보이지만 두 모델은 생각보다 큰 차이를 가진다.  그 내용과 실험등에 대해서 이어서 설명하겠다.

Definition and Examples of Generative

  • Generative : providing a model of how the data is actually generated P(X|Y) & P(X)

  • Generative algorithms : make structural assumption on the model Estimate parameters of P(X|Y), P(X) directly from training data

  • Naïve Bayes

  • Gaussian mixture models

  • Gans - Generative Adversarial Networks

Definition and Examples of Discriminative

  • Discriminative : simply providing classification splits P(Y|X)

  • Discriminative algorithms : classify points without providing a model of how the points are actually generated

  • ‌Logistic regression

  • Decision Tree

  • Scalar Vector Machine

 

 

Generative Model 중 대표적인 Naive Bayes 알고리즘의 경우

P(x | y) 를 위와같이 sum up 한다. (l 은 라플라스 계수이다.) 결국 조건부확률 정의를 이용하여 카운트 하는 방식이다.

 

그리고 최종적으로 우리가 원하는 P(y | x)를 구해낼 때 Bayes Theorem 을 위와 같이 사용하게된다.

P(y | x) * P (x) = P(x | y) * p (y)  

 

P(y = T| x) = (P(x | y=T) * P(y=T)) / (p(x | y = T) * P(y=T) + p(x|y=F) * P(y=F))  < 훈련된과 가정을 통해 모두 통해서 모두 구해 낼수 있다.

 

이 때 모델이 Generative 하다라고 부르는 이유는 p(x|y=F) , p(x | y=T) 이항 들 때문이고, 이것들이 Generative 모델의 핵심이다.,

이 것을 DisCreate Variable 의 X 마다 sumup 을 통해 확률을 지정할 수도 있고,

이 것을 Contininous Variable 의 X 마다 sumup 또는 특정 분포를 따를것이다 라는 가정을 통해 확률을 지정할 수 있다.

 

 

반대로 Discriminative model 은 단순하다.

p(y=T | x) 를 구하기 위해서

위와 같은 cost function과 sigmoid function h(x) 를 정의한다.

cost function 을 위와 같이 정의하면 costfunction 은 주어진 x,y 에 대해서 h(x) 가 y 에 가까울 수록 최소가된다.

h(x) 를 결정하는것은 seta 인데 seta 가 결국 우리가 훈련시킬 변수이다.

 

이 cost function 은 seta 에 대해서 convex 함수이고, 특정 seta 값을 가질때 J(세타) 는 최소점을 가질 것이고,

그점을 찾기위해서

그라디언트 방향으로 세타를 업데이트 시키다보면 , 어느정도에서 수렴하게되는데,

그 점이 주어진 x 에 대해서 y를 얻기 위한 최적의 세타이다.

 

 

 

우리는 다시 주재로 돌아가서, Generative 모델과 Discriminative 모델중 어떤게 더 좋을까? 라는 주제로 돌아가자,

 

그러기 위해서는 가장 좋은 방법은 여러가지 dataset 들에 대해서 가장 simple 한 로지스틱/나이브베이시안을  돌려보고 비교해볼 것이다.

 

이것은 까다로운(?) 분포의 dataset 이다. O 와  X 를 분류하는 것이 우리의 목표이다.

 

위 직선은 로지스틱 레그레이션을 돌린 결과로, 수렴된 세타 값을 통해 분류기준이 어떻게 되었는지 plot 을 해보면,

세타를 normal 로 갖는 직선이될것이다. (공간에서는 plane , 보통 (세티^T)x = b 인 plane 이라고한다.

이 plane 기준으로 o 와 x 를 나누었을때, costfunction 이 최소화 된다. 결과는 0.6정도였던가.

 

이모델을 좀더 발전시켜서 2차원 poly rogistic Regression 으로 돌릴 수도있다.

그러기위해 가장 간편하게 X 의 dataset 의 차원을 아래와 같이 2차 항 까지 늘려주면된다.

X = { 1, x1, x2 }   >> X = {1, x1, x2 ,  x1^2, x2^2, x1*x2 }

 

 

이 문제에 대한 소스는 모두 아래 git 에 올려놓았다.

https://github.com/Sangil55/logregVsNavBayes

 

 

반대로 이모델에 Naive Bayesian 을 돌려보자.

 

일단 data 를 보면 x1,x2 모두 data 자체가 discrete 하다. 그런 dataset 에 대해서 navie bayesian 을 돌리기 위해서는

data 자체를 discrete 하게 만드는 방법과,  p(x|y) 가 특정 분포를 띌 것이라고 assumpt하는 방법이있다.

1.p(x|y) 가 특정 분포를 띌 것이라고 assumption

 

우리가 받은 dataset 을 통해 Y = true 일때 뮤와 시그마를 구해낼 수 있다. (평균과 분산)

우리는 그 데이타가 가우시안을 띌거라고 assumption 을 하자

그렇게 assumption 을 하면, 미리 구해낸 뮤와 시그마를 통해 

p(x|y=true) 의 분포를 위의 식 모델을 통해 바로 구해낼 수 있는 것이다.!

그렇다면 특정 x 가 들어왔을때 y = true 일 확률을 베이시안을 구해낼 수 있을 뿐더러 

이 모델이 왜 Discriminative 보다 강력한 면이 있는가하면, 위 확률 분포를 통해 특정 점을 sampling 을 할 수 있다는 점이다.

이 개념은 후에 생성적 모델 ( 학습된 결과를 통해 비슷한 data 를 generate)  하는 응용으로 이루어진다.

 

 아무튼 그가정을 통해 구해낸 평균과 /분산을 통해 문제를 분류해낸 결과는 아래와 같다.

 

두번째 그림이 Naive Bayesian 을 multinomial normal distribution 을 따른 다고 가정하고,

원래 의 평균/분산이 기존과 다르다고 생각하고 아래그림 처럼 확률분포를 modify 하기도 쉽다.

 

 

Naive Baysian 의 경우 좀더 discreate 한 data 에 대해서 좀더 잘 맞기 떄문에

우리는 data 자체를 discretize 하기도 하고, 그방법은 아래와 같이 여러가지이다.

  

 

그중에 가장 간단한 Equal width Interval 을 구현해보면

 

 

아래와같이 격자무니 data 가 만들어졌다.

소스는 github에 있다.

http://github.com/sangil55

 

이 결과는 NB-eqaul width discretize 한 결과가 dicision Tree 와 매우 비슷하다는 직관을 불러일으켰다.

 

그래서 NB vs Dicision Tree 라는 주제로 리서치를 해보았더니,

 

 

https://thesai.org/Downloads/Volume4No11/Paper_5-Performance_Comparison_between_Na%C3%AFve_Bayes.pdf

 

위와같이 누군가가 성능을 비교해노았다.

요역하면 NB 가 낮은 차원에비해 Dicision Tree 급에 높은 성능을 보인다. 라는 결론이다.

결국 결론내자면 NB는 낮은 차원으로도 높은 차원의 Data 도 분석해낼 수 있다는 것이다.

이것이 또한 generative model 의 강점이기도하다.

 

 

한편 Andrew ng 도 비슷한주재로 분석해본 페이퍼가있는데,

 

Andrew Ng

 

  1. Logistic-Regression has lower asymptotic Erro  2.Bayes converges to its asymptotic Error more quickly
    이 페이퍼를 요약하자면, Logistic Regression 이 보다 general 한경우에 더 작은 수렴 error을 갖는다.
    결국 data fit 이 잘된다라는 내용이다., 그리고 NB 의 경우 더작은 data 를 통해서도 좋은 학습률을 갖는다.

Ref - http://ai.stanford.edu/~ang/papers/nips01-discriminativegenerative.pdf

 

간단히 이번테스트에서 결론을  내보면 아래와 같다.

 

Generative

Strong assumption

Discriminative

Weak assumption

Advantages

stronger modeling assumptions

requires less training data to learn “well”

Can take Domain knowledge

Less danger on overfitting

Can generate sampling data

Act as high dimension model 

Simple to imply

don’t need data pre-conception

Various algorithms

significantly more robust to

deviations from modeling assumptions

Efficient for general Discrimination Problem

Disadvantages

Hard to implement

Asymptotic Error is higher

Danger on overfitting

 

'Machine.Learning > ML- Models' 카테고리의 다른 글

mobilenet v2, mobilenet v3  (0) 2021.01.28
Mobilenet V1  (0) 2021.01.25

+ Recent posts