본문 바로가기

컴퓨터 비전/밑바닥부터 시작하는 딥러닝5

1장. 확률분포

1.1 확률 기초

1.1.1 확률 변수와 확률 분포

 얻을 수 있는 값이 확률적으로 결정되는 변수는 확률변수라 한다. 주사위를 예시로 들면 주사위를 던져 확률적으로 얻을 수 있는 값인 주사위의 눈 값을 확률 변수라 할 수 있다. 그리고 얻을 수 있는 모든 값에 대한 확률을 확률 분포라고 한다. 주사위의 눈에서 얻을 수 있는 값은 1, 2, 3, 4, 5, 6 총 6개이고 각 확률은 동일하므로 모든 값에 대한 확률 분포는 1/6으로 같다. 수식적으로 말하자면 주사위에 대해 확률 변수 x에 대한 확률분포 p(x)는 x가 1, 2, 3, 4, 5, 6 일 때 전부 1/6이다. 

 위 확률 분포에 따라 얻어낸 실제 값을 관측값, 데이터, 이라고 하고 이 관측값의 집합을 샘플, 표본 이라고 한다. 위와 같은 경우는 모든 확률 분포가 동일하기 때문에 균등분포라고 할 수 있다.

확률분포 조건

1. 각 값의 발생 확률은 모두 0이상 1이하

2. 모든 확률의 합은 1

 

(확률변수는 대문자, 관측값은 소문자로 표기하는 것이 일반적인 관례이긴 함)

1.1.2 확률분포 종류

확률분포는 이산 확률 분포와 연속 확률 분포로 나뉜다.

왼쪽이 이산 확률 분포로 각 확률변수 X에 대해 확률을 가진다. 위 주사위 예시가 여기에 해당한다. 반면 오른쪽 연속 확률 분포는 확률변수 X에 대해 확률이 아닌 확률 밀도(확률밀도함수)를 가진다. 따라서 확률 밀도의 경우, 특정 확률변수에 대한 확률으로 구하는 것이 아닌 적분을 통해 특정 구간의 값을 계산하는 방식으로 구한다.

연속 확률 분포 성립 조건 

1. 모든 확률 밀도는 0이상

2. 전체 구간에 대한 확률 밀도 적분 값은 1

1.1.3 기댓값과 분산

기댓값은 한번의 관측으로 얻을 수 있는 값의 평균이다. 단순 평균이라고도 하는 값으로 식은 다음과 같다.

 

이산 확률 분포일 때

$E(x) = \sum_{k=1}^{N}x_{k}p(x_{k})$

 

연속 확률 분포일 때

$E(x) = \int_{}^{}xp(x)dx$

 

기댓값은 얻을 수 있는 모든 가능한 관측값과 그 값에 대한 확률의 곱을 전부 더한 값이다. 이에 이산 확률 분포는 덧셈(시그마), 연속 확률분포는 적분을 통해 구할 수 있다. 

분산은 다음과 같은 식으로 표현 가능하다.

 

$Var[x] = E[(x-\mu) ^{2}]$

 

이 값은 기댓값 뮤를 중심으로 확률변수의 값이 어느정도 분산되어있는지를 나타낸다. 분산이 작을 수록 퐉률변수가 취할 수 있는 값이 기댓값 뮤에 가까이 모여있다는 의미이다. 위 두 식을 통해 다음처럼 계산이 가능하다.

 

이산 확률 분포일 때의 분산

$Var[x] = E[(x-\mu) ^{2}] = \sum_{k=1}^{N}(x_{k} - \mu)^{2}p(x_{k})$

 

연속 확률 분포일 때의 분산

$Var[x] = E[(x-\mu) ^{2}] = \int_{}^{}(x - \mu)^{2}p(x)dx$

 

(이렇게 얻어진 값의 제곱근을 취한 값을 표준 편차라고 한다. 중요한 특징은 분산은 제곱을 취한 값이기 때문에 그 크기가 일반적인 단위와 다르다. 하지만 표준편차는 제곱근을 취한 값의 형태이기 때문에 단위가 비슷하게 되어 좀 더 직관적으로 이해가 가능하다.)

수식은 전부 있으니 위 간단한 예시였던 주사위를 예로 들어 기댓값과 분산을 계산해보자. 주사위는 이산 확률 분포이니 위 식에서 이산 확률 분포에 대한 식에 대입을 하면 쉽게 계산이 가능하다.

1.2 정규분포

(카를 프리드리 가우스의 이름을 따 가우스 분포라고도 한다.)

정규분포는 그 그림에서 알다시피 연속 확률 분포에 포함된다. 평균이 뮤, 표준편차가 시그마일 때 정규분포의 확률 밀도 함수는 다음 식으로 정의가 가능하다.

 

$p(x) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x - \mu)^{2}}{2\sigma^{2}}}$

 

위 식에서 e는 자연상수로 흔히 알고 있는 네이피어 상수를 뜻하며 e의 지수를 표기할 때는 지수 부분이 작아져 읽기 어려운 것을 방지하기 위해 아래와 같이 exp()로 표기하기도 한다. 

 

$p(x) = \frac{1} {\sqrt{2\pi}\sigma} exp(-\frac{(x - \mu)^{2}}{2\sigma^{2}}) $

 

아무튼 위 식에서 p(x)는 x를 인수로 받아 확률 밀도 함수를 반환하는 함수로 해석이 가능하다. 정규분포의 모양 자체는 기댓값인 뮤와 표준편차인 시그마에 의해 결정되는데, 이처럼 확률 분포의 모양을 결정하는 인자들을 매개변수라고 한다. 따라서 p() 함수에 모든 매개변수를 포함시킨 형태로도 표기한다.

 

$p(x; \mu, \sigma)$

 

여기서 확률변수 x와 매개변수 뮤, 시그마는 ;을 통해 구분하여 무엇이 확률변수인지 명시한다. 이렇게 하는 이유는 확률변수는 위에서 배운 것 처럼 확률에 따라 변하는 값이고, 매개변수는 사용자가 임의로 설정하는 값이기 때문이다. 물론 매개변수도 확률적으로 다루는 배이지안 접근법이 있긴 하지만... 여기서는 일단 임의로 설정한다고 한다.

1.2.2 정규분포 코드 

이제 코드로 한번 작성해보자 

import numpy as np
import matplotlib.pyplot as plt

def normal(x, mu=0, sigma=1):
    y = 1 / (np.sqrt(2*np.pi)*sigma) * np.exp(-(x - mu)**2 / (2*sigma**2))
    return y

x = np.linspace(-5, 5, 100)
y = normal(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.show()

이렇게 하면 정규분포 그림이 툭 떨어진다. 수식은 위에서 봤던 것을 그대로 normal 함수에 코드화 시킨 것이다. 그리고 변수는 보다시피 mu(기댓값)이 0, sigma(표준편차)가 1로 설정되어있다.

그러면 위와 같이 정규분포 이미지가 만들어진다. 이러한 곡선 형태를 종모양 곡선이라고 한다. 

1.2.3 매개변수의 역할

정규분포에는 말했다시피 기댓값과 표준편차라는 두개의 매개변수가 존재한다. 따라서 이 두 값에 따라 종모양 곡선의 형태가 변한다. 확인해보자

표준편차 값인 sigma 변경할 때 마다 다음과 같이 모양이 변경된 것을 알 수 있다. 

그리고 기댓값인 mu를 변경하면 다음과 같이 확률 밀도가 최대가 되는 지점의 위치값이 달라지는 것을 알 수 있다. 

1.3 중심극한 정리

위에서 정규분포를 다룬 이유는 중심극한 정리를 다루기 위함이다.

1.3.1 중심극한 정리란

임의의 어떠한 확률분포 p(x)에 대해 독립시행으로생성된 N개의 데이터를 x1, x2, x3 ... xn 이라고 할 때, 그 표본의 평균은 어떠한 값을 가질 것이다. 이 값을 x bar라고 하자. 중요한 점은 여기서 p(x)가 어떤 확률 분포든 x bar의 분포는 표본의 크기가 커질수록  정규분포의 형태에 가까워진다는 점이다. 그리고 분산은 1/N배가 된다. 따라서 평균은 유지되고 분산만 1/N이 되는 것을 확인할 수 있다.

1.3.2 중심극한 정리 증명

실험을 해보면 쉽게 확인할 수 있다. 물론 수식으로도 가능하지만 컴퓨터가 있으니 이거로 해보자

import numpy as np

N = 1
xs = []
for n in range(N):
    x = np.random.rand()
    xs.append(x)
    
xmean = np.mean(xs)
print(xmean)

위 코드는 0부터 1 사이의 무작위 값을 하나 뽑아 평균을 계산하는 코드이다. 이는 표본이 1인 특정 p(x)에 대한 평균이다. 그럼 이를 1만번 수행한 뒤 그 결과를 그래프로 표현해본다.

import numpy as np
import matplotlib.pyplot as plt

xmeans = []
N = 1

for _ in range(10000):
    xs = []
    for n in range(N):
        x = np.random.rand()
        xs.append(x)
    
    xmean = np.mean(xs)
    xmeans.append(xmean)
    
plt.hist(xmeans, bins='auto', density=True)
plt.title(f' N={N}')
plt.xlabel('x')
plt.ylabel("Probability Density")
plt.xlim(-0.05, 1.05)
plt.ylim(0, 5)
plt.show()

다음과 같이 정규분포와는 많이 다른 모습인 것을 알 수 있다. 그럼 N을 늘려보자

점점 더 정규분포와 비슷한 모습을 띄는 것을 알 수 있다. 하지만 다른점은 분산값이 점점 줄어든다는 점이다. 따라서 N이 극도로 커지면 결과가 다음과 같아진다.

분산이 0에 가까워져 가운데 값이 전부 몰리는 따라서 오히려 일반적인 정규분포와는 거리가 먼 모습인 것을 알 수 있다. 

1.4 표본 합의 확률 분포

위에서 중심 극한 정리에 의해 표본의 평균은 정규분포의 형태를 따른다는 것을 확인했다. 여기서 표본 평균은 우리가 아는 방식으로 쉽게 구할 수 있고 그 과정을 위 코드로 우리는 수행했다 여기서 다른점은 표본 합은 어떤 확률분포를 가지냐이다. 

1.4.1 표본합의 기댓값과 분산

표본의 합은 Nx로 단순히 표본의 기댓값에 표본의 크기를 곱하면 근사치를 구할 수 있다. 따라서 x가 정규분포의 형태에 가까워진다면 표본의 합인 Nx도 이것을 단순 N배 한 형태이기 때문에 이것 또한 정규분포에 가깝다는 것이 자명하다. 이제 해당 정규분포의 매개변수 값이 어떻게 되는지, 그리고 이에 따라 정규분포의 모양이 어떻게 결정되는지만 알면 된다. 

간단한 문제를 풀어보자

$E[x] = \mu, Var[x] = \frac{\sigma^{2}}{N}$ 일 때

&E[Nx] Var[Nx]& 를 구해보자

일단 E[Nx]에서 상수 값은 그대로 해당 함수를 빠져나올 수 있다. 이산확률에서의 시그마가 되었든, 연속확률이라 인테그랄이 되었든 x에 대한 합이므로 N은 상수이기에 영향을 받지 않기 때문이다 따라서 

$E[Nx] = NE[x]$ 가 성립함을 알 수 있다. 다음 분산의 경우는 조금 다르다 분산 계산식을 한번 보자

$Var[Nx] = E[{Nx - N\mu}^{2}]$이다. 위에서 확인했다시피 N은 E[x] 식을 그대로 빠져나올 수 있으니 N이 제곱을 빠져나오면서 

$N^{2}Var[x]$ 가 되는 것을 알 수 있다.

1.4.2 코드로 증명

0과 1 사이의 균등 분포로부터 샘플을 추출한 표본의 합 분포를 확인해보자

import numpy as np
import matplotlib.pyplot as plt

x_sums = []
N = 5
for _ in range(10000):
    xs = []
    for n in range(N):
        x = np.random.rand()
        xs.append(x)
        
    t = np.sum(xs)
    x_sums.append(t)
    
x_norm = np.linspace(-5, 5, 1000)
mu = N/2
sigma = np.sqrt(N/12)
y_norm = normal(x_norm, mu, sigma)
plt.hist(x_sums, bins = "auto", density=True)
plt.plot(x_norm, y_norm)
plt.title(f'N={N}')
plt.xlim(-1, 6)
plt.show()

표본의 크기를 5정도만 주어도 균등 분포에서의 표본 합의 분포는 정규분포의 형태와 거의 유사하단 것을 확인할 수 있다. 중요한 특징은 여기서 정규분포의 매개변수로 mu는 1/2, 표준편차는 1/12를 사용하였고 이것이 균등분포상황에서의 표본의 합의 분포와 맞아 떨어진다는 것을 알 수 있다. 이는 균등분포의 표본의 기댓값은 1/2이고 표준편차는 1/12라는 것을 의미하는데 이것은 수식으로 증명해보자

1.4.3 균등분포의 평균과 분산

일단 균등분포의 확률함수는 특정 구간 (a, b)에서만 그 값이 $\frac{1}{b-a}$를 가지고 이외 구간에서는 그 확률이 0인 함수이고 그 그래프는 다음과 같다.

해당 구간에서만 동일한 확률 분포를 가진다 하여 균등 분포라고 한다. 이를 이용하여 먼저 (0, 1) 구간에 대한 균등분포의 기댓값을 계산해보자 일단 연속 확률 분포이기에 인테그랄을 이용하여 계산한다. 

 

$\int_{-\infty}^{\infty}xp(x)dx=\int_{-\infty}^{0}xp(x)dx+\int_{0}^{1}xp(x)dx+\int_{1}^{\infty}xp(x)dx$

 

위와 같다 여기서 p(x)는 (0, 1)구간에서만 1 값을 가지고 이외 구간에서는 전부 0의 값을 가지므로 사실상 

 

$\int_{0}^{1}xdx$

 

인 것을 알 수 있다. 이건 다항함수의 적분을 알면 쉽게 1/2란 것을 알 수 있다.

 

이어서 분산을 구해보면 다음과 같다.

 

$\sigma^{2} = \int_{-\infty}^{\infty}(x-\mu)^{2}p(x)dx = \int_{0}^{1}(x-\mu)^{2}dx$

 

이것도 $\mu$에 위에서 구한 값 1/2를 대입한 다음 단순 적분하면 쉽게 1/12란 것을 구할 수 있다. 

'컴퓨터 비전 > 밑바닥부터 시작하는 딥러닝5' 카테고리의 다른 글

5. EM 알고리즘  (1) 2025.02.21
4. 가우스 혼합 모델  (0) 2025.02.08
3. 다변량 정규 분포  (0) 2025.01.13
2. 최대 가능도 추정  (0) 2025.01.06