Boostcamp AI Tech (Day 010)
1. 시각화
-
matplotlib
- pyplot 객체에 그래프들을 쌓은 다음 flush
- figure 안에 여러 개의 axes로 구성
fig = plt.figure() fig.set_size_inches(10, 6) # size 설정 plt.style.use("ggplot") # 스타일 적용 ax = [] colors = ["b", "g", "r", "c", "m", "y", "k"] for i in range(1, 7): ax.append(fig.add_subplot(2, 3, i)) # 두 개, 세 줄의 plot 생성 X_1 = np.arange(50) Y_1 = np.random.rand(50) c = colors[np.random.randint(1, len(colors))] ax[i - 1].plot(X_1, Y_1, c=c)
-
plt 속성
- matplotlib.org/tutorials
- plot, scatter, plt.bar, hist, boxplot
2. 통계학
-
통계적 모델링
- 적절한 가정 위에서 확률분포를 추정(inference)하는 것이 목표
- 기계학습과 통계학이 공통적으로 추구하는 목표
- 유한한 개수의 데이터만 관찰해서 모집단의 분포를 정확하게 알 수 없기 때문에, 근사적으로 확률분포를 추정
- 예측모형의 목적은 데이터와 추정 방법의 불확실성을 고려해 위험을 최소화하는 것
- 모수적(parametric) 방법론: 데이터가 특정 확률분포를 따른다고 선험적으로(a priori) 가정한 후, 그 분포를 결정하는 모수를 추정하는 방법
- 비모수(nonparametric) 방법론: 특정 확률분포를 가정하지 않고, (모수가 무한히 많거나) 데이터에 따라 모델의 구조 및 모수의 개수가 유연하게 바뀜 (ML 대부분의 방법론)
-
확률분포 가정하기
- 우선 히스토그램을 통해 모양을 관찰
- 데이터를 생성하는 원리를 먼저 고려하는 것이 원칙
- 데이터가 2개의 값을 가짐 -> 베르누이분포
- 데이터가 n개의 이산적인 값을 가짐 -> 카테고리(멀티누이)분포
- 데이터가 [0,1] 사이의 값 가짐 -> 베타분포
- 데이터가 0 이상의 값 가짐 -> 감마분포, 로그정규분포 등
- 데이터가 R 전체에서 값 가짐 -> 정규분포, 라플라스분포 등
-
데이터로 모수 추정하기
- 데이터의 확률분포를 가정했다면 모수 추정 가능
-
정규분포의 모수는 평균 μ과 분산 σ2으로 이를 추정하는 통계량(statistic)은 다음과 같음
표본 통계량 (추정된) 모수 평균 ˉX=1N∑Ni=1Xi E[ˉX]=μ 분산 S2=1N−1∑Ni=1(Xi−ˉX)2 E[S2]=σ2 - 표본 분산을 구할 때 N - 1로 나누는 이유는 불편(unbiased) 추정량을 구하기 위함임
-
표본분포와 표집분포
- 표본분포(sample dist.): 단순 표본들의 분포를 뜻하며, N이 커져도 정규분포를 따르지 않음
- 표집분포(sampling dist.): 통계량(표본평균과 표본분산)의 확률 분포.
- 표집분포의 경우 N이 커질수록 정규분포 N(μ,σ2/N)을 따름 ⇒ 중심극한정리 (Central Limit Theorem)
- 중심극한정리는 모집단의 분포가 정규분포를 따르지 않아도 성립
-
최대가능도 추정법(Maximum Likelihood Estimation, MLE)
- 확률분포마다 사용하는 모수가 다르므로 적절한 통계량이 달라짐
-
이론적으로 가장 가능성이 높은 모수를 추정하는 방법 중 하나로 MLE가 있음
ˆθMLE=argmθaxL(θ;X)=argmθaxP(X|θ)
-
likelihood
- 가능도 함수 L(θ;X)는 모수 θ가 따르는 분포가 X를 관찰할 가능성.
- “확률”로 해석하면 안 됨. 주어진 데이터 X에 대해 (데이터가 주어져 있는 상황에서) 모수 θ를 변수로 둔 함수.
-
데이터 집합 X가 독립적으로 추출되었을 경우 로그가능도를 최적화함
L(θ;X)=∏ni=1P(Xi|θ)
⇒logL(θ;X)=∑ni=1P(Xi|θ)
- log likelihood
- 로그가능도 역시 가능도를 최적화하는 MLE가 됨
- 데이터 숫자가 수억 단위가 된다면 컴퓨터의 정확도로는 가능도 계산이 불가능 (연산 오차)
- 데이터가 독립일 경우, 로그를 사용하면 가능도의 곱셈을 로그가능도의 덧셈으로 바꿀 수 있기 때문에 연산이 가능해짐
- 경사하강법으로 가능도를 최적화할 때 미분 연산을 사용하는데, 로그가능도를 사용하면 연상량이 줄어듦: O(n2)→O(n)
- 대개의 손실함수의 경우 경사하강법을 사용하므로, negative log-likelihood를 최적화
-
정규분포에서 MLE
- 추정된 모평균: μMLE=1n∑ni=1Xi
-
추정된 모분산: σ2MLE=1n∑ni=1(Xi−μ)2
- MLE는 불편추정량을 보장하지 않음
- 통계적 consistency는 보장 가능
-
카테고리분포(Multinoulli)에서 MLE
θMLE=argmaxp1,…,pdL(θ;X)=argmaxp1,…,pdlog(∏ni=1∏dk=1pXi,kk)
-
카테고리분포의 모수는 다음 제약식을 만족해야 함: ∑dk=1pk=1
-
목적식: log(∏ni=1∏dk=1pXi,kk)=∑dk=1(∑ni=1Xi,k)logpk=∑dk=1nklogpk
-
라그랑주 승수법을 통해, 목적식과 제약식을 동시에 만족시키는 최적화 문제를 풀 수 있음
⇒L(p1,…,pk,λ)=∑dk=1nklogpk+λ(1−∑kpk)
- 0=∂L∂pk=nkpk−λ (목적식 미분)
- 0=∂L∂λ=1−∑dk=1pk (제약식 미분)
- 각각 미분해서 나오는 이 두 식을 합하면: pk=nk∑dk=1nk
- 카테고리분포의 MLE: 경우의 수를 세어 비율을 구하는 것!
-
-
MLE와 딥러닝
- 가중치 θ=(W(1),…,W(L))
- softmax vector는 카테고리분포의 모수 (p1,…,pK)를 모델링
-
one-hot vector로 표현한 정답레이블 y=(y1,…,yk)를 관찰데이터로 이용해, 확률분포인 softmax vector의 log likelihood를 최적화할 수 있음
θMLE=argmθax1n∑ni=1∑Kk=1yi,klog(MLPθ(xi)k)
-
확뷸분포 사이의 거리
- ML에서 사용되는 손실함수들은, 모델이 학습하는 확률분포와 데이터에서 관찰되는 확률분포 사이의 거리를 통해 유도함
- 두 확률분포 P(x),Q(x)가 있을 경우 확률분포 사이의 거리를 계산할 때 사용하는 함수들
- 총 변동 거리 (Total Variation Distance, TV)
- 쿨백-라이블러 발산 (Kullback-Leibler Divergence, KL)
- 바슈타인 거리 (Wasserstien Distance)
-
KL Divergence
- 이산확률변수: KL(P‖
- 연속확률변수: \mathbb {KL} (P \Vert Q) = \int_{\mathcal X} P(\mathbf x) \log \frac{P(\mathbf x)}{Q(\mathbf x)}
- 분해: \mathbb {KL} (P \Vert Q) = - \mathbb E_{\mathbf x \sim P(\mathbf x)} [\log Q(\mathbf x)] + \mathbb E_{\mathbf x \sim P(\mathbf x)} [\log P(\mathbf x)] (크로스 엔트로피 + 엔트로피)
- 분류 문제에서 정답레이블을 P 모델의 예측을 Q라고 두면, MLE는 KL 발산을 최소화하는 것과 같음