Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- seaborn
- Attention
- word2vec
- 기아
- ODQA
- AI Math
- GPT
- 현대자동차
- Optimization
- Bart
- 딥러닝
- Bert
- RNN
- nlp
- AI 경진대회
- N2N
- passage retrieval
- Transformer
- pyTorch
- Self-attention
- Data Viz
- matplotlib
- KLUE
- 2023 현대차·기아 CTO AI 경진대회
- 데이터 구축
- dataset
- mrc
- Ai
- N21
- 데이터 시각화
Archives
- Today
- Total
쉬엄쉬엄블로그
딥러닝에서의 확률론 본문
728x90
이 색깔은 주석이라 무시하셔도 됩니다.
딥러닝에서 확률론이 왜 필요한가?
- 딥러닝은 확률론 기반의 기계학습 이론에 바탕을 두고 있다.
- 기계학습에서 사용되는 손실함수(loss function)들의 작동 원리는 데이터 공간을 통계적으로 해석해서 유도하게 된다.
- 예측이 틀릴 위험(risk)을 최소화하도록 데이터를 학습하는 원리는 통계적 기계학습의 기본 원리
- 회귀 분석에서 손실함수로 사용되는 $L_2$-노름은 예측오차의 분산을 가장 최소화하는 방향으로 학습하도록 유도한다.
- 분류 문제에서 사용되는 교차엔트로피(cross-entropy)는 모델 예측의 불확실성을 최소화하는 방향으로 학습하도록 유도한다.
- 분산 및 불확실성을 최소화하기 위해서는 측정하는 방법을 알아야 한다.
- 두 대상을 측정하는 방법을 통계학에서 제공하기 때문에 기계학습을 이해하려면 확률론의 기본 개념을 알아야 함
확률분포는 데이터의 초상화
- 항상 데이터가 정답 레이블을 가진 지도학습이라 상정
- 데이터공간을 $\mathscr x\times\mathscr y$라 표기하고 $\mathscr D$는 데이터공간에서 데이터를 추출하는 분포이다.
- 데이터는 확률변수로 $(\mathbf x,y)\sim\mathscr D$라 표기
- 결합분포 $P(\mathbf x,y)$는 $\mathscr D$를 모델링한다.
- $\mathscr D$ 는 이론적으로 존재하는 확률분포이기 때문에 사전에 알 수 없다.
- 위 그림처럼 빨간색 칸으로 나누면 이산확률분포처럼 생각할 수 있음
- 주변확률분포 $P(\mathbf x)$는 입력 $\mathbf x$에 대한 주변확률분포로 $y$에 대한 정보를 주진 않는다.
- $P(\mathbf x)=\sum_y P(\mathbf x, y)$ $P(\mathbf x) = \int_y P(\mathbf x, y) dy$
- 주변확률분포 $P(\mathbf x)$는 결합분포 $P(\mathbf x, y)$ 에서 유도 가능하다.
- 주변확률분포 $P(\mathbf x)$는 $\mathbf x$에 대한 정보를 측정할 수 있음
- 입력으로 $y$를 주면 $y$에 대해서도 구할 수는 있음
- $P(\mathbf x)=\sum_y P(\mathbf x, y)$ $P(\mathbf x) = \int_y P(\mathbf x, y) dy$
- 조건부확률분포 $P(\mathbf x|y)$는 데이터 공간에서 입력 $\mathbf x$와 출력 $y$사이의 관계를 모델링한다.
- 조건부확률분포 $P(\mathbf x|y)$는 특정 클래스가 주어진 조건에서 데이터의 확률분포를 보여준다.
- 입력과 출력 사이의 통계적 관계를 모델링할 때 또는 예측모델을 만들 때 사용
- 데이터들의 관점에 따라서 데이터의 초상화를 그려볼 수 있음
이산확률변수 vs 연속확률변수
- 확률변수는 확률분포 $\mathscr D$에 따라 이산형(discrete)과 연속형(continuous) 확률변수로 구분하게 된다.
- 데이터공간 $\mathscr x\times\mathscr y$에 의해 결정되는 것으로 오해를 하지만 $\mathscr D$에 의해 결정된다.
- 이산형 확률변수는 확률변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링한다.
- $\mathbb P(X\in A)=\sum _{x\in A}P(X = \mathbf x)$
- $P(X=\mathbf x)$는 확률변수가 $\mathbf x$ 값을 가질 확률로 해석할 수 있다.
- $\mathbb P(X\in A)=\sum _{x\in A}P(X = \mathbf x)$
- 연속형 확률변수는 데이터 공간에 정의된 확률변수의 밀도(density) 위에서의 적분을 통해 모델링한다.
- $P(\mathbf x)$ : 밀도함수
- 주로 이산형, 연속형 확률변수로 나타나지만 모든 확률변수가 이산형, 연속형 확률변수로 표현되는 것은 아님
조건부확률과 기계학습
- 조건부확률 $P(y|\mathbf x)$는 입력변수 $\mathbf x$에 대해 정답이 $y$일 확률을 의미한다.
- 연속확률분포의 경우 $P(y|\mathbf x)$는 확률이 아니고 밀도로 해석한다는 것을 주의하자
- 로지스틱 회귀에서 사용했던 선형모델과 소프트맥스 함수의 결합은 데이터에서 추출된 패턴을 기반으로 확률을 해석하는데 사용된다.
- 분류 문제에서 softmax$(\mathbf W\phi+b)$은 데이터 $\mathbf x$로부터 추출된 특징패턴 $\phi(x)$과 가중치행렬 $\mathbf W$을 통해 조건부확률 $P(y|\mathbf x)$을 계산한다.
- $P(y|\mathbf x)$ == $P(y|\phi(\mathbf x))$
- 회귀 문제의 경우 조건부기대값 $\mathbb E[y|\mathbf x]$을 추정한다.
- $\mathbb E_{y\sim P(y|\mathbf x)}[y|\mathbf x]=\int_\mathbb yyP(y|\mathbf x)dy$
- 조건부기대값은 $\mathbb E||y-f(\mathbf x)||_2$을 최소화하는 함수 $f(\mathbf x)$와 일치한다.
- 딥러닝은 다층신경망을 사용하여 데이터로부터 특징패턴 $\phi$을 추출한다.
- 특징패턴을 학습하기 위해 어떤 손실함수를 사용할지는 기계학습 문제와 모델에 의해 결정된다.
기대값이란?
- 기대값(expectation)은 데이터를 대표하는 통계량이다.
- 동시에 확률분포를 통해 다른 통계적 범함수를 계산하는데 사용된다.
- 확률분포가 주어지면 데이터를 분석하는 데 사용 가능한 여러 종류의 통계적 범함수(statistical functional)을 계산할 수 있다.
- 통계적 범함수는 확률 변수들의 분포를 특정 함수 형태로 요약하는 함수의 개념이다.
- 회귀분석에서 종속변수와 독립변수 간의 관계를 모델링하는데 사용되는 회귀모형에서, 최소제곱법을 이용하여 추정된 회귀계수는 통계적 범함수의 예시이다.
- $\mathbb E_{\mathbf x \sim P(\mathbf x)} [f(\mathbf x)] = \int_\mathcal X f(\mathbf x)P(\mathbf x)d\mathbf x$ $\mathbb E_{\mathbf x \sim P(\mathbf x)} [f(\mathbf x)] = \sum_{\mathbf x \in \mathcal X} f(\mathbf x) P(\mathbf x)$
- 기대값을 이용해 분산, 첨도, 공분산 등 여러 통계량을 계산할 수 있다.
- 연속확률변수인 경우에는 적분, 이산확률변수인 경우에는 급수를 사용한다는 차이점이 있음
- 연속확률변수인 경우에는 밀도 함수를, 이산확률변수에는 질량 함수를 곱해준다는 차이점이 있
몬테카를로 샘플링
- 기계학습의 많은 문제들은 확률분포를 명시적으로 모를 때가 대부분이다.
- 확률분포를 모를 때 데이터를 이용하여 기대값을 계산하려면 몬테카를로(Monte Carlo) 샘플링 방법을 사용해야 한다.
- $\mathbb E_{\mathbf x \sim P(\mathbf x)} [f(\mathbf x)] \approx \frac{1}{N} \sum^N_{i=1} f(\mathbf x^{(i)})$, $\mathbf x^{(i)} \overset{i.i.d.}{\sim} P(\mathbf x)$
- 몬테카를로는 이산형이든 연속형이든 상관없이 성립한다.
- 확률분포를 명시적으로 모르는 상황에서 샘플링하는 방법을 알고 있다고 가정하면 적분이나 합 대신에 샘플링을 통해서 적분 기대값을 계산할 수 있음
- 기대값을 추정하는 방법은 타겟으로 하는 $f(\mathbf x)$의 $\mathbf x$에 샘플링한 데이터를 대입한 후 데이터들에 따라서 $f(\mathbf x^{(i)})$값들의 산술평균을 계산해주면 이 산술평균 값이 구하고자 하는 기대값에 근사하게 됨
- 샘플링하는 분포에서 독립적으로 샘플링을 해줘야만 몬테카를로 샘플링이 작동함
- 몬테카를로 샘플링을 이용해서 확률분포를 몰라도 샘플링만 가능하다면 기대값을 계산할 수 있기 때문에 굉장히 많은 기계학습 응용 문제에서 몬테카를로 샘플링이 적용됨
(통계학에서도 많이 사용됨)
- 몬테카를로 샘플링은 독립추출만 보장된다면 대수의 법칙(law of large number)에 의해 수렴성을 보장한다.
- 몬테카를로 샘플링은 기계학습에서 매우 다양하게 응용되는 방법이다.
몬테카를로 예제 : 적분 계산하기
- 함수 $f(x)=e^{-x^2}$의 [-1, 1] 상에서 적분값을 어떻게 구할까?
- $f(x)$ 의 적분을 해석학적으로 구하는건 불가능하다.
- 구간 [-1, 1]의 길이는 2이므로 적분값을 2로 나누면 기대값을 계산하는 것과 같으므로 몬테카를로 방법을 사용할 수 있다.
- $\frac{1}{2} \int^1_{-1} e^{-x^2} dx \approx \frac{1}{N} \sum^N_{i=1} f(x^{(i)})$, $x^{(i)} \sim U(-1,1)$
- => $\int^1_{-1} e^{-x^2} dx \approx \frac{2}{N} \sum^N_{i=1} f(x^{(i)})$, $x^{(i)} \sim U(-1,1)$
- 적분 구간이 -1부터 1이기 때문에 이 사이에 균등분포에서 데이터를 샘플링 해줌
- 구간 길이가 2이므로 적분값을 2로 나눠주면 균등분포를 사용하는 것과 동일한 적분에 해당
- 그럼 이 경우에는 기대값을 계산하는 것과 동일해지므로 몬테카를로 방법을 사용할 수 있음
- 균등(uniform) 분포에서 데이터를 샘플링해준 후 함수에 값을 대입해줌
- 대입된 함수들의 데이터에 산술평균을 취해주고 구간 길이 2를 곱해줘서 계산
- 샘플 사이즈가 적다면 몬테카를로 방법을 적용하더라도 오차 범위가 굉장히 커질 수 있고
참값이 멀어질 수 있기 때문에 적절한 샘플링 개수를 조절해줘야만 원하는 적분 값을 구할 수 있음
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.49386$\pm$0.004이므로 오차범위 안에 참값이 있다.
import numpy as np
import matplotlib.pyplot as plt
def n2_norm(x, y):
return np.sqrt(x**2+y**2)
size = 100000
# 직사각형 넓이 : 4 (2 x 2, 가로 세로가 -1 ~ 1)
a = np.random.uniform(-1, 1, size)
b = np.random.uniform(-1, 1, size)
# 반지름 길이가 1인 원의 범위가 됨
result = n2_norm(a, b) <= 1
print(a)
print(b)
print(sum(result))
# 확률 = pi * (r^2) / 직사각형 넓이 = result
# 직사각형 넓이인 4를 곱해주면 pi만 남음
pi_hat = 4*sum(result)/size
in_circle_x = a[result]
in_circle_y = b[result]
out_circle_x = a[~result]
out_circle_y = b[~result]
print(pi_hat)
plt.scatter(in_circle_x, in_circle_y, c='yellow')
plt.scatter(out_circle_x, out_circle_y, c='black')
plt.show()
출처: boostcourse 인공지능(AI) 기초 다지기(https://www.boostcourse.org/ai100/joinLectures/218531)
'부스트캠프 AI Tech 4기' 카테고리의 다른 글
딥러닝에서의 베이즈 통계학 (0) | 2023.05.06 |
---|---|
딥러닝에서의 통계학 (0) | 2023.05.05 |
딥러닝 학습방법 (0) | 2023.05.03 |
경사하강법 (0) | 2023.05.02 |
벡터와 행렬 (0) | 2023.05.01 |
Comments