전공공부/인공지능

확률론 맛보기: 확률분포, 이산/연속형 확률변수, 기대값, 몬테카를로 샘플링

prefer_all 2022. 7. 25. 23:27
<목차>
1. 딥러닝과 확률론
2. 확률분포
- 이산형 확률변수
- 연속형 확률변수
- 결합분포
- 주변확률분포
- 조건부 확률
3. 기대값
4. 몬테카를로 샘플링

 

 

딥러닝과 확률론

  • 딥러닝은 확률론 기반의 기계학습 이론에 바탕을 두고 있음
  • 기계학습에서 손실함수(loss function)들의 작동 원리는 데이터 공간을 통계적으로 해석해서 유도/ 예측이 틀릴 위험(risk)를 최소화하도록 data를 학습하는 게 통계적 기계학습의 기본 원리임
    • ex) 회귀분석에서 L2-norm은 예측오차의 분산을 가장 최소화하는 방향으로 학습하도록 유도
    • ex2) 분류 문제에서 사용되는 교차엔트로피(cross-entropy)는 모델 예측의 불확실성을 최소화하는 방향으로 학습하도록 유도

확률분포

데이터의 초상화로써 확률분포가 가지는 의미

  • 데이터공간: 𝒳 x 𝒴라 표기, 𝒟: 데이터공간에서 데이터를 추출하는 분포
    • D는 이론적으로 존재하는 확률분포이기 때문에 사전에 알 수 없음
  • 데이터: 확률변수로 (x, y) ~ 𝒟라 표기
    • 확률변수는 임의로 랜덤하게 data를 관측하는 함수로 해석

파란색 점: 관측한 데이터. 데이터 추출할 때 확률변수 사용하고 이 분포를 D라고 함

 

  • 확률변수는 확률분포에 따라 이산형(discrete)연속형(continuous)으로 구분(그 외로 구분될 수 있음) / 데이터 공간에 따라 분류하는 것 아님
  • 이산형 확률변수: 확률변수가 가질 수 있는 경우의 수를 모두 고려하여 확률을 더해서 모델링

P(X=x) 는 확률질량 함수라고 함

 

  • 연속형 확률변수: 데이터 공간에 정의된 확률변수의 밀도 위에서의 적분을 통해 모델링

P(x)는 밀도임

  • 기계 학습은 주로 연속형 확률변수 사용

 

  • 결합 분포(Joint distribution) P(x, y) 는 D를 모델링함
  • 확률 분포가 이산형이라고 하더라도 결합 분포는 연속형 가능 (반대도 마찬가지. 모델링 방법에 따른 것임)
  • P(x): 입력 x에 대한 주변확률분포, y에 대한 정보를 주진 않음
  • 주변확률분포는 결합확률분포를 각 y에 대해 모두 더해주거나 적분해서 유도

 

  • 조건부확률분포 P(x|y)는 데이터 공간에서 입력 x와 출력 y 사이의 관계를 모델링
  • P(x|y)는 특정 클래스가 주어진 조건에서 데이터의 확률분포를 보여줌


조건부확률

  • P(x|y): 입력 x와 출력 y 사이의 관계를 모델링
  • P(y|x): 입력변수 x에- 대해 정답이 y일 확률을 의미, 연속확률분포의 경우 밀도로 해석

 

  • 로지스틱 회귀에서 사용했던 선형모델과 소프트맥스 함수의 결합은 데이터에서 추출된 패턴을 기반으로 확률을 해석하는데 사용
  • 분류 문제에서 softmax(W𝜙 + b): 데이터 x로부터 추출된 특징패턴 𝜙(x)과 가중치행렬 W를 통해 조건부확률 P(y|x) 계산
  • 회귀 문제의 경우 밀도 함수로 해석 / 조건부기대값 E[y|x] 추정 (robust 강건하게 예측을 하는 경우에는 중앙값 median을 사용해 추정하기도 함)

회귀 문제는 L2와 일치


기대값

  • 데이터를 대표하는 통계량
  • 기대값을 이용해 분산, 첨도, 공분산 등 다른 여러 통계량 계산 가능
    • 연속확률 분포: 적분, 밀도함수를 곱함
    • 이산확률 분포: 급수, 질량함수를 곱함

 

  • 딥러닝은 다층신경망을 사용하여 데이터로부터 특징패턴 𝜙 추출 (특징패턴을 학습하기 위해 어떤 손실함수를 사용할 지는 기계학습 문제와 모델에 의해 결정됨)

몬테카를로 샘플링 

  • 확률분포를 모를 때 데이터를 이용해 기댓값을 계산하는 방법
  • 몬테카를로는 이산형이든 연속형이든 상관없이 성립함

  • 몬테카를로 샘플링은 독립추출만 보장된다면 대수의 법칙(law of large number)에 의해 수렴성 보장

 

ex) 적분 계산하기

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))

 

 

'전공공부 > 인공지능' 카테고리의 다른 글

Tensor manipulation -1  (0) 2022.07.26
통계학 맛보기(뒷부분 어려움)  (0) 2022.07.26
Pandas 4편 : pivot table, join, DB persistence  (0) 2022.07.25
Pandas 3편 : Groupby  (0) 2022.07.25
one hot encoding  (0) 2022.07.25