1. 베르누이 분포 (Bernoulli Distribution)
베르누이 분포는 '성공' 또는 '실패'와 같이 두 가지 결과만 존재하는 단일 시행(single trial)을 모델링하는 가장 기본적인 이산 확률 분포입니다.
가. 수식적 정의
시행 결과 '성공'이 나올 확률을 $\theta$ $(0 \le \theta \le 1)$라고 할 때, 확률 변수 $X$가 $1$(성공) 또는 $0$(실패)의 값을 갖는다고 정의합니다. 이때 확률 질량 함수(PMF)는 다음과 같습니다.
$$ P(X=x)=f(x;\theta)=\theta^{x}(1-\theta)^{1-x}, \quad x\in\{0,1\} $$
$X=1$ (성공)일 확률: $P(X=1)=\theta$
$X=0$ (실패)일 확률: $P(X=0)=1-\theta$
나. 주요 성질
기댓값 (Mean): $E[X]=\theta$ — 베르누이 시행의 평균적인 결과가 성공 확률 $\theta$와 같음을 의미합니다.
분산 (Variance): $\operatorname{Var}(X)=\theta(1-\theta)$ — 결과의 불확실성을 나타내며, 성공 확률 $\theta$가 $0.5$일 때 최대가 됩니다.
다. 활용 분야 및 예시
금융에서 개별 사건의 발생 여부를 모델링하는 데 널리 사용됩니다.
신용 리스크: 특정 기업의 채권이 1년 내에 부도(default)가 날지(1) 아닐지(0)를 예측합니다.
옵션 가격 결정: 1기간 이항 모형(one-step binomial model)에서 주가가 상승(1)하거나 하락(0)하는 두 가지 경우를 모델링할 때 사용됩니다.
예시: 현재 주가 $S_0$일 때, 1기간 후 주가가 $S_0u$ (상승)가 될 확률을 $p$, $S_0d$ (하락)가 될 확률을 $1-p$로 두는 것은 베르누이 분포의 개념을 적용한 것입니다.
2. 이항 분포 (Binomial Distribution)
이항 분포는 성공 확률이 $\theta$로 동일하고 각 시행이 독립적인 베르누이 시행을 $n$번 반복했을 때의 총 성공 횟수에 대한 분포입니다.
가. 수식적 정의
$n$번의 시행 중 $k$번 성공할 확률(확률 변수 $X=k$)의 확률 질량 함수는 다음과 같습니다.
$$ P(X=k)=f(k;n,\theta)=\binom{n}{k}\theta^{k}(1-\theta)^{n-k}, \quad k=0,1,\dots,n $$
$\binom{n}{k}$: $n$번 중 $k$번 성공하는 경우의 수 (이항 계수)
$\theta^k(1-\theta)^{n-k}$: 특정 순서로 $k$번 성공하고 $n-k$번 실패할 확률
나. 주요 성질
기댓값: $E[X]=n\theta$
분산: $\operatorname{Var}(X)=n\theta(1-\theta)$
다. 활용 분야 및 예시
옵션 가격 결정: 다기간 이항 모형(multi-step binomial model)에서 만기까지 주가가 여러 번 상승 또는 하락을 거듭할 때, 최종 주가 분포를 모델링하여 옵션 가격을 결정합니다.
예시: 옵션 만기까지 30번의 가격 변동 단계가 있고, 각 단계에서 주가가 상승할 위험중립확률이 $p$라고 가정합시다. 30번 중 주가가 $k$번 상승할 확률은 이항 분포 $P(X=k)=\binom{30}{k}p^k(1-p)^{30-k}$로 계산할 수 있습니다.
신용 리스크 포트폴리오: 여러 회사채 포트폴리오에서 부도가 발생하는 회사의 수를 모델링하는 데 사용될 수 있습니다 (단, 각 회사의 부도 사건이 독립적이라고 가정).
3. 지수분포 (Exponential Distribution)
지수분포는 어떤 사건이 발생할 때까지 걸리는 대기 시간에 대한 연속확률분포입니다.
가. 수식적 정의
비율 모수 $\lambda$ (단위 시간당 평균 발생 횟수)를 갖는 지수분포의 확률밀도함수(PDF)는 다음과 같습니다.
$$ f(x)= \begin{cases} \lambda e^{-\lambda x}, & x\ge 0,\\ 0, & x<0. \end{cases} $$
나. 주요 성질
기댓값: $E[X]=\dfrac{1}{\lambda}$
분산: $\operatorname{Var}(X)=\dfrac{1}{\lambda^2}$
무기억성(Memoryless Property): $P(X>s+t\mid X>s)=P(X>t)$
다. 활용 분야 및 예시
금융 공학: 채권의 부도 발생까지의 시간, 또는 특정 주가 수준에 도달하는 데 걸리는 시간을 모델링합니다.
대기 행렬 이론: 은행 창구나 콜센터에서 고객의 대기 시간을 분석합니다.
예시: 어떤 트레이딩 시스템에서 거래 주문이 분당 평균 10건($\lambda=10$) 도착한다면, 다음 주문까지의 평균 대기 시간은 $E[X]=1/10$분, 즉 6초가 됩니다.
4. 카이제곱분포 (Chi-squared Distribution, $\chi^2$-분포)
카이제곱분포는 서로 독립인 표준정규분포 확률변수들의 제곱의 합이 따르는 분포로, 통계적 추론에서 분산을 다룰 때 핵심적인 역할을 합니다.
가. 수식적 정의
$Z_1,Z_2,\dots,Z_n$이 서로 독립이고 동일한 표준정규분포 $N(0,1)$을 따를 때, 이들의 제곱의 합 $W$는 자유도(degrees of freedom) $n$을 갖는 카이제곱분포를 따릅니다.
$$ W=\sum_{k=1}^{n} Z_k^2 \sim \chi^2(n) $$
나. 주요 성질
기댓값: $E[W]=n$
분산: $\operatorname{Var}(W)=2n$
분포의 형태: 오른쪽으로 긴 꼬리를 갖는 비대칭적 형태이며, 자유도 $n$이 커질수록 정규분포에 근사합니다.
가법성(Additive Property): 독립적인 두 카이제곱분포 변수의 합은 각 자유도를 더한 값을 자유도로 갖는 카이제곱분포를 따릅니다. ($W_1\sim\chi^2(n_1), W_2\sim\chi^2(n_2) \Rightarrow W_1+W_2\sim\chi^2(n_1+n_2)$)
다. 활용 분야 및 예시
모분산의 추정 및 검정: 금융 자산 수익률의 변동성(분산, $\sigma^2$)에 대한 신뢰구간을 추정하거나 가설을 검정하는 데 핵심적으로 사용됩니다.
예시: 크기가 $n$인 표본의 표본분산 $S^2$을 계산했을 때, 통계량 $\dfrac{(n-1)S^2}{\sigma^2}$은 자유도 $(n-1)$인 카이제곱분포를 따릅니다. 이를 이용해 모분산 $\sigma^2$의 신뢰구간을 구할 수 있습니다.
적합도 검정 및 독립성 검정: 관찰된 데이터가 특정 분포를 따르는지, 또는 두 변수가 서로 독립인지를 검정할 때 사용됩니다.
5. 베타 분포와 켤레 사전 분포 (Beta Distribution & Conjugate Prior)
베이즈 통계학에서 새로운 데이터를 통해 기존의 믿음을 수학적으로 업데이트하는 과정에 사용되는 중요한 개념입니다.
가. 켤레 사전 분포 (Conjugate Prior)의 정의와 성질
베이즈 통계학에서는 모수($\theta$)를 확률 변수로 보고, 데이터($D$)를 관찰하여 사전 믿음 $p(\theta)$을 사후 믿음 $p(\theta\mid D)$으로 업데이트합니다.
$$ p(\theta\mid D)\propto p(D\mid \theta)\,p(\theta)\quad \text{(사후분포 $\propto$ 가능도 $\times$ 사전분포)} $$
켤레 사전 분포란, 사전 분포와 사후 분포가 같은 종류의 확률 분포족(family of distributions)에 속하게 만드는 사전 분포입니다. 가장 큰 장점은 수학적 편리성으로, 새로운 데이터가 들어올 때마다 복잡한 계산 없이 간단한 공식으로 파라미터를 업데이트할 수 있습니다.
나. 베르누이/이항 분포와 베타 분포의 관계
베르누이 또는 이항 분포의 가능도 함수에 대한 켤레 사전 분포는 베타 분포(Beta Distribution)입니다. 베타 분포는 0과 1 사이의 값을 갖는 확률 변수를 모델링하며, 두 개의 모수 $\alpha,\beta$로 정의됩니다.
사전 분포: $p(\theta)\sim \mathrm{Beta}(\alpha,\beta)$ (사전 믿음: $\alpha-1$번의 성공, $\beta-1$번의 실패)
데이터 관찰: $n$번의 시행 중 $k$번 성공
사후 분포: $p(\theta\mid D)\sim \mathrm{Beta}(\alpha+k,\;\beta+n-k)$ — 사전 믿음에 실제 관찰된 성공과 실패 횟수를 더하여 믿음을 업데이트합니다.
다. 활용 분야 및 예시
신용 평가 모델: 기업의 부도 확률 $(\theta)$을 추정할 때, 과거 데이터를 바탕으로 한 사전 믿음 $\mathrm{Beta}(\alpha,\beta)$을 설정하고, 새로운 부도/생존 데이터를 관찰하며 사후 분포를 업데이트하여 추정을 정교화합니다.
트레이딩 전략 성공률 분석: 특정 트레이딩 전략의 성공 확률 $(\theta)$을 평가할 때, 초기 믿음(예: $\mathrm{Beta}(1,1)$)에서 시작하여 실제 거래 결과(성공/실패)를 반영해 성공 확률에 대한 사후 믿음을 업데이트하고 신뢰구간을 추론할 수 있습니다.
6. 다항 분포 (Multinomial Distribution) multidimensional
다항 분포는 이항 분포(Binomial Distribution)를 일반화한 형태로, 두 가지 결과(성공/실패)가 아닌 $K$개의 상호 배타적인 결과(카테고리)를 갖는 시행을 $n$번 독립적으로 반복할 때, 각 카테고리별 관측 횟수에 대한 확률 분포를 나타냅니다.
가. 수식적 정의와 해설
$K$개의 카테고리가 있는 시행을 $n$번 독립적으로 반복했을 때, 카테고리 1이 $x_1$번, 카테고리 2가 $x_2$번, ..., 카테고리 $K$가 $x_K$번 관측될 확률 질량 함수(PMF)는 다음과 같습니다. (단, $x_1+x_2+\cdots+x_K=n$ 입니다.)
$$ P(X_1=x_1,\dots,X_K=x_K)=\frac{n!}{x_1!\,x_2!\,\cdots x_K!}\prod_{k=1}^{K}\theta_k^{\,x_k} $$
이 수식은 두 부분으로 나누어 이해하면 매우 명확합니다.
다항 계수 (Multinomial Coefficient): $\dfrac{n!}{x_1!\,x_2!\,\cdots x_K!}$ — '경우의 수'를 계산합니다. 즉, 총 $n$번의 시행을 순서에 상관없이 카테고리 1에 $x_1$개, 카테고리 2에 $x_2$개, ..., 카테고리 $K$에 $x_K$개로 나누는 방법의 가짓수입니다. 이항 분포의 이항 계수 $\binom{n}{k}$가 $K=2$일 때의 특수한 경우라고 볼 수 있습니다.
확률 부분: $\prod_{k=1}^{K}\theta_k^{\,x_k}=\theta_1^{x_1}\theta_2^{x_2}\cdots\theta_K^{x_K}$ — 특정한 순서로 해당 결과가 발생할 확률을 의미합니다. 각 시행은 독립적이므로, 카테고리 1이 $x_1$번 (확률 $\theta_1^{x_1}$), 카테고리 2가 $x_2$번 (확률 $\theta_2^{x_2}$) 등이 동시에 일어날 확률은 각 확률의 곱으로 계산됩니다.
결론적으로, 다항 분포의 확률은 (결과를 배열하는 총 경우의 수) × (특정 순서 하나가 발생할 확률)로 구성된 것입니다.
$\mathbf{x}=(x_1,\dots,x_K)$: 각 카테고리별 관측 횟수를 나타내는 벡터입니다.
$\boldsymbol{\theta}=(\theta_1,\dots,\theta_K)$: 각 카테고리가 선택될 확률을 나타내는 벡터이며, 모든 확률의 합은 1입니다 ($\sum_{k=1}^{K}\theta_k=1$).
나. 주요 성질
기댓값 (Expected Value): 각 카테고리 $k$의 관측 횟수 $X_k$의 기댓값은 $E[X_k]=n\theta_k$
분산 (Variance): 각 카테고리 $X_k$의 분산은 $\operatorname{Var}(X_k)=n\theta_k(1-\theta_k)$
공분산 (Covariance): 서로 다른 두 카테고리의 관측 횟수는 음의 상관관계를 가집니다. $i\ne j$에 대해 $\operatorname{Cov}(X_i,X_j)=-n\theta_i\theta_j$
다. 금융 분야 활용 예시
신용등급 변동 모델링: 특정 시점에 'A' 등급인 회사채 100개 포트폴리오가 1년 후 어떻게 변동할지 예측하는 경우를 생각해 봅시다. 가능한 결과는 'AAA로 상향', 'AA로 상향', 'A 등급 유지', 'BBB로 하향', '부도' 등 $K$개의 카테고리로 나눌 수 있습니다. 과거 데이터를 통해 각 카테고리로 변동할 확률 벡터($\boldsymbol{\theta}$)를 알고 있다면, 다항 분포를 이용해 1년 후 100개 채권 중 "5개가 AA로 상향되고, 80개가 A를 유지하며, 10개가 BBB로 하향되고, 5개가 부도날 확률" 등을 계산할 수 있습니다.
자산 성과 분석: 한 분기 동안 특정 주식의 움직임을 '5% 이상 상승', '-5% ~ 5% 보합', '-5% 이하 하락'의 세 가지 카테고리로 분류한다고 가정합시다. 총 60 거래일($n=60$) 동안, 각 카테고리가 나타날 과거 확률($\boldsymbol{\theta}$)을 기반으로 "30일은 상승, 20일은 보합, 10일은 하락할 확률"을 다항 분포로 계산하여 시장의 변동성 패턴을 분석할 수 있습니다.
켤레 사전 분포 (Conjugate Prior): 베이지안 통계학의 관점에서, 다항 분포의 모수 벡터 $\boldsymbol{\theta}$에 대한 켤레 사전 분포는 디리클레 분포(Dirichlet Distribution)입니다. 이는 이항 분포의 모수 $\theta$에 대한 켤레 사전 분포가 베타 분포인 관계를 다차원으로 확장한 것입니다. 이를 통해 여러 가능한 결과의 확률에 대한 사전 믿음을 데이터 관찰을 통해 효과적으로 업데이트할 수 있습니다.
7. 라플라스 분포 (Laplace Distribution)
라플라스 분포는 정규분포(Normal Distribution)와 비교했을 때, 평균 근처에 데이터가 더 뾰족하게 몰려있고(첨점, high peak), 양쪽 꼬리 부분은 더 두꺼운(후미, fat tails) 형태를 가지는 연속확률분포입니다. 이러한 특징 때문에 금융 시장에서 관찰되는 극단적인 사건(extreme events)을 모델링하는 데 정규분포보다 더 적합한 경우가 많습니다.
가. 수식적 정의
라플라스 분포는 두 개의 모수, 즉 분포의 중심을 결정하는 위치 모수(location parameter) $\mu$와 분포의 흩어진 정도를 결정하는 척도 모수(scale parameter) $b>0$에 의해 정의됩니다. 확률 밀도 함수(PDF)는 다음과 같습니다.
$$ f(x\mid \mu,b)=\frac{1}{2b}\exp\!\left(-\frac{|x-\mu|}{b}\right) $$
$|x-\mu|$: 이 절댓값 항이 라플라스 분포의 가장 핵심적인 부분으로, 평균 $\mu$로부터의 '거리'에만 의존하는 대칭적인 형태를 만듭니다. 정규분포가 거리의 제곱에 의존하는 것 $\big((x-\mu)^2\big)$과 대비되는 지점입니다. 이 차이로 인해 뾰족한 봉우리와 두꺼운 꼬리가 형성됩니다.
$b$: 척도 모수 $b$는 분포의 분산과 직접적인 관련이 있으며, 이 값이 클수록 분포는 더 넓게 퍼집니다.
나. 주요 성질
기댓값 (Mean): $E[X]=\mu$ — 분포는 위치 모수 $\mu$에 대해 완벽하게 대칭입니다.
분산 (Variance): $\operatorname{Var}(X)=2b^2$ — 척도 모수 $b$가 커질수록 분산도 커집니다.
왜도 (Skewness): $0$
첨도 (Kurtosis): $6$ — 정규분포의 첨도(3)보다 높은 값을 가지며, 뾰족한 중심(leptokurtic)과 두꺼운 꼬리(fat tails)를 의미합니다.
다. 금융 분야 활용 및 예시
금융 자산 수익률 모델링: 주식, 환율 등 대부분의 금융 자산 일일 수익률 분포는 정규분포보다 중심이 더 뾰족하고 꼬리가 두꺼운 특징을 보입니다. 대규모 시장 충격은 정규분포 가정하에서는 확률이 매우 낮게 추정되지만, 라플라스 분포는 이러한 극단적 사건의 가능성을 더 현실적으로 반영합니다.
리스크 관리 (Value at Risk, VaR): 정규 가정하 VaR는 꼬리 위험을 과소평가할 수 있습니다. 라플라스 분포 기반 VaR는 극단적 사건 가능성을 포함해 더 보수적인 리스크 측정을 가능하게 합니다.
LASSO 회귀와 연결: LASSO(최소 절댓값 회귀)는 오차의 절댓값 합을 최소화(L1 정규화)하는데, 이는 베이즈 관점에서 오차항이 라플라스 분포를 따른다고 가정하는 것과 수학적으로 대응됩니다.
8. 서포트 벡터 머신 (Support Vector Machine, SVM)
SVM의 근본적인 목표는 서로 다른 클래스에 속한 데이터들을 가장 잘 구분할 수 있는 최적의 결정 경계(Decision Boundary)를 찾는 것입니다. 2차원에서는 '선(line)', 3차원에서는 '평면(plane)', 그 이상의 고차원에서는 초평면(hyperplane)이 됩니다.
SVM이 정의하는 '최적'이란, 각 클래스의 데이터로부터 가장 멀리 떨어져 있는 경계를 찾는 것을 의미합니다. 이 거리를 마진(Margin)이라고 하며, SVM은 이 마진을 최대화(Maximizing the Margin)합니다.
가. 하드 마진 SVM (Hard Margin SVM) - 완벽하게 분리 가능한 경우
데이터: $N$개의 훈련 데이터 $(\mathbf{x}_1,y_1),\dots,(\mathbf{x}_N,y_N)$
$\mathbf{x}_i$: 특징 벡터 (feature vector), $y_i\in\{+1,-1\}$
초평면의 방정식: $\mathbf{w}\cdot \mathbf{x}-b=0$ (법선 벡터 $\mathbf{w}$, 편향 $b$)
마진 폭: $\dfrac{2}{\lVert \mathbf{w}\rVert}$ 이므로, 마진을 최대화하는 것은 $\lVert \mathbf{w}\rVert$을 최소화하는 것과 같습니다. 계산 편의를 위해 $\tfrac{1}{2}\lVert \mathbf{w}\rVert^2$를 최소화합니다.
제약 조건: 모든 데이터가 올바르게 분류되어야 함
$y_i(\mathbf{w}\cdot \mathbf{x}_i - b)\ge 1 \quad \text{for } i=1,\dots,N$
목적함수 (Primal):
$$ \min_{\mathbf{w},\,b}\ \frac{1}{2}\lVert \mathbf{w}\rVert^2 \quad \text{s.t.}\quad y_i(\mathbf{w}\cdot \mathbf{x}_i - b)\ge 1\ \ (i=1,\dots,N) $$
나. 소프트 마진 SVM (Soft Margin SVM) - 완벽하게 분리 불가능한 경우
실제 데이터는 노이즈가 많고 완벽히 선형 분리가 어려운 경우가 많습니다. 소프트 마진 SVM은 슬랙 변수 $\xi_i\ge 0$를 도입하여 일부 오분류를 허용합니다.
변경된 제약 조건: $y_i(\mathbf{w}\cdot \mathbf{x}_i - b)\ge 1-\xi_i$
규제 파라미터 $C$: 마진 최대화와 오류 최소화의 균형을 조절합니다.
$C$가 크면: 오류 패널티가 커 과적합 위험 증가
$C$가 작으면: 더 넓은 마진 확보, 일반화 성능 향상 가능
목적함수 (Primal):
$$ \min_{\mathbf{w},\,b,\,\boldsymbol{\xi}\ge 0}\ \frac{1}{2}\lVert \mathbf{w}\rVert^2 + C\sum_{i=1}^{N}\xi_i \quad \text{s.t.}\quad y_i(\mathbf{w}\cdot \mathbf{x}_i - b)\ge 1-\xi_i $$
9. Softmax + Cross-Entropy의 미분을 한 번에 유도하세요.
다중 클래스 분류 문제에서 모델의 최종 출력(로짓, $z$)을 확률 분포($\hat{y}$)로 변환하기 위해 소프트맥스 함수를 사용하고, 이 예측된 확률 분포와 실제 정답(원-핫 벡터 $y$) 사이의 차이를 측정하기 위해 교차 엔트로피 손실 함수를 사용합니다. 놀랍게도 이 두 함수를 결합했을 때, 손실 함수에 대한 로짓의 기울기(gradient)는 매우 간단한 형태인 $\hat{y} - y$로 귀결됩니다. 이는 역전파 과정에서 계산을 매우 효율적으로 만들어 줍니다.
배경 개념
- 로짓 (Logits), $z$: 모델의 마지막 선형 레이어에서 나온 원시(raw) 출력 점수입니다. C개의 클래스가 있다면 $z \in \mathbb{R}^C$ 입니다.
- 소프트맥스 함수 (Softmax Function), $\hat{y}$: 로짓을 입력받아 합이 1인 확률 분포로 변환합니다. j번째 클래스에 대한 예측 확률 $\hat{y}_j$는 다음과 같습니다. $$ \hat{y}_j = \text{softmax}(z_j) = \frac{e^{z_j}}{\sum_{k=1}^{C} e^{z_k}} $$
- 교차 엔트로피 손실 (Cross-Entropy Loss), $L$: 실제 분포 $y$와 예측 분포 $\hat{y}$ 사이의 불일치를 측정합니다. 실제 정답이 원-핫 인코딩되어 있으므로(k번째 클래스가 정답이면 $y_k=1$이고 나머지는 0), 손실 함수는 다음과 같이 단순화됩니다. $$ L = -\sum_{i=1}^{C} y_i \log \hat{y}_i = -y_k \log \hat{y}_k = -\log \hat{y}_k $$
기울기 유도 과정
우리는 손실 $L$을 특정 로짓 값 $z_i$에 대해 미분, 즉 $\frac{\partial L}{\partial z_i}$를 구하고자 합니다. 연쇄 법칙(Chain Rule)에 따라 다음과 같이 전개할 수 있습니다.
$$ \frac{\partial L}{\partial z_i} = \sum_{j=1}^{C} \frac{\partial L}{\partial \hat{y}_j} \frac{\partial \hat{y}_j}{\partial z_i} $$
여기서 두 개의 항을 각각 계산해야 합니다.
- 첫 번째 항 ($\frac{\partial L}{\partial \hat{y}_j}$): $L = -\sum_{j} y_j \log \hat{y}_j$ 이므로, 이를 $\hat{y}_j$에 대해 미분하면 간단히 $-\frac{y_j}{\hat{y}_j}$가 됩니다.
- 두 번째 항 ($\frac{\partial \hat{y}_j}{\partial z_i}$): 소프트맥스의 미분은 i와 j가 같은지 다른지에 따라 두 가지 경우로 나뉩니다.
- Case 1: $i = j$ (같은 인덱스에 대한 미분) $$ \frac{\partial \hat{y}_i}{\partial z_i} = \frac{e^{z_i}(\sum_k e^{z_k}) - e^{z_i}(e^{z_i})}{(\sum_k e^{z_k})^2} = \frac{e^{z_i}}{\sum_k e^{z_k}} \cdot \frac{\sum_k e^{z_k} - e^{z_i}}{\sum_k e^{z_k}} = \hat{y}_i(1-\hat{y}_i) $$
- Case 2: $i \neq j$ (다른 인덱스에 대한 미분) $$ \frac{\partial \hat{y}_j}{\partial z_i} = \frac{0 \cdot (\sum_k e^{z_k}) - e^{z_j}(e^{z_i})}{(\sum_k e^{z_k})^2} = -\frac{e^{z_j}}{\sum_k e^{z_k}} \cdot \frac{e^{z_i}}{\sum_k e^{z_k}} = -\hat{y}_j \hat{y}_i $$
결과 결합
이제 위 결과들을 다시 연쇄 법칙 식에 대입합니다. 합산($\sum_j$)에서 $j=i$인 항과 $j \neq i$인 항들을 분리해서 계산합니다.
$$ \frac{\partial L}{\partial z_i} = \underbrace{\frac{\partial L}{\partial \hat{y}_i} \frac{\partial \hat{y}_i}{\partial z_i}}_{j=i \text{ term}} + \sum_{j \neq i} \underbrace{\frac{\partial L}{\partial \hat{y}_j} \frac{\partial \hat{y}_j}{\partial z_i}}_{j \neq i \text{ terms}} $$ $$ = \left(-\frac{y_i}{\hat{y}_i}\right) \hat{y}_i(1-\hat{y}_i) + \sum_{j \neq i} \left(-\frac{y_j}{\hat{y}_j}\right) (-\hat{y}_j \hat{y}_i) $$ $$ = -y_i(1-\hat{y}_i) + \sum_{j \neq i} y_j \hat{y}_i $$ $$ = -y_i + y_i \hat{y}_i + \hat{y}_i \sum_{j \neq i} y_j $$
여기서 $\hat{y}_i$로 묶어주면 $\hat{y}_i \left(y_i + \sum_{j \neq i} y_j\right)$가 됩니다. $y$는 원-핫 벡터이므로 모든 원소의 합 $\sum_{j} y_j = 1$ 입니다. 따라서 괄호 안의 값은 1이 됩니다.
$$ = -y_i + \hat{y}_i \sum_{j=1}^{C} y_j = -y_i + \hat{y}_i(1) $$
최종적으로 매우 간단한 결과를 얻습니다.
$$ \frac{\partial L}{\partial z_i} = \hat{y}_i - y_i $$
이 결과는 (예측값 - 실제값) 형태로, 직관적이며 계산적으로 매우 안정적이고 효율적입니다.
10. Momentum과 Nesterov(네스테로프) 업데이트를 비교하세요.
모멘텀(Momentum)과 네스테로프 가속 경사(Nesterov Accelerated Gradient, NAG)는 기본적인 경사 하강법(Gradient Descent)의 수렴 속도와 안정성을 개선하기 위한 매우 효과적인 최적화 기법입니다. 둘 다 과거의 이동 방향을 현재 업데이트에 반영하여 '관성'을 주는 아이디어에 기반하지만, 기울기를 계산하는 시점에서 미묘하지만 중요한 차이가 있습니다.
경사 하강법의 한계
표준 경사 하강법($W_t = W_{t-1} - \eta \nabla J(W_{t-1})$)은 손실 함수의 표면이 길고 좁은 골짜기(ravine) 형태일 때, 골짜기의 양쪽 벽 사이를 반복적으로 진동하며 매우 느리게 최저점으로 수렴하는 문제가 있습니다.
모멘텀 (Momentum)
아이디어: 언덕을 굴러 내려오는 공을 생각하면 쉽습니다. 공은 이전에 굴러오던 속도(관성) 때문에 현재 경사 방향뿐만 아니라 과거에 이동하던 방향으로도 계속 나아가려는 성질이 있습니다. 모멘텀은 이 관성을 최적화에 도입합니다.
업데이트 규칙:
- 속도(velocity) 업데이트: $v_t = \beta v_{t-1} + \nabla J(W_{t-1})$
- 가중치(weight) 업데이트: $W_t = W_{t-1} - \eta v_t$
수식 해설:
- $v_t$: 현재 스텝의 이동 방향과 속도를 나타내는 '속도 벡터'입니다.
- $\beta v_{t-1}$: '마찰 계수' $\beta$(보통 0.9)가 적용된 이전 스텝의 속도입니다. 이 항이 관성 역할을 합니다.
- $\nabla J(W_{t-1})$: 현재 위치($W_{t-1}$)에서의 기울기입니다.
속도 $v_t$는 과거의 이동 방향(관성)과 현재의 기울기 방향을 적절히 합친 것입니다. 만약 기울기가 계속 같은 방향을 가리키면 속도가 점점 빨라지고, 진동하는 방향의 기울기는 서로 상쇄되어 이동이 둔화됩니다.
네스테로프 가속 경사 (Nesterov Accelerated Gradient, NAG)
아이디어: 모멘텀이 현재 위치에서 기울기를 계산하고 관성과 합치는 방식이라면, 네스테로프는 더 똑똑하게 "일단 관성 방향으로 한 걸음 먼저 가보고, 그 자리에서 기울기를 계산"합니다. 즉, '예상된 미래 위치'에서 기울기를 계산하여 현재 업데이트에 반영합니다.
업데이트 규칙:
- 속도(velocity) 업데이트: $v_t = \beta v_{t-1} + \nabla J(W_{t-1} - \eta \beta v_{t-1})$
- 가중치(weight) 업데이트: $W_t = W_{t-1} - \eta v_t$
수식 해설:
- 가장 큰 차이점은 기울기를 계산하는 부분인 $\nabla J(\cdot)$입니다.
- $W_{t-1} - \eta \beta v_{t-1}$: 이 부분이 바로 "관성 방향으로 한 걸음 미리 가본 위치"입니다. 현재 위치 $W_{t-1}$에서, 이전 속도 $v_{t-1}$에 의해 대략 이동할 것이라 예상되는 지점을 의미합니다.
이 '미리보기' 위치에서 계산된 기울기는 우리가 잘못된 방향으로 너무 멀리 가는 것을 막아주는 '브레이크' 역할을 합니다. 만약 관성 때문에 골짜기 반대편으로 너무 올라갈 것 같다면, 미리 가본 위치의 기울기가 반대 방향을 가리키며 속도를 줄여주기 때문입니다.
비교 요약
| 핵심 아이디어 | 현재 위치의 기울기와 과거의 관성을 합침 | 관성으로 미리 가본 위치에서 기울기를 계산해 반영 |
| 기울기 계산 위치 | $\nabla J(W_{t-1})$ (현재 위치) | $\nabla J(W_{t-1} - \eta \beta v_{t-1})$ (예상 미래 위치) |
| 효과 | 진동을 줄이고 수렴을 가속함 | 모멘텀보다 진동을 더 효과적으로 줄이고, 더 빠르게 수렴하는 경향이 있음 |
| 비유 | 눈을 감고 언덕을 굴러 내려가는 공 | 공이 다음 순간 어디로 갈지 예측하고 미리 속도를 조절하며 굴러 내려감 |
11. Adam의 L2 정규화와 AdamW의 Decoupled Weight Decay의 차이를 설명하세요.
Adam은 매우 효과적인 최적화 알고리즘이지만, 표준적인 L2 정규화 방식과 함께 사용할 때 의도치 않은 부작용이 발생할 수 있습니다. AdamW는 이 문제를 해결하기 위해 가중치 감쇠(Weight Decay)를 L2 정규화와 분리(decouple)하는 방식을 제안합니다.
L2 정규화와 가중치 감쇠
- L2 정규화 (L2 Regularization): 과적합을 막기 위해 손실 함수(Loss)에 가중치의 제곱합에 비례하는 페널티 항을 추가하는 것입니다. $$ L_{\text{reg}} = L_{\text{original}} + \frac{\lambda}{2} \sum w^2 $$ 역전파 시, 이 페널티 항의 기울기인 $\lambda w$가 원래의 기울기에 더해져 가중치를 업데이트합니다. $$ \nabla L_{\text{reg}} = \nabla L_{\text{original}} + \lambda w $$
- 가중치 감쇠 (Weight Decay): 매 업데이트 스텝마다 가중치를 일정 비율($\lambda'$)로 감소시키는(decay) 방식입니다. 이는 가중치를 원점(0) 방향으로 점진적으로 축소시켜 모델을 단순하게 유지하는 효과를 줍니다. $$ w_t = w_{t-1} - \eta (\nabla L_{\text{original}} + \lambda' w_{t-1}) $$
SGD에서의 동등성
SGD와 같은 기본적인 최적화 알고리즘에서는 L2 정규화와 가중치 감쇠가 사실상 동일하게 작동합니다. L2 정규화의 기울기 항($\lambda w$)이 가중치 감쇠의 감쇠 항($\lambda' w$)과 같은 역할을 하기 때문입니다. ($\lambda = \lambda'$)
Adam에서의 문제점
Adam은 각 가중치마다 학습률을 적응적(adaptive)으로 조절하는 것이 특징입니다. 이는 과거 기울기 정보의 이동 평균($m_t$)과 제곱 평균($v_t$)을 사용하여 업데이트 크기를 조절합니다.
$$ w_t = w_{t-1} - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} $$
여기에 L2 정규화를 적용하면, L2 페널티의 기울기 $\lambda w$가 원래 기울기와 합쳐진 후, 이 적응적 스케일링($\sqrt{\hat{v}_t}$)의 영향을 받게 됩니다.
$$ \text{Update with L2} \propto \frac{\nabla L_{\text{original}} + \lambda w_{t-1}}{\sqrt{\hat{v}_t} + \epsilon} $$
문제: 가중치의 크기가 크거나 과거 기울기가 컸던 가중치는 $\hat{v}_t$ 항이 커지게 됩니다. 이로 인해 정규화의 효과, 즉 가중치 감쇠의 강도가 약해지는 현상이 발생합니다. 큰 가중치를 더 강하게 감쇠시켜야 하는 원래의 의도와 달리, 오히려 덜 감쇠시키는 결과를 낳는 것입니다.
AdamW: 분리된 가중치 감쇠 (Decoupled Weight Decay)
AdamW는 이 문제를 해결하기 위해 L2 정규화를 기울기에 더하는 방식 대신, 가중치 감쇠를 업데이트 단계에서 분리하여 독립적으로 적용합니다.
- Adam 업데이트 계산: 먼저, 오직 원래 손실 함수에 대한 기울기만을 사용하여 Adam의 업데이트 항($\Delta w_t = \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$)을 계산합니다.
- 가중치 감쇠 적용: 그 다음, 이 업데이트 항에서 별도로 가중치 감쇠를 적용합니다.
AdamW 업데이트 규칙:
$$ w_t = w_{t-1} - \Delta w_t - \eta \lambda' w_{t-1} $$
차이점 요약
| 방식 | 손실 함수에 L2 페널티를 더함. 기울기 계산 시 합쳐짐. | Adam 업데이트 후, 별도의 가중치 감쇠 항을 직접 빼줌. |
| 가중치 감쇠 효과 | 적응적 학습률의 영향을 받아 일관되지 않음. 큰 기울기를 가졌던 가중치는 덜 감쇠됨. | 적응적 학습률과 독립적임. 모든 가중치에 일관된 비율로 감쇠가 적용됨. |
| 성능 | 원래 가중치 감쇠의 의도와 다르게 작동하여 일반화 성능이 저하될 수 있음. | 더 안정적이고 효과적인 정규화를 통해 일반화 성능이 개선되는 경향이 있음. |
결론적으로, AdamW는 정규화가 최적화 과정과 얽히는 문제를 해결하여, 하이퍼파라미터(학습률과 가중치 감쇠율) 튜닝을 더 용이하게 하고 모델의 일반화 성능을 높여주는 개선된 알고리즘입니다.
12. BatchNorm의 학습/추론 모드 차이와 대안(Norm)들을 비교하세요.
배치 정규화(Batch Normalization, BN)는 딥러닝 모델의 학습을 안정화하고 가속하는 매우 강력한 기법입니다. 하지만 학습(training)할 때와 추론(inference)할 때 다르게 동작하며, 배치 크기에 의존한다는 한계 때문에 여러 대안이 제시되었습니다.
배경: 내부 공변량 변화 (Internal Covariate Shift)
딥러닝 모델은 여러 층을 거치며 학습됩니다. 이때 앞쪽 층의 가중치가 업데이트되면, 뒤쪽 층에 전달되는 입력 데이터의 분포가 계속해서 바뀌게 됩니다. 이렇게 층마다 입력 분포가 달라지는 현상을 내부 공변량 변화라고 부릅니다. 이 현상은 모델이 안정적으로 학습하기 어렵게 만드는 주된 요인 중 하나입니다. 배치 정규화는 각 층의 입력 분포를 평균 0, 분산 1로 정규화하여 이 문제를 해결합니다.
배치 정규화의 동작 방식
- 학습(Training) 모드:
- 미니배치 통계 계산: 현재 입력된 미니배치(B) 데이터에 대해 평균($\mu_B$)과 분산($\sigma_B^2$)을 계산합니다.
- 정규화: 이 미니배치의 평균과 분산을 사용하여 입력을 정규화합니다.($\epsilon$은 0으로 나누는 것을 방지하기 위한 작은 값입니다.) $$ \hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} $$
- 스케일 및 시프트: 정규화는 활성화 함수의 표현력을 제한할 수 있습니다. 이를 복원하기 위해 학습 가능한 파라미터 감마($\gamma$)와 베타($\beta$)를 사용하여 스케일과 시프트를 적용합니다. $$ y = \gamma \hat{x} + \beta $$
- 이동 평균 저장: 추론 시 사용하기 위해, 계산된 미니배치 평균과 분산의 이동 평균(running average)을 별도로 저장하고 업데이트합니다.
- 추론(Inference) 모드: 추론 시에는 보통 단일 데이터가 입력되므로 미니배치의 평균과 분산을 계산할 수 없습니다. 대신, 학습 과정 동안 계산해 둔 이동 평균($\mu_{\text{run}}, \sigma_{\text{run}}^2$)을 고정된 값으로 사용합니다.
- 정규화: 저장된 이동 평균으로 입력을 정규화합니다. $$ \hat{x} = \frac{x - \mu_{\text{run}}}{\sqrt{\sigma_{\text{run}}^2 + \epsilon}} $$
- 스케일 및 시프트: 학습된 $\gamma$와 $\beta$를 그대로 사용하여 최종 출력을 계산합니다.
대안 정규화 기법들
배치 정규화는 배치 크기에 의존적이라는 단점이 있습니다. 배치 크기가 너무 작으면 미니배치의 통계량이 전체 데이터의 통계량을 잘 대표하지 못해 성능이 불안정해집니다. 이를 해결하기 위해 여러 대안이 등장했습니다.
- 레이어 정규화 (Layer Normalization, LN):
- 동작: 배치 내 데이터 간이 아닌, 단일 데이터 내의 모든 특성(feature)들에 대해 정규화를 수행합니다.
- 특징: 배치 크기와 무관하게 동작하므로 작은 배치 크기나 시퀀스 데이터(RNN, Transformer)에 매우 효과적입니다. Transformer의 기본 구성 요소로 널리 사용됩니다.
- 그룹 정규화 (Group Normalization, GN):
- 동작: 레이어 정규화와 배치 정규화의 절충안입니다. 채널(channel) 축을 여러 그룹으로 나눈 뒤, 각 그룹 내에서 정규화를 수행합니다.
- 특징: 배치 크기에 덜 민감하면서도, CNN에서 레이어 정규화보다 더 나은 성능을 보이는 경우가 많습니다. 작은 배치 크기로 학습해야 하는 컴퓨터 비전 태스크에 유용합니다.
비교 요약
| Batch Norm | 배치 차원 (동일 채널의 다른 데이터들) | 높음 | CNN (배치 크기가 충분히 클 때) |
| Layer Norm | 특성/채널 차원 (단일 데이터 내) | 없음 | RNN, Transformer |
| Group Norm | 채널 그룹 차원 (단일 데이터 내) | 낮음 | CNN (배치가 작을 때) |
13. SVM 소프트 마진의 목적식과 마진의 의미를 정리하세요.
서포트 벡터 머신(SVM)은 두 클래스를 구분하는 최적의 경계선(결정 경계)을 찾는 알고리즘입니다. 이때 '최적'이란, 경계선과 가장 가까운 양쪽 클래스의 데이터 샘플(서포트 벡터) 사이의 거리, 즉 마진(Margin)을 최대로 만드는 것을 의미합니다.
하드 마진(Hard Margin)과 그 한계
초기 SVM은 데이터가 선형적으로 완벽하게 분리될 수 있다고 가정합니다. 이를 하드 마진 SVM이라고 합니다. 하지만 실제 데이터는 노이즈가 있거나 클래스가 서로 겹쳐 있어 완벽한 분리가 불가능한 경우가 많습니다. 하드 마진은 이런 데이터에 적용할 수 없고, 이상치(outlier)에 매우 민감합니다.
소프트 마진(Soft Margin)의 도입
이 문제를 해결하기 위해 약간의 오류를 허용하는 소프트 마진 SVM이 고안되었습니다. 소프트 마진의 핵심 아이디어는 "마진을 최대한 넓게 유지하려고 노력하되, 일부 데이터가 마진을 침범하거나 잘못 분류되는 것을 허용하고 이에 대해 페널티를 부과하자"는 것입니다.
목적식 해부
소프트 마진 SVM의 목적은 (1) 마진의 폭을 최대화하고, (2) 동시에 마진 오류의 합을 최소화하는 것입니다.
$$ \min_{w, b, \xi} \frac{1}{2} \|w\|^2 + C \sum_{i=1}^{N} \xi_i $$
- $\frac{1}{2} \|w\|^2$: 이 항은 마진을 최대화하는 역할을 합니다. 마진의 폭(width)은 $\frac{2}{\|w\|}$와 같습니다. 따라서 $\|w\|$ (또는 $\|w\|^2$)를 최소화하는 것은 마진의 폭을 최대화하는 것과 같습니다.
- $C\sum\xi_i$: 이 항은 오류에 대한 페널티입니다.
- $\xi_i$ (슬랙 변수, Slack Variable): i번째 데이터 샘플이 마진을 얼마나 위반했는지를 나타내는 변수입니다.
- $\xi_i = 0$: 올바르게 분류되고 마진 경계 밖에 있음 (오류 없음).
- $0 < \xi_i \le 1$: 마진 안쪽에 있지만 올바르게 분류됨.
- $\xi_i > 1$: 잘못된 클래스로 분류됨.
- $C$ (비용 파라미터): 마진의 폭과 분류 오류 사이의 트레이드오프를 조절하는 하이퍼파라미터입니다.
- C가 크면 (High C): 오류에 대한 페널티가 커집니다. 모델은 오류를 최소화하기 위해 마진을 좁히더라도 모든 데이터를 올바르게 분류하려고 노력합니다. 이는 과적합(Overfitting)으로 이어질 수 있습니다. (하드 마진에 가까워짐)
- C가 작으면 (Low C): 오류에 대한 페널티가 작아집니다. 모델은 더 많은 오류를 감수하더라도 마진을 넓게 유지하려고 합니다. 이는 과소적합(Underfitting)으로 이어질 수 있습니다.
- $\xi_i$ (슬랙 변수, Slack Variable): i번째 데이터 샘플이 마진을 얼마나 위반했는지를 나타내는 변수입니다.
제약 조건
위의 목적식은 다음 제약 조건 하에서 최적화됩니다.
$$ y_i(w^\top x_i + b) \ge 1 - \xi_i, \quad \xi_i \ge 0 $$
이 식은 "모든 데이터 샘플 $x_i$는 적어도 $1-\xi_i$의 함수 마진을 가져야 한다"는 것을 의미하며, 슬랙 변수 $\xi_i$만큼의 마진 위반을 허용합니다.
14. K-Means++ 초기화와 수렴 기준을 기술하세요.
K-평균 군집화(K-Means Clustering)는 주어진 데이터를 K개의 군집(cluster)으로 묶는 비지도 학습 알고리즘입니다. 알고리즘의 성능이 초기 중심점(centroid) 위치에 크게 좌우되는데, K-Means++는 이 초기 중심점을 똑똑하게 선택하여 성능을 개선하는 방법입니다.
표준 K-Means의 문제점
표준 K-Means는 K개의 중심점을 데이터 중에서 무작위로 선택하여 시작합니다. 만약 운이 나쁘게 초기 중심점들이 서로 가깝게 몰려서 선택되면, 알고리즘이 지역 최적해(local optimum)에 빠져 최종 군집의 품질이 매우 나빠질 수 있습니다.
K-Means++ 초기화 알고리즘
K-Means++는 중심점들이 서로 멀리 떨어지도록 선택될 확률을 높이는 방식으로 이 문제를 해결합니다.
- 첫 번째 중심점 선택: 데이터 포인트 중에서 하나를 무작위로 선택하여 첫 번째 중심점($c_1$)으로 삼습니다.
- 이후 중심점 선택 (K개가 될 때까지 반복):
- 거리 계산: 모든 데이터 포인트 $x$에 대해, 이미 선택된 중심점들 중 가장 가까운 중심점까지의 거리를 계산합니다. 이 거리를 $D(x)$라고 합시다.
- 확률적 선택: 다음 중심점은 $D(x)^2$ 값에 비례하는 확률로 선택됩니다. 즉, 기존의 중심점들로부터 멀리 떨어져 있는 데이터 포인트일수록 다음 중심점으로 선택될 확률이 높아집니다.
- K-Means 실행: 이렇게 K개의 초기 중심점이 선택되면, 표준 K-Means 알고리즘(할당-업데이트 반복)을 실행합니다.
이러한 방식은 초기 중심점들이 데이터 공간에 잘 퍼지도록 유도하여, 더 빠르고 안정적인 수렴과 더 나은 군집 결과를 가져옵니다.
수렴 기준
K-Means 알고리즘은 '군집 할당'과 '중심점 업데이트' 단계를 반복하다가 더 이상 변화가 없을 때 중단됩니다. 구체적인 수렴 기준은 다음과 같습니다.
- 중심점 이동: 중심점을 업데이트한 후, 이전 스텝의 위치와 비교하여 이동 거리가 미리 정해둔 임계값(threshold)보다 작아지면 수렴한 것으로 판단하고 중단합니다. 이것이 가장 일반적인 기준입니다.
- 군집 할당 변화 없음: 모든 데이터 포인트의 소속 군집이 이전 스텝과 비교하여 전혀 바뀌지 않으면 더 이상 개선이 없으므로 중단합니다.
- 관성(Inertia) 변화: 관성은 각 데이터 포인트에서 자신이 속한 군집의 중심점까지의 거리 제곱의 합($\sum \|x_i - c_k\|^2$)입니다. K-Means는 이 관성을 최소화하는 것을 목표로 합니다. 반복 과정에서 관성의 감소량이 매우 작아지면 수렴으로 간주할 수 있습니다.
한계
K-Means++를 사용하더라도 K-Means 자체의 한계는 여전히 존재합니다.
- 군집의 크기나 밀도가 다를 때 잘 동작하지 않음.
- 원형이 아닌 복잡한 모양의 군집을 찾는 데 한계가 있음.
- 군집의 개수 K를 사전에 지정해야 함.
15. Bias–Variance 분해를 수식으로 유도하세요.
편향-분산 트레이드오프(Bias-Variance Tradeoff)는 머신러닝 모델의 예측 오차를 이해하는 핵심적인 개념입니다. 모델의 예측 오차는 크게 세 가지 요소, 즉 편향(Bias), 분산(Variance), 그리고 줄일 수 없는 오류(Irreducible Error)의 합으로 분해될 수 있습니다. 이 관계를 수식으로 유도하는 과정은 모델의 복잡도와 성능 간의 관계를 이론적으로 설명해 줍니다.
기본 설정
- 실제 함수: $f^*(x)$ (우리가 예측하고 싶은 보이지 않는 정답 함수)
- 관측값: $y = f^*(x) + \epsilon$ (실제 값에는 평균이 0이고 분산이 $\sigma^2$인 노이즈 $\epsilon$이 포함됨)
- 모델 예측: $f_{\hat{\theta}}(x)$ (학습 데이터셋 $\mathcal{D}$로 학습된 우리 모델의 예측값)
우리의 목표는 예측 오차의 기댓값, 즉 $\mathbb{E}\left[(y - f_{\hat{\theta}}(x))^2\right]$를 분해하는 것입니다. 여기서 기댓값 $\mathbb{E}[\cdot]$은 여러 다른 학습 데이터셋 $\mathcal{D}$에 대해 평균을 취하는 것을 의미합니다.
분해 유도 과정
먼저, $y = f^*(x) + \epsilon$을 식에 대입합니다.
$$ \mathbb{E}\left[(f^*(x) + \epsilon - f_{\hat{\theta}}(x))^2\right] $$
괄호 안을 두 부분, $(f^*(x) - f_{\hat{\theta}}(x))$와 $\epsilon$으로 나누어 전개합니다.
$$ \mathbb{E}\left[(f^*(x) - f_{\hat{\theta}}(x))^2 + 2\epsilon(f^*(x) - f_{\hat{\theta}}(x)) + \epsilon^2\right] $$
기댓값의 선형성에 따라 각 항에 기댓값을 적용합니다.
$$ \mathbb{E}\left[(f^*(x) - f_{\hat{\theta}}(x))^2\right] + \mathbb{E}\left[2\epsilon(f^*(x) - f_{\hat{\theta}}(x))\right] + \mathbb{E}[\epsilon^2] $$
- 중간 항에서 $f^*$와 $f_{\hat{\theta}}$는 노이즈 $\epsilon$과 독립이고, $\mathbb{E}[\epsilon]=0$이므로, $\mathbb{E}\left[2\epsilon(f^*(x) - f_{\hat{\theta}}(x))\right] = 2(f^*(x) - \mathbb{E}[f_{\hat{\theta}}(x)])\mathbb{E}[\epsilon] = 0$이 됩니다.
- 마지막 항에서 $\mathbb{E}[\epsilon^2]$는 노이즈의 분산 $\sigma^2$와 같습니다. ($\because \mathrm{Var}(\epsilon) = \mathbb{E}[\epsilon^2] - (\mathbb{E}[\epsilon])^2 = \mathbb{E}[\epsilon^2] - 0^2$)
식이 다음과 같이 정리됩니다.
$$ \mathbb{E}\left[(f^*(x) - f_{\hat{\theta}}(x))^2\right] + \sigma^2 $$
이제 남은 첫 번째 항 $\mathbb{E}\left[(f^*(x) - f_{\hat{\theta}}(x))^2\right]$에 모델 예측의 기댓값 $\mathbb{E}[f_{\hat{\theta}}(x)]$를 더하고 빼주는 트릭을 사용합니다.
$$ \mathbb{E}\left[ \left( (f^*(x) - \mathbb{E}[f_{\hat{\theta}}(x)]) + (\mathbb{E}[f_{\hat{\theta}}(x)] - f_{\hat{\theta}}(x)) \right)^2 \right] $$
$(A+B)^2 = A^2 + 2AB + B^2$ 형태로 전개합니다.
$$ \mathbb{E}\left[ (f^*(x) - \mathbb{E}[f_{\hat{\theta}}(x)])^2 \right] + \mathbb{E}\left[ (\mathbb{E}[f_{\hat{\theta}}(x)] - f_{\hat{\theta}}(x))^2 \right] + \mathbb{E}\left[ 2(f^*(x) - \mathbb{E}[f_{\hat{\theta}}(x)])(\mathbb{E}[f_{\hat{\theta}}(x)] - f_{\hat{\theta}}(x)) \right] $$
- $f^*(x)$와 $\mathbb{E}[f_{\hat{\theta}}(x)]$는 학습 데이터셋에 따라 변하지 않는 상수이므로 첫 번째 항은 $\left(f^*(x) - \mathbb{E}[f_{\hat{\theta}}(x)]\right)^2$가 됩니다.
- 마지막 교차항에서 $2(f^*(x) - \mathbb{E}[f_{\hat{\theta}}(x)])$는 상수입니다. 그리고 $\mathbb{E}[\mathbb{E}[f_{\hat{\theta}}(x)] - f_{\hat{\theta}}(x)] = \mathbb{E}[f_{\hat{\theta}}(x)] - \mathbb{E}[f_{\hat{\theta}}(x)] = 0$ 이므로, 교차항 전체가 0이 됩니다.
최종적으로 각 항을 편향과 분산의 정의에 따라 정리합니다.
- $\left(f^*(x) - \mathbb{E}[f_{\hat{\theta}}(x)]\right)^2 = (\text{Bias})^2$: 모델 예측의 평균과 실제 값의 차이.
- $\mathbb{E}\left[(\mathbb{E}[f_{\hat{\theta}}(x)] - f_{\hat{\theta}}(x))^2\right] = \text{Variance}$: 모델 예측값이 평균으로부터 얼마나 흩어져 있는지.
- $\sigma^2$: 줄일 수 없는 오류 (노이즈).
최종 분해 결과
따라서, 총 예측 오차는 다음과 같이 분해됩니다.
$$ \mathbb{E}\left[(y - f_{\hat{\theta}}(x))^2\right] = \underbrace{\left(\mathbb{E}[f_{\hat{\theta}}(x)] - f^*(x)\right)^2}_{\text{Bias}^2} + \underbrace{\mathbb{E}\left[\left(f_{\hat{\theta}}(x) - \mathbb{E}[f_{\hat{\theta}}(x)]\right)^2\right]}_{\text{Variance}} + \underbrace{\sigma^2}_{\text{Irreducible Error}} $$
이 수식은 모델이 너무 단순하면 편향이 커지고(과소적합), 너무 복잡하면 분산이 커지는(과적합) 현상을 이론적으로 뒷받침하며, 두 요소 사이의 균형을 찾는 것이 모델링의 핵심 과제임을 보여줍니다.
16. PCA와 LDA의 목적함수를 나란히 쓰고 비교하세요.
주성분 분석(PCA)과 선형 판별 분석(LDA)은 모두 데이터의 차원을 축소하기 위해 사용되는 대표적인 기법이지만, 그 목적과 접근 방식에 근본적인 차이가 있습니다. PCA는 비지도(Unsupervised) 방식이고, LDA는 지도(Supervised) 방식입니다.
주성분 분석 (Principal Component Analysis, PCA)
- 목적: 데이터의 분산(variance)을 최대한 보존하는 새로운 축(주성분)을 찾는 것입니다. 즉, 데이터를 가장 잘 설명하는(데이터가 가장 넓게 퍼져있는) 방향으로 투영(projection)합니다.
- 접근법: 클래스 레이블 정보를 사용하지 않습니다. 오직 데이터 자체의 분포만을 고려합니다.
- 목적 함수: 데이터의 공분산 행렬 $S_T = \frac{1}{N} \sum (x_i - \mu)(x_i - \mu)^\top$에 대해, 투영 행렬 $W$를 찾아서 투영된 데이터의 분산을 최대화하는 것을 목표로 합니다. $$ \max_{W} \text{Tr}(W^\top S_T W) \quad \text{s.t.} \quad W^\top W = I $$ (Tr은 행렬의 대각합(trace)으로, 투영된 데이터의 총 분산을 의미합니다. 제약 조건은 투영 축들이 서로 직교하도록 만듭니다.) 이 문제는 공분산 행렬 $S_T$의 고유값 분해(eigenvalue decomposition)를 통해 가장 큰 고유값에 해당하는 고유벡터들을 찾는 것으로 해결됩니다.
선형 판별 분석 (Linear Discriminant Analysis, LDA)
- 목적: 클래스 간의 분리도(separability)를 최대화하는 새로운 축을 찾는 것입니다. 즉, 투영된 공간에서 다른 클래스의 데이터는 최대한 멀리 떨어지고, 같은 클래스의 데이터는 최대한 가깝게 뭉치도록 만듭니다.
- 접근법: 클래스 레이블 정보를 적극적으로 사용합니다.
- 목적 함수: 두 가지 산포 행렬을 정의합니다.
- 클래스 간 산포 행렬 (Between-class scatter matrix, $S_B$): 각 클래스의 중심(평균)이 전체 데이터의 중심으로부터 얼마나 떨어져 있는지 측정합니다. 이 값은 커야 좋습니다.
- 클래스 내 산포 행렬 (Within-class scatter matrix, $S_W$): 각 클래스 내의 데이터가 해당 클래스의 중심으로부터 얼마나 흩어져 있는지 측정합니다. 이 값은 작아야 좋습니다.
비교 요약
| 목표 | 데이터의 분산 최대화 | 클래스 간 분리도 최대화 |
| 학습 방식 | 비지도 (Unsupervised) | 지도 (Supervised) |
| 고려 정보 | 데이터의 분포 (Feature) | 데이터 분포 + 클래스 레이블 (Label) |
| 주요 용도 | 데이터 압축, 시각화, 노이즈 제거 | 분류 문제를 위한 차원 축소, 특징 추출 |
| 찾는 축 | 분산이 가장 큰 방향 | 클래스를 가장 잘 구분하는 방향 |
PCA는 전체 데이터가 가장 넓게 퍼진 축을 찾지만, LDA는 두 클래스가 가장 잘 분리되는 축을 찾습니다. 분류가 목적이라면 LDA가 훨씬 효과적일 수 있습니다.
17. 지수족(Exponential Family)과 대표 켤레사전을 표기하세요.
지수족 확률분포(Exponential Family of Distributions)는 통계 모델링, 특히 베이즈 통계에서 매우 중요한 개념입니다. 수많은 확률분포(정규, 베르누이, 푸아송 등)를 하나의 통일된 형태로 표현할 수 있는 일반적인 형식이기 때문입니다.
지수족의 형태
어떤 확률분포 $p(x|\eta)$가 다음의 형태로 표현될 수 있다면, 이를 지수족에 속한다고 합니다.
$$ p(x|\eta) = h(x) \exp\left\{ \eta^\top T(x) - A(\eta) \right\} $$
- $\eta$ (eta): 자연 파라미터 (natural parameter). 분포의 형태를 결정하는 파라미터입니다.
- $T(x)$: 충분 통계량 (sufficient statistic). 데이터 $x$에 대한 모든 정보를 담고 있는 함수입니다. 보통 $T(x)=x$인 경우가 많습니다.
- $h(x)$: 기저 측정 (base measure). $x$ 자체에만 의존하는 함수입니다.
- $A(\eta)$: 로그 정규화 함수 (log-normalizer). 분포의 총합이 1이 되도록 만드는 정규화 상수 역할을 합니다. $\int p(x|\eta)dx=1$을 만족시킵니다.
켤레 사전 분포 (Conjugate Prior)
베이즈 추론에서는 사전 확률(Prior)과 데이터의 가능도(Likelihood)를 곱하여 사후 확률(Posterior)을 얻습니다.
$$ \text{Posterior} \propto \text{Likelihood} \times \text{Prior} $$
이때, 사전 분포와 사후 분포가 같은 종류의 확률분포족에 속할 때, 우리는 이 사전 분포를 가능도 함수에 대한 켤레 사전 분포라고 부릅니다.
왜 중요한가? 켤레 관계를 이용하면 사후 분포 계산이 복잡한 적분 없이 파라미터의 간단한 대수적 업데이트만으로 가능해집니다. 이는 계산을 매우 편리하게 만듭니다. 지수족 분포는 대부분 자연스러운 켤레 사전 분포를 가지고 있습니다.
대표적인 켤레 사전 쌍 (Likelihood–Prior)
| 베르누이 (Bernoulli) | 동전 던지기 성공 확률 $\theta$ | 베타 (Beta) |
| 이항 (Binomial) | n번의 동전 던지기 성공 확률 $\theta$ | 베타 (Beta) |
| 다항 (Multinomial) | K면 주사위 각 면의 확률 $\theta$ | 디리클레 (Dirichlet) |
| 푸아송 (Poisson) | 단위 시간당 사건 발생률 $\lambda$ | 감마 (Gamma) |
| 정규 (Normal) (분산 알려짐) | 평균 $\mu$ | 정규 (Normal) |
예를 들어, 동전 던지기(베르누이 가능도)의 성공 확률 $\theta$에 대한 사전 믿음을 베타 분포로 설정하면, 데이터를 관찰한 후의 사후 믿음 역시 새로운 파라미터를 가진 베타 분포가 됩니다.
18. 변수 변환 공식과 Normalizing Flows의 연결을 간단히 쓰세요.
변수 변환 공식(Change of Variables Formula)은 확률 변수가 어떤 함수(변환)를 통과했을 때, 변환된 변수의 확률 밀도 함수(PDF)가 어떻게 변하는지를 설명하는 수학적 규칙입니다. 이 공식은 간단한 확률 분포로부터 복잡하고 표현력 높은 확률 분포를 구축하는 Normalizing Flows의 핵심 이론적 기반이 됩니다.
변수 변환 공식
단순한 확률 변수 $z$가 알려진 확률 밀도 함수 $p_Z(z)$를 따른다고 가정해 봅시다. 만약 가역적이고 미분 가능한 함수 $f$를 통해 새로운 변수 $x = f(z)$를 만든다면, $x$의 확률 밀도 함수 $p_X(x)$는 다음과 같습니다.
$$ p_X(x) = p_Z(f^{-1}(x)) \left| \det J_{f^{-1}}(x) \right| $$
- $p_Z(f^{-1}(x))$: $x$에 해당하는 원래의 $z$ 값($z=f^{-1}(x)$)에서의 확률 밀도입니다.
- $J_{f^{-1}}(x)$: 역함수 $f^{-1}$의 야코비안 행렬(Jacobian Matrix)로, 다변수 함수에서 각 변수에 대한 편미분을 모아놓은 행렬입니다.
- $|\det J|$: 이 야코비안 행렬식의 절댓값은 변환 $f$가 공간을 얼마나 "늘리거나 줄이는지(stretching/squishing)"를 측정하는 비율입니다. 확률의 총합은 항상 1로 보존되어야 하므로, 공간이 늘어나는 곳에서는 밀도가 낮아져야 하고, 공간이 줄어드는 곳에서는 밀도가 높아져야 합니다. 이 항이 바로 그 보정을 수행합니다.
Normalizing Flows와의 연결
Normalizing Flows는 생성 모델의 한 종류로, 단순한 분포(예: 표준 정규분포)를 복잡한 데이터 분포로 점진적으로 변환시키는 아이디어에 기반합니다.
- 시작점: 다루기 쉬운 분포(base distribution)에서 샘플 $z_0 \sim p_0(z_0)$을 뽑습니다.
- 변환의 연속: 일련의 가역 변환 함수 $f_1, f_2, \dots, f_K$를 순차적으로 적용합니다. $$ z_1 = f_1(z_0) $$ $$ z_2 = f_2(z_1) $$ $$ \vdots $$ $$ x = z_K = f_K(z_{K-1}) $$
- 밀도 계산: 최종적으로 생성된 샘플 $x$의 확률 밀도를 계산하기 위해, 변수 변환 공식을 연쇄적으로 적용합니다. 계산의 편의를 위해 보통 로그 확률(log-likelihood)을 사용합니다. $$ \log p_X(x) = \log p_0(z_0) - \sum_{k=1}^{K} \log \left| \det J_{f_k}(z_{k-1}) \right| $$
결론적으로, Normalizing Flows는 변수 변환 공식을 "알고리즘화"한 것입니다. 야코비안 행렬식 계산이 쉬운 특별한 형태의 변환 함수들($f_k$)을 여러 겹 쌓음으로써, 복잡한 데이터의 정확한 로그 가능도를 계산하고 새로운 샘플을 생성할 수 있는 강력한 모델을 만듭니다.
19. 전기댓값 법칙과 전분산 법칙을 정리하세요.
전기댓값 법칙과 전분산 법칙은 두 확률 변수 X와 Y의 관계를 이용하여 X의 기댓값과 분산을 더 간단하게 계산하거나 분석할 수 있게 해주는 강력한 통계적 도구입니다.
전기댓값 법칙 (Law of Total Expectation)
이 법칙은 "전체의 평균은 각 그룹의 평균들의 평균과 같다"는 직관적인 아이디어를 공식화한 것입니다. 타워 속성(Tower Property)이라고도 불립니다.
공식:
$$ \mathbb{E}[X] = \mathbb{E}[\mathbb{E}[X|Y]] $$
해설:
- $\mathbb{E}[X|Y]$: 변수 Y의 값이 특정 값으로 주어졌을 때 X의 조건부 기댓값입니다. 이는 Y의 값에 따라 변하는 함수입니다.
- $\mathbb{E}[\mathbb{E}[X|Y]]$: 위 조건부 기댓값 함수를 이제 변수 Y에 대해 다시 기댓값을 취한 것입니다.
예시: 한 국가의 모든 학생들의 평균 키($\mathbb{E}[X]$)를 구하고 싶다고 가정해 봅시다. 각 학교별 학생들의 평균 키($\mathbb{E}[X|Y=\text{school}]$)를 모두 계산한 뒤, 이 학교별 평균 키들의 전체 평균($\mathbb{E}[\cdot]$)을 구하면 원래의 전체 평균 키와 같다는 의미입니다.
전분산 법칙 (Law of Total Variance)
이 법칙은 "전체의 분산은 각 그룹 내부의 분산들의 평균과 그룹 간 평균들의 분산의 합과 같다"는 개념을 설명합니다.
공식:
$$ \mathrm{Var}(X) = \mathbb{E}[\mathrm{Var}(X|Y)] + \mathrm{Var}(\mathbb{E}[X|Y]) $$
해설: X의 총 변동성(분산)은 두 가지 원천으로부터 발생합니다.
- $\mathbb{E}[\mathrm{Var}(X|Y)]$ (Expected Conditional Variance): Y의 값이 주어져도 여전히 남아있는 X의 변동성입니다. 즉, 그룹 내 분산(within-group variance)의 평균입니다.
- $\mathrm{Var}(\mathbb{E}[X|Y])$ (Variance of Conditional Expectation): Y의 값에 따라 X의 평균이 변하는 것에서 발생하는 변동성입니다. 즉, 그룹 간 분산(between-group variance)입니다.
예시: 전국 학생들의 키의 총 분산($\mathrm{Var}(X)$)은, 각 학교 내 학생들 키의 분산들을 평균한 값($\mathbb{E}[\mathrm{Var}(X|Y=\text{school})]$)에다가, 각 학교별 평균 키들이 전체 평균으로부터 얼마나 흩어져 있는지를 나타내는 분산($\mathrm{Var}(\mathbb{E}[X|Y=\text{school})]$)을 더한 것과 같습니다.
이 두 법칙은 통계적 모델링, 특히 계층적 모델이나 혼합 모델에서 변동성의 원인을 분석하고 이해하는 데 매우 유용하게 사용됩니다.
20. SARSA와 Q-Learning을 수식으로 비교하세요.
SARSA와 Q-러닝은 강화학습에서 환경의 모델을 모를 때(model-free) 사용하는 대표적인 시간차 학습(Temporal-Difference, TD) 알고리즘입니다. 두 알고리즘은 행동-가치 함수 $Q(s, a)$를 업데이트하는 방식에서 미묘하지만 결정적인 차이를 보이며, 이는 각각 온폴리시(On-policy)와 오프폴리시(Off-policy)라는 중요한 특성으로 이어집니다.
SARSA (On-policy TD Control)
SARSA는 에이전트가 현재 따르고 있는 정책(policy)에 기반하여 다음 행동을 선택하고, 그 행동의 가치를 사용하여 현재 상태-행동 쌍의 가치를 업데이트합니다. "SARSA"라는 이름은 업데이트에 사용되는 데이터 순서 ($S_t, A_t, R_{t+1}, S_{t+1}, A_{t+1}$)에서 유래했습니다.
업데이트 규칙:
$$ Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \left( \underbrace{R_{t+1} + \gamma Q(S_{t+1}, A_{t+1})}_{\text{TD Target}} - Q(S_t, A_t) \right) $$
수식 해설:
- $A_{t+1}$: 상태 $S_{t+1}$에서 현재 정책(예: $\epsilon$-greedy)을 따라 실제로 선택한 다음 행동입니다.
- TD Target: 실제 받은 보상($R_{t+1}$)과 다음 스텝의 가치($\gamma Q(S_{t+1}, A_{t+1})$)를 합친 목표값입니다. 이 목표값은 에이전트가 앞으로 따를 정책을 그대로 반영합니다.
- 특징 (온폴리시): 행동하고 평가하는 정책이 동일합니다. "자신이 걸어갈 길을 보며 지도를 수정하는" 보수적인 탐험가와 같습니다.
Q-Learning (Off-policy TD Control)
Q-러닝은 에이전트가 실제로 어떤 행동을 하든 상관없이, 최적이라고 생각되는(greedy) 행동의 가치를 사용하여 현재 상태-행동 쌍의 가치를 업데이트합니다.
업데이트 규칙:
$$ Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha \left( \underbrace{R_{t+1} + \gamma \max_{a} Q(S_{t+1}, a)}_{\text{TD Target}} - Q(S_t, A_t) \right) $$
수식 해설:
- $\max_{a} Q(S_{t+1}, a)$: 상태 $S_{t+1}$에서 할 수 있는 모든 행동들 중 가장 높은 Q값을 가진 행동의 가치를 사용합니다. 에이전트가 탐험을 위해 다른 행동을 하더라도, 업데이트는 항상 최선의 길을 가정하고 이루어집니다.
- TD Target: 실제 받은 보상과 다음 스텝에서 취할 수 있는 최선의 가치를 합친 목표값입니다.
- 특징 (오프폴리시): 행동하는 정책(behavior policy, 예: $\epsilon$-greedy)과 평가/학습하는 정책(target policy, 예: greedy)이 다릅니다. "다른 사람이 탐험한 것을 보고 최적의 경로를 지도에 그리는" 야심 찬 탐험가와 같습니다.
핵심 비교
| 정책 유형 | 온폴리시 (On-policy) | 오프폴리시 (Off-policy) |
| 업데이트 목표 | $R_{t+1} + \gamma Q(S_{t+1}, A_{t+1})$ | $R_{t+1} + \gamma \max_a Q(S_{t+1}, a)$ |
| 학습 방식 | 실제로 겪는 경험을 바탕으로 학습 | 최적의 행동을 가정하며 학습 |
| 성향 | 더 안전하고 보수적인 정책을 학습 | 더 공격적이고 최적 경로를 찾는 정책 학습 |
21. Double Q-Learning으로 과대추정을 줄이는 아이디어를 쓰세요.
표준 Q-러닝은 과대추정 편향(Maximization Bias)이라는 고질적인 문제를 가지고 있습니다. 이는 Q-러닝이 사용하는 `max` 연산자 때문에 발생하며, 학습된 Q값이 실제 가치보다 체계적으로 높게 추정되는 경향을 말합니다. Double Q-Learning은 이 문제를 완화하기 위해 제안된 영리한 기법입니다.
과대추정 편향의 원인
Q-러닝의 업데이트 목표는 $R + \gamma \max_a Q(S', a)$입니다. 여기서 문제는 `max` 연산자가 행동을 선택하는 역할과 그 선택된 행동의 가치를 평가하는 역할을 동시에 수행한다는 점입니다.
만약 Q값 추정치에 약간의 무작위 오차(noise)가 섞여 있다면, `max` 연산자는 실제 가치가 높아서가 아니라 우연히 오차 때문에 값이 높게 추정된 행동을 선택할 가능성이 높습니다. 이러한 과정이 반복되면, 양수 오차들이 계속해서 누적되어 Q값이 실제보다 부풀려지게 됩니다. 이는 불안정한 학습과 차선의 정책으로 이어질 수 있습니다.
Double Q-Learning의 핵심 아이디어
Double Q-Learning의 핵심 아이디어는 "행동 선택"과 "가치 평가"의 역할을 분리하는 것입니다. 이를 위해 독립적인 두 개의 Q-가치 추정기(네트워크) $Q_A$와 $Q_B$를 사용합니다.
- 행동 선택: 하나의 네트워크(예: $Q_A$)를 사용하여 다음 상태 $S'$에서 최적의 행동이 무엇인지 선택합니다. $$ a^* = \arg\max_{a} Q_A(S', a) $$
- 가치 평가: 다른 네트워크(예: $Q_B$)를 사용하여 그 선택된 행동 $a^*$의 가치를 평가합니다. $$ \text{Value} = Q_B(S', a^*) $$
업데이트 규칙
이제 $Q_A$를 업데이트할 때, $Q_A$ 자신이 아닌 $Q_B$의 평가를 사용합니다.
$$ Q_A(S, a) \leftarrow Q_A(S, a) + \alpha \left( R + \gamma Q_B(S', \arg\max_{a'} Q_A(S', a')) - Q_A(S, a) \right) $$
두 네트워크는 대칭적으로 업데이트됩니다. 즉, $Q_B$를 업데이트할 때는 $Q_A$의 평가를 사용합니다. 실제 딥러닝 구현(DDQN)에서는 보통 메인 네트워크와 타겟 네트워크가 이 역할을 자연스럽게 나누어 수행합니다.
왜 효과적인가?
두 네트워크 $Q_A$와 $Q_B$는 서로 다른 경험으로 학습되기 때문에, 추정 오차가 다를 가능성이 높습니다. $Q_A$가 특정 행동의 가치를 과대추정하더라도, $Q_B$가 동시에 같은 행동을 과대추정할 확률은 낮습니다. 따라서 한 네트워크의 "낙관적인 실수"를 다른 네트워크가 보정해주어, 과대추정 편향을 효과적으로 줄이고 더 안정적이고 정확한 학습을 가능하게 합니다.
22. DQN 안정화의 핵심: 타깃 네트워크, 리플레이, Huber 손실
심층 Q-네트워크(Deep Q-Network, DQN)는 Q-러닝에 심층 신경망을 성공적으로 결합한 기념비적인 알고리즘입니다. 하지만 불안정한 강화학습과 비선형 함수 근사기인 신경망을 결합하는 것은 매우 어렵습니다. DQN은 이 불안정성을 해결하기 위해 세 가지 핵심적인 안정화 기법을 도입했습니다.
1. 경험 리플레이 (Experience Replay)
- 문제점: 강화학습 에이전트가 생성하는 데이터 $(s, a, r, s')$는 시간 순서대로 생성되므로 샘플 간 상관관계(correlation)가 매우 높습니다. 신경망은 독립적이고 동일하게 분포된(I.I.D.) 데이터를 가정하고 학습할 때 가장 잘 작동하므로, 이렇게 상관관계가 높은 데이터를 순서대로 학습시키면 불안정해지고 과거의 좋은 경험을 잊어버리기 쉽습니다.
- 해결책: 에이전트의 경험 $(s, a, r, s')$을 리플레이 버퍼(replay buffer)라는 큰 메모리에 저장합니다. 그리고 신경망을 업데이트할 때, 버퍼에서 무작위로 미니배치를 샘플링하여 학습시킵니다.
- 효과:
- 샘플 간의 시간적 상관관계를 깨뜨려 학습을 안정화합니다.
- 하나의 경험을 여러 번 재사용하여 데이터 효율성을 높입니다.
2. 고정된 Q-타깃 (Fixed Q-Targets)
- 문제점: 표준 Q-러닝의 손실 함수는 $(\text{Target} - \text{Prediction})^2 = (R + \gamma \max_a Q(s', a; \theta) - Q(s, a; \theta))^2$ 입니다. 여기서 문제는 타깃 값($R+\dots$)을 계산하는 네트워크와 예측 값($Q(s,a)$)을 계산하는 네트워크가 동일하다는 것입니다. 매 스텝마다 가중치 $\theta$가 업데이트되면, 타깃 값도 함께 흔들리게 됩니다. 이는 마치 "움직이는 과녁을 맞추려는" 것과 같아 학습을 매우 불안정하게 만듭니다.
- 해결책: 두 개의 네트워크를 사용합니다.
- 메인 네트워크 ($Q_\theta$): 매 스텝마다 활발하게 학습되는 네트워크입니다.
- 타깃 네트워크 ($Q_{\theta^-}$): 타깃 값을 계산하는 데만 사용되는 네트워크입니다. 이 네트워크의 가중치는 한동안 고정되어 있다가, 일정 주기마다 메인 네트워크의 가중치를 그대로 복사해와서 업데이트됩니다.
- 효과: 타깃 값을 한동안 고정시켜 학습 목표를 안정시키고, 발산을 막아줍니다.
3. Huber 손실 (Huber Loss) / 오차 클리핑 (Error Clipping)
- 문제점: 학습 초기에는 TD 오차(Target - Prediction)의 값이 매우 클 수 있습니다. 평균 제곱 오차(MSE)와 같은 손실 함수는 오차가 클 때 제곱을 하기 때문에 그래디언트가 폭발적으로 커질 수 있습니다. 이는 학습을 불안정하게 만드는 또 다른 요인입니다.
- 해결책: 오차가 특정 임계값($\delta$)보다 작을 때는 MSE처럼 부드러운 이차 함수로 동작하고, 임계값보다 클 때는 평균 절대 오차(MAE)처럼 선형적으로 증가하는 Huber 손실을 사용합니다. (DQN 논문에서는 더 간단하게 오차를 [-1, 1] 사이로 클리핑하는 방법을 사용했습니다.) $$ \mathcal{L}_\delta(e) = \begin{cases} \frac{1}{2}e^2, & |e| \le \delta \\ \delta(|e| - \frac{1}{2}\delta), & \text{otherwise} \end{cases} $$
- 효과: 큰 오차(이상치)에 덜 민감하게 반응하여 그래디언트 폭발을 방지하고, 학습의 견고함(robustness)을 높여줍니다.
23. 정책경사 정리와 Actor–Critic의 연결을 서술하세요.
정책 경사(Policy Gradient, PG) 방법과 액터-크리틱(Actor-Critic, AC) 방법은 현대 강화학습의 두 가지 중요한 축입니다. 액터-크리틱은 정책 경사 방법의 고질적인 단점을 보완하는 과정에서 자연스럽게 탄생한, 두 방법의 장점을 결합한 구조입니다.
정책 경사 정리 (Policy Gradient Theorem)
- 목표: 가치 함수를 배우는 대신, 보상을 최대로 만드는 정책 $\pi_\theta(a|s)$ 자체를 직접 학습하는 것이 목표입니다. 파라미터 $\theta$로 표현된 정책을 최적화하기 위해, 성능 척도 $J(\theta)$(예: 총 기대 보상)를 $\theta$에 대해 미분하여 경사 상승법을 사용합니다.
- 정책 경사 정리: 이 기울기를 어떻게 계산할 수 있는지를 보여주는 핵심적인 정리입니다. $$ \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ \nabla_\theta \log \pi_\theta(a|s) Q^\pi(s, a) \right] $$
- $\nabla_\theta \log \pi_\theta(a|s)$: 스코어 함수(score function). 정책 $\theta$를 어떻게 수정해야 행동 $a$의 확률이 높아지는지를 나타내는 "방향" 벡터입니다.
- $Q^\pi(s, a)$: 행동-가치 함수. 상태 $s$에서 행동 $a$를 했을 때 앞으로 받을 총 기대 보상입니다. 이 값은 위 방향으로 얼마나 많이 업데이트할지를 결정하는 "가중치" 또는 "크기" 역할을 합니다.
- 직관적 의미: "만약 어떤 행동($a$)이 평균보다 더 좋은 결과($Q^\pi(s,a)$가 높음)를 가져왔다면, 그 행동을 할 확률($\pi_\theta(a|s)$)을 높이는 방향으로 정책을 업데이트하라."
정책 경사 방법의 문제점 (REINFORCE 알고리즘)
가장 기본적인 정책 경사 알고리즘인 REINFORCE는 $Q^\pi(s, a)$를 실제 에피소드에서 얻은 총 보상(return) $G_t$로 근사하여 사용합니다. 하지만 이 총 보상 $G_t$는 단 하나의 샘플 경로에서 계산된 값이기 때문에 분산이 매우 높습니다(high variance). 이로 인해 학습이 매우 느리고 불안정합니다.
액터-크리틱 (Actor-Critic)의 등장
액터-크리틱은 이 높은 분산 문제를 해결하기 위해 탄생했습니다.
- 핵심 아이디어: 분산이 큰 실제 보상 $G_t$ 대신, 더 안정적인 가치 함수 추정치를 사용하자! 이를 위해 두 개의 네트워크를 도입합니다.
- 액터 (Actor, $\pi_\theta$): 정책을 담당합니다. 현재 상태를 보고 어떤 행동을 할지 결정합니다. 정책 경사 정리에 따라 학습합니다.
- 크리틱 (Critic, $V_w$ or $Q_w$): 가치 함수를 담당합니다. 액터가 한 행동이 얼마나 좋았는지를 평가합니다. 시간차 학습(TD)을 통해 학습합니다.
연결 고리: 어드밴티지 함수 (Advantage Function)
크리틱은 분산을 더 줄이기 위해 어드밴티지 함수 $A(s, a) = Q(s, a) - V(s)$를 추정하여 액터에게 전달합니다.
- $A(s, a)$: 상태 $s$에서 행동 $a$를 하는 것이 평균적으로 얼마나 더 좋은지를 나타내는 값입니다.
이 어드밴티지 함수를 정책 경사 정리의 가중치로 사용하면, 기울기는 다음과 같이 변합니다.
$$ \nabla_\theta J(\theta) = \mathbb{E}_{\pi_\theta} \left[ \nabla_\theta \log \pi_\theta(a|s) A^\pi(s, a) \right] $$
결론적으로, 액터-크리틱은 정책 경사 정리의 구조를 그대로 따르되, 분산이 큰 실제 보상($G_t$)을 크리틱이 학습한 안정적인 어드밴티지 추정치($\hat{A}_w(s, a)$)로 대체한 것입니다.
- 액터는 크리틱의 평가($\hat{A}_w$)를 바탕으로 자신의 정책($\theta$)을 업데이트하고,
- 크리틱은 액터의 행동을 관찰하며 자신의 평가 기준($w$)을 더 정확하게 업데이트합니다.
이러한 협력 구조를 통해 정책 경사 방법의 높은 분산 문제를 해결하고, 훨씬 안정적이고 효율적인 학습을 가능하게 합니다.
24. PPO의 클리핑 목적을 수식과 함께 요약하세요.
PPO(Proximal Policy Optimization)는 정책 경사(PG) 방법의 안정성과 데이터 효율성을 크게 향상시킨 최첨단 알고리즘 중 하나입니다. PG 방법은 업데이트 스텝 크기(학습률)에 매우 민감하여, 한 번의 잘못된 큰 업데이트가 정책을 망가뜨리고 학습이 회복 불가능한 상태에 빠뜨릴 수 있습니다. PPO는 클리핑(clipping)이라는 간단하면서도 효과적인 방법을 통해 정책이 한 번에 너무 많이 변하는 것을 제한하여 이 문제를 해결합니다.
PPO의 목표: 신뢰 영역 내에서 안전한 업데이트
PPO의 근본적인 목표는 이전 정책($\pi_{\theta_{\text{old}}}$)으로부터 새로운 정책($\pi_\theta$)이 너무 멀리 벗어나지 않도록, 즉 일종의 신뢰 영역(trust region) 내에서 정책을 업데이트하는 것입니다. 이를 통해 성능이 갑자기 나빠지는 것을 방지하고 안정적인 학습을 보장합니다.
PPO-Clip 목적 함수
PPO는 이 목표를 복잡한 제약 조건 대신 간단한 클리핑을 포함한 목적 함수를 통해 달성합니다.
- 확률 비율 (Probability Ratio), $r_t(\theta)$: 이 비율은 새로운 정책이 이전 정책에 비해 특정 행동 $a_t$를 선택할 확률이 얼마나 변했는지를 나타냅니다. $r_t > 1$이면 확률이 높아진 것이고, $r_t < 1$이면 낮아진 것입니다. $$ r_t(\theta) = \frac{\pi_\theta(a_t | s_t)}{\pi_{\theta_{\text{old}}}(a_t | s_t)} $$
- 클리핑된 목적 함수 (Clipped Surrogate Objective), $L^{\text{CLIP}}$: $$ L^{\text{CLIP}}(\theta) = \mathbb{E}_t \left[ \min\left( r_t(\theta) \hat{A}_t, \text{clip}(r_t(\theta), 1 - \epsilon, 1 + \epsilon) \hat{A}_t \right) \right] $$
- $\hat{A}_t$: 시점 t에서의 어드밴티지(Advantage) 추정치입니다. 이 행동이 평균보다 얼마나 좋았는지를 나타냅니다.
- $\epsilon$: 클리핑 범위를 결정하는 작은 하이퍼파라미터입니다(보통 0.1 또는 0.2).
- $\text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon)$: 확률 비율 $r_t$를 $[1-\epsilon, 1+\epsilon]$ 범위 내로 강제로 제한하는 함수입니다.
클리핑의 목적과 작동 방식
`min` 함수 내부의 두 항을 어드밴티지의 부호에 따라 나누어 생각하면 클리핑의 목적을 명확히 알 수 있습니다.
- Case 1: 어드밴티지가 양수일 때 ($\hat{A}_t > 0$)
- 이 행동은 평균보다 좋았으므로, 정책은 이 행동의 확률을 높이도록($r_t > 1$) 업데이트되어야 합니다.
- 목적 함수는 $\min(r_t \hat{A}_t, (1+\epsilon)\hat{A}_t)$가 됩니다.
- $r_t$가 $1+\epsilon$을 초과하여 너무 커지면, $L$은 $(1+\epsilon)\hat{A}_t$에 의해 제한됩니다. 이는 정책이 좋아지는 방향으로 너무 과격하게 업데이트되는 것을 막는 "상한선" 역할을 합니다.
- Case 2: 어드밴티지가 음수일 때 ($\hat{A}_t < 0$)
- 이 행동은 평균보다 나빴으므로, 정책은 이 행동의 확률을 낮추도록($r_t < 1$) 업데이트되어야 합니다.
- 목적 함수는 `min` 안에 음수가 있으므로 실질적으로 $\max(r_t \hat{A}_t, (1-\epsilon)\hat{A}_t)$가 됩니다.
- $r_t$가 $1-\epsilon$보다 너무 작아지면, $L$은 $(1-\epsilon)\hat{A}_t$에 의해 제한됩니다. 이는 정책이 나빠지는 방향으로 너무 과격하게 업데이트되는 것을 막는 "하한선" 역할을 합니다.
요약하자면, PPO의 클리핑은 확률 비율 $r_t$에 '울타리'를 쳐서, 어드밴티지가 긍정적이든 부정적이든 정책 업데이트의 크기를 제한합니다. 이 간단한 장치를 통해 PPO는 파괴적인 업데이트를 방지하고, 이전 정책에서 점진적이고 안정적으로 성능을 개선해 나갈 수 있습니다.
25. Label Smoothing의 목적과 수식, 학습 동작을 설명하세요.
레이블 스무딩(Label Smoothing)은 분류 모델을 학습시킬 때 사용하는 정규화(regularization) 기법 중 하나입니다. 모델이 정답에 대해 지나치게 확신(over-confidence)하는 것을 방지하여 일반화 성능을 높이고, 예측을 더 신뢰할 수 있도록 보정(calibration)하는 효과가 있습니다.
1. 문제점: 원-핫 인코딩의 함정
일반적인 다중 클래스 분류 문제에서 우리는 정답 레이블을 원-핫(one-hot) 벡터로 만듭니다. 예를 들어, 3번 클래스가 정답이라면 [0, 0, 1, 0, 0]과 같이 표현합니다. 모델은 이 '확실한 1'과 '확실한 0'을 예측하도록 학습됩니다.
이 방식은 모델이 정답 클래스의 로짓(logit)은 무한대에 가깝게, 나머지 클래스의 로짓은 음의 무한대에 가깝게 만들도록 부추깁니다. 이는 두 가지 문제를 낳습니다.
- 과적합(Overfitting): 모델이 학습 데이터에만 존재하는 특징에 과도하게 의존하게 되어, 새로운 데이터에 대한 성능이 떨어집니다.
- 과신(Over-confidence): 모델이 자신의 예측을 실제 정확도보다 훨씬 더 높게 신뢰하게 됩니다. 틀린 예측조차 99.9%의 확률로 예측하는 문제가 생깁니다.
2. 해결책: 레이블을 부드럽게 만들기
레이블 스무딩의 아이디어는 매우 간단합니다. "정답이 100% 확실하다고 가르치지 말고, 90% 정도만 확실하다고 알려주자. 그리고 나머지 10%의 확률은 다른 오답들에게 조금씩 나눠주자."
수식: 클래스 개수가 $C$이고, 스무딩 정도를 결정하는 하이퍼파라미터가 $\epsilon$ (엡실론, 보통 0.1과 같은 작은 값)일 때, 정답 클래스가 $k$인 원-핫 레이블 $y_i$는 다음과 같은 소프트(soft) 레이블 $y_i^{\text{LS}}$로 변환됩니다.
$$ y_i^{\text{LS}} = (1-\epsilon) \cdot \mathbf{1}[i=k] + \frac{\epsilon}{C} $$
- $\mathbf{1}[i=k]$: $i$가 정답 클래스 $k$일 때만 1이고, 나머지는 0인 함수입니다.
- 정답 클래스 (i=k): 원래 값 1 대신 $(1 - \epsilon)$의 값을 가집니다. (예: $1-0.1=0.9$)
- 오답 클래스 (i≠k): 원래 값 0 대신 $\frac{\epsilon}{C}$의 작은 값을 가집니다. (예: $0.1/10=0.01$)
3. 학습에 미치는 영향
이렇게 '부드러워진' 레이블로 교차 엔트로피 손실을 계산하면, 모델은 더 이상 로짓 값의 차이를 무한정 벌리려고 하지 않습니다. 정답 클래스와 오답 클래스의 로짓 차이를 적절한 수준으로 유지하게 됩니다.
- 정규화 효과: 가장 큰 로짓과 나머지 로짓들 간의 차이를 제한하여 모델이 더 일반적인 특징을 배우도록 유도합니다.
- 보정(Calibration) 개선: 모델의 예측 확률(confidence)이 실제 정확도(accuracy)와 더 잘 부합하게 됩니다. 예를 들어 모델이 80% 확률로 예측한 샘플들의 실제 정답률이 80%에 가까워집니다.
- 탐색 장려: 모든 클래스가 작은 확률값을 가지므로, 모델이 학습 초기나 어려운 샘플에 대해 다양한 가능성을 탐색하는 데 도움이 됩니다.
26. Gradient Clipping 기법(값/노름 클리핑)과 적용 시점을 설명하세요.
그래디언트 클리핑(Gradient Clipping)은 심층 신경망, 특히 RNN이나 Transformer와 같이 깊이가 매우 깊은 모델에서 발생하는 그래디언트 폭주(Exploding Gradients) 문제를 해결하기 위한 필수적인 기법입니다.
1. 문제점: 그래디언트 폭주
역전파 과정에서 그래디언트는 여러 층을 거치며 곱셈 연산을 반복합니다. 이때 그래디언트 값이 1보다 계속 크면, 이 값이 지수적으로 증가하여 엄청나게 커질 수 있습니다. 이렇게 폭주한 그래디언트는 가중치를 비정상적으로 크게 업데이트하여 학습 과정을 불안정하게 만들거나, 심한 경우 손실 값이 NaN(Not a Number)이 되어 학습이 멈추게 됩니다.
2. 해결책: 그래디언트에 상한선 설정하기
그래디언트 클리핑의 아이디어는 간단합니다. "계산된 그래디언트의 크기가 일정 임계값(threshold)을 넘으면, 강제로 크기를 줄여버리자."
방법 1: 값 클리핑 (Clip by Value)
- 동작: 그래디언트 텐서의 각각의 원소를 지정된 최솟값과 최댓값 사이로 제한합니다.
- 수식: $g \leftarrow \text{clip}(g, \text{min_value}, \text{max_value})$ (예: $\text{clip}(g, -1.0, 1.0)$)
- 단점: 각 원소를 독립적으로 자르기 때문에, 원래 그래디언트 벡터의 방향(direction)을 왜곡시킬 수 있습니다. 예를 들어 [10, 0.1]이라는 그래디언트가 [-1, 1]로 클리핑되면 [1, 0.1]이 되어 원래와 다른 방향을 가리키게 됩니다. 이 때문에 잘 사용되지 않습니다.
방법 2: 노름 클리핑 (Clip by Norm)
- 동작: 그래디언트 텐서 전체를 하나의 벡터로 보고, 이 벡터의 크기(L2 노름)가 임계값을 초과하면 벡터 전체를 비례적으로 축소시킵니다.
- 수식: $$ g \leftarrow g \cdot \min\left(1, \frac{\text{max_norm}}{\|g\|_2}\right) $$
- 해설:
- 먼저 전체 그래디언트 벡터의 L2 노름 $\|g\|_2$를 계산합니다.
- 만약 $\|g\|_2$가 임계값 $\text{max_norm}$보다 작거나 같으면, 그래디언트는 변하지 않습니다 ($\min$ 안의 값이 1이므로).
- 만약 $\|g\|_2$가 $\text{max_norm}$보다 크면, 그래디언트 벡터 $g$에 $\frac{\text{max_norm}}{\|g\|_2}$ (1보다 작은 스케일링 팩터)를 곱하여 노름의 크기를 정확히 $\text{max_norm}$으로 줄입니다.
- 장점: 그래디언트의 방향은 그대로 유지하면서 크기만 조절하기 때문에, 학습의 방향성을 해치지 않으면서 안정성만 높일 수 있습니다. 이 방식이 압도적으로 널리 사용됩니다.
3. 적용 시점
그래디언트 클리핑은 다음과 같은 순서로 적용됩니다.
- 손실 함수에 대한 그래디언트를 계산합니다 (e.g., `loss.backward()`).
- (여기에 적용) 옵티마이저가 이 그래디언트를 사용하여 가중치를 업데이트하기 직전에 클리핑을 수행합니다. (e.g., `torch.nn.utils.clip_grad_norm_()`)
- 옵티마이저로 가중치를 업데이트합니다 (e.g., `optimizer.step()`).
27. 러닝레이트 스케줄(워밍업, 코사인 디케이)의 수식과 직관을 설명하세요.
고정된 학습률(Learning Rate)을 사용하는 대신, 학습 진행 상황에 따라 학습률을 동적으로 조절하는 학습률 스케줄(Learning Rate Schedule)을 사용하면 더 빠르고 안정적인 수렴을 유도할 수 있습니다. 워밍업(Warmup)과 코사인 감쇠(Cosine Decay)는 현재 가장 널리 쓰이는 효과적인 스케줄 조합입니다.
1. 워밍업 (Warmup)
- 목적: 학습 초기에 모델 가중치는 무작위로 초기화되어 매우 불안정한 상태입니다. 이때 처음부터 큰 학습률을 사용하면 모델이 발산할 위험이 큽니다. 워밍업은 학습 초기에 매우 작은 학습률에서 시작하여 점차 목표 학습률까지 선형적으로 증가시켜, 모델이 안정적으로 학습을 시작하도록 돕는 단계입니다.
- 수식: $T_{\text{warm}}$ 스텝 동안 워밍업을 진행하고, 목표 최대 학습률이 $\eta_{\max}$일 때, $$ \eta_t = \eta_{\max} \cdot \frac{t}{T_{\text{warm}}} \quad (\text{for } t \le T_{\text{warm}}) $$
- 직관: "차가운 엔진을 예열하듯이" 모델이 초반의 큰 그래디언트 충격에 대비할 시간을 주는 것과 같습니다.
2. 코사인 감쇠 (Cosine Decay / Cosine Annealing)
- 목적: 워밍업이 끝난 후, 학습이 진행됨에 따라 모델은 최적점에 가까워집니다. 이때는 세밀한 조정을 위해 학습률을 점차 줄여나가는 것이 좋습니다. 코사인 감쇠는 학습률을 코사인 함수의 모양처럼 부드럽게 감소시키는 방법입니다.
- 수식: 전체 학습 스텝이 $T$이고, 최소 학습률이 $\eta_{\min}$일 때, $$ \eta_t = \eta_{\min} + \frac{1}{2}(\eta_{\max} - \eta_{\min}) \left(1 + \cos\left(\frac{\pi t}{T}\right)\right) $$
- 직관:
- 학습 초기($t \approx 0$)에는 코사인 값이 1에 가까워 $\eta_t \approx \eta_{\max}$가 됩니다. 큰 보폭으로 빠르게 최적점을 향해 나아갑니다.
- 학습 후기($t \approx T$)에는 코사인 값이 -1에 가까워 $\eta_t \approx \eta_{\min}$이 됩니다. 작은 보폭으로 최적점 주변을 섬세하게 탐색하여 수렴의 질을 높입니다.
이 두 가지를 결합하여, "천천히 시작해서(Warmup), 빠르게 나아가다가, 부드럽게 마무리하는(Cosine Decay)" 매우 효과적인 학습률 스케줄을 만들 수 있습니다.
28. He/LeCun 초기화가 필요한 이유와 분산을 유도하세요.
가중치 초기화(Weight Initialization)는 딥러닝 모델의 학습 성패를 좌우하는 매우 중요한 첫 단계입니다. He 초기화와 LeCun 초기화는 층을 거치면서 신호(활성값)가 사라지거나(vanishing) 폭주하는(exploding) 현상을 막기 위해, "층의 입출력 분산을 동일하게 유지하자"는 원칙에 따라 설계된 대표적인 기법들입니다.
1. 문제점: 잘못된 초기화의 비극
- 너무 작은 가중치: 층을 지날수록 활성값의 분산이 점점 줄어들어 0에 수렴합니다. 결국 뒤쪽 층에는 아무런 신호가 전달되지 않아 학습이 불가능해집니다. (Vanishing Activations)
- 너무 큰 가중치: 반대로 분산이 점점 커져 신호가 폭주하고, 이는 그래디언트 폭주로 이어져 학습을 발산시킵니다. (Exploding Activations)
2. 목표: 분산 보존
안정적인 학습을 위해서는 각 층의 입력 분산과 출력 분산이 같아야 합니다. 즉, $\mathrm{Var}(\text{입력}) = \mathrm{Var}(\text{출력})$을 만족해야 합니다.
한 층의 연산을 $y = Wx + b$라고 할 때, 출력 $y$의 분산은 다음과 같이 계산됩니다. (입력 $x$와 가중치 $W$의 평균이 0이고 서로 독립이라고 가정)
$$ \mathrm{Var}(y) = n_{\text{in}} \cdot \mathrm{Var}(W) \cdot \mathrm{Var}(x) $$
여기서 $n_{\text{in}}$은 입력 뉴런의 수(fan-in)입니다.
우리의 목표 $\mathrm{Var}(y) \approx \mathrm{Var}(x)$를 만족시키려면, $n_{\text{in}} \cdot \mathrm{Var}(W) \approx 1$ 이어야 합니다. 따라서 이상적인 가중치의 분산은 다음과 같습니다.
$$ \mathrm{Var}(W) = \frac{1}{n_{\text{in}}} $$
3. LeCun 초기화 (for tanh, sigmoid)
LeCun 초기화는 위에서 유도한 $\mathrm{Var}(W) = \frac{1}{n_{\text{in}}}$을 그대로 사용합니다. 이는 활성화 함수가 `tanh`나 `sigmoid`처럼 원점 근처에서 선형(linear)처럼 동작할 때 잘 작동합니다.
- 분산: $\mathrm{Var}(W) = \frac{1}{n_{\text{in}}}$
- 사용: LeCun 초기화는 특히 자체 정규화(self-normalizing) 특성을 가진 SELU 활성화 함수와 함께 사용할 때 권장됩니다.
4. He 초기화 (for ReLU 계열)
ReLU 활성화 함수는 입력이 0보다 작으면 출력을 0으로 만들어버립니다. 이 때문에 입력 데이터 분산의 절반이 소실됩니다.
- ReLU의 영향: ReLU를 통과한 후의 분산은 이전 분산의 약 절반이 됩니다. ($\mathrm{Var}(\text{ReLU}(y)) \approx \frac{1}{2} \mathrm{Var}(y)$)
- 분산 보정: 이 손실된 분산을 보상하기 위해, 가중치의 분산을 2배로 늘려주어야 합니다.
$$ \mathrm{Var}(W) = \frac{2}{n_{\text{in}}} $$
- 분산: $\mathrm{Var}(W) = \frac{2}{n_{\text{in}}}$
- 사용: ReLU, LeakyReLU, PReLU 등 ReLU 계열 활성화 함수를 사용하는 현대적인 네트워크에서 표준으로 사용됩니다.
이 분산 값을 가지도록 가중치를 정규분포나 균등분포에서 샘플링하여 초기화합니다. 이 간단한 기법만으로도 훨씬 깊은 네트워크를 안정적으로 학습시킬 수 있습니다.
29. Focal Loss가 클래스 불균형에서 어떻게 작동하는지 수식으로 설명하세요.
포컬 로스(Focal Loss)는 객체 탐지(Object Detection)와 같이 극심한 클래스 불균형(class imbalance) 상황에서 표준 교차 엔트로피(Cross-Entropy, CE) 손실의 한계를 극복하기 위해 설계된 손실 함수입니다.
1. 문제점: 쉬운 샘플의 반란
객체 탐지 모델은 수많은 후보 영역(anchor box) 중 대부분이 배경(background)인 이미지를 처리합니다. 모델은 이 배경 영역을 '배경'이라고 쉽게 예측할 수 있습니다.
표준 CE 손실은 모든 샘플의 손실을 동등하게 합산합니다. 이 때문에 수백만 개의 "쉬운" 배경 샘플에서 발생하는 작은 손실값들이 모여, 우리가 정말 학습하고 싶은 소수의 "어려운" 객체 샘플의 손실값을 압도해버립니다. 결국 모델은 객체를 제대로 탐지하는 대신, 배경만 잘 맞추는 방향으로 학습됩니다.
2. 핵심 아이디어: 어려운 샘플에 집중하기!
포컬 로스의 핵심 아이디어는 "쉽게 맞추는 샘플의 손실 기여도는 대폭 줄이고, 어렵게 틀리는 샘플에 집중하자"는 것입니다. 이를 위해 CE 손실에 조절 계수(modulating factor)를 곱해줍니다.
3. 수식 분석
교차 엔트로피 (CE) 손실: 정답 클래스에 대한 예측 확률이 $p_t$일 때,
$$ \text{CE}(p_t) = -\log(p_t) $$
포컬 로스 (Focal Loss, FL):
$$ \text{FL}(p_t) = -(1-p_t)^\gamma \log(p_t) $$
- $(1-p_t)^\gamma$ (조절 계수): 이 항이 포컬 로스의 핵심입니다.
- 쉬운 샘플 ($p_t \to 1$): $p_t$가 1에 가까우면 $(1 - p_t)$는 0에 가까워집니다. 따라서 이 샘플의 손실은 거의 0으로 수렴하여 학습에 거의 영향을 미치지 않습니다.
- 어려운 샘플 ($p_t \to 0$): $p_t$가 0에 가까우면 $(1 - p_t)$는 1에 가까워집니다. 따라서 이 샘플의 손실은 원래 CE 손실과 거의 동일하게 유지되어 학습에 큰 영향을 미칩니다.
- $\gamma$ (감마, Focusing Parameter): 조절의 강도를 제어하는 하이퍼파라미터입니다. $\gamma$가 클수록 쉬운 샘플에 대한 억제 효과가 커집니다 ($\gamma=0$이면 CE와 동일, 보통 $\gamma=2$를 사용).
- $\alpha$ (가중치 계수, 선택 사항): 클래스별 가중치를 추가로 부여하여 불균형을 한 번 더 보정할 수 있습니다. ($\text{FL}(p_t) = -\alpha_t (1-p_t)^\gamma \log(p_t)$)
결과적으로, 포컬 로스는 방대한 양의 쉬운 샘플들이 학습을 방해하지 않도록 자동으로 필터링하고, 모델이 소수의 중요하고 어려운 샘플에 집중하여 학습하도록 유도함으로써 클래스 불균형 문제를 효과적으로 해결합니다.
30. 클래스 불균형 대응 전략(리샘플링/클래스 가중/임계값 튜닝)을 비교하세요.
클래스 불균형(Class Imbalance)은 데이터셋에서 특정 클래스의 샘플 수가 다른 클래스에 비해 압도적으로 많거나 적은 상황을 말합니다. 이 경우 모델은 다수 클래스만 예측해도 높은 정확도(accuracy)를 얻을 수 있기 때문에, 소수 클래스를 제대로 학습하지 못하는 문제가 발생합니다. 이를 해결하기 위한 전략은 크게 세 가지 범주로 나눌 수 있습니다.
1. 데이터 레벨 접근법: 리샘플링 (Resampling)
데이터 자체의 분포를 조작하여 클래스 간의 균형을 맞추는 방법입니다.
- 언더샘플링 (Undersampling)
- 방법: 다수 클래스의 데이터를 무작위로 제거하여 소수 클래스의 데이터 수와 비슷하게 맞춥니다.
- 장점: 전체 데이터 크기가 줄어 학습 속도가 빨라집니다.
- 단점: 다수 클래스의 중요한 정보를 잃어버릴 위험이 있습니다.
- 오버샘플링 (Oversampling)
- 방법: 소수 클래스의 데이터를 복제하거나, SMOTE(Synthetic Minority Over-sampling Technique)와 같이 기존 소수 클래스 데이터를 기반으로 새로운 합성 데이터를 생성하여 데이터 수를 늘립니다.
- 장점: 정보 손실 없이 클래스 균형을 맞출 수 있습니다.
- 단점: 단순 복제는 과적합을 유발할 수 있으며, SMOTE는 노이즈를 증폭시킬 수 있습니다.
2. 알고리즘 레벨 접근법: 클래스 가중 (Class Weighting) / 비용 민감 학습
알고리즘(모델의 손실 함수)을 수정하여 불균형 문제를 해결하는 방법입니다.
- 방법: 손실 함수를 계산할 때, 각 클래스에 다른 가중치를 부여합니다. 일반적으로 데이터 수가 적은 소수 클래스의 오분류에 더 큰 페널티(가중치)를 부여합니다. $$ \text{Loss} = - \sum_{c=1}^{C} w_c \cdot y_c \log(\hat{y}_c) $$ (여기서 가중치 $w_c$는 보통 해당 클래스의 빈도에 반비례하게 설정합니다: $w_c \propto 1/\text{frequency}(c)$)
- 장점: 데이터셋을 직접 건드리지 않아 정보 손실이나 과적합 위험이 적습니다. 대부분의 머신러닝 프레임워크에서 쉽게 적용할 수 있습니다.
- 단점: 최적의 가중치를 찾는 것이 또 다른 하이퍼파라미터 튜닝 과정이 될 수 있습니다.
3. 예측 레벨 접근법: 임계값 튜닝 (Threshold Tuning)
모델의 학습이 끝난 후, 예측 결과를 해석하는 단계를 수정하는 방법입니다.
- 방법: 로지스틱 회귀나 신경망과 같은 모델은 클래스에 대한 확률을 출력합니다. 보통 이 확률이 0.5를 넘으면 양성(positive) 클래스로 분류합니다. 하지만 불균형 데이터셋에서는 이 결정 임계값(decision threshold)이 최적이 아닐 수 있습니다. 검증 데이터셋을 사용하여 F1-score나 PR-AUC와 같은 목표 평가지표를 최대화하는 새로운 임계값을 찾습니다. (예: 0.5 대신 0.3)
- 장점: 구현이 매우 간단하고, 모델 자체를 변경할 필요가 없습니다. 특히 비즈니스 요구사항(예: "재현율을 최소 80% 이상 확보해야 함")에 맞춰 모델의 행동을 직접적으로 조정할 수 있습니다.
- 단점: 근본적인 모델 학습 문제를 해결하는 것이 아니라, 사후 보정 방식입니다.
| 리샘플링 | 데이터셋 | 직관적, 모델에 독립적 | 정보 손실 또는 과적합 위험 |
| 클래스 가중 | 손실 함수 | 정보 손실 없음, 구현 용이 | 최적 가중치 튜닝 필요 |
| 임계값 튜닝 | 모델 예측 | 매우 간단, 비즈니스 목표 직접 반영 | 근본적인 해결책은 아님 |
실제 문제에서는 이 전략들을 단독으로 사용하기보다, 상황에 맞게 여러 전략을 조합하여 사용하는 경우가 많습니다.
31. 모델 칼리브레이션(ECE)과 Temperature Scaling을 설명하세요.
모델 칼리브레이션(Model Calibration)은 모델이 내놓는 예측 확률(confidence)을 실제 정확도(accuracy)에 맞게 보정하는 과정을 말합니다. 이상적으로, 모델이 80%의 신뢰도로 예측한 샘플들을 모아보면, 그중 80%가 실제로 정답이어야 합니다. 하지만 현대의 딥러닝 모델들은 종종 과신(over-confidence)하는 경향이 있어 보정이 필요합니다.
1. 문제점: 부정확한 자신감
신경망은 손실을 최소화하는 과정에서 정답에 대해서는 매우 높은 확률을, 오답에 대해서는 매우 낮은 확률을 출력하도록 학습됩니다. 이 때문에 모델이 틀린 예측에 대해서도 99%와 같은 터무니없는 자신감을 보이는 오정렬(miscalibration) 상태가 되기 쉽습니다. 이는 모델의 예측을 신뢰하기 어렵게 만듭니다.
2. ECE (Expected Calibration Error): 칼리브레이션 측정하기
ECE는 모델의 칼리브레이션 정도를 측정하는 대표적인 지표입니다.
- 계산 방법:
- 모든 예측 결과를 신뢰도 구간(예: 0-10%, 10-20%, ..., 90-100%)에 따라 여러 버킷(bucket)으로 나눕니다.
- 각 버킷마다 평균 신뢰도(Avg. Confidence)와 실제 정확도(Accuracy)를 계산합니다.
- 각 버킷에 대해 |정확도 - 평균 신뢰도|의 차이를 구하고, 버킷에 속한 샘플 수에 비례하여 가중 평균을 냅니다.
- 수식: $M$개의 버킷이 있고, $m$번째 버킷에 $B_m$개의 샘플이 있을 때, $$ \text{ECE} = \sum_{m=1}^{M} \frac{|B_m|}{n} \left| \text{acc}(B_m) - \text{conf}(B_m) \right| $$
- 해석: ECE 값이 0에 가까울수록 칼리브레이션이 잘 된 모델입니다.
3. Temperature Scaling: 간단하고 강력한 보정 기법
온도 스케일링(Temperature Scaling)은 이미 학습된 모델의 정확도는 바꾸지 않으면서 칼리브레이션만 간단하게 보정하는 후처리(post-processing) 기법입니다.
- 아이디어: 소프트맥스 함수의 출력을 "부드럽게(soften)" 만들어 과신을 완화합니다.
- 방법:
- 모델의 마지막 소프트맥스 함수에 들어가기 직전의 로짓(logit) $z$를 구합니다.
- 이 로짓 벡터를 온도(Temperature)라는 단일 스칼라 파라미터 $T$로 나누어 줍니다.
- $T$로 조절된 로짓으로 소프트맥스 확률을 다시 계산합니다.
- 수식: $$ \hat{y} = \text{softmax}(z / T) $$
- 온도 T의 효과:
- $T=1$: 원래의 소프트맥스와 동일합니다.
- $T>1$: 로짓 값들의 차이를 줄여 확률 분포를 더 균등하게 만듭니다. (자신감 감소)
- $0 < T < 1$: 로짓 값들의 차이를 늘려 확률 분포를 더 뾰족하게 만듭니다. (자신감 증가)
- 최적의 T 찾기: 별도의 검증 데이터셋(validation set)을 사용하여 ECE나 NLL(Negative Log-Likelihood)을 최소화하는 최적의 T값 하나만 찾으면 됩니다. 이는 매우 빠르고 간단한 최적화 과정입니다.
32. Mixup과 CutMix의 수식과 결정경계에 미치는 영향을 설명하세요.
Mixup과 CutMix는 단순한 이미지 변환(회전, 자르기 등)을 넘어, 여러 이미지를 섞어 새로운 학습 데이터를 만드는 매우 효과적인 데이터 증강(data augmentation) 기법입니다. 두 기법 모두 모델이 학습 데이터의 패턴을 암기하는 것을 방해하여 정규화 효과를 주고 일반화 성능을 크게 향상시킵니다.
1. 믹스업 (Mixup)
- 아이디어: 두 개의 이미지를 마치 투명도를 조절해 겹치듯이 선형적으로 혼합(blend)하고, 레이블도 같은 비율로 섞어줍니다.
- 수식: 두 개의 데이터 샘플 $(x_i, y_i)$와 $(x_j, y_j)$에 대해, $$ \tilde{x} = \lambda x_i + (1-\lambda) x_j $$ $$ \tilde{y} = \lambda y_i + (1-\lambda) y_j $$ 혼합 비율 $\lambda$는 보통 대칭적인 베타 분포 $\text{Beta}(\alpha, \alpha)$에서 샘플링합니다 ($\alpha$는 하이퍼파라미터, 보통 0.2~0.4).
- 결정 경계에 미치는 영향: Mixup은 데이터 포인트들 사이의 빈 공간을 가상의 데이터로 채워주는 효과가 있습니다. 모델은 이 "애매한" 데이터들을 학습해야 하므로, 클래스 사이의 결정 경계(decision boundary)를 더 부드럽게(smooth) 만들도록 유도됩니다. 이는 모델이 예측에 대해 덜 확신하게 만들고, 갑작스러운 예측 변화를 줄여 일반화에 도움을 줍니다.
2. 컷믹스 (CutMix)
- 아이디어: 한 이미지에서 무작위로 사각형 패치(patch)를 잘라(cut), 다른 이미지의 같은 위치에 붙여넣습니다(mix). 레이블은 잘라낸 패치의 면적 비율에 따라 섞어줍니다.
- 수식: $$ \tilde{x} = M \odot x_i + (1-M) \odot x_j $$ $M$은 붙여넣을 영역만 1이고 나머지는 0인 이진 마스크(binary mask)입니다. $\odot$는 원소별 곱셈입니다. $$ \tilde{y} = \lambda y_i + (1-\lambda) y_j $$ 여기서 $\lambda$는 이미지 $x_i$에서 잘려나가지 않고 남아있는 영역의 비율입니다.
- 결정 경계에 미치는 영향: CutMix는 Mixup처럼 비현실적인 블렌딩 이미지를 만들지 않습니다. 대신, 모델이 이미지의 일부만 보고도 객체를 인식하도록 강제합니다. 이는 모델이 특정 객체가 특정 배경에만 나타난다는 식의 "쉬운" 단서에 의존하는 것을 막아줍니다. 모델은 더 지역적인(local) 특징에 집중하게 되어 위치 특정(localization) 능력이 향상되고, 이는 분류뿐만 아니라 객체 탐지 같은 태스크에서도 큰 성능 향상을 가져옵니다.
| 혼합 방식 | 전체 이미지 선형 보간 (블렌딩) | 이미지 패치 잘라 붙이기 |
| 생성 데이터 | 비현실적이지만 부드러운 이미지 | 현실적이지만 두 객체가 공존 |
| 주요 효과 | 결정 경계 평활화, 정규화 | 지역적 특징 학습, 위치 특정 능력 향상 |
| 성능 | 강력함 | 이미지 분류/탐지에서 Mixup보다 더 강력한 경향 |
33. 데이터 리키지(Data Leakage)와 안전한 전처리/검증 파이프라인을 설명하세요.
데이터 리키지(Data Leakage)는 모델을 학습시킬 때, 원래는 접근할 수 없어야 할 미래의 정보나 테스트 데이터의 정보가 학습 과정에 실수로 스며드는 현상을 말합니다. 이는 모델 성능을 비현실적으로 부풀려서, 개발 중에는 성능이 높아 보이지만 실제 서비스에 배포하면 처참한 결과를 낳는 주요 원인입니다.
1. 데이터 리키지의 흔한 예시: 전처리 순서의 오류
가장 흔한 실수는 데이터를 분할하기 전에 전처리를 수행하는 것입니다.
잘못된 파이프라인 :
- 전체 데이터셋을 불러온다.
- 전체 데이터셋에 대해 StandardScaler를 `fit_transform` 한다. (리키지 발생!)fit 과정에서 테스트 데이터의 평균과 표준편차까지 학습에 사용되었습니다.
- 전처리된 데이터를 훈련/테스트 세트로 분할한다.
- 모델을 훈련하고 평가한다. → 결과가 비현실적으로 높게 나옴!
2. 안전한 전처리/교차 검증 파이프라인
데이터 리키지를 방지하기 위한 황금률은 "모든 종류의 fit(학습)은 오직 훈련(train) 데이터로만 수행해야 한다"는 것입니다.
올바른 파이프라인:
- 가장 먼저 데이터를 분할한다: 훈련 세트와 테스트(또는 검증) 세트로 나눕니다.
- 훈련 데이터로만 fit 한다: StandardScaler와 같은 전처리기 객체를 훈련 세트 데이터에만 `fit` 합니다. (여기서 평균/표준편차를 학습)
- 모든 데이터를 transform 한다: `fit`된 전처리기 객체를 사용하여 훈련 세트와 테스트 세트 모두를 `transform` 합니다.
- 모델을 훈련하고 평가합니다.
교차 검증(Cross-Validation) 시: 위의 올바른 파이프라인 전체가 교차 검증의 각 폴드(fold) 내부에서 반복되어야 합니다. Scikit-learn의 `Pipeline` 객체를 사용하면 이러한 과정을 실수 없이 자동화할 수 있습니다.
3. 시계열 데이터에서의 리키지
시계열 데이터에서는 무작위 분할 자체가 리키지입니다. 미래의 데이터를 사용하여 과거를 예측하는 꼴이 되기 때문입니다. 따라서 시계열 데이터는 반드시 시간 순서를 유지하는 방식으로 분할해야 합니다. (예: `TimeSeriesSplit`, Walk-forward Validation)
34. 로지스틱 회귀의 링크함수와 결정경계, 정규화의 효과를 설명하세요.
로지스틱 회귀(Logistic Regression)는 이름에 '회귀'가 들어가지만 실제로는 이진 분류(binary classification)를 위한 가장 기본적인 선형 모델입니다. 데이터가 특정 클래스에 속할 확률을 예측합니다.
1. 핵심 구조: 선형 모델에서 확률로
- 선형 결합: 로지스틱 회귀는 입력 특성 $x$에 가중치 $w$를 곱하고 편향 $b$를 더하는 선형 함수로 시작합니다. 이 결과값을 로짓(logit)이라고 합니다. $$ \text{logit} = z = w^\top x + b $$
- 링크 함수 (Link Function): 로짓 $z$는 $(-\infty, \infty)$ 범위의 값을 가집니다. 이를 우리가 원하는 확률값, 즉 $[0, 1]$ 범위로 매핑하기 위해 시그모이드(Sigmoid) 함수를 사용합니다. 이 시그모이드 함수가 바로 로지스틱 회귀의 링크 함수입니다. 시그모이드 함수를 통과하면, 로짓이 양수이면 0.5보다 큰 확률, 음수이면 0.5보다 작은 확률이 출력됩니다. $$ p(y=1|x) = \sigma(z) = \frac{1}{1 + e^{-z}} $$
2. 결정 경계 (Decision Boundary)
모델은 보통 확률이 0.5를 넘으면 클래스 1로, 넘지 않으면 클래스 0으로 예측합니다. 확률이 정확히 0.5가 되는 지점이 바로 두 클래스를 나누는 경계입니다.
$p=0.5$가 되려면 링크 함수 입력인 로짓 $z$가 0이어야 합니다.
따라서 결정 경계는 $z = w^\top x + b = 0$을 만족하는 지점들입니다.
이는 $x$에 대한 선형 방정식이므로, 로지스틱 회귀의 결정 경계는 항상 선형(hyperplane)입니다. 2차원에서는 직선, 3차원에서는 평면의 형태를 가집니다.
3. 정규화의 효과 (Regularization)
모델이 훈련 데이터에 과적합되는 것을 방지하기 위해 로지스틱 회귀의 손실 함수에도 정규화 항을 추가할 수 있습니다.
- L2 정규화 (Ridge): 손실 함수에 가중치 제곱합($\lambda \|w\|_2^2$)을 더합니다.
- 효과: 가중치 값들을 전반적으로 작게 만들어 결정 경계를 부드럽게 합니다. 특성 간 상관관계가 높은 다중공선성(multicollinearity) 문제가 있을 때 모델을 안정시키는 데 효과적입니다.
- L1 정규화 (Lasso): 손실 함수에 가중치 절댓값의 합($\lambda \|w\|_1$)을 더합니다.
- 효과: 덜 중요한 특성의 가중치를 정확히 0으로 만드는 경향이 있습니다. 이는 자동으로 특성 선택(feature selection)을 수행하는 효과를 낳아 모델을 더 단순하고 해석하기 쉽게 만듭니다.
35. GMM과 EM 알고리즘의 E/M 스텝 수식을 쓰고 직관을 설명하세요.
가우시안 혼합 모델(Gaussian Mixture Model, GMM)은 전체 데이터가 여러 개의 가우시안(정규) 분포가 섞여서 생성되었다고 가정하는 강력한 비지도 군집화(unsupervised clustering) 알고리즘입니다. EM(Expectation-Maximization) 알고리즘은 GMM의 파라미터(각 가우시안의 평균, 분산, 혼합 비율)를 추정하는 핵심적인 방법론입니다.
1. GMM의 기본 모델
데이터 포인트 $x$가 $K$개의 가우시안 분포 중 하나로부터 생성될 확률은 다음과 같습니다.
$$ p(x) = \sum_{k=1}^{K} \pi_k \mathcal{N}(x | \mu_k, \Sigma_k) $$
- $\pi_k$: $k$번째 가우시안 분포가 선택될 혼합 비율(mixing coefficient). ($\sum \pi_k = 1$)
- $\mathcal{N}(x | \mu_k, \Sigma_k)$: $k$번째 가우시안 분포의 평균 $\mu_k$와 공분산 $\Sigma_k$.
2. EM 알고리즘: 닭과 달걀 문제 풀기
문제는 우리가 어떤 데이터가 어떤 가우시안에서 왔는지(잠재 변수) 모른다는 것입니다. EM 알고리즘은 이 "닭이 먼저냐, 달걀이 먼저냐" 문제를 두 단계를 반복하며 점진적으로 해결합니다.
E-스텝 (Expectation Step): 기대값을 계산하는 단계
- 직관: 현재 알고 있는 가우시안 파라미터($\pi, \mu, \Sigma$)를 바탕으로, 각 데이터 포인트 $x_n$이 어떤 가우시안($k$)에서 왔을지에 대한 확률을 "추측"합니다. 이 확률을 책임도(responsibility)라고 부릅니다.
- 수식: 데이터 $x_n$에 대한 $k$번째 가우시안의 책임도 $\gamma_{nk}$는 다음과 같습니다. (분모는 $x_n$이 나타날 총 확률이고, 분자는 그중 $k$번째 가우시안이 기여했을 부분입니다.) $$ \gamma_{nk} = \frac{\pi_k \mathcal{N}(x_n | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(x_n | \mu_j, \Sigma_j)} $$
M-스텝 (Maximization Step): 파라미터를 업데이트하는 단계
- 직관: E-스텝에서 계산한 책임도($\gamma_{nk}$)를 "부드러운 가중치"로 사용하여, 각 가우시안의 파라미터들을 다시 최적화합니다. 즉, 각 가우시안은 자신에게 속할 확률이 높은 데이터들에 더 큰 영향을 받아 자신의 위치와 모양을 조정합니다.
- 수식:
- $N_k = \sum_{n=1}^{N} \gamma_{nk}$ (k번째 가우시안에 할당된 데이터의 유효 개수)
- $\pi_k^{\text{new}} = \frac{N_k}{N}$ (새로운 혼합 비율)
- $\mu_k^{\text{new}} = \frac{1}{N_k} \sum_{n=1}^{N} \gamma_{nk} x_n$ (새로운 평균, 책임도로 가중 평균)
- $\Sigma_k^{\text{new}} = \frac{1}{N_k} \sum_{n=1}^{N} \gamma_{nk} (x_n - \mu_k^{\text{new}})(x_n - \mu_k^{\text{new}})^\top$ (새로운 공분산)
이 E-스텝과 M-스텝을 반복하면, 모델의 가능도(likelihood)가 단조롭게 증가하며 수렴하게 되고, 데이터의 숨겨진 군집 구조를 효과적으로 찾아낼 수 있습니다.
36. HMM의 Forward–Backward 알고리즘을 수식으로 설명하세요.
은닉 마르코프 모델(Hidden Markov Model, HMM)에서 Forward-Backward 알고리즘은 주어진 관측 시퀀스에 대한 추론(inference) 문제를 푸는 핵심 동적 프로그래밍 기법입니다. 구체적으로, 전체 관측 시퀀스 $o_{1:T}$를 보고 난 후, 특정 시점 $t$에 은닉 상태가 $j$였을 확률, 즉 사후 확률(posterior probability) $P(S_t=j|o_{1:T})$을 효율적으로 계산하는 데 사용됩니다.
1. Forward 알고리즘 ($\alpha$ 계산)
- 정의: $\alpha_t(j) = P(o_{1:t}, S_t=j)$
- 의미: 처음부터 시점 $t$까지의 관측 시퀀스($o_{1:t}$)가 나타나고, 동시에 시점 $t$의 상태가 $j$일 확률입니다.
- 직관: "과거의 모든 경로를 고려하여 현재까지 도달할 확률"을 계산합니다.
- 수식:
- 초기화 (t=1): (초기 상태가 $j$일 확률 × 상태 $j$에서 첫 관측 $o_1$이 나올 확률) $$ \alpha_1(j) = \pi_j b_j(o_1) $$
- 귀납 (t → t+1): ($\alpha_t(i)$: 시점 $t$에 상태 $i$에 도달할 확률, $a_{ij}$: $i$에서 $j$로 전이할 확률. 이 둘을 곱해 모든 이전 상태 $i$에 대해 합하면 시점 $t+1$에 상태 $j$로 도달할 총 확률이 됩니다. 여기에 상태 $j$에서 관측 $o_{t+1}$이 나올 확률을 곱합니다.) $$ \alpha_{t+1}(j) = \left( \sum_i \alpha_t(i) a_{ij} \right) b_j(o_{t+1}) $$
2. Backward 알고리즘 ($\beta$ 계산)
- 정의: $\beta_t(i) = P(o_{t+1:T} | S_t=i)$
- 의미: 시점 $t$에 상태가 $i$였다고 가정했을 때, 그 이후의 관측 시퀀스($o_{t+1:T}$)가 나타날 조건부 확률입니다.
- 직관: "현재 위치에서 시작하여 미래의 관측들을 설명할 확률"을 계산합니다.
- 수식:
- 초기화 (t=T): (마지막 시점에서는 고려할 미래가 없으므로 확률을 1로 정의합니다.) $$ \beta_T(i) = 1 $$
- 귀납 (t+1 → t): (상태 $i$에서 다음 상태 $j$로 전이하고($a_{ij}$), $j$에서 $o_{t+1}$을 관측하고($b_j(o_{t+1})$), 그 후 $j$에서부터 끝까지의 경로 확률($\beta_{t+1}(j)$)을 곱합니다. 이를 모든 다음 상태 $j$에 대해 합합니다.) $$ \beta_t(i) = \sum_j a_{ij} b_j(o_{t+1}) \beta_{t+1}(j) $$
3. 결과 결합
Forward 확률 $\alpha_t(j)$와 Backward 확률 $\beta_t(j)$를 곱하면, 시점 $t$에 상태가 $j$이면서 전체 관측 시퀀스가 나타날 결합 확률을 얻을 수 있습니다.
$$ P(S_t=j, o_{1:T}) = \alpha_t(j) \beta_t(j) $$
이를 전체 상태에 대해 정규화하면 우리가 원했던 사후 확률을 얻게 됩니다.
$$ P(S_t=j|o_{1:T}) = \frac{\alpha_t(j) \beta_t(j)}{\sum_k \alpha_t(k) \beta_t(k)} $$
37. Viterbi 알고리즘의 점화식과 복원 과정을 설명하세요.
비터비(Viterbi) 알고리즘은 HMM(은닉 마르코프 모델)에서 디코딩(decoding) 문제를 푸는 데 사용되는 동적 프로그래밍 알고리즘입니다. 즉, 주어진 관측 시퀀스 $o_{1:T}$를 생성했을 가장 가능성 높은(most likely) 은닉 상태 시퀀스 $s_{1:T}$를 찾아냅니다. Forward-Backward 알고리즘이 각 시점의 상태 확률을 계산하는 것과 달리, 비터비는 최적의 "경로" 전체를 찾아냅니다.
1. 핵심 아이디어
비터비 알고리즘은 "최적의 경로의 부분 경로 역시 최적이다"라는 원칙에 기반합니다. 시점 $t$까지의 최적 경로를 알면, 이를 확장하여 시점 $t+1$까지의 최적 경로를 찾을 수 있습니다. 이를 위해 두 가지 정보를 기록하며 전진합니다.
- $\delta_t(j)$: 시점 $t$에 상태 $j$로 끝나는 경로 중 가장 높은 확률.
- $\psi_t(j)$: 위 가장 높은 확률을 만든, 시점 $t-1$의 상태 (경로를 기억하기 위한 백포인터).
2. 점화식 (재귀 관계)
- 초기화 (t=1): (시점 1에 상태 $j$에서 시작하여 첫 관측 $o_1$을 볼 확률) $$ \delta_1(j) = \pi_j b_j(o_1) $$ $$ \psi_1(j) = 0 $$
- 귀납 (t → t+1): (시점 $t$까지 상태 $i$로 끝나는 최적 경로 확률 $\delta_t(i)$에 $i \to j$ 전이 확률 $a_{ij}$를 곱한 값들 중 최댓값을 찾고, 여기에 상태 $j$에서 $o_{t+1}$을 관측할 확률 $b_j(o_{t+1})$을 곱합니다.) $$ \delta_{t+1}(j) = \max_i(\delta_t(i) a_{ij}) \cdot b_j(o_{t+1}) $$ 백포인터 저장: (위 최댓값을 만든 시점 $t$의 상태 $i$를 기록해 둡니다.) $$ \psi_{t+1}(j) = \arg\max_i(\delta_t(i) a_{ij}) $$
3. 경로 복원 과정 (Backtracking)
- 종료: 모든 시점에 대해 $\delta$와 $\psi$를 계산한 후, 마지막 시점 $T$에서 가장 높은 확률을 가진 상태를 찾습니다. 이것이 최적 경로의 마지막 상태입니다. $$ s_T^* = \arg\max_j \delta_T(j) $$
- 역추적: 이제 백포인터를 따라 시간을 거슬러 올라가며 경로를 완성합니다. (for $t = T-1, T-2, \dots, 1$) $$ s_t^* = \psi_{t+1}(s_{t+1}^*) $$
수치 안정성: 실제 구현에서는 확률값들이 매우 작아져 언더플로우가 발생할 수 있으므로, 확률 대신 로그(log) 값을 사용하여 덧셈과 뺄셈으로 계산하는 것이 일반적입니다.
38. PCA Whitening과 ZCA Whitening의 수식과 차이를 설명하세요.
화이트닝(Whitening) 또는 스피어링(Sphering)은 데이터를 전처리하는 기법 중 하나로, 데이터의 특징(feature)들이 서로 상관관계가 없고(uncorrelated) 단위 분산(unit variance)을 갖도록 변환하는 과정입니다. 결과적으로 변환된 데이터의 공분산 행렬은 단위 행렬(I)이 됩니다.
1. 기본 설정
- 데이터 행렬 $X$는 각 행이 샘플이고, 평균이 0으로 맞춰져 있다고 가정합니다.
- $X$의 공분산 행렬 $\Sigma = \frac{1}{N} X^\top X$를 고유값 분해하면 $\Sigma = U \Lambda U^\top$가 됩니다.
- $U$: 고유벡터(eigenvectors)로 이루어진 직교 행렬. 데이터의 주성분 방향을 나타냅니다.
- $\Lambda$: 고유값(eigenvalues)으로 이루어진 대각 행렬. 각 주성분 방향의 분산 크기를 나타냅니다.
2. PCA 화이트닝
PCA 화이트닝은 데이터를 주성분 축으로 회전시킨 후, 각 축의 분산을 1로 정규화하는 방식입니다.
- 회전 (Rotation): 데이터를 주성분 공간으로 투영합니다. $$ X_{\text{rot}} = X U $$
- 척도 조절 (Scaling): 각 주성분 축의 분산(고유값)을 1로 만들기 위해, 고유값의 제곱근 역수를 곱해줍니다. $$ X_{\text{PCAwhite}} = X_{\text{rot}} \Lambda^{-1/2} = X U \Lambda^{-1/2} $$
결과: 변환된 데이터는 비상관이고 단위 분산을 갖습니다. 데이터의 주요 변동 방향이 새로운 좌표축과 나란하게 정렬됩니다.
3. ZCA 화이트닝 (Zero-phase Component Analysis)
ZCA 화이트닝은 PCA 화이트닝 결과물을 다시 원래의 데이터 공간으로 회전시켜, 변환된 데이터가 원래 데이터와 가장 유사하게 유지되도록 하는 방식입니다.
- PCA 화이트닝 수행: $X_{\text{PCAwhite}} = X U \Lambda^{-1/2}$
- 역회전 (Back-rotation): 다시 $U^\top$를 곱하여 원래 공간으로 되돌립니다. $$ X_{\text{ZCAwhite}} = X_{\text{PCAwhite}} U^\top = X U \Lambda^{-1/2} U^\top $$
결과: 변환된 데이터는 PCA 화이트닝과 동일하게 비상관이고 단위 분산을 갖습니다. 하지만 원래 데이터의 "모양"이나 "방향성"을 최대한 유지하기 때문에, 특히 이미지 데이터 전처리에 많이 사용됩니다. ZCA를 거친 이미지는 시각적으로 원래 이미지와 매우 유사한 형태를 띕니다.
| 공분산 행렬 | 단위 행렬 (I) | 단위 행렬 (I) |
| 변환 후 공간 | 주성분 공간 (회전됨) | 원래 데이터 공간과 최대한 유사 |
| 수식 | $X U \Lambda^{-1/2}$ | $X U \Lambda^{-1/2} U^\top$ |
| 주요 용도 | 일반적인 특징 비상관화 | 이미지 데이터 전처리 |
39. XGBoost의 2차 근사 목적과 리프 가중치의 닫힌해를 쓰세요.
XGBoost는 그래디언트 부스팅(Gradient Boosting)을 매우 효율적이고 정교하게 구현한 알고리즘입니다. XGBoost의 핵심적인 혁신 중 하나는 손실 함수를 2차 테일러 근사(second-order Taylor approximation)하여, 각 트리를 만들 때 최적의 분할 지점과 리프 값을 더 정밀하게 찾는 것입니다.
1. 2차 근사 목적 함수
$t-1$번째 트리까지의 예측이 $\hat{y}^{(t-1)}$일 때, $t$번째 트리 $f_t(x)$를 추가하여 손실을 최소화하는 것이 목표입니다. XGBoost는 손실 함수 $L(y, \hat{y})$를 $\hat{y}^{(t-1)}$ 지점에서 2차 테일러 전개하여 다음과 같이 근사합니다.
$$ \mathcal{L}^{(t)} \approx \sum_{i=1}^{N} \left[ g_i f_t(x_i) + \frac{1}{2} h_i f_t(x_i)^2 \right] + \Omega(f_t) $$
- $g_i$: 손실 함수의 1차 미분(gradient). $\frac{\partial L(y_i, \hat{y}^{(t-1)})}{\partial \hat{y}^{(t-1)}}$
- $h_i$: 손실 함수의 2차 미분(Hessian). $\frac{\partial^2 L(y_i, \hat{y}^{(t-1)})}{\partial (\hat{y}^{(t-1)})^2}$
- $\Omega(f_t) = \gamma T + \frac{1}{2} \lambda \sum_{j=1}^{T} w_j^2$: 트리의 복잡도를 제어하는 정규화(regularization) 항.
- $T$: 리프의 개수, $\gamma$: 리프 개수에 대한 페널티.
- $w_j$: $j$번째 리프의 출력값(가중치), $\lambda$: 가중치 크기에 대한 L2 페널티.
2. 최적 리프 가중치의 닫힌 해 (Closed-form Solution)
위 2차 근사 목적 함수의 놀라운 장점은, 트리의 구조가 정해지면 각 리프의 최적 가중치 $w_j^*$를 미분을 통해 직접 계산할 수 있다는 것입니다.
- 트리의 $j$번째 리프에 속하는 데이터 샘플들의 인덱스 집합을 $I_j$라고 합시다.
- 이 리프에 속한 샘플들의 그래디언트 합($G_j$)과 헤시안 합($H_j$)을 계산합니다. $$ G_j = \sum_{i \in I_j} g_i \quad , \quad H_j = \sum_{i \in I_j} h_i $$
- 목적 함수를 $w_j$에 대해 미분하여 0으로 놓고 풀면, 최적의 리프 가중치는 다음과 같습니다. $$ w_j^* = - \frac{G_j}{H_j + \lambda} $$
3. 분할 이득 (Split Gain) 계산
최적의 리프 가중치를 알고 있기 때문에, 특정 분할(split)이 얼마나 목적 함수를 개선하는지를 나타내는 이득(Gain) 또한 직접 계산할 수 있습니다.
$$ \text{Gain} = \frac{1}{2} \left[ \frac{G_L^2}{H_L + \lambda} + \frac{G_R^2}{H_R + \lambda} - \frac{(G_L + G_R)^2}{H_L + H_R + \lambda} \right] - \gamma $$
- $G_L, H_L$: 분할 후 왼쪽 노드에 속한 샘플들의 그래디언트/헤시안 합.
- $G_R, H_R$: 분할 후 오른쪽 노드에 속한 샘플들의 그래디언트/헤시안 합.
- 세 번째 항: 분할하기 전 부모 노드의 점수.
- $\gamma$: 새로운 리프가 하나 더 생기는 것에 대한 페널티.
XGBoost는 가능한 모든 분할에 대해 이 Gain 값을 계산하고, Gain이 가장 큰 분할을 선택하는 방식으로 탐욕적(greedy)으로 트리를 성장시킵니다.
40. 피처 스케일링이 SVM/KNN에 미치는 영향과 이유를 설명하세요.
피처 스케일링(Feature Scaling)은 각 피처(feature)의 값 범위를 비슷한 수준으로 맞춰주는 전처리 과정입니다. KNN과 SVM(특히 RBF 커널 사용 시)처럼 거리를 기반으로 동작하는 알고리즘들에게 피처 스케일링은 선택이 아닌 필수입니다.
1. KNN (K-Nearest Neighbors)
- 동작 원리: 새로운 데이터 포인트가 주어지면, 기존 데이터 중 가장 가까운 K개의 이웃을 찾고, 그 이웃들의 다수결 투표로 클래스를 결정합니다. 여기서 "가깝다"는 것을 유클리드 거리와 같은 거리 측도로 계산합니다.
- 스케일링이 없을 때의 문제점: 예를 들어 '나이'(범위: 20~60)와 '연봉'(범위: 30,000,000~100,000,000) 피처가 있다고 상상해 봅시다. 두 사람의 나이 차이가 10살이고 연봉 차이가 1,000,000원일 때, 거리 계산식 $\sqrt{(10)^2 + (1,000,000)^2}$에서 나이의 차이는 거의 무시됩니다. 즉, 값의 범위가 훨씬 큰 '연봉' 피처가 거리 계산을 완전히 지배하게 됩니다. 모델은 사실상 '나이' 피처를 무시하고 '연봉'만으로 이웃을 찾게 됩니다.
- 해결책: `StandardScaler`나 `MinMaxScaler`를 사용하여 모든 피처의 범위를 비슷하게 맞춰주면, 각 피처가 거리 계산에 공평하게 기여하게 되어 모델이 데이터의 진짜 구조를 학습할 수 있습니다.
2. SVM (Support Vector Machine)
- 동작 원리: 두 클래스 사이의 마진(margin)을 최대로 하는 결정 경계를 찾습니다. 특히 RBF 커널과 같은 비선형 커널을 사용할 때 거리 계산이 핵심적인 역할을 합니다.
- RBF 커널 수식: $K(x, x') = \exp(-\gamma \|x - x'\|^2)$
- 스케일링이 없을 때의 문제점: RBF 커널 수식 안에도 KNN과 마찬가지로 유클리드 거리의 제곱($\|x - x'\|^2$)이 포함되어 있습니다. 따라서 스케일링을 하지 않으면, 값의 범위가 큰 피처가 이 거리 계산을 지배하여 커널 함수의 계산을 왜곡시킵니다. 이는 결국 최적의 결정 경계를 찾는 것을 방해하고 모델 성능을 심각하게 저하시킵니다.
결론: 거리 기반 알고리즘에게 피처 스케일링은 "성능을 약간 올려주는 튜닝"이 아니라, "알고리즘이 제대로 동작하기 위한 전제조건"에 가깝습니다.
41. 다중공선성과 VIF(Variance Inflation Factor)를 정의하고 해석하세요.
다중공선성(Multicollinearity)은 회귀 분석에서 독립 변수(피처)들 중 일부가 다른 독립 변수들과 강한 선형 관계를 보이는 현상을 말합니다. 예를 들어 '키'와 '몸무게' 피처는 함께 포함될 경우 다중공선성을 유발할 가능성이 높습니다.
1. 다중공선성의 문제점
다중공선성은 모델의 예측 성능 자체를 떨어뜨리지는 않을 수 있습니다. 하지만 모델의 해석을 매우 어렵고 불안정하게 만듭니다.
- 계수(Coefficient)의 불안정성: 데이터가 약간만 바뀌어도 회귀 계수($w$)의 값이 크게 변동하고, 심지어 부호가 바뀌기도 합니다.
- 해석의 어려움: "다른 변수들은 고정일 때, 한 변수가 미치는 영향"을 나타내는 회귀 계수의 의미가 퇴색됩니다. 강하게 연관된 변수들은 독립적으로 움직이지 않기 때문에, 특정 변수만의 순수한 영향력을 분리해내기 어렵습니다.
- 통계적 유의성 왜곡: 회귀 계수의 표준 오차(standard error)가 커져서, 실제로는 중요한 변수임에도 불구하고 통계적으로 유의하지 않은 것처럼 보일 수 있습니다.
2. VIF (Variance Inflation Factor, 분산 팽창 계수)
VIF는 다중공선성의 심각성을 측정하는 가장 대표적인 지표입니다.
- 정의: 특정 독립 변수 $x_j$에 대해, $x_j$를 종속 변수로 놓고 나머지 모든 독립 변수들을 사용하여 회귀 분석을 수행합니다. 이때 얻어지는 결정계수(R-squared)를 $R_j^2$라고 할 때, VIF는 다음과 같이 계산됩니다. $$ \text{VIF}_j = \frac{1}{1 - R_j^2} $$
- 해석:
- $R_j^2$는 "다른 독립 변수들이 $x_j$를 얼마나 잘 설명하는가"를 의미합니다.
- 만약 $x_j$가 다른 변수들과 상관관계가 전혀 없다면 $R_j^2 = 0$이고, $\text{VIF}_j = 1$이 됩니다.
- 만약 $x_j$가 다른 변수들과 상관관계가 매우 높다면 $R_j^2 \to 1$이고, $\text{VIF}_j \to \infty$가 됩니다.
- 일반적인 기준:
- VIF > 5: 다소 높은 다중공선성이 의심됩니다.
- VIF > 10: 심각한 다중공선성이 존재하며, 조치가 필요하다고 판단합니다.
해결책: VIF가 높은 변수를 제거하거나, PCA를 통해 변수들을 결합하거나, Ridge 회귀와 같은 정규화 기법을 사용하여 문제를 완화할 수 있습니다.
42. Lasso 좌표강하의 소프트 임계(Soft-threshold) 업데이트를 쓰세요.
라쏘(Lasso) 회귀는 L1 정규화를 사용하는 선형 회귀 모델로, 불필요한 피처의 가중치를 정확히 0으로 만들어 특성 선택(feature selection) 효과를 내는 것으로 유명합니다. 좌표 강하법(Coordinate Descent)은 이러한 라쏘의 해를 찾는 데 매우 효율적인 최적화 알고리즘입니다.
1. 좌표 강하법의 아이디어
좌표 강하법은 한 번에 모든 가중치 $w$를 업데이트하는 경사 하강법과 달리, 한 번에 하나의 가중치 $w_j$만 업데이트하고 나머지 가중치들은 고정시키는 방식을 반복합니다. 마치 다변수 함수의 최저점을 찾을 때, 각 좌표축 방향으로 번갈아 가며 한 걸음씩 이동하는 것과 같습니다.
2. 소프트 임계값 연산 (Soft-thresholding Operator)
라쏘의 L1 페널티($\lambda \|w\|_1$)는 미분 불가능한 지점(뾰족점)을 가지고 있어 일반적인 경사 하강법을 적용하기 어렵습니다. 하지만 좌표 강하법을 사용하면 각 $w_j$에 대한 업데이트 식이 놀랍게도 닫힌 해(closed-form solution)로 깔끔하게 정리되는데, 이것이 바로 소프트 임계값 연산입니다.
- 업데이트 수식: $j$번째 가중치 $w_j$를 업데이트하기 위해,
- 현재 $w_j$를 제외한 예측값과 실제값의 차이(잔차)에 대한 상관관계를 계산합니다: $a = x_j^\top (y - \sum_{k \neq j} x_k w_k)$
- 이 값을 정규화합니다: $a' = a / z_j$ (여기서 $z_j = \sum_i x_{ij}^2$)
- 소프트 임계값 연산자 $S(\cdot, \cdot)$를 적용하여 $w_j$를 업데이트합니다. (여기서 $\tau = \lambda / z_j$는 정규화 강도를 조절하는 임계값입니다.) $$ w_j \leftarrow S(a', \tau) = \text{sign}(a') \max(|a'| - \tau, 0) $$
- 직관적 해석:
- L1 페널티가 없을 때의 최적값 $a'$를 구합니다.
- $a'$의 절댓값을 임계값 $\tau$만큼 0을 향해 수축(shrink)시킵니다.
- 만약 이 수축 과정에서 값이 0을 넘어간다면, 그 값은 정확히 0으로 만듭니다.
이 "수축시키거나 0으로 만드는" 과정이 바로 라쏘가 희소한(sparse) 해를 만들어내는 핵심 메커니즘입니다.
43. Ridge 회귀의 정규방정식과 해석을 제시하세요.
릿지(Ridge) 회귀는 L2 정규화를 사용하는 선형 회귀 모델입니다. 가중치의 크기가 너무 커지는 것을 방지하여 과적합을 줄이고, 특히 다중공선성 문제가 있을 때 모델을 안정시키는 데 매우 효과적입니다.
1. 표준 선형 회귀의 정규방정식과 문제점
표준 선형 회귀(OLS)의 목적 함수 $\min_w \|y - Xw\|_2^2$를 최소화하는 해 $w$는 미분을 통해 다음과 같은 정규방정식(Normal Equation)으로 구할 수 있습니다.
$$ w = (X^\top X)^{-1} X^\top y $$
문제점: 피처 간 다중공선성이 존재하면 행렬 $X^\top X$의 역행렬 $(X^\top X)^{-1}$을 계산하기 어렵거나 불가능해집니다 (행렬이 특이(singular)하거나 거의 특이(ill-conditioned)해짐). 이 때문에 해가 매우 불안정해집니다.
2. 릿지 회귀의 정규방정식
릿지 회귀의 목적 함수 $\min_w \|y - Xw\|_2^2 + \lambda \|w\|_2^2$에 대한 해를 구하면 정규방정식이 다음과 같이 변형됩니다.
$$ w = (X^\top X + \lambda I)^{-1} X^\top y $$
- 해석:
- 핵심적인 차이는 $X^\top X$에 $\lambda I$ 항이 더해진 것입니다.
- $I$는 단위 행렬(Identity matrix)이고, $\lambda$는 정규화 강도를 조절하는 하이퍼파라미터입니다.
- $X^\top X$의 대각 원소에 작은 양수 $\lambda$를 더해주는 것은, 이 행렬이 항상 역행렬을 가질 수 있도록 보장하는 수학적 장치입니다.
- 즉, $\lambda I$ 항은 $X^\top X$의 조건(condition)을 개선하여 역행렬 계산을 안정적으로 만들어 줍니다.
결론: 릿지 회귀는 가중치에 약간의 편향(bias)을 주입하는 대가로(가중치를 0에 가깝게 수축시킴), 가중치 추정치의 분산(variance)을 크게 줄여줍니다. 특히 다중공선성으로 인해 불안정했던 모델의 해를 안정적으로 만들어주는 강력한 해결책입니다.
45. n-step 리턴을 정의하고 편향–분산 트레이드오프를 설명하세요.
n-스텝 리턴(n-step Return)은 강화학습의 시간차(TD) 학습과 몬테카를로(MC) 학습을 통합하는 일반화된 개념입니다. TD 학습이 한 스텝의 실제 보상만 사용하는 반면, MC 학습은 에피소드가 끝날 때까지의 모든 보상을 사용합니다. n-스텝 리턴은 이 둘 사이의 균형을 맞추는 역할을 합니다.
1. n-스텝 리턴의 정의
n-스텝 리턴 $G_t^{(n)}$은 시점 $t$로부터 $n$ 스텝 동안의 실제 보상과, $n$ 스텝 후의 상태 가치 추정치를 결합하여 만듭니다.
$$ G_t^{(n)} = R_{t+1} + \gamma R_{t+2} + \dots + \gamma^{n-1}R_{t+n} + \gamma^n V(S_{t+n}) $$
- $R_{t+k}$: $k$ 스텝 후의 실제 보상.
- $V(S_{t+n})$: $n$ 스텝 후의 상태 $S_{t+n}$에 대한 현재의 가치 추정치. 이 부분을 부트스트래핑(bootstrapping)이라고 합니다.
2. 편향-분산 트레이드오프 (Bias-Variance Tradeoff)
$n$의 크기를 조절함으로써, 우리는 가치 추정의 편향과 분산 사이의 트레이드오프를 제어할 수 있습니다.
- $n=1$ (TD 학습): $$ G_t^{(1)} = R_{t+1} + \gamma V(S_{t+1}) $$
- 높은 편향 (High Bias): 리턴의 대부분이 현재의 (부정확할 수 있는) 가치 추정치 $V(S_{t+1})$에 의존합니다. 이 추정치가 실제 가치와 다르다면, 이 오차가 편향의 원인이 됩니다.
- 낮은 분산 (Low Variance): 리턴은 단 한 번의 무작위 전이($S_t \to S_{t+1}$)에만 의존하므로, 분산이 매우 낮고 안정적입니다.
- $n \to \infty$ (몬테카를로 학습): $$ G_t^{(\infty)} = R_{t+1} + \gamma R_{t+2} + \dots \text{ (에피소드 끝까지)} $$
- 낮은 편향 (Low Bias): 리턴이 순전히 실제 경험(보상)으로만 구성되므로, 기댓값 측면에서 편향이 없습니다.
- 높은 분산 (High Variance): 리턴이 에피소드 끝까지의 모든 무작위 행동과 상태 전이에 의존하므로, 경로가 조금만 달라져도 리턴값이 크게 변동하여 분산이 매우 높습니다.
- 중간의 $n$: $n$을 1보다 크게 설정하면, 실제 보상을 더 많이 사용하고 부트스트래핑의 의존도를 줄여 편향을 낮출 수 있습니다. 반면, 더 많은 스텝의 무작위성을 포함하게 되므로 분산은 높아집니다.
따라서 최적의 $n$을 선택하는 것은 특정 문제에서 편향과 분산의 균형을 가장 잘 맞추는 지점을 찾는 과정이며, 이를 통해 TD의 안정성과 MC의 빠른 수렴 속도의 장점을 모두 취할 수 있습니다.
46. Eligibility Trace와 TD(λ)의 Forward/Backward 뷰를 설명하세요.
TD(λ)는 n-스텝 리턴을 더욱 정교하게 일반화한 개념입니다. 단 하나의 n을 선택하는 대신, 모든 가능한 n-스텝 리턴을 기하급수적으로 감쇠하는 가중치로 평균내는 아이디어입니다. 자격 추적(Eligibility Trace)은 이 복잡한 평균 계산을 매우 효율적으로 수행하는 메커니즘입니다.
1. Forward 뷰 (이론적 관점)
정의: TD(λ)의 업데이트 목표가 되는 λ-리턴 \( G_t^{\lambda} \)는 모든 n-스텝 리턴 \( G_t^{(n)} \)의 가중 평균입니다.
- \( \lambda \in [0,1] \): n-스텝 리턴 간의 가중치를 조절하는 파라미터입니다.
- \( \lambda = 0 \)이면 \( G_t^{\lambda} = G_t^{(1)} \) (TD(0)와 동일).
- \( \lambda = 1 \)이면 \( G_t^{\lambda} \)는 모든 n-스텝 리턴을 끝까지 고려한 것 (몬테카를로와 유사).
한계: 이 정의는 이론적으로는 아름답지만, 계산하려면 에피소드가 끝날 때까지 기다려야 하므로 실제 온라인 학습에 적용하기 어렵습니다.
2. Backward 뷰 (실용적 관점)
정의: Backward 뷰는 자격 추적(Eligibility Trace, \( e_t \))이라는 메커니즘을 사용하여 Forward 뷰와 동일한 업데이트를 온라인으로, 스텝마다 수행합니다.
자격 추적 (\( e_t \)): 직관: 최근에 방문했던 상태-행동 쌍에 대한 "신용 할당(credit assignment)" 메모리입니다. 어떤 상태를 방문하면 그 상태의 "자격"이 생기고, 시간이 지나면서 그 자격은 점차 사라집니다.
수식: 상태 \( s \)에 대한 자격 추적
업데이트 과정:
- 한 스텝을 진행하고 TD 오차 \( \delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \)를 계산합니다.
- 이 TD 오차를 사용하여 모든 상태의 가치 함수를 업데이트하는데, 각 상태의 현재 자격 추적 값 \( e_t(s) \)에 비례하여 업데이트합니다.
동치성: 놀랍게도, 이 Backward 뷰의 업데이트 방식은 Forward 뷰의 λ-리턴을 향해 학습하는 것과 수학적으로 동일한 결과를 낳습니다. 자격 추적은 최근의 놀라움(TD 오차)을 과거의 기억(자격 추적)에 전파하는 효율적인 방법입니다.
47. Potential-based Reward Shaping이 정책 최적성을 보존하는 이유를 수식으로 설명하세요.
보상 쉐이핑(Reward Shaping)은 강화학습에서 에이전트의 학습을 돕기 위해 원래의 환경 보상(sparse reward)에 추가적인 인공 보상(shaping reward)을 주는 기법입니다. 하지만 섣부른 보상 설계는 에이전트가 원래의 목표 대신 인공 보상만 쫓는 부작용을 낳을 수 있습니다. 포텐셜 기반 보상 쉐이핑(Potential-Based Reward Shaping, PBRS)은 최적 정책을 변경시키지 않는다는 것을 수학적으로 보장하는 안전하고 원칙적인 방법입니다.
1. PBRS의 정의
PBRS는 상태(state)에 대한 포텐셜 함수 \( \Phi(s) \)를 먼저 정의합니다. 이 함수는 특정 상태가 얼마나 "좋은지"에 대한 사전 지식을 나타내는 스칼라 값입니다. (예: 목표 지점까지의 거리가 가까울수록 높은 포텐셜)
상태 \( s \)에서 행동 \( a \)를 하여 다음 상태 \( s' \)로 전이했을 때, 에이전트가 받는 새로운 보상 \( R' \)은 원래 보상 \( R \)에 포텐셜의 변화량을 더한 값입니다.
여기서 \( F(s, a, s') = \gamma \Phi(s') - \Phi(s) \)는 포텐셜 기반 쉐이핑 보상이며, \( \gamma \)는 원래 문제의 감가율(discount factor)입니다.
2. 최적 정책이 보존되는 이유
PBRS가 최적 정책을 바꾸지 않는 이유는, 어떤 정책을 따르든 쉐이핑 보상의 총합이 경로에 무관하고 오직 시작 상태와 끝 상태의 포텐셜에만 의존하기 때문입니다.
임의의 정책 \( \pi \)를 따르는 한 에피소드의 경로(\( s_0, s_1, s_2, \dots, s_T \))에 대해, 쉐이핑 보상의 감가 총합(discounted sum)을 계산해 봅시다.
이 합을 풀어보면,
중간 항들이 모두 소거되는 텔레스코핑 합(telescoping sum) 형태가 되어, 다음과 같이 간단하게 정리됩니다.
이는 쉐이핑 보상의 총합이 에피소드의 중간 경로와는 무관하다는 것을 의미합니다. 따라서 어떤 정책 A와 정책 B를 비교할 때, 두 정책의 수정된 총 보상의 차이는 원래 총 보상의 차이와 같습니다.
원래 보상 체계에서 더 좋았던 정책이 수정된 보상 체계에서도 여전히 더 좋기 때문에, 최적 정책은 변하지 않습니다. PBRS는 단지 학습 과정에서 더 나은 방향으로 탐색하도록 "힌트"를 줄 뿐, 최종 목표 자체를 바꾸지는 않습니다.
48. Dueling DQN의 구조와 이득을 수식으로 설명하세요.
듀얼링 DQN(Dueling DQN)은 표준 DQN 아키텍처를 개선하여 더 효율적으로 상태의 가치를 학습하도록 설계된 신경망 구조입니다. 핵심 아이디어는 Q-가치(상태-행동 가치)를 상태만의 가치와 행동의 상대적 이점이라는 두 요소로 분리하여 학습하는 것입니다.
1. 핵심 아이디어: V(s)와 A(s, a)의 분리
표준 DQN은 \( Q(s,a) \) 값을 직접 추정합니다. 반면 듀얼링 DQN은 \( Q(s, a) \)가 두 가지 요소의 합으로 이루어져 있다고 가정합니다.
- 상태 가치 (State Value), \( V(s) \): 특정 상태 \( s \)가 행동과 무관하게 얼마나 좋은지를 나타내는 스칼라 값.
- 어드밴티지 (Advantage), \( A(s,a) \): 상태 \( s \)에서 특정 행동 \( a \)를 취하는 것이 평균적인 다른 행동들에 비해 얼마나 더 좋은지를 나타내는 값.
2. 듀얼링 네트워크 구조
듀얼링 네트워크는 앞단에 공유된 특징 추출기(예: CNN)가 있고, 그 뒤가 두 개의 스트림(stream), 즉 "헤드(head)"로 나뉩니다.
- 밸류 헤드(Value Head): 공유된 특징을 입력받아 스칼라 값 \( V(s) \)를 출력합니다.
- 어드밴티지 헤드(Advantage Head): 공유된 특징을 입력받아 각 행동에 대한 어드밴티지 값 \( A(s,a) \) 벡터를 출력합니다.
3. 두 스트림의 결합
이 두 값을 합쳐 최종 \( Q(s, a) \)를 만듭니다. 단순히 \( Q(s, a) = V(s) + A(s, a) \)로 합치면 \( V \)와 \( A \)를 유일하게 식별할 수 없는 문제(identifiability issue)가 발생합니다. (예: \( V \)에 10을 더하고 모든 \( A \)에서 10을 빼도 \( Q \)값은 동일)
이를 해결하기 위해, 어드밴티지 함수의 합(또는 평균)이 0이 되도록 강제하는 제약을 둡니다.
어드밴티지 벡터의 평균을 빼줌으로써, \( A(s, a) \)는 말 그대로 "평균 대비" 상대적인 좋음을 나타내게 되고, \( V(s) \)는 해당 상태의 평균적인 가치를 나타내게 됩니다.
4. 듀얼링 DQN의 이득
데이터 효율성 향상: 어떤 상태에서는 모든 행동의 가치가 비슷하고 상태 자체의 가치가 더 중요할 수 있습니다. (예: "벽에 부딪히기 직전" 상태에서는 어떤 행동을 해도 나쁘므로 상태 가치 \( V(s) \)가 낮음). 듀얼링 구조는 이런 상태에서 행동과 무관하게 \( V(s) \)를 학습할 수 있습니다. 매 업데이트마다 Q값이 아닌 V값이 직접 업데이트되므로, 상태 가치를 배우는 데 더 적은 데이터가 필요합니다. 이는 더 빠르고 강건한 학습으로 이어집니다.
49. Distributional RL의 핵심 아이디어(C51/Quantile Regression DQN)를 설명하세요.
분포 강화학습(Distributional Reinforcement Learning)은 전통적인 강화학습의 패러다임을 근본적으로 전환하는 아이디어입니다. 기존 RL이 보상의 기댓값(평균)인 \( Q(s, a) \)를 학습하는 데 초점을 맞춘 반면, 분포 RL은 보상의 확률 분포 전체인 \( Z(s, a) \)를 학습합니다.
0. 시작하기 전에: DQN은 무엇을 학습하는가?
분포 RL을 이해하기 위해, 먼저 딥마이마인드의 DQN이 무엇을 학습하는지 알아야 합니다. DQN은 주어진 상태(state) \(s\)에서 특정 행동(action) \(a\)를 했을 때, 앞으로 받을 보상의 총합(리턴)이 평균적으로 얼마일지를 예측하는 행동-가치 함수(Action-Value Function) \(Q(s, a)\)를 학습합니다.
$$ Q(s,a) = \mathbb{E}[G_t | S_t=s, A_t=a] = \mathbb{E}[R_{t+1} + \gamma R_{t+2} + \dots | S_t=s, A_t=a] $$ DQN은 신경망을 이용해 이 Q값을 근사하고, 벨만 방정식에 기반한 시간차 오차(TD-error)를 최소화하는 방향으로 학습합니다. 즉, Q값이라는 단 하나의 스칼라 값(평균)을 예측하는 데 집중합니다.
1. 핵심 아이디어: 평균을 넘어 분포로
전통적 RL (DQN): \( Q(s,a) = \mathbb{E}[G(s,a)] \)
어떤 행동의 결과로 받을 수 있는 보상이 [-100, 10, 10, 10, 10]이라면, 기댓값은 -12입니다. 이 단일 숫자만으로는 "대부분은 10을 받지만, 가끔씩 -100이라는 최악의 결과가 나올 수 있다"는 위험(risk) 정보를 알 수 없습니다.
분포 RL: \( Z(s,a) \stackrel{D}{=} G(s,a) \)
보상의 전체 분포를 학습함으로써, 가능한 모든 결과와 그 확률을 포착합니다. 즉, Q값은 분포 \(Z(s,a)\)의 평균($Q(s,a) = \mathbb{E}[Z(s,a)]$)일 뿐이며, 분포 RL은 이보다 훨씬 풍부한 정보를 바탕으로 결정을 내릴 수 있습니다. 이 아이디어는 분포 벨만 방정식으로 표현됩니다. $$ Z(s,a) \stackrel{D}{=} R(s,a) + \gamma Z(s', a^*) \quad \text{where } a^* = \arg\max_{a'} Q(s', a') $$ 이는 \(Z(s,a)\)의 분포는 보상 \(R(s,a)\)의 분포와 다음 상태의 최적 행동에 대한 할인된 가치 분포 \(Z(s', a^*)\)의 합의 분포와 같다는 의미입니다.
2. 분포 표현 방법
확률 분포 \( Z(s, a) \)를 어떻게 표현하고 학습할 것인가에 따라 여러 알고리즘이 있습니다.
- C51 (Categorical DQN):
아이디어: 리턴(보상의 총합)이 나타날 수 있는 값의 범위를 고정된 개수(논문에서는 51개)의 "원자(atom)"로 이산화합니다. 예를 들어, -10부터 +10까지의 보상 범위를 51개의 구간으로 나누는 것입니다.
네트워크 출력: 신경망은 Q값 하나를 출력하는 대신, 각 원자에 대한 확률 질량 함수(PMF), 즉 히스토그램을 출력합니다. (e.g., "보상이 -2일 확률은 15%, 0일 확률은 60%, +5일 확률은 25%...")
학습: "분포 벨만 연산자"를 사용하여 타겟 분포를 계산하고, 두 분포 간의 차이(예: KL-발산)를 최소화하도록 네트워크를 학습합니다. - QR-DQN (Quantile Regression DQN):
아이디어: 분포를 확률로 표현하는 대신, 분위수 함수(Quantile Function)로 표현합니다. 분위수란, 누적 분포의 역함수로, "하위 \( \tau \)%에 해당하는 값은 무엇인가?"에 답하는 것입니다. (e.g., 0.5 분위수는 중앙값)
네트워크 출력: 신경망은 고정된 개수(N)의 분위수(\( \tau_1, \dots, \tau_N \), 예: 0.1, 0.2, ..., 0.9)에 해당하는 리턴 값들을 직접 출력합니다.
학습: 분위수 회귀 손실(Quantile Regression Loss)을 사용하여, 예측된 분위수 값들이 실제 리턴 샘플의 분위수와 일치하도록 학습합니다. 특정 분위수 \(\tau\)에 대한 손실은 다음과 같은 비대칭적인 함수(pinball loss)를 사용합니다. $$ \rho_\tau(u) = u(\tau - \mathbb{I}(u < 0)) \quad \text{where } u \text{ is TD-error} $$ 이 손실 함수는 예측이 실제보다 클 때(\(u>0\))와 작을 때(\(u<0\)) 다른 기울기의 페널티를 주어, 특정 분위수에 맞는 예측을 하도록 유도합니다. 전체 손실은 모든 분위수에 대한 이 손실의 평균입니다.
3. 분포 RL의 이득
- 더 풍부한 학습 신호: 분포 전체를 학습 목표로 사용하면, 단순한 스칼라 값보다 훨씬 더 많은 정보를 제공하여 학습이 안정되고 빨라지는 경향이 있습니다.
- 불확실성 표현: 모델은 예측의 불확실성을 자연스럽게 표현할 수 있습니다. 분포가 넓게 퍼져 있다면 불확실성이 높은 것입니다.
- 성능 향상: 많은 벤치마크에서 기존의 가치 기반 RL 알고리즘들을 압도하는 성능을 보여주었습니다.
50. Soft Actor-Critic(SAC)의 최대엔트로피 목적과 업데이트 수식을 설명하세요.
SAC(Soft Actor-Critic)는 연속적인 행동 공간(continuous control) 문제에서 매우 높은 샘플 효율성(sample efficiency)과 안정성을 보여주는 최첨단 오프-폴리시(off-policy) 액터-크리틱 알고리즘입니다. SAC를 이해하기 전에, 먼저 기본적인 액터-크리틱(Actor-Critic)의 아이디어를 짚어볼 필요가 있습니다.
0. 기본 Actor-Critic 아이디어
액터-크리틱은 정책 기반(Policy-based) 방법과 가치 기반(Value-based) 방법을 결합한 구조입니다.
- 액터 (Actor, 정책 \(\pi\)): 어떤 상태(state)에서 어떤 행동(action)을 할지 결정하는 정책을 학습합니다. "배우"처럼 직접 행동을 수행합니다.
- 크리틱 (Critic, 가치 함수 \(Q\) 또는 \(V\)): 액터가 수행한 행동이 얼마나 좋았는지를 평가합니다. "평론가"처럼 행동의 가치를 판단하여 액터가 더 나은 방향으로 학습하도록 돕습니다.
기본적인 액터-크리틱에서 액터의 목적은 보상의 총합, 즉 누적 보상의 기댓값을 최대화하는 것입니다. 이는 정책 그래디언트 정리에 따라 다음과 같은 목적 함수 $J(\pi)$를 통해 최적화됩니다.
여기서 크리틱이 추정한 Q-함수 $Q^{\pi}(s,a)$가 액터가 어느 방향으로 업데이트되어야 할지를 알려주는 역할을 합니다.
1. SAC의 핵심 아이디어: 최대 엔트로피 강화학습
SAC는 기존 액터-크리틱의 목표에 정책의 엔트로피(entropy)라는 새로운 항을 추가합니다. 즉, 보상과 엔트로피를 동시에 최대화하는 것을 목표로 합니다. 이것이 바로 최대 엔트로피 강화학습(Maximum Entropy RL) 프레임워크입니다.
정책의 엔트로피란?
어떤 상태 \(s_t\)에서 정책 \(\pi\)의 엔트로피 \(\mathcal{H}(\pi(\cdot|s_t))\)는 해당 정책이 얼마나 무작위적인지(stochastic)를 측정하는 지표입니다. 수식적으로는 다음과 같이 정의됩니다.
엔트로피가 높다는 것은 정책이 특정 행동 하나만을 고집하는 것이 아니라, 다양한 행동들을 높은 확률로 시도한다는 의미입니다. 즉, 탐험(exploration)을 더 적극적으로 하도록 장려하는 것입니다.
2. 최대 엔트로피 목적 함수
SAC의 목적 함수는 표준 RL의 목표에 정책의 엔트로피 항을 추가한 형태입니다.
- \( \mathcal{H}(\pi(\cdot|s_t)) \): 상태 \( s_t \)에서의 정책 \( \pi \)의 엔트로피. 정책이 얼마나 무작위적인지(탐험적인지)를 나타냅니다. 엔트로피가 높을수록 정책은 더 다양한 행동을 시도합니다.
- \( \alpha \) (알파, 온도 파라미터): 보상과 엔트로피 사이의 상대적인 중요도를 조절하는 계수입니다. \( \alpha \)가 크면 탐험을 더 중시하고, 작으면 보상을 더 중시합니다.
3. 왜 엔트로피를 최대화하는가?
- 향상된 탐험: 에이전트는 보상을 얻는 동시에 최대한 무작위적으로 행동하도록 장려받습니다. 이는 에이전트가 좁은 지역 최적해에 빠지지 않고 더 넓은 공간을 탐색하여 더 나은 해를 찾도록 돕습니다.
- 안정성 및 강건성: 정책이 너무 빠르게 결정론적(deterministic)으로 수렴하는 것을 막아주어, 학습을 안정시키고 예상치 못한 상황에 더 잘 대처하는 강건한 정책을 만듭니다.
4. 핵심 업데이트 수식
SAC는 액터(정책), 두 개의 Q-크리틱(과대추정 방지를 위한 Clipped Double-Q), 그리고 이들의 타겟 네트워크들로 구성됩니다.
- 소프트 Q-함수 (크리틱) 업데이트: 크리틱은 엔트로피 항이 포함된 소프트 벨만 방정식을 만족하도록 학습됩니다. 손실 함수는 일반적인 MSE를 사용합니다.
타겟 \( y \)는 다음과 같습니다:$$ y = R_{t+1} + \gamma \left( \min_{i=1,2} Q_{\text{target},i}(s_{t+1}, a') - \alpha \log\pi(a'|s_{t+1}) \right), \quad \text{여기서 } a' \sim \pi(\cdot|s_{t+1}) $$ - 정책 (액터) 업데이트: 액터는 소프트 Q값과 자신의 엔트로피를 최대화하는 방향으로 업데이트됩니다. 즉, 다음 목적 함수를 최대화합니다.
$$ J(\pi) = \mathbb{E}_{s \sim \mathcal{D}} \left[ \mathbb{E}_{a \sim \pi} \left[ \min_{i=1,2} Q_i(s,a) - \alpha \log \pi(a|s) \right] \right] $$
- 온도 \( \alpha \) 자동 튜닝: SAC의 또 다른 혁신은 \( \alpha \)를 하이퍼파라미터로 두지 않고, 목표 엔트로피 \( \mathcal{H}_{\text{target}} \)를 설정한 뒤, 현재 정책의 엔트로피가 이 목표를 유지하도록 \( \alpha \) 자체도 그래디언트 하강법으로 학습한다는 점입니다. 이는 튜닝의 번거로움을 크게 줄여줍니다.
$$ J(\alpha) = \mathbb{E}_{a \sim \pi} \left[ -\alpha \log \pi(a|s) - \alpha \mathcal{H}_{\text{target}} \right] $$
'ML' 카테고리의 다른 글
| 점수(Score), ESM, ISM, DSM (0) | 2025.08.26 |
|---|---|
| Variational Autoencoder (VAE) (0) | 2025.08.26 |
| ML 주니어 엔지니어를 위한 기술면접 질문 모음 4 (0) | 2025.08.26 |
| ML 주니어 엔지니어를 위한 기술면접 질문 모음 3 (0) | 2025.08.21 |
| ML 주니어 엔지니어를 위한 기술면접 질문 모음 2 (0) | 2025.08.20 |