2. Prob. Generative Models


  • 교재 1.5.4 절에서 간단하게나마 Generative 모델을 이용한 분류 방식에 대해 다루긴 했었다.
  • 우선 시작하기에 앞서 용어를 좀 정리하자.
    • 이 교재에서는 용어를 좀 엄격하게 쓰는 편인데, 지겹지만 잘 구분해서 쓰자
    • 사후 확률 (posterior) : p(Ck|x)
      • 임의의 데이터 x 가 주어졌을 때 이 데이터가 특정 클래스 Ck 에 속할 확률
      • x 는 샘플 하나를 의미하며 벡터로 표기된 이유는 여러 개의 feature를 가지기 때문임
    • 클래스-조건부 밀도 (class-conditional density) : p(x|Ck)
      • 가능도 함수(likelihood function)가 아니냐고 묻는 분이 계시는데, 아니다.
      • 특정 클래스에서 입력된 하나의 데이터 x 가 발현될 확률을 의미하며, 각각의 클래스별로 계산되기 때문에
        • 데이터를 클래스 단위로 나누어 놓고 나면 각 클래스에 대한 p(x) 를 의미하는 것과 마찬가지가 된다.
        • 보통 가능도 함수(likelihood) 등을 통해 얻어진 모수 값을 이용하여 분포의 모양을 선택한 뒤 x 의 확률 값을 구하게 된다.
          • p(x|θml)
    • 가능도 함수 (likelihood) : p(X|Ck)=p(xi|Ck)
      • 주어진 샘플 데이터가 실제 발현될 확률값을 주로 사용하며, 로그를 붙이는게 일반적이다.
      • 샘플 데이터는 i.i.d 를 가정하므로 보통은 확률 곱으로 표현 가능하다.
      • 특정 분포(distribution)를 사용하는 경우 주로 모수 추정에 사용된다.
      • 모수 추정이 완료되면 클래스-조건부 밀도 등의 식에서 이를 모수 값으로 사용한다.
  • 클래스-조건부 밀도 p(x|Ck) 를 이용한 접근 방식에 대해 자세히 알아보도록 하자.
    • Generative 모델은 사후 확률 p(Ck|x) 를 직접 구하는 것이 아니라 간접적 사후 확률을 예측하는 모델이다.
    • 따라서 사후 확률 대신 클래스-조건부 밀도와 사전 확률 등으로 사후 확률을 예측한다.
    • 즉, 임의의 x 가 특정 클래스에 속할 확률 값을 확인하고 이 중 가장 큰 확률 값을 가지는 클래스로 x 가 속할 클래스를 결정할 수 있다.
    • 가장 먼저 2-class 문제를 살펴보자. 다음은 x 가 클래스 C1 에 속할 확률을 모델링하는 식이다. (베이즈 룰)
p(C1|x)=p(x|C1)p(C1)p(x|C1)p(C1)+p(x|C2)p(C2)=11+exp(a)=σ(a)(4.57)
a=lnp(x|C1)p(C1)p(x|C2)p(C2)(4.58)
  • σ(a) 는 로지스틱 시그모이드(logistic sigmoid) 함수이며, 다음과 같이 정의된다.
σ(a)=11+exp(a)(4.59)
  • 수식이 왜 이렇게 전개되는지 궁금할수도 있는데, 생각보다 쉽다.
α=p(x|C1)p(C1)
β=p(x|C2)p(C2)
αα+β=1α+βα=11+βα=11+exp(ln(αβ))
  • 시그모이드 함수를 그리면 다음과 같다.

figure4.9

  • 그림에서 보듯 sigmoid 라는 용어는 함수 식이 S 자 형태를 취하기 때문에 붙여진 이름이다.
    • 이런 함수들을 가끔 squashing function 이라고도 부르는데,
    • x 축 영역의 모든 값에 대응되는 함수 출력 값이 특정 범위에만 존재하기 때문이다. (여기서는 0 ~ 1 사이)
  • 붉은 색 실선이 시그모이드(sigmoid) 함수이며, 청색 점선은 프로빗(probit) 함수로 이 함수는 이후에 설명된다.
    • 프로빗 함수가 시그모이드 함수와 거의 유사한 특징이 있음을 보이기 위해 함께 표현한 것이다.
  • 시그모이드 함수는 다음과 같은 특징이 있다.
σ(a)=1σ(a)(4.60)
  • 시그모이드가 도입된 이유는,
    • 시그모이드 자체가 특정 값으로 수렴되는 성질이 있으며 (0~1 사이의 값)
    • 따라서 이 값을 확률 값으로 고려를 해도 되기 때문이다.
    • 게다가 모든 점에서 연속이며 미분 가능하므로 수학적 전개에도 매우 편리하다.
  • 다음으로 로지스틱 시그모이드의 역(inverse)은 다음과 같다.
a=ln(σ1σ)(4.61)
  • 이를 로짓(logit) 이라고 부른다.
  • 2-class 문제에서는 lnp(C1|x)p(C2|x) . 즉 각각의 확률에 대한 비율(ratio)에 로그(log)를 붙인 것과 같다.
    • 이를 로그 오즈(log odds) 라고 한다.
    • 좀 더 자세히 설명하자면, 성공 확률 p 와 실패 확률 (1p) 에 대한 odds 는 p(1p) 이므로 여기에 로그를 붙인 것과 같다.
    • 로짓이라는 개념이 좀 뜬금없어 보이지만 이후 식에서도 자주 등장하므로 잊지는 말자.
  • p(C1|x) 는 여기서 사후(posterior) 확률이 되는데 이를 로지스틱 회귀식을 이용해서 기술한다.
  • 이 식을 가지고 좀 더 일반화하면 K>2 인 경우에서도 식을 확장할 수 있다.
    • 이를 일반 선형 모델(generalized linear model)이라고 한다.
p(Ck|x)=p(x|Ck)p(Ck)jp(x|Cj)p(Cj)=exp(ak)jexp(aj)(4.62)
  • 이를 normalized exponential 함수라고 부르며, 다중 클래스 분류에 사용되는 시그모이드 식이 된다.
    • 이 때 a(x)x 에 대한 선형 함수로 처리 가능하다.
    • 사실 맨 처음에 설명했던 2-class 모델도 위의 식으로 전개하면 동일한 식을 얻어낼 수 있다.
      • 위 식을 exp(a1)/(exp(a1)+exp(a2)) 로 놓고 전개하면 2-class 시그모이드가 나온다.
  • 어쨌거나 여기서 ak 는 다음과 같이 정의된다.
ak=ln(p(x|Ck)p(Ck))(4.63)
  • normalized exponential 함수를 소프트 맥스 (softmax function) 함수라고 부른다.
  • 이는 max 함수에 대한 평활화(smoothed) 버전이기 때문이다.
    • 평활화의 의미를 현재 고려할 필요는 없고, 일단 모든 점에서 미분 가능한 식으로 변환된다고 생각하자.
    • 만약 akaj 라면 p(Ck|x)1 이고 p(Cj|x)0 이 된다. (단, jk)
  • 다음 절에서는 이러한 클래스 조건 밀도를 특정 분포로 가정해서 처리하는 과정을 살펴볼 것이다.
    • 우선 연속적인 입력 값을 확인한 뒤에 이산적인 값을 처리하는 방법을 살펴보자.
  • 짧은 요약
    • 이번 절이 좀 두서없이 설명되는 것들이 많아 혼동되는 부분이 있는데, 간단한 사실만을 기억하면 된다.
      • 2-class 에서는 sigmoid 를 이용해서 분류.
      • K-class 에서는 softmax 를 이용해서 분류.

4.2.1 연속적인 입력값 (Continuous inputs)

  • 일단 클래스-조건부 밀도(class-conditional density)가 가우시안 형태라고 가정하자.
  • 또한 가장 간단한 구조를 고려하여 모든 클래스 사이의 공분산(covariance) 값은 모두 동일하다고 가정한다. (중요한 제약)
  • 그러면 어떤 클래스가 주어졌을 때 해당 데이터가 나올 확률은 다음과 같다.
p(x|Ck)=1(2π)D/2|Σ|1/2exp{12(xμk)TΣ1(xμk)}(4.64)
  • 2-class 문제로 이를 고려해보자.
  • 최초 조건부 확률 식에 판별식을 넣는다.
p(C1|x)=σ(wTx+w0)(4.65)
  • 이 식은 위에서 σ(a) 로 정의되어 있었다. 마찬가지로 a=lnp(x|C1)p(C1)p(x|C2)p(C2) 였다.
  • 가우시안 분포 식을 위에 넣고 대입한다.
wTx+w0=lnp(x|C1)p(C1)p(x|C2)p(C2)
  • 이를 전개하면 다음의 식이 얻어진다.
w=Σ1(μ1μ2)(4.66)
w0=12μ1TΣ1μ1+12μ2TΣ1μ2+lnp(C1)p(C2)(4.67)
  • x 에 대한 2차 텀이 모두 사라지면서 직선 식이 얻어진다.
    • 이는 두 클래스 사이의 공분산이 동일하기 때문에 이차항의 계수가 부호만 다르고 크기가 일치하여 약분되기 때문이다.
    • 자세한 전개 방식은 생략한다.
  • 여기서 조금만 상상을 해보면, 같은 분산을 가지는 두개의 가우시안 분포가 만나는 지점은 당연히 직선의 형태일 것이라 생각해볼 수 있다.
Figure 4.10a Figure 4.10b
  • 왼쪽 그림은 2-class 조건에서의 확률 밀도를 표현한 것이다.
    • 공분산이 동일하므로 모양은 같다. (평균 위치만 틀림)
    • 따라서 이를 분할하는 경계면은 당연히 직선이 된다.
  • 오른쪽은 x 에 대한 시그모이드 함수로 어떤 클래스에 속하는지에 대한 부분은 색깔로 확인할 수 있다
    • 딱 중간 위치에서 클래스가 나누어지는 것을 알 수 있다 (2-클래스 문제이므로)
  • 만약 이를 K 클래스 문제로 확장하면 어떻게 될까?
    • 식 (4.62)와 식 (4.63)을 일반화시키면 K 클래스 문제도 풀어낼 수 있다.
wk=Σ1μk(4.69)
wk0=12μTkΣ1μk+lnp(Ck)(4.70)
  • 사실 우리는 식을 간단히 만들기 위해 각 클래스에서 사용되는 공분산이 동일하다고 가정했다.
  • 그러나 만약 각각의 클래스들의 공분산이 다르다면 어떻게 될까?
    • 이 경우 경계면을 구하는 수식에서 이차항이 사라지지 않고 남게 된다.
    • 따라서 경계 면이 곡선이 될 수도 있다.
Figure 4.11a Figure 4.11b
  • 위의 그림을 보면 녹색과 적색의 클래스는 동일한 공분산을 가지므로 경계면이 직선이 됨을 알 수 있다.
  • 그러나 청색 클래스 데이터는 다른 공분산을 가지고 있기 때문에 경계면이 곡선이 된다.
  • 교재에서는 위의 그림 말고는 공분산이 다른 경우에 대한 자세한 설명이 나와있지 않다.
    • 하지만 다른 패턴 인식 책에는 잘 나와 있는 경우가 많으니 참고할 것. (예로 Duda 패턴인식 2장)

4.2.2 최대 가능도(MLE) 풀이법 (Maximum likelihood solution)

  • 지금까지 우리는 조건부 확률에 대한 모델로 p(x|Ck) 를 고려했었다.
  • 자, 이제 MLE를 이용하여 모수를 추정하는 방법을 살펴보자.
  • 더불어 이번 절에서는 사전(prior) 확률 p(Ck) 를 함께 고려하여 전개하도록 한다.
    • 물론 착각하지 말아야 할 것은 모수(parameter)에 대한 사전 확률을 의미하는 것이 아니다.
    • 즉, 베이지안 방식의 모수 추정을 사용한다는 의미는 아니라는 것이다.
    • 여기서 말하는 사전 확률은 클래스에 대한 사전 확률을 의미한다. p(Ck)
  • 여기서도 마찬가지로 2-class 문제를 먼저 살펴보고, K>2 인 경우로 확장하도록 한다.

2-class 문제인 경우

  • 결합 확률로 문제를 정의해 보자.
p(xn,C1)=p(C1)p(xn|C1)=πN(xnμ1,Σ)
p(xn,C2)=p(C2)p(xn|C2)=(1π)N(xnμ2,Σ)
  • 여기서도 마찬가지로 공분산은 서로 같다고 가정한다.
  • 실제 데이터는 (xn,tn) 으로 tn=1 인 경우 C1으로, tn=0 인 경우 C2 로 분류한다.
  • 이제 가능도 함수(likelihood)를 정의해보자.
p(t,X|π,μ1,μ2,Σ)=Nn=1(πN(xn|μ1,Σ))tn((1π)N(xn|μ2,Σ))1tn(4.71)
  • 2-class 에서는 가능도 함수를 binomial 분포와 같은 식으로 정의할 수 있다.
  • 여기서 tt=(t1,,tN)T 로 정의된다.

  • π 구하기
    • π 를 구하는 식은 별로 안 어렵다.
    • 로그 가능도 함수를 π 에 대해 미분하여 관련된 항목만 모으면 다음과 같아진다.
    • 이 값을 0으로 놓고 π 를 구하면 된다. (지금까지 많이 해왔던 작업이다.)
Nn=1{tnlnπ+(1tn)ln(1π)}(4.72)
π=1NNn=1tn=N1N=N1N1+N2(4.73)
  • 여기서 N1C1 에 속하는 샘플의 수이고 N2C2 에 속하는 샘플의 수이다.
  • π 는 정확히 C1 에 속하는 샘플의 비율을 의미하게 된다.
  • 이 식은 K-class 문제로 쉽게 확장 가능하다. ( K>2)
    • 이를 일반화하면 πk=Nk/N 을 얻을 수 있다.
    • 이에 대한 유도는 연습문제 4.9 에서 확인 가능하다.
  • μ 구하기
    • 마찬가지로 로그 가능도 함수로부터 각각의 μ 값으로 미분하여 값을 구한다.
Nn=1tnlnN(xn|μ1,Σ)=12Nn=1tn(xnμ1)TΣ1(xnμ1)+const(4.74)
  • 이 식을 0으로 놓고 μ1 에 대해 풀면 다음을 얻을 수 있다.
μ1=1N1Nn=1tnxn(4.75)
  • 마찬가지로 μ2 에 대해서도 동일한 해법으로 계산 가능하다.
μ2=1N2Nn=1(1tn)xn(4.76)
  • Σ 구하기
    • 마지막으로 Σ 를 구하는 과정을 살펴보자.
    • 여기서도 동일하게 로그 가능도 함수로부터 공분산으로 미분하여 값을 구한다.
    • 공분산을 구하는 식은 좀 복잡하기는 하다.
12Nn=1tnln|Σ|12Nn=1tn(xnμ1)TΣ1(xnμ1)12Nn=1(1tn)ln|Σ|12Nn=1(1tn)(xnμ1)TΣ1(xnμ1)=N2ln|Σ|N2Tr{Σ1S}(4.77)
  • 여기서 S 는 다음과 같다.
S=N1NS1+N2NS2(4.78)
S1=1N1nC1(xnμ1)(xnμ1)T(4.79)
S2=1N2nC2(xnμ2)(xnμ2)T(4.80)
  • 이는 교재 2.3.4 절에서 다루었던 가우시언 공분산 MLE 추정 과정과 거의 같다.

K-class 구하기 ( K>2)

  • π 구하기 : 간단하게 π 를 구하는 방법만을 살펴보자.
    • 1-to-K 이진 타겟 값 t 를 이용하여 가능도함수를 정의한다.
p(ϕn,tn|π)=Nn=1Kk=1(p(ϕn|Ck)πk)tnk
lnp(ϕn,tn|π)=Nn=1Kk=1tnk{lnp(ϕn|Ck)+lnπk}
  • kπk=1 을 활용하여 라그랑지안 승수를 도입한다.
lnp(ϕn,tn|π)+λ(Kk=1πk1)
  • πk 에 대해 미분하면 식을 얻을 수 있다.
πkλ=Nn=1tnk=Nk
  • 양 번에 k 를 씌우면 πk=NkN 를 얻을 수 있다.
  • 그 외 K-class 환경 하에서 μΣ 를 구하는 것은 별도의 연습 문제를 참고하기 바란다.
  • 여기서는 간단하게 요약만 해 놓는다.

  • 평균
μk=1NkNn=1tnkxn
  • 공분산
Σ=Kk=1NkNSk
Sk=1NkNn=1tnk(ϕnμk)(ϕnμk)T
  • 위의 식은 마찬가지로 Σ 가 모든 클래스마다 동일하다는 가정 하에서 얻어진 식이다.

4.2.3 데이터가 이산 값일 때의 처리 (Discrete Features)

  • 이제 입력 값이 연속적인 값이 아니라 이산적인 값이라고 생각해보자. ( xi)
  • 문제를 단순화하기 위해 xi 가 가질 수 있는 값은 xi0,1 뿐이다.
  • 입력 데이터가 D 차원이라면 각 클래스별로 얻을 수 있는 확률 분포의 실제 x 의 이산적인 범위는 2D 개이다.
    • 이 중 독립 변수는 2D1 이며 확률의 총 합이 1이기 때문에 변수 하나가 줄어들었다. (summation constraint)
  • 여기서는 x 의 각 속성(feature)이 독립적이라고 가정하여 계산의 범위를 축소하도록 한다.
  • 각 속성(feature)들이 모두 독립적이라는 가정을 Naive Bayes 가정이라고도 한다.
  • 이제 샘플 하나의 클래스-조건부 확률 모델을 다음과 같이 기술할 수 있다.
p(x|Ck)=Di=1μxiki(1μki)1xi(4.81)
  • 이 식을 K-class 문제에서의 ak 함수에 대입하면
ak(x)=ln(p(x|Ck)p(Ck))
ak(x)=Di=1{xilnμki+(1xi)ln(1μki)}+lnp(Ck)(4.82)
  • 여기서도 ak 함수는 xk 에 대해 선형 함수이다. (feature가 독립적이라 가정했으므로)
  • 2-class에서는 시그모이드를 도임하면 동일한 식을 얻을 수 있다.
  • 여기는 xi 의 값이 이진 값인 경우만 고려했다. 하지만 M>2 이 상태를 가지는 xi 에 대해서도 유사한 결과를 얻을 수 있다.

4.2.4 지수족 패밀리 (Exponential family)

  • 지금까지 살펴본 내용에 따르면 지금까지 유도한 식들이 일정한 규칙을 따르고 있다는 것을 알 수 있는데,
    • 사후 확률(posterior)의 경우 가우시안 분포든 이항 분포든 상관 없이 sigmoid 또는 softmax를 이용해서 모델링 할 수 있다.
    • 당연히 2-class는 시그모이드(sigmoid), K-class ( K2)는 소프트맥스(softmax)였다.
  • 이걸 더 일반화시킬 수 없을까?
    • 클래스-조건부 밀도(class-conditional density)가 지수족(exponential family) 분포를 따를 경우 가능하다.
    • 교재 2.4 절에서 지수족 분포에 대해 설명을 이미 했다.
    • 즉, 지수족 분포를 따를 경우의 확률 분포는 다음과 같은 일반식으로 기술 가능함을 이미 배웠다.
p(x|λk)=h(x)g(λk)exp(λTku(x))(4.83)
  • 여기서는 u(x)=x 로 제한한다.
    • 이는 앞서 공분산 값을 클래스마다 동일하다고 가정했던 것과 같은 맥락의 제약 조건이다.
    • 계산을 손쉽게 하기 위한 가정일 뿐이다.
  • 다음으로 scale 파라미터 s 를 추가한다.
    • 사실 모든 지수족 분포에는 고유의 파라미터가 있다.
    • 이게 클래스별로 달라야 하는데 이게 바로 λk 이다.
    • 하지만 우리는 모든 클래스가 동일한 스케일 파라미터를 공유한다고 가정했다.
      • 예를 들어 공분산이 모든 클래스마다 동일하다고 가정했던 것.
    • 이런 제약 조건을 넣기 위해 임의의 공유 파라미터 s 를 추가한다.
  • 파라미터를 추가하는 것은 2.4.3절의 (식 2.236)에서 이미 소개하였다.
  • 이제 기본 식에 s 파라미터를 추가하자.
p(x|λk,s)=1sh(1sx)g(λk)exp(1sλTku(x))(4.84)
  • 기존의 λ 와는 별도로 조건절에 파라미터가 추가되었다.

  • 2-class 에서 사용한 ak 함수에 이를 대입하여 전개해보자.

a(x)=1s(λ1λ2)Tx+lng(λ1)lng(λ2)+lnp(C1)lnp(C2)(4.85)
  • 이걸 K-class 에도 확장할 수 있는데 간단하게 식만 적어본다.
ak(x)=1sλTkx+lng(λk)+lnp(Ck)(4.86)
  • 가정에 의해 모두 선형 식임을 확인할 수 있다.