인공지능 확률론 기초

BoostCamp AI Tech

Python

Probability theory

확률론

Probability Distribution

확률분포

Joint Probability Distribution

결합확률분포

Marginal Probability Distribution

주변확률분포

Conditional Probability Distribution

조건부확률분포

Monte Carlo Method

몬테카를로 방법

MCMC

Markov chain Monte Carlo

01/28/2021


본 정리 내용은 Naver BoostCamp AI Tech의 edwith에서 수강한 내용을 정리한 것입니다.
사실과 다른 부분이 있거나, 수정이 필요한 사항은 댓글로 남겨주세요.


인공지능 확률론 기초

딥러닝에서 확률론이 필요한 이유

딥러닝은 확률론 기반의 기계학습 이론에 바탕을 두고 있다.

기계 학습에서 사용되는 손실함수(loss function)들은 데이터 공간을 통계적으로 해석해서 유도한 것이다. 이런 손실함수를 가지고 모형들을 학습시키므로, 확률론을 이해해야 딥러닝 모형 학습의 원리를 이해할 수 있다.

사례를 들어 살펴보자.

  • 회귀 분석에서, 손실함수로 사용되는 L2norm`L_2-norm`예측오차의 분산을 최소화하는 방향으로 학습하도록 유도한다.
  • 분류 문제에서, 손실함수로 사용되는 교차엔트로피(cross-entropy)모델 예측의 불확실성을 최소화하는 방향으로 학습하도록 유도한다.
  • 결국, 기계학습에서 사용하는 손실함수는 데이터 분포와 모델 예측 분포의 차이, 즉 예측이 틀릴 위험- risk 를 최소화하는 방향으로 학습하도록 유도한다. 이 과정에서 확률론을 기반으로 해석한다.
  • 특히, 분산불확실성을 최소화하려면 측정하는 방법을 알아야한다.

확률분포

이 파트는 데이터가 정답레이블을 항상 가진 지도학습을 상정한다. 만약 정답 레이블이 없다면, 데이터 공간 표기에서 y가 존재하지 않는 그래프를 그려야 한다.

  • 데이터 공간을 X×Y\mathscr{X\times Y}라고 표기한다.
  • D\mathscr{D}는 데이터 공간에서 추출한 확률분포의 표기이다.
    • 데이터의 초상화라고 볼 수있다.
    • 이 때 데이터만 가지고 확률분포 D\mathscr{D}를 한번에 아는 것은 불가능하므로, 기계학습을 이용해 D\mathscr{D}의 분포를 추론하게 된다.
  • 데이터는 확률 변수로 (x,y)D(\bold{x},y) ∼ \mathscr{D} 라고 표기한다.
    • (x,y)X×Y(\bold{x},y) \in \mathscr{X\times Y} 는 데이터공간상의 관측가능한 데이터에 해당한다.
    • 확률 변수의 종류에 따라 확률 분포를 다르게 모델링한다.

확률 변수 : 이산확률변수 vs 연속확률변수

데이터 공간 X×Y\mathscr{X\times Y}에 따라 확률변수가 결정된다고 오해하는 경우가 있는데, 실제로는 D\mathscr{D}에 의해 결정된다.

확률변수는 확률 분포 D\mathscr{D}에 따라 이산형(discrete)연속형(continuous)로 구분된다.

  • 이산형(discrete)

    • 정수 집합, 실수 공간에 속하더라도 연속적이지 않은 변수의 분포(ex- [0.5, 0.5])

    • 즉, 실수공간에 있다고 해서 연속형 확률분포는 아니다!

    • 확률 변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링한다.

      P(XA)=xAP(X=x)\mathbb{P}(X\in A) = \sum_{x \in A} P(X = \bold{x})
    • P(X=x)P(X = \bold{x})는 확률변수가 x\bold{x}값을 가질 확률이다.

    • 이러한 함수를 확률질량함수라고 부른다.

  • 연속형(continuous)

    • 데이터 공간에 정의된 확률변수의 밀도(density)위에서의 적분을 통해 모델링한다.

      P(XA)=AP(x)dx\mathbb{P}(X\in A) = \int_A P( \bold{x})d\bold{x}
    • 이산형 확률변수와 달리, 특정 확률변수가 x\bold{x}값을 가질 확률을 구하는 것이 불가능하다.

    • 그 대신에, 확률변수의 밀도를 사용한다.

      P(x)=limh0P(xhXx+h)2hP(\bold{x}) = \lim_{h\rarr0}\frac{\mathbb{P}(\bold{x}-h \le X \le \bold{x}+h) }{2h}
      • 위의 함수를 밀도함수라고 부르며, 확률이 아닌 누적확률분포의 변화율로 생각해야한다.
      • 따라서 매번 적분을 해야 분포값을 계산할 수 있다.

보통 컴퓨터에서 사용되는 확률변수는 이산형이지만, 기계학습의 경우 여러 종류의 분포가 있으므로 연속형 호확률변수도 같이 사용하게 된다.

확률변수에는 이산형과 연속형만 있는것이 아니다. 어떤 경우에는 이산형, 어떤경우에는 연속형을 취하는 확률변수도 존재한다.

결합확률분포

prob_distribution

전체 데이터 x,y\bold{x},y가 주어진 상태에서 산정하는 분포를 결합확률분포(joint probability distribution)라고 하며, P(x,y)P(\bold{x},y)라고 표기한다.

위의 그림에서 각각의 파란 점들은 언뜻보면 연속확률분포처럼 보이지만, 빨간색 격자를 기준으로 위치를 나누어 이산확률분포로 계산할 수 있다. 각각의 칸에 대해서 y=1y=1인 파란색 점들의 개수를 카운팅하면, 주어진 데이터의 결합확률분포를 가지고 원래 확률분포 D\mathscr{D}를 모델링할 수 있다.

이 때, 원래 확률 분포 D\mathscr{D}가 이산형인지, 연속형인지에 따라 결합확률분포가 결정되는것은 아니다.

  • D\mathscr{D}가 연속형이어도, 결합확률분포는 이산형일 수 있다.
  • D\mathscr{D}가 이산형이어도, 결합확률분포는 연속형일 수 있다.
  • 이것은 모델링 방법에 따라 결정되는 문제이므로, 원래 데이터의 확률분포 D\mathscr{D}와 주어진 데이터에서 실증적으로 추측한 분포는 다를수도 있다 .
    • 컴퓨터를 가지고 추측하기 때문에, 원래 확률분포와 다르더라도 근사할 수 있는 방법을 알 수 있다.
    • 따라서 결합확률분포 P(x,y)P(\bold{x},y) 는 주어진 데이터의 모양을 보고 적절하게 선택할 수 있다.

결합확률은 확률론적으로 n개의 사건이 동시에 발생할 확률을 일컫는다.

주변확률분포(Marginal Probability Distribution)

marginal_distribution

이산:P(x)=yP(x,y)연속:P(x)=yP(x,y)dy이산 : P(\mathrm{x}) = \sum_yP(\mathrm{x,y})\\ 연속 : P(\mathrm{x}) = \int_yP(\mathrm{x,y})\mathrm{dy}

결합확률분포 P(x,y)P(\bold{x},y)를 각각의 y\rm y에 대해서

  • 이산 결합확률분포라면, 모두 더해준다
  • 연속 결합확률분포라면, 적분을 해준다.

이를 통해 주변확률분포(marginal probability distribution)을 구할 수 있다.

주변확률 분포는 x\rm x에 대한 정보를 줄 뿐, y\rm y에 대한 정보를 주지는 않는다. 위의 그림을 확인하면, y\rm y가 1이든 2이든 상관없이 점들을 세서 빈도를 계산했을 때 XX에 따른 주변확률분포를 구할 수 있다.

확률론적으로 ,주변확률결합확률 과 대비되는 개념이다. 다른 사건과 결합하지 않은 개별 사건의 확률을 주변확률이라고 부른다.

조건부확률분포

conditional_prob_distribution

y\rm y의 값과 관계없이 구했던 주변확률분포와 다르게, 조건부확률분포 P(xy)P(\rm x|y)는 특정 y\rm y에 해당하는 x\rm x값을 의미한다.

위의 그림은 y\rm y가 1이라고 주어졌을 때의 조건부확률분포이다. 조건부확률분포 P(xy)P(\rm x|y)특정 클래스가 주어진 조건에서 데이터의 확률 분포를 보여준다. 따라서 입력 x\rm x와 출력 y\rm y 사이의 관계를 모델링(또는 예측)할 때 사용된다.

확률론에서, 조건부확률사건 A가 발생한 경우의 사건 B가 발생할 확률을 일컫는다.

위의 결합확률분포, 주변확률분포, 조건부확률분포 개념은 조금 어렵게 설명되어 있는데, 좀 더 쉬운 설명으로는 다음 링크를 참조하자.

결합확률분포와 조건부확률분포 - 데이터 사이언스 스쿨

조건부확률과 기계학습

조건부확률 P(yx)P(\rm y|x)는 입력변수 x\rm x에 대해 정답이 y\rm y일 확률을 의미한다.

  • 이 때, 연속확률분포의 경우 P(yx)P(\rm y|x)는 확률이 아니라 밀도로 해석된다.

로지스틱 회귀에서 사용했던 [선형모델 + 소프트맥스 함수] 결합은 데이터에서 추출된 패턴을 기반으로 확률을 해석하는 데에 사용된다.

  • 분류 문제에서 소프트맥스에 선형모델을 집어넣으면 확률벡터를 얻을 수 있었다.

분류 문제에서 softmax(Wϕ+b)W\phi + b)데이터 x\rm x로부터 추출된 특징패턴 ϕ(x)\phi(x)와 가중치행렬 WW를 통해 조건부 확률 P(yx)P(\rm y | x), 즉 입력값이 x\rm x일때 정답이 y\rm y일 확률을 계산한다.

  • 기호적으로는 P(yϕ(x))P(\rm y|\phi(x))라고 쓰기도 한다.

회귀문제의 경우 보통 연속확률변수를 다루므로, 확률로 해석하기 어렵고 밀도로 해석해야한다.

  • 이 경우 조건부 확률 P(yx)P(\rm y |x)가 아닌 조건부기대값 E[yx]\mathbb{E}[y|x]를 추정하며, (당연히) 적분으로 표현한다.

    EyP(yx)[yx]=yyP(yx)dy\mathbb{E}_{y\sim P(y|x)}[y|x] = \int_yyP(y|x)dy

그렇다면 왜 회귀문제에서 조건부기대값을 사용할까? 이유는 다음과 같다.

물론, 조건부기대값이 아닌 다른 수치를 예측모델에 사용할 수도 있다.

예를 들어 일반적인 예측보다 좀 더 견실(robust)하게 예측하는 경우에는 조건부기대값보다는 중앙값(median)을 사용해서 추정하기도 한다.

즉, 통계적 모형에서, 원하는 목적에 따라 사용되는 estimator(추정량)이 달라질 수 있다.

어찌됐든, 딥러닝은 다층신경망을 사용하여 데이터로부터 특징패턴 ϕ\phi 를 추출한다.

  • 이 때, 특징패턴을 학습하기 위해 어떤 손실함수를 사용할지는 기계학습문제와 모델에 의해 결정된다.

기대값

확률분포가 주어지면, 데이터를 분석하는 데에 사용가능한 여러 종류의 통계적 범함수(statistical functional)를 계산할 수 있다.

이 때, 기대값(expectation)데이터를 대표하는 통계량이면서 동시에 확률분포를 통해 다른 통계적 범함수를 계산하는 데에 사용된다.

  • 기댓값과 평균은 같은 용어로 많이들 사용하고 있는데, 기계학습에서는 좀 더 폭넓은 의미로 사용한다.
연속확률분포 기대값:ExP(x)[f(x)]=Xf(x)p(x)dx이산확률분포 기대값:ExP(x)[f(x)]=xXf(x)P(x)연속확률분포\ 기대값 : \mathbb{E}_{\rm x\sim P(x)}[f(x)] = \int_X f(x)p(x)dx\\ 이산확률분포\ 기대값 : \mathbb{E}_{\rm x\sim P(x)}[f(x)] = \sum_{\rm x \in X}f(x)P(x)

연속확률분포의 경우 주어진 함수에 확률밀도함수를 곱한 후 적분한다.

이산확률분포의 경우 주어진 함수에 확률질량함수를 곱한 다음 급수로 더해준다.

이러한 기대값을 이용해 분산, 첨도, 공분산 등 여러 통계량을 계산할 수 있다.

분산:V(x)=ExP(x)[(xE[x])2]왜도:Skewness(x)=E[(xE[x]V(x))3]상관계수:Cov(x1,x2)=Ex1,x2P(x1,x2)[x1E[x1])(x2E[x2])]분산:\mathbb{V}(x) = \mathbb{E}_{x\sim P(x)}[(x - \mathbb{E}[x])^2]\\ 왜도 : Skewness(x) = \mathbb{E} \Bigg[\Bigg(\frac{x-\mathbb{E}[x]}{\sqrt{\mathbb{V}(x)}}\Bigg)^3\Bigg]\\ 상관계수 : Cov(x_1,x_2) = \mathbb{E}_{x_1,x_2\sim P(x_1,x_2)}[x_1-\mathbb{E}[x_1])(x_2-\mathbb{E}[x_2])]

위의 기대값 공식에서, ff 대신 분산, 왜도, 상관계수등의 통계량에 해당하는 함수들을 집어넣으면 확률분포에서의 통계적 범함수들을 계산할 수 있다.

  • 이 통계값들은, Pandas 라이브러리에서 df.describe() 를 사용하면 나오는 것들이다.

결합확률분포를 계산하는 경우에는 P(x)P(x) 대신 P(x1,x2)P(x_1,x_2)등을 집어넣으면 된다.

몬테카를로 샘플링

만약 확률분포를 잘 알고 있어서, 확률밀도함수를 사용할지 확률질량함수를 사용할지 등을 잘 알고있으면 기계학습에서의 기댓값을 계산하는데에 이용할 수 있을 것이다. 그러나 기계학습의 많은 문제들은 확률 분포를 명시적으로 모를때가 대부분이다.

확률 분포를 모를 때 데이터를 이용해서 기대값을 계산하려면, 몬테카를로 샘플링 방법을 사용해야한다.

ExP(x)[f(x)]1Ni=1Nf(x(i),    x(i)i.i.dP(x)\mathbb{E}_{x\sim P(x)}[f(x)] \approx \frac{1}{N}\displaystyle\sum_i=\frac{1}{N}f(x^{(i)}, \ \ \ \ x^{(i)}\stackrel{i.i.d}{\sim} P(x)

타겟 함수 f(x)f(x)xx 자리에 샘플링한 데이터를 대입하고, 데이터들에 따라서 f(x(i))f(x^{(i)})의 산술평균 값을 구하면, 이 값이 기대값에 근사하게 된다.

  • 몬테카를로는 이산형이든 연속형이든 상관없이 성립한다.
  • 단, 샘플링하는 분포에서 독립적으로 샘플링해주어야만 몬테카를로가 제대로 작동한다.
    • 독립추출이 보장된다면 대수의 법칙(law of large number)에 의해 수렴성을 보장한다.

확률분포를 몰라도 샘플링만 가능하다면 기대값을 계산할 수 있으므로, 기계학습과 통계학 모두에서 굉장히 많이 사용되는 도구이다.

몬테카를로법에 대한 위의 수식은 조금 딱딱한 감이 있으므로, 쉽게 이해하기 위해서 다음 글을 읽어보자. 몬테카를로 방법으로 원주율 구하기

몬테카를로 예제 : 적분 계산하기

monte_ex

위와 같은 함수 f(x)=ex2f(x) = e^{-x^2}[1,1][-1, 1] 상에서 적분값을 어떻게 구해보자.

적분 구간이 -1에서 1까지인데, 확률분포가 아닌 공간에서의 적분을 어떻게 할까?

  • 고등학교 때 배웠던 부정적분의 공식을 통해서 이 함수의 적분을 계산하기는 어렵다.
1211ex2dx1Nif(x(i)),    x(i)U(1,1)\frac{1}{2}\int_{-1}^1e^{-x^2}dx \approx \frac{1}{N}\displaystyle\sum_if(x^{(i)}),\ \ \ \ x^{(i)} \sim U(-1,1)
  1. 구간 [1,1][-1, 1]의 길이는 2이므로 균등분포하여 샘플링한다. 확률분포로 바꾸기 위해 구간을 1씩 나누는 균등분포를 사용한다. 즉, 적분값을 2로 나눈다.
  2. 이는 기대값을 계산하는 것과 같다. 따라서 몬테카를로 방법을 사용할 수 있다. 함수 ex2e^{-x^2}에 균등분포에서 추출한 데이터를 집어넣고, 상수평균을 구해준다. 이 값이 원하는 적분값의 1/21/2에 근사한 값이다.
  3. 이제, 마지막으로 양변에 2를 곱해주어 원하는 적분값(에 근사한 값)을 구할 수 있다.

이를 파이썬 코드로 옮기면 다음과 같다.

BASH
import numpy as np
def mc_int(fun, low, high, sample_size=100, repeat=10):
int_len = np.abs(high - low)
stat = []
for _ in range(repeat):
x = np.random.uniform(low=low, high=high, size=sample_size)
fun_x = fun(x)
int_val = int_len * np.mean(fun_x)
stat.append(int_val)
return np.mean(stat), np.std(stat)
def f_x(x):
return np.exp(-x**2)
print(mc_int(f_x, low=-1, high=1, sample_size=10000, repeat=100))
# (1.4935845057262795, 0.0036777255555109412)

만약 샘플사이즈가 적게 되면, 몬테카를로 법칙이라도 오차범위가 커질 수 있으므로, 적절한 샘플링 개수를 확보해야한다.


WRITTEN BY

알파카의 Always Awake Devlog

Seoul