본문 바로가기

ML

ML 주니어 엔지니어를 위한 기술면접 질문 모음

1. 경사 하강법(Gradient Descent)의 가중치 업데이트 규칙을 수식으로 설명해 보세요.

답변:
경사 하강법은 손실 함수(Loss Function)의 값을 최소화하기 위해 가중치(weight)를 반복적으로 업데이트하는 최적화 알고리즘입니다. 가중치 업데이트는 손실 함수의 기울기(gradient) 반대 방향으로 일정 크기(learning rate)만큼 이동하는 방식으로 이루어집니다.

시간 $t$에서의 가중치를 $W_t$라고 할 때, 다음 시간 $t+1$에서의 가중치 $W_{t+1}$은 다음과 같이 업데이트됩니다.

$$W_{t+1} = W_t - \eta \nabla J(W_t)$$

여기서 각 기호의 의미는 다음과 같습니다.

  • $W_{t+1}$: 업데이트될 새로운 가중치
  • $W_t$: 현재 가중치
  • $\eta$ (에타): 학습률(learning rate)로, 가중치를 얼마나 크게 업데이트할지 결정하는 하이퍼파라미터입니다.
  • $\nabla J(W_t)$: 현재 가중치 $W_t$에 대한 손실 함수 $J$의 기울기(gradient)입니다. 즉, 각 가중치에 대해 손실 함수를 편미분한 값의 벡터입니다. $\nabla J(W_t) = \frac{\partial J}{\partial W_t}$

2. 역전파(Backpropagation)의 핵심 원리를 수식과 함께 설명해 보세요.

답변:
역전파는 신경망의 출력층(output layer)에서 계산된 오차를 입력층(input layer) 방향으로 거꾸로 전파하며 각 층의 가중치에 대한 손실 함수의 기울기를 효율적으로 계산하는 알고리즘입니다. 이는 연쇄 법칙(Chain Rule)을 기반으로 합니다.

예를 들어, 손실 함수를 $J$, $l$번째 층의 출력(activation)을 $a^{(l)}$, 가중치를 $W^{(l)}$라고 할 때, $l$번째 층의 가중치에 대한 손실 함수의 기울기는 다음과 같이 연쇄 법칙을 통해 계산할 수 있습니다.

$$\frac{\partial J}{\partial W^{(l)}} = \frac{\partial J}{\partial a^{(L)}} \frac{\partial a^{(L)}}{\partial z^{(L)}} \frac{\partial z^{(L)}}{\partial a^{(L-1)}} \dots \frac{\partial a^{(l+1)}}{\partial z^{(l+1)}} \frac{\partial z^{(l+1)}}{\partial a^{(l)}} \frac{\partial a^{(l)}}{\partial z^{(l)}} \frac{\partial z^{(l)}}{\partial W^{(l)}}$$

간단히 표현하면, $l$번째 층의 오차($\delta^{(l)}$)를 이용하여 다음과 같이 나타낼 수 있습니다.

$$\frac{\partial J}{\partial W^{(l)}} = a^{(l-1)T} \delta^{(l)}$$

여기서 $\delta^{(l)}$은 $l$번째 층의 출력에 대한 손실 함수의 기울기로, 이전 층($l+1$)의 오차로부터 재귀적으로 계산됩니다.


3. 교차 엔트로피 오차(Cross-Entropy Error) 함수의 수식을 쓰고, 이진 분류와 다중 클래스 분류의 경우를 각각 설명해 보세요.

답변:
교차 엔트로피 오차는 분류 문제에서 실제 값의 확률 분포와 모델이 예측한 값의 확률 분포 사이의 차이를 측정하는 손실 함수입니다.

1) 이진 교차 엔트로피 (Binary Cross-Entropy)

클래스가 2개인 경우(예: 0 또는 1) 사용됩니다. 실제 값을 $y$, 모델의 예측 확률을 $\hat{y}$라고 할 때 손실 함수 $L$은 다음과 같습니다.

$$L(y, \hat{y}) = -[y \log(\hat{y}) + (1-y) \log(1-\hat{y})]$$

  • $y=1$일 때: $L = -\log(\hat{y})$
  • $y=0$일 때: $L = -\log(1-\hat{y})$

2) 범주형 교차 엔트로피 (Categorical Cross-Entropy)

3개 이상의 클래스를 분류할 때 사용됩니다. 클래스의 총 개수를 $C$, 실제 값이 원-핫 인코딩된 벡터를 $y$, 모델의 예측 확률 벡터를 $\hat{y}$라고 할 때 손실 함수 $L$은 다음과 같습니다.

$$L(y, \hat{y}) = - \sum_{i=1}^{C} y_i \log(\hat{y}_i)$$

여기서 $y_i$는 $i$번째 클래스가 정답이면 1이고 아니면 0인 값입니다. 따라서 이 수식은 정답 클래스에 해당하는 예측 확률 $\hat{y}_k$에 대해서만 $- \log(\hat{y}_k)$를 계산하게 됩니다.


4. 활성화 함수로 Sigmoid와 ReLU를 사용할 때의 장단점을 기울기 소실(Vanishing Gradient) 문제와 연관 지어 수식으로 설명해 보세요.

답변:

Sigmoid 함수

수식: $\sigma(x) = \frac{1}{1 + e^{-x}}$
미분: $\sigma'(x) = \sigma(x)(1-\sigma(x))$

Sigmoid 함수의 미분 값은 최댓값이 0.25 ($x=0$일 때)입니다. 역전파 과정에서 이 미분 값들이 연쇄 법칙에 따라 계속 곱해지면, 층이 깊어질수록 기울기가 0에 가까워져 가중치 업데이트가 거의 일어나지 않는 기울기 소실 문제가 발생합니다.

$$\frac{\partial J}{\partial W^{(l)}} = (\dots) \times \sigma'(z^{(l+1)}) \times W^{(l+1)} \times \sigma'(z^{(l)}) \times (\dots)$$

여기서 $\sigma'(\cdot) \le 0.25$ 이므로, 층이 깊어질수록 전체 기울기 값이 기하급수적으로 작아집니다.

ReLU (Rectified Linear Unit) 함수

수식: $f(x) = \max(0, x)$
미분: $f'(x) = \begin{cases} 1 & \text{if } x > 0 \\ 0 & \text{if } x \le 0 \end{cases}$

ReLU는 입력값이 양수일 때 미분 값이 항상 1이므로, Sigmoid 함수에서 발생하는 기울기 소실 문제를 완화할 수 있습니다. 기울기가 층을 거쳐도 줄어들지 않고 그대로 전달될 수 있기 때문입니다. 하지만 입력값이 음수이면 기울기가 0이 되어 가중치가 업데이트되지 않는 Dying ReLU 문제가 발생할 수 있습니다.


5. Adam 옵티마이저의 가중치 업데이트 수식을 설명해 보세요.

답변:
Adam(Adaptive Moment Estimation)은 각 파라미터마다 다른 크기의 학습률을 적용하는 최적화 알고리즘입니다. 이는 Momentum과 RMSProp 방식을 결합한 것입니다.

Adam은 두 가지 주요 변수를 사용합니다.

  1. 모멘텀 ($m_t$): 기울기의 지수 이동 평균 (1차 모멘트)
  2. 그래디언트 제곱의 지수 이동 평균 ($v_t$): 기울기 제곱값의 지수 이동 평균 (2차 모멘트)

시간 $t$에서의 기울기를 $g_t = \nabla J(W_{t-1})$라고 할 때, 업데이트 과정은 다음과 같습니다.

$$ \begin{aligned} m_t &= \beta_1 m_{t-1} + (1 - \beta_1) g_t \\ v_t &= \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \\ \hat{m}_t &= \frac{m_t}{1 - \beta_1^t} \\ \hat{v}_t &= \frac{v_t}{1 - \beta_2^t} \\ W_t &= W_{t-1} - \eta \frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} \end{aligned} $$

  • $\beta_1, \beta_2$: 지수 감소율 (보통 0.9, 0.999 사용)
  • $\eta$: 학습률
  • $\epsilon$: 0으로 나누는 것을 방지하기 위한 작은 값 (예: $10^{-8}$)

6. 배치 정규화(Batch Normalization)가 신경망 학습에 어떻게 도움이 되는지 수식과 함께 설명해 보세요.

답변:
배치 정규화는 각 층의 활성화 함수 입력값을 평균이 0, 분산이 1이 되도록 정규화하는 기법입니다. 이를 통해 학습 과정에서 각 층의 입력 데이터 분포가 심하게 변하는 내부 공변량 변화(Internal Covariate Shift) 문제를 완화할 수 있습니다.

미니배치 $B = \{x_1, \dots, x_m\}$에 대해, 배치 정규화는 다음 4단계로 수행됩니다.

$$ \begin{aligned} \mu_B &= \frac{1}{m} \sum_{i=1}^{m} x_i \\ \sigma_B^2 &= \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2 \\ \hat{x}_i &= \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} \\ y_i &= \gamma \hat{x}_i + \beta \end{aligned} $$

배치 정규화를 통해 학습 속도를 높이고, 가중치 초기값에 대한 민감도를 줄이며, 규제(regularization) 효과를 얻을 수 있습니다.


7. L2 정규화(L2 Regularization)가 어떻게 과적합(Overfitting)을 방지하는지 손실 함수 수식을 통해 설명해 보세요.

답변:
L2 정규화는 손실 함수에 가중치 제곱의 합에 비례하는 항을 추가하여 가중치 값이 너무 커지는 것을 방지하는 기법입니다. 이를 통해 모델의 복잡도를 낮추고 과적합을 완화합니다.

기존 손실 함수를 $J_0(W)$라고 할 때, L2 정규화가 적용된 새로운 손실 함수 $J(W)$는 다음과 같습니다.

$$J(W) = J_0(W) + \frac{\lambda}{2m} \sum_{l=1}^{L} ||W^{(l)}||_F^2$$

  • $\lambda$ (람다): 정규화 강도를 조절하는 하이퍼파라미터입니다. $\lambda$가 클수록 가중치를 더 작게 만듭니다.
  • $m$: 학습 데이터의 개수
  • $||W^{(l)}||_F^2$: $l$번째 층의 가중치 행렬에 대한 프로베니우스 노름의 제곱

이 정규화 항을 최소화하기 위해, 경사 하강법은 가중치가 큰 값들을 우선적으로 줄이게 됩니다. 가중치 업데이트 수식을 보면 다음과 같습니다.

$$W := W - \eta \left( \frac{\partial J_0}{\partial W} + \frac{\lambda}{m} W \right) = \left(1 - \eta \frac{\lambda}{m}\right)W - \eta \frac{\partial J_0}{\partial W}$$

업데이트 시마다 $(1 - \eta \frac{\lambda}{m})$ 항에 의해 가중치가 0에 가깝게 감소하는 효과가 있어 가중치 감쇠(Weight Decay)라고도 불립니다. 가중치가 작아지면 입력 데이터의 특정 특징에 대한 의존도가 낮아져 더 일반화된 모델을 만들 수 있습니다.


8. 드롭아웃(Dropout)이 어떻게 앙상블(Ensemble)과 유사한 효과를 내는지 설명해 보세요.

답변:
드롭아웃은 학습 과정에서 각 뉴런을 확률 $p$로 유지하고, 확률 $1-p$로 비활성화(출력을 0으로 만듦)하는 기법입니다. 매 학습 반복(iteration)마다 다른 뉴런들이 비활성화되므로, 매번 다른 구조의 "더 작은" 신경망이 학습되는 효과를 낳습니다.

수식적으로, 드롭아웃이 적용된 $l$번째 층의 출력 $a^{(l)}$은 다음과 같이 표현할 수 있습니다.

  1. 마스크 벡터 생성: 베르누이 분포를 따르는 마스크 벡터 $r^{(l)}$을 생성합니다. 각 원소 $r_j^{(l)}$는 확률 $p$로 1, 확률 $1-p$로 0의 값을 가집니다. $$r_j^{(l)} \sim \text{Bernoulli}(p)$$
  2. 드롭아웃 적용: $$\tilde{a}^{(l)} = a^{(l)} * r^{(l)}$$ 여기서 $*$는 원소별 곱(element-wise product)을 의미합니다.
  3. 스케일 조정 (Inverted Dropout): 학습 시에 출력이 감소하는 것을 보상하기 위해, 유지된 뉴런들의 출력을 $p$로 나누어 줍니다. 이를 통해 테스트 시에는 드롭아웃을 적용하지 않아도 됩니다. $$a_{dropout}^{(l)} = \frac{\tilde{a}^{(l)}}{p}$$

매 학습마다 다른 서브-네트워크($2^N$개의 가능한 서브-네트워크, $N$은 뉴런 수)를 학습시키는 것은 여러 개의 다른 모델을 학습시켜 그 예측을 평균내는 앙상블 기법과 매우 유사한 효과를 가집니다. 이는 특정 뉴런이 다른 뉴런에 과도하게 의존하는 동조화(co-adaptation) 현상을 방지하여 모델의 일반화 성능을 향상시킵니다.


9. 어텐션 메커니즘(Attention Mechanism)에서 쿼리, 키, 밸류를 이용해 어텐션 스코어를 계산하고 최종 출력값을 얻는 과정을 수식으로 설명해 보세요.

답변:
어텐션 메커니즘은 디코더가 예측을 할 때, 인코더의 입력 시퀀스 전체에서 어떤 부분에 더 집중해야 할지 알려주는 가중치를 계산하는 방식입니다. 이는 쿼리(Query), 키(Key), 밸류(Value)라는 세 가지 요소로 설명할 수 있습니다.

  1. 어텐션 스코어(Attention Score) 계산:
    디코더의 현재 상태를 나타내는 쿼리($Q$)와 인코더의 모든 출력 상태를 나타내는 키($K$) 사이의 유사도를 계산합니다. 스케일드 닷-프로덕트 어텐션의 스코어 함수: $$\text{score}(Q, K) = \frac{Q K^T}{\sqrt{d_k}}$$
  2. 어텐션 가중치(Attention Weights) 계산:
    $$\alpha = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right)$$
  3. 컨텍스트 벡터(Context Vector) 계산:
    $$C = \alpha V = \sum_i \alpha_i v_i$$

이 컨텍스트 벡터가 디코더의 다음 출력을 예측하는 데 사용됩니다.


10. 컨볼루션 신경망(CNN)에서 출력 피처 맵(Output Feature Map)의 크기를 계산하는 수식을 설명해 보세요.

답변:
CNN에서 컨볼루션 연산을 거친 후의 출력 피처 맵의 크기는 입력 피처 맵의 크기, 필터(커널)의 크기, 스트라이드(stride), 패딩(padding)에 의해 결정됩니다.

입력 피처 맵의 높이와 너비를 각각 $H_{in}, W_{in}$이라 하고, 필터의 높이와 너비를 $F_H, F_W$, 스트라이드를 $S$, 패딩을 $P$라고 할 때, 출력 피처 맵의 높이 $H_{out}$과 너비 $W_{out}$은 다음과 같이 계산됩니다.

$$H_{out} = \left\lfloor \frac{H_{in} - F_H + 2P}{S} \right\rfloor + 1$$

$$W_{out} = \left\lfloor \frac{W_{in} - F_W + 2P}{S} \right\rfloor + 1$$

  • $\lfloor \cdot \rfloor$: 바닥 함수(floor function)
  • $H_{in}, W_{in}$: 입력의 높이, 너비
  • $F_H, F_W$: 필터(커널)의 높이, 너비
  • $P$: 패딩 크기
  • $S$: 스트라이드

이 수식을 통해 원하는 출력 크기를 얻기 위해 하이퍼파라미터인 필터 크기, 스트라이드, 패딩을 조절할 수 있습니다.

11. 모멘텀(Momentum)을 이용한 경사 하강법이 어떻게 일반 경사 하강법을 개선하는지 수식으로 설명해 보세요.

답변:
모멘텀은 경사 하강법에 관성의 개념을 도입하여 최적화 과정을 개선하는 기법입니다. 이전의 기울기(gradient)가 이동했던 방향을 일정 비율만큼 현재의 기울기에 더해주어, 최적점으로 더 빠르고 안정적으로 수렴하도록 돕습니다.

시간 $t$에서의 가중치 업데이트는 다음과 같이 이루어집니다.

  1. 속도(Velocity) 누적: $$v_t = \gamma v_{t-1} + \eta \nabla J(W_{t-1})$$
  2. 가중치 업데이트: $$W_t = W_{t-1} - v_t$$

여기서 각 기호의 의미는 다음과 같습니다.

  • $v_t$: 시간 $t$에서의 속도 벡터 (이동 방향과 크기)
  • $\gamma$ (감마): 모멘텀 계수(momentum coefficient)로, 이전 속도를 얼마나 반영할지 결정하는 값입니다 (보통 0.9와 같은 값을 사용).
  • $\eta$: 학습률(learning rate)
  • $\nabla J(W_{t-1})$: 이전 가중치에 대한 손실 함수의 기울기

개선 효과:

  • 지역 최소값(Local Minima) 탈출: 기울기가 0에 가까운 지점에서도 이전에 축적된 속도($v_{t-1}$) 덕분에 계속 이동하여 얕은 지역 최소값을 탈출할 가능성이 높아집니다.
  • 수렴 속도 향상: 기울기의 방향이 크게 변하지 않는 경우, 속도가 계속 누적되어 최적점으로 더 빠르게 수렴합니다.
  • 진동 억제: 경사면의 방향이 자주 바뀌는 경우(지그재그 현상), 이전 방향과 반대되는 기울기들이 서로 상쇄되어 진동을 줄여줍니다.

12. 풀링(Pooling) 연산, 특히 최대 풀링(Max Pooling)의 순전파 과정을 수식으로 표현하고, 역전파는 어떻게 이루어지는지 설명해 보세요.

답변:
최대 풀링은 입력 피처 맵의 특정 영역(receptive field)에서 가장 큰 값만 선택하여 피처 맵의 크기를 줄이는 연산입니다.

순전파 (Forward Propagation):
$k \times k$ 크기의 풀링 윈도우가 입력 피처 맵 $A$의 특정 영역 $R$에 적용될 때, 출력 $P$는 다음과 같이 계산됩니다.

$$P_{i,j} = \max_{(p,q) \in R_{i,j}} (A_{p,q})$$

  • $R_{i,j}$: 출력의 $(i,j)$ 위치에 해당하는 입력 맵 상의 윈도우 영역
  • $A_{p,q}$: 입력 맵의 $(p,q)$ 위치의 값

역전파 (Backward Propagation):
최대 풀링의 역전파는 “승자 독식(Winner takes all)” 방식으로 이루어집니다. 순전파 과정에서 최댓값으로 선택되었던 위치에만 기울기를 그대로 전달하고, 나머지 위치에는 0을 전달합니다.

손실 함수 $J$에 대한 출력 $P_{i,j}$의 기울기를 $\frac{\partial J}{\partial P_{i,j}}$라고 할 때, 입력 $A_{p,q}$에 대한 기울기는 다음과 같습니다.

$$\frac{\partial J}{\partial A_{p,q}} = \begin{cases} \frac{\partial J}{\partial P_{i,j}} & \text{if } A_{p,q} = \max(R_{i,j}) \\ 0 & \text{otherwise} \end{cases}$$

즉, 순전파 시 최댓값의 위치(인덱스)를 기억해 두었다가, 역전파 시 그 위치로만 기울기를 흘려보냅니다.


13. 소프트맥스(Softmax) 함수의 수식을 쓰고, 그 출력의 의미와 기울기(gradient)는 어떻게 계산되는지 설명해 보세요.

답변:
소프트맥스 함수는 다중 클래스 분류 문제에서 신경망의 마지막 레이어의 출력(로짓, logit)을 각 클래스에 대한 확률 분포로 변환하는 데 사용됩니다.

함수 수식:
$C$개의 클래스가 있고, 로짓 벡터가 $z = (z_1, z_2, \dots, z_C)$일 때, $i$번째 클래스에 대한 소프트맥스 함수 출력 $\hat{y}_i$는 다음과 같습니다.

$$\hat{y}_i = \text{softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{C} e^{z_j}}$$

출력의 의미:
출력 벡터 $\hat{y} = (\hat{y}_1, \dots, \hat{y}_C)$의 각 원소 $\hat{y}_i$는 0과 1 사이의 값을 가지며, 모든 원소의 합은 1이 됩니다 ($\sum \hat{y}_i = 1$). 이는 각 클래스에 대한 예측 확률로 해석할 수 있습니다.

기울기 (범주형 교차 엔트로피 손실 함수와 함께 사용될 때):
소프트맥스는 보통 범주형 교차 엔트로피 손실 함수 $L = - \sum y_k \log(\hat{y}_k)$와 함께 사용됩니다. 이 경우, 손실 함수 $L$을 로짓 $z_i$에 대해 미분한 기울기는 매우 간단한 형태로 나타납니다.

$$\frac{\partial L}{\partial z_i} = \hat{y}_i - y_i$$

  • $\hat{y}_i$: 모델의 $i$번째 클래스에 대한 예측 확률
  • $y_i$: 실제 정답 레이블 (원-핫 인코딩 벡터의 $i$번째 원소)

이처럼 예측 확률과 실제 값의 차이로 기울기가 계산되므로, 오차가 클수록 큰 기울기를 발생시켜 학습을 효과적으로 이끌 수 있습니다.


14. 순환 신경망(RNN)의 기본적인 순전파 과정을 수식으로 설명해 보세요.

답변:
RNN은 시퀀스 데이터를 처리하기 위해 이전 타임스텝(time step)의 정보를 현재 타임스텝의 계산에 활용하는 신경망입니다.

타임스텝 $t$에서의 입력 벡터를 $x_t$, 이전 타임스텝의 은닉 상태(hidden state)를 $h_{t-1}$이라고 할 때, 현재 타임스텝의 은닉 상태 $h_t$와 출력 $y_t$는 다음과 같이 계산됩니다.

  1. 은닉 상태 업데이트: $$h_t = f(W_{hh} h_{t-1} + W_{xh} x_t + b_h)$$
  2. 출력 계산: $$y_t = g(W_{hy} h_t + b_y)$$

여기서 각 기호의 의미는 다음과 같습니다.

  • $h_t$: 시간 $t$에서의 은닉 상태 벡터
  • $x_t$: 시간 $t$에서의 입력 벡터
  • $y_t$: 시간 $t$에서의 출력 벡터
  • $W_{hh}, W_{xh}, W_{hy}$: 각각 (이전 은닉 상태 $\rightarrow$ 현재 은닉 상태), (입력 $\rightarrow$ 현재 은닉 상태), (현재 은닉 상태 $\rightarrow$ 출력)을 위한 가중치 행렬. 이 가중치들은 모든 타임스텝에서 공유됩니다.
  • $b_h, b_y$: 각 계산을 위한 편향(bias) 벡터
  • $f, g$: 활성화 함수 (보통 $f$는 $\tanh$나 ReLU, $g$는 문제에 따라 Sigmoid나 Softmax 등을 사용)

15. LSTM(Long Short-Term Memory)의 핵심 구성 요소인 3개의 게이트(Gate)를 각각 수식으로 설명해 보세요.

답변:
LSTM은 RNN의 장기 의존성 문제(long-term dependency problem)를 해결하기 위해 셀 상태(cell state)와 3개의 게이트(Forget, Input, Output)를 도입한 구조입니다.

타임스텝 $t$에서 입력 $x_t$와 이전 은닉 상태 $h_{t-1}$이 주어졌을 때, 각 게이트와 셀 상태는 다음과 같이 계산됩니다.

  1. Forget Gate ($f_t$): 과거 정보를 얼마나 잊을지 결정합니다. $$f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$$ $\sigma$: 시그모이드 함수 (출력이 0~1 사이 값을 가짐), $[h_{t-1}, x_t]$: 두 벡터를 이어붙인(concatenate) 것
  2. Input Gate ($i_t$): 새로운 정보를 얼마나 셀 상태에 저장할지 결정합니다. $$i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)$$ 후보 셀 상태 ($\tilde{C}_t$): $$\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)$$
  3. 셀 상태 업데이트 ($C_t$): $$C_t = f_t * C_{t-1} + i_t * \tilde{C}_t$$ $*$: 원소별 곱 (element-wise product)
  4. Output Gate ($o_t$): 셀 상태 중 어떤 정보를 은닉 상태(출력)로 내보낼지 결정합니다. $$o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)$$ 은닉 상태 업데이트 ($h_t$): $$h_t = o_t * \tanh(C_t)$$

16. 변이형 오토인코더(VAE)의 손실 함수를 수식으로 표현하고, 각 항이 의미하는 바를 설명해 보세요.

답변:
VAE는 잠재 변수(latent variable) $z$의 확률 분포를 학습하여 데이터를 생성하는 생성 모델입니다. VAE의 손실 함수는 재구성 오차(Reconstruction Error)규제(Regularization) 두 항으로 구성됩니다. 이 손실 함수는 증거 하한(Evidence Lower BOund, ELBO)을 최대화하는 것과 같습니다.

$$L(\theta, \phi; x) = \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x) || p(z))$$

각 항의 의미는 다음과 같습니다.

  1. 재구성 오차 (Reconstruction Error): $$\mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)]$$ 이 항은 인코더 $q_\phi(z|x)$가 만든 잠재 변수 $z$로부터 디코더 $p_\theta(x|z)$가 원본 데이터 $x$를 얼마나 잘 복원하는지를 측정합니다. 보통 이진 데이터의 경우 이진 교차 엔트로피, 연속적인 데이터의 경우 평균 제곱 오차(MSE)로 계산됩니다. 이 값을 최대화하는 것은 원본을 잘 복원하도록 학습하는 것과 같습니다.
  2. 규제 (Regularization) / KL 발산 (KL Divergence): $$- D_{KL}(q_\phi(z|x) || p(z))$$ 이 항은 인코더가 출력하는 잠재 변수의 분포 $q_\phi(z|x)$와, 우리가 사전에 가정한 잠재 공간의 사전 확률 분포 $p(z)$ (보통 표준 정규분포 $N(0, I)$) 사이의 거리(쿨백-라이블러 발산)를 측정합니다. 이 항은 $q_\phi(z|x)$가 $p(z)$에 가깝도록 규제하여, 잠재 공간이 잘 구조화되고 연속적인 형태로 만들어 새로운 데이터를 생성하기 용이하게 합니다.

전체적으로 VAE는 데이터를 잘 복원하면서도, 잠재 공간이 정규분포를 따르도록 학습합니다.


17. 생성적 적대 신경망(GAN)의 목적 함수(Objective Function)를 수식으로 설명해 보세요.

답변:
GAN은 생성자(Generator, G)와 판별자(Discriminator, D)라는 두 개의 신경망이 서로 경쟁하며 학습하는 모델입니다.

  • 생성자(G): 실제 데이터와 유사한 가짜 데이터를 생성하려고 학습합니다.
  • 판별자(D): 입력된 데이터가 실제 데이터인지 생성자가 만든 가짜 데이터인지 구별하도록 학습합니다.

이러한 경쟁 관계는 다음과 같은 최소-최대 게임(minimax game) 형태의 목적 함수로 표현됩니다.

$$\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{data}(x)}[\log D(x)] + \mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]$$

  • $\min_G \max_D$: 생성자 G는 목적 함수를 최소화하려고 하고, 판별자 D는 최대화하려고 합니다.
  • $\mathbb{E}_{x \sim p_{data}(x)}[\log D(x)]$: 판별자의 관점: 실제 데이터 $x$를 입력했을 때, 판별자가 1(실제)에 가까운 값을 출력하도록 학습합니다. 이 항을 최대화합니다.
  • $\mathbb{E}_{z \sim p_z(z)}[\log(1 - D(G(z)))]$: 판별자의 관점: 생성자가 만든 가짜 데이터 $G(z)$를 입력했을 때, 판별자가 0(가짜)에 가까운 값을 출력하도록 학습합니다. 즉, $D(G(z))$를 0으로 만들어서 $\log(1-D(G(z)))$를 최대화합니다.
  • 생성자의 관점: 생성자는 판별자가 가짜 데이터 $G(z)$를 실제 데이터로 착각하게 만들어야 합니다. 즉, $D(G(z))$가 1에 가까워지도록 하여 $\log(1-D(G(z)))$를 최소화하려고 합니다.

결론적으로, 판별자는 실제 데이터와 가짜 데이터를 완벽하게 구별하려고 노력하고, 생성자는 판별자를 속일 만큼 정교한 가짜 데이터를 만들려고 노력하며 성능이 함께 향상됩니다.


18. 자기 회귀 모델(Autoregressive Model)의 기본 원리를 조건부 확률을 이용한 수식으로 설명해 보세요.

답변:
자기 회귀 모델은 시퀀스 데이터의 확률 분포를 모델링하는 한 방식으로, 시퀀스 내의 한 데이터 포인트의 확률을 이전 데이터 포인트들의 조건부 확률로 표현합니다.

길이가 $T$인 시퀀스 데이터 $x = (x_1, x_2, \dots, x_T)$가 있을 때, 이 시퀀스의 결합 확률 분포 $p(x)$는 확률의 연쇄 법칙에 의해 다음과 같이 분해될 수 있습니다.

$$p(x) = p(x_1, x_2, \dots, x_T) = p(x_1) \prod_{t=2}^{T} p(x_t | x_1, \dots, x_{t-1})$$

자기 회귀 모델은 이 조건부 확률 $p(x_t | x_1, \dots, x_{t-1})$을 모델링합니다. 즉, $t$ 시점의 데이터 $x_t$를 예측하기 위해 이전까지의 모든 데이터 $(x_1, \dots, x_{t-1})$를 입력으로 사용합니다.

예를 들어, RNN 기반의 언어 모델은 이 원리를 이용하여 다음 단어를 예측합니다.

$$P(\text{word}_t | \text{word}_1, \dots, \text{word}_{t-1}) = \text{softmax}(h_{t-1})$$

여기서 은닉 상태 $h_{t-1}$은 이전 단어들($\text{word}_1$부터 $\text{word}_{t-1}$까지)의 정보를 모두 압축하고 있는 벡터입니다.


19. 잔차 연결(Residual Connection)이 무엇이며, 왜 깊은 신경망 학습에 효과적인지 수식으로 설명해 보세요.

답변:
잔차 연결은 ResNet(Residual Network)에서 도입된 개념으로, 신경망의 일부 레이어(층)를 건너뛰는 연결(shortcut connection)을 말합니다. 이는 층이 매우 깊어질 때 발생하는 기울기 소실/폭주(vanishing/exploding gradient) 문제와 성능 저하(degradation) 문제를 해결하는 데 효과적입니다.

일반적인 신경망 블록이 입력 $x$를 받아 $F(x)$를 출력하도록 학습한다면, 잔차 블록은 $F(x) + x$를 출력합니다.

$$H(x) = F(x) + x$$

  • $x$: 블록의 입력
  • $F(x)$: 블록 내의 가중치 레이어(예: Conv-BN-ReLU-Conv-BN)를 통과한 출력
  • $H(x)$: 블록의 최종 출력

효과적인 이유 (역전파 관점):
손실 함수 $J$에 대한 입력 $x$의 기울기를 연쇄 법칙을 이용해 구해보면 다음과 같습니다.

$$\frac{\partial J}{\partial x} = \frac{\partial J}{\partial H(x)} \frac{\partial H(x)}{\partial x} = \frac{\partial J}{\partial H(x)} \left( \frac{\partial F(x)}{\partial x} + 1 \right)$$

위 수식에서 $+1$ 항 덕분에, $F(x)$의 기울기($\frac{\partial F(x)}{\partial x}$)가 0에 가까워지더라도(기울기 소실), 최소한 1의 기울기가 입력 $x$로 그대로 전달됩니다. 이로 인해 층이 아무리 깊어져도 기울기가 소실되지 않고 하위 레이어까지 효과적으로 전파될 수 있어 깊은 신경망의 학습이 가능해집니다.


20. 레이어 정규화(Layer Normalization)와 배치 정규화(Batch Normalization)의 차이점을 수식을 통해 설명해 보세요.

답변:
레이어 정규화와 배치 정규화는 모두 신경망의 특정 층의 입력값을 정규화하여 학습을 안정화하고 가속화하는 기법이지만, 정규화를 수행하는 단위가 다릅니다.

데이터가 (N, C, H, W) 형태로 주어진다고 가정합시다. (N: 배치 크기, C: 채널, H: 높이, W: 너비)

배치 정규화 (Batch Normalization):
배치 정규화는 채널(feature)별로, 배치에 포함된 모든 데이터에 대해 평균과 분산을 계산합니다.

$$\mu_c = \frac{1}{N \cdot H \cdot W} \sum_{n=1}^{N} \sum_{h=1}^{H} \sum_{w=1}^{W} x_{n,c,h,w}$$

$$\sigma_c^2 = \frac{1}{N \cdot H \cdot W} \sum_{n=1}^{N} \sum_{h=1}^{H} \sum_{w=1}^{W} (x_{n,c,h,w} - \mu_c)^2$$

특징: 미니배치 크기에 의존적이며, 주로 CNN에서 효과적입니다.

레이어 정규화 (Layer Normalization):
레이어 정규화는 개별 데이터 샘플별로, 해당 샘플의 모든 채널(feature)에 걸쳐 평균과 분산을 계산합니다.

$$\mu_n = \frac{1}{C \cdot H \cdot W} \sum_{c=1}^{C} \sum_{h=1}^{H} \sum_{w=1}^{W} x_{n,c,h,w}$$

$$\sigma_n^2 = \frac{1}{C \cdot H \cdot W} \sum_{c=1}^{C} \sum_{h=1}^{H} \sum_{w=1}^{W} (x_{n,c,h,w} - \mu_n)^2$$

특징: 배치 크기와 무관하게 동작하므로, 배치 크기가 작은 경우나 시퀀스 길이가 가변적인 RNN, 트랜스포머(Transformer)와 같은 모델에 더 적합합니다.

21. 트랜스포머(Transformer)의 셀프 어텐션(Self-Attention)에서 Q, K, V 행렬은 어떻게 생성되며, 이들을 이용한 최종 어텐션 출력값의 수식은 무엇인가요?

답변:
셀프 어텐션은 입력 시퀀스 내의 단어들이 서로 어떤 관계를 맺고 있는지를 학습하는 메커니즘입니다. 입력 임베딩 벡터 시퀀스로부터 Query(Q), Key(K), Value(V) 행렬을 생성하여 어텐션 출력을 계산합니다.

입력 임베딩 행렬을 $X \in \mathbb{R}^{n \times d_x}$ (n: 시퀀스 길이, $d_x$: 임베딩 차원)라고 할 때, 학습 가능한 가중치 행렬 $W_Q, W_K, W_V \in \mathbb{R}^{d_x \times d_k}$ 를 사용하여 Q, K, V 행렬을 생성합니다.

  1. Q, K, V 행렬 생성:
    $$Q = XW_Q \qquad K = XW_K \qquad V = XW_V$$ $Q, K, V \in \mathbb{R}^{n \times d_k}$ (일반적으로 $d_k$는 $d_x$보다 작은 차원을 가짐)
  2. 어텐션 출력 계산:
    이렇게 생성된 Q, K, V 행렬을 이용해 최종 어텐션 출력 Z는 스케일드 닷-프로덕트 어텐션(Scaled Dot-Product Attention) 수식에 따라 한 번에 계산됩니다. $$\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V = Z$$
    • $QK^T$: 각 단어의 쿼리 벡터와 모든 단어의 키 벡터 간의 내적을 계산하여 유사도 행 matr 행렬을 만듭니다.
    • $\sqrt{d_k}$: $d_k$ 값의 크기에 따라 내적 값이 커지는 것을 방지하여 소프트맥스 함수의 기울기 소실을 막는 스케일링 팩터입니다.
    • $\text{softmax}(\cdot)$: 유사도 점수를 합이 1인 어텐션 가중치로 변환합니다.
    • $(\cdot)V$: 계산된 어텐션 가중치를 밸류 행렬에 가중합하여, 시퀀스 내 각 단어의 중요도가 반영된 최종 출력 행렬 $Z$를 얻습니다.

22. 활성화 함수 Leaky ReLU의 수식을 쓰고, 이것이 Dying ReLU 문제를 어떻게 해결하는지 설명해 보세요.

답변:
Leaky ReLU는 ReLU 함수가 음수 입력에 대해 기울기를 0으로 만들어 뉴런이 비활성화되는 Dying ReLU 문제를 해결하기 위해 제안된 활성화 함수입니다.

ReLU 함수:
$$f(x) = \max(0, x)$$

Leaky ReLU 함수:
$$f(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \le 0 \end{cases}$$ 또는 간단히 $f(x) = \max(\alpha x, x)$ 로 표현할 수 있습니다.

  • $\alpha$: 0보다 큰 작은 상수(hyperparameter)로, 보통 0.01과 같은 값을 사용합니다.

Dying ReLU 문제 해결 원리:
ReLU는 입력 $x$가 음수일 때, 함수의 출력이 0이 되고 미분 값(기울기)도 0이 됩니다 ($\frac{d}{dx}f(x)=0 \text{ for } x<0$). 이로 인해 역전파 과정에서 해당 뉴런으로 기울기가 전달되지 않아 가중치 업데이트가 멈추고, 뉴런이 "죽는" 현상이 발생할 수 있습니다.

Leaky ReLU는 입력 $x$가 음수일 때, 0 대신 작은 기울기 $\alpha$를 가집니다 ($\frac{d}{dx}f(x)=\alpha \text{ for } x<0$). 이 작은 음의 기울기 덕분에 입력값이 음수이더라도 역전파 시 0이 아닌 기울기가 전달되어 가중치 업데이트가 계속 이루어질 수 있습니다. 이를 통해 Dying ReLU 문제를 완화하고 학습의 안정성을 높입니다.


23. 옵티마이저 RMSProp이 Adagrad의 문제점을 어떻게 개선했는지 수식으로 설명해 보세요.

답변:
Adagrad는 각 파라미터마다 학습률을 다르게 적용하지만, 학습이 진행될수록 과거의 모든 기울기 제곱을 계속 축적하여 학습률이 급격히 감소하고 결국 0에 수렴하여 학습이 멈추는(early stopping) 문제점이 있습니다. RMSProp은 이 문제를 해결하기 위해 기울기 제곱의 지수 이동 평균(Exponential Moving Average)을 사용합니다.

Adagrad의 가중치 업데이트:
$$W_{t+1} = W_t - \frac{\eta}{\sqrt{G_t + \epsilon}} g_t$$ $$G_t = G_{t-1} + g_t^2 = \sum_{i=1}^{t} g_i^2 \quad (\text{모든 과거 기울기 제곱의 합})$$

RMSProp의 가중치 업데이트:
$$W_{t+1} = W_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_t$$ $$E[g^2]_t = \gamma E[g^2]_{t-1} + (1-\gamma)g_t^2 \quad (\text{기울기 제곱의 지수 이동 평균})$$

  • $g_t$: 시간 t에서의 기울기 $\nabla J(W_t)$
  • $E[g^2]_t$: 시간 t까지의 기울기 제곱의 지수 이동 평균
  • $\gamma$: 지수 이동 평균의 감쇠율(decaying rate), 보통 0.9를 사용합니다.

개선 원리:
RMSProp에서 $E[g^2]_t$는 감쇠율 $\gamma$로 인해 최근의 기울기 정보에 더 큰 가중치를 두고, 오래된 기울기 정보의 영향력은 점차 감소시킵니다. 이 덕분에 Adagrad처럼 분모가 무한정 커지지 않고, 학습률이 0으로 수렴하는 것을 방지할 수 있습니다. 따라서 RMSProp은 학습 후반부에도 적절한 크기의 학습률을 유지하며 학습을 지속할 수 있습니다.


24. Focal Loss가 표준 교차 엔트로피(Cross-Entropy)와 어떻게 다르며, 클래스 불균형(Class Imbalance) 문제를 어떻게 해결하는지 수식으로 설명해 보세요.

답변:
Focal Loss는 RetinaNet에서 제안된 손실 함수로, 표준 교차 엔트로피(CE)에 가중치 조절 항을 추가하여 클래스 불균형 문제를 해결합니다. 특히, 학습이 잘 된 쉬운 예제(easy example)들의 손실 기여도를 낮추고, 학습이 어려운 예제(hard example)에 집중하도록 만듭니다.

표준 이진 교차 엔트로피 (CE):
$$CE(p, y) = \begin{cases} -\log(p) & \text{if } y=1 \\ -\log(1-p) & \text{if } y=0 \end{cases}$$ 간단히 $CE(p_t) = -\log(p_t)$ 로 표현할 수 있습니다. 여기서 $p_t = p$ (if y=1), $p_t = 1-p$ (if y=0).

Focal Loss (FL):
$$FL(p_t) = -(1-p_t)^\gamma \log(p_t)$$

  • $(1-p_t)^\gamma$: 조절 인수(Modulating factor)
  • $\gamma$ (감마): 집중 파라미터(Focusing parameter), $\gamma \ge 0$.

해결 원리:
쉬운 예제 (Easy Example): 모델이 정답을 높은 확률($p_t \to 1$)로 예측하는 경우, 조절 인수 $(1-p_t)^\gamma$는 0에 가까워집니다. 이로 인해 해당 예제의 손실 값은 거의 0이 되어 전체 손실에 거의 기여하지 않습니다.
어려운 예제 (Hard Example): 모델이 정답을 낮은 확률($p_t \to 0$)로 예측하는 경우, 조절 인수 $(1-p_t)^\gamma$는 1에 가까워져 손실이 거의 줄어들지 않습니다.

예를 들어 $\gamma=2$ 일 때, $p_t=0.9$인 쉬운 예제의 손실은 CE에 비해 $(1-0.9)^2=0.01$배로 줄어들지만, $p_t=0.1$인 어려운 예제의 손실은 $(1-0.1)^2=0.81$배로 상대적으로 적게 줄어듭니다.

이처럼 Focal Loss는 수많은 쉬운 배경(background) 예제들의 손실을 효과적으로 줄여, 소수의 어려운 객체(object) 예제에 대한 학습에 집중하도록 만들어 클래스 불균형 문제를 해결합니다.


25. 1x1 컨볼루션 연산의 두 가지 주요 역할은 무엇이며, 이를 수식적 관점에서 어떻게 설명할 수 있나요?

답변:
1x1 컨볼루션은 높이와 너비가 1인 필터를 사용하는 컨볼루션 연산으로, 두 가지 주요 역할을 수행합니다.

1) 채널(Channel) 수 조절 (차원 축소 및 확장)

입력 피처 맵이 $H \times W \times C_{in}$ 차원일 때, $C_{out}$개의 $1 \times 1 \times C_{in}$ 필터를 사용하여 컨볼루션 연산을 수행하면 출력 피처 맵의 차원은 $H \times W \times C_{out}$이 됩니다.

수식적으로, 출력의 한 위치 $(i, j, k)$의 값 $y_{ijk}$는 다음과 같이 계산됩니다. $$y_{ijk} = \sum_{c=1}^{C_{in}} W_{kc} \cdot x_{ijc} + b_k$$

  • $x_{ijc}$: 입력의 $(i,j)$ 위치, $c$번째 채널의 값
  • $W_{kc}$: $k$번째 필터의 $c$번째 채널의 가중치
  • $b_k$: $k$번째 필터의 편향

이는 입력 피처 맵의 각 위치 $(i, j)$에서 $C_{in}$ 차원의 벡터를 가져와, $C_{out}$ 차원으로 매핑하는 완전 연결 계층(Fully-Connected Layer)과 동일한 연산입니다. 이를 통해 파라미터 수를 줄이거나(bottleneck), 특징 표현력을 높일 수 있습니다.

2) 비선형성 추가

컨볼루션 연산 후에는 보통 ReLU와 같은 비선형 활성화 함수가 적용됩니다. 1x1 컨볼루션도 마찬가지로 활성화 함수와 함께 사용되면, 피처 맵의 공간적 차원은 유지하면서 채널 간의 복잡한 관계를 학습하고 모델의 표현력을 높이는 비선형성을 추가할 수 있습니다.

$$y'_{ijk} = \text{ReLU}(y_{ijk}) = \text{ReLU}\left(\sum_{c=1}^{C_{in}} W_{kc} \cdot x_{ijc} + b_k\right)$$


26. Gated Recurrent Unit (GRU)이 LSTM보다 어떻게 더 간단한 구조를 가지는지 수식으로 비교 설명해 보세요.

답변:
GRU는 LSTM의 복잡한 구조를 간소화하면서 비슷한 성능을 내는 RNN의 변형입니다. LSTM의 셀 상태(cell state)와 은닉 상태(hidden state)를 하나의 은닉 상태로 통합하고, 3개의 게이트를 2개의 게이트로 줄였습니다.

LSTM (3 Gates, 2 States) GRU (2 Gates, 1 State)
Forget Gate: $f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)$ Reset Gate: $r_t = \sigma(W_r \cdot [h_{t-1}, x_t] + b_r)$
Input Gate: $i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i)$ Update Gate: $z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z)$
Candidate Cell: $\tilde{C}_t = \tanh(W_C \cdot [h_{t-1}, x_t] + b_C)$ Candidate Hidden: $\tilde{h}_t = \tanh(W_h \cdot [r_t*h_{t-1}, x_t] + b_h)$
Cell State Update: $C_t = f_t * C_{t-1} + i_t * \tilde{C}_t$ Hidden State Update: $h_t = (1-z_t)*h_{t-1} + z_t*\tilde{h}_t$
Output Gate: $o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o)$ -
Hidden State Update: $h_t = o_t * \tanh(C_t)$ -

주요 차이점:

  1. 상태 벡터: LSTM은 셀 상태($C_t$)와 은닉 상태($h_t$) 2개를 사용하지만, GRU는 은닉 상태($h_t$) 하나만 사용합니다.
  2. 게이트 수: LSTM은 Forget, Input, Output 3개의 게이트를 사용합니다. GRU는 Reset Gate($r_t$)와 Update Gate($z_t$) 2개만 사용합니다.
  3. 업데이트 방식: GRU의 Update Gate($z_t$)는 LSTM의 Forget Gate와 Input Gate의 역할을 동시에 수행합니다. $(1-z_t)$는 과거 정보를 얼마나 잊을지, $z_t$는 새로운 정보를 얼마나 반영할지를 결정합니다.

이러한 구조적 단순함 덕분에 GRU는 LSTM보다 파라미터 수가 적어 계산 효율이 높고, 데이터가 적을 때 과적합 방지에 더 유리할 수 있습니다.


27. 단어 임베딩 모델 Word2Vec의 Skip-gram 모델의 목적 함수를 수식으로 설명해 보세요.

답변:
Skip-gram은 중심 단어(center word)가 주어졌을 때, 주변 단어(context words)들을 예측하는 방식으로 단어를 벡터로 표현하는 모델입니다. 목적은 중심 단어와 주변 단어가 함께 나타날 조건부 확률을 최대화하는 것입니다.

전체 말뭉치(corpus)에 대해, Skip-gram 모델은 다음 로그 확률의 합을 최대화하려고 합니다. $$J(\theta) = \frac{1}{T} \sum_{t=1}^{T} \sum_{j \in C_t} \log p(w_j | w_t; \theta)$$

  • $T$: 말뭉치의 총 단어 수
  • $w_t$: $t$번째 위치의 중심 단어
  • $C_t$: 중심 단어 $w_t$의 주변 단어 집합 (윈도우 크기 내의 단어들)
  • $w_j$: 주변 단어
  • $\theta$: 모델의 파라미터 (단어 벡터들)

여기서 조건부 확률 $p(w_j | w_t)$는 소프트맥스 함수를 사용하여 정의됩니다. $$p(w_j | w_t) = \frac{\exp(v'_{w_j} \cdot v_{w_t})}{\sum_{i=1}^{V} \exp(v'_{w_i} \cdot v_{w_t})}$$

  • $v_{w_t}$: 중심 단어 $w_t$의 입력 벡터
  • $v'_{w_j}$: 주변 단어 $w_j$의 출력 벡터
  • $V$: 전체 어휘(vocabulary)의 크기

문제점 및 해결 (Negative Sampling):
위 소프트맥스 수식의 분모는 전체 어휘 $V$에 대해 계산해야 하므로 계산량이 매우 많습니다. 이를 해결하기 위해 Skip-gram은 실제로는 Negative Sampling이라는 기법을 사용합니다. 이는 실제 주변 단어(positive sample)와 랜덤으로 뽑은 주변 단어가 아닌 단어(negative samples) 몇 개에 대해서만 이진 분류 문제를 푸는 방식으로 목적 함수를 근사합니다.


28. 배치 크기(Batch Size)가 모델 학습에 미치는 영향을 수학적 관점(기울기의 정확성, 수렴 속도)에서 설명해 보세요.

답변:
배치 크기는 한 번의 가중치 업데이트에 사용되는 데이터 샘플의 수를 의미하며, 기울기 추정의 정확성과 학습 안정성/속도에 영향을 미칩니다.

전체 학습 데이터셋에 대한 실제 손실 함수를 $J(W)$, 하나의 미니배치에 대한 손실 함수를 $J_B(W)$라고 하겠습니다. 경사 하강법의 목표는 실제 기울기 $\nabla J(W)$를 이용해 가중치를 업데이트하는 것입니다.

$$\nabla J(W) = \frac{1}{N} \sum_{i=1}^{N} \nabla J_i(W)$$ ($N$: 전체 데이터 수, $J_i$: $i$번째 샘플에 대한 손실)

미니배치를 사용하면 실제 기울기를 다음과 같이 근사합니다. $$\nabla J_B(W) = \frac{1}{B} \sum_{j=1}^{B} \nabla J_j(W)$$ ($B$: 배치 크기)

1) 배치 크기가 클 때 (Large Batch Size)

  • 기울기의 정확성: $\nabla J_B(W)$가 실제 기울기 $\nabla J(W)$에 더 가까워집니다 ($\nabla J_B(W) \approx \nabla J(W)$). 즉, 기울기의 분산(variance)이 작아져 더 안정적인 방향으로 업데이트됩니다.
  • 수렴: 안정적인 기울기 덕분에 더 부드럽고 안정적으로 최적점으로 수렴할 수 있습니다. 하지만, 날카로운 최소값(sharp minima)에 수렴할 가능성이 있어 일반화 성능이 저하될 수 있다는 연구 결과도 있습니다.
  • 단점: 한 번 업데이트에 많은 계산량이 필요하며, 메모리 사용량이 큽니다.

2) 배치 크기가 작을 때 (Small Batch Size)

  • 기울기의 정확성: $\nabla J_B(W)$는 실제 기울기 $\nabla J(W)$에 대한 노이즈가 많은 추정치가 됩니다. 즉, 기울기의 분산이 큽니다.
  • 수렴: 이 노이즈는 일종의 규제(regularization) 효과를 주어, 얕은 지역 최소값(local minima)을 탈출하고 더 평평한 최소값(flat minima)을 찾아 일반화 성능을 높이는 데 도움이 될 수 있습니다. 하지만 학습 과정이 불안정하고 진동이 심할 수 있습니다.
  • 장점: 계산량이 적고 메모리를 효율적으로 사용할 수 있습니다.

따라서 배치 크기는 계산 효율성과 모델 성능 사이의 트레이드오프 관계를 가지는 중요한 하이퍼파라미터입니다.


29. 쿨백-라이블러 발산(Kullback-Leibler Divergence)의 수식을 쓰고, 이것이 교차 엔트로피와 어떤 관계가 있는지 설명해 보세요.

답변:
쿨백-라이블러 발산(KL Divergence)은 두 확률 분포의 차이(유사하지 않은 정도)를 측정하는 지표입니다.

이산 확률 분포 $P$와 $Q$에 대한 KL 발산 $D_{KL}(P || Q)$는 다음과 같이 정의됩니다. $$D_{KL}(P || Q) = \sum_{x} P(x) \log\left(\frac{P(x)}{Q(x)}\right)$$

  • $P(x)$: 실제 데이터의 확률 분포
  • $Q(x)$: 모델이 예측한 확률 분포

교차 엔트로피와의 관계:
KL 발산 수식을 전개하면 엔트로피(Entropy)와 교차 엔트로피(Cross-Entropy) 항으로 나눌 수 있습니다.

$$D_{KL}(P || Q) = \sum_{x} P(x) (\log P(x) - \log Q(x))$$ $$= \sum_{x} P(x) \log P(x) - \sum_{x} P(x) \log Q(x)$$ $$= -H(P) + H(P, Q)$$

여기서,

  • $H(P) = -\sum_x P(x) \log P(x)$ 는 $P$의 엔트로피입니다.
  • $H(P, Q) = -\sum_x P(x) \log Q(x)$ 는 $P$와 $Q$의 교차 엔트로피입니다.

따라서 KL 발산과 교차 엔트로피는 다음과 같은 관계를 가집니다. $$H(P, Q) = H(P) + D_{KL}(P || Q)$$

머신러닝 분류 문제에서 손실 함수를 최소화하는 것은 모델의 예측 분포 $Q$를 실제 분포 $P$에 가깝게 만드는 것, 즉 $D_{KL}(P || Q)$를 최소화하는 것과 같습니다. 이때, 실제 분포 $P$의 엔트로피 $H(P)$는 고정된 상수 값이므로, 교차 엔트로피 $H(P, Q)$를 최소화하는 것은 KL 발산 $D_{KL}(P || Q)$를 최소화하는 것과 동일한 목표를 가집니다. 이 때문에 교차 엔트로피가 분류 문제의 손실 함수로 널리 사용됩니다.


30. 지식 증류(Knowledge Distillation)의 기본 개념과 목적 함수를 수식으로 설명해 보세요.

답변:
지식 증류는 크고 복잡한 교사 모델(Teacher Model)의 지식을 작고 가벼운 학생 모델(Student Model)에 전달하는 모델 압축 기법입니다. 이는 단순히 정답 레이블(hard label)만 학습하는 것이 아니라, 교사 모델의 예측 확률 분포(soft label)를 함께 학습함으로써 이루어집니다.

학생 모델의 최종 손실 함수 $L_{total}$은 두 가지 손실의 가중합으로 구성됩니다. $$L_{total} = \alpha \cdot L_{hard} + (1-\alpha) \cdot L_{soft}$$

  • $\alpha$: 두 손실의 중요도를 조절하는 하이퍼파라미터

1) Hard Loss ($L_{hard}$):
학생 모델이 실제 정답 레이블(one-hot vector)에 대해 계산하는 일반적인 교차 엔트로피 손실입니다. $$L_{hard} = H(y_{true}, \sigma(z_s))$$

  • $y_{true}$: 실제 정답 레이블
  • $z_s$: 학생 모델의 로짓(logit)
  • $\sigma$: 소프트맥스 함수
  • $H$: 교차 엔트로피

2) Soft Loss ($L_{soft}$):
교사 모델의 "부드러운" 예측 확률 분포와 학생 모델의 예측 확률 분포 사이의 손실을 계산합니다. 여기서 온도(Temperature, T)라는 개념을 도입하여 더 부드러운 확률 분포를 만듭니다.

$$p_i^T = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}$$

  • $T > 1$ 이면 확률 분포가 더 부드러워져(soften), 정답이 아닌 클래스에 대한 교사 모델의 "지식"이 더 잘 드러납니다.

Soft Loss는 이 부드러워진 확률 분포 사이의 KL 발산(또는 교차 엔트로피)으로 계산됩니다. $$L_{soft} = D_{KL}(p_t^T || p_s^T) \cdot T^2$$

  • $p_t^T, p_s^T$: 각각 온도 T가 적용된 교사 모델과 학생 모델의 예측 확률
  • $T^2$: 온도를 높였을 때 기울기 크기가 작아지는 것을 보정하기 위해 곱해주는 항입니다.

학생 모델은 이 두 가지 손실을 동시에 최소화하도록 학습함으로써, 실제 정답을 맞추는 능력과 함께 교사 모델의 일반화된 지식(예: 클래스 간의 유사성)까지 학습하게 되어 더 작지만 강력한 성능을 갖게 됩니다.

31. 적응형 학습률 스케줄러(Adaptive Learning Rate Scheduler) 중 Cosine Annealing의 수식을 설명하고, 이것이 어떻게 동작하는지 설명해 보세요.

답변:
Cosine Annealing은 학습 과정 동안 코사인(cosine) 함수의 형태를 따라 학습률(learning rate)을 주기적으로 부드럽게 변화시키는 스케줄러입니다. 이를 통해 학습 초기에는 큰 학습률로 빠르게 탐색하고, 후반부에는 작은 학습률로 최적점에 안정적으로 수렴하도록 돕습니다.

특정 주기(epoch) $T_{\mathrm{cur}}$ 동안의 학습률 $\eta_t$는 다음과 같이 계산됩니다.

$$ \eta_t \;=\; \eta_{\min} \;+\; \tfrac{1}{2}\,(\eta_{\max}-\eta_{\min})\Big(1+\cos\!\big(\pi\,\tfrac{T_{\mathrm{cur}}}{T_{\max}}\big)\Big) $$

  • $\eta_t$: 현재 스텝(또는 에폭) $t$에서의 학습률
  • $\eta_{\min}$: 최소 학습률 (보통 0)
  • $\eta_{\max}$: 최대 학습률 (초기 학습률)
  • $T_{\mathrm{cur}}$: 현재 주기 내에서 진행된 스텝(또는 에폭) 수
  • $T_{\max}$: 전체 주기의 길이 (학습률이 $\eta_{\max}$에서 $\eta_{\min}$까지 도달하는 데 걸리는 스텝 수)

동작 원리:
이 스케줄은 $T_{\mathrm{cur}}$가 0에서 $T_{\max}$로 증가함에 따라 코사인 함수의 값이 1에서 −1로 변하는 특성을 이용합니다. 그 결과, 학습률 $\eta_t$는 $\eta_{\max}$에서 시작하여 부드러운 곡선을 그리며 $\eta_{\min}$까지 점진적으로 감소합니다. 이러한 주기적인 학습률 재시작(warm restart)은 모델이 얕은 지역 최적점(local minima)에서 벗어나 더 나은 최적점을 찾을 기회를 제공합니다.


32. Dilated Convolution (Atrous Convolution)이 어떻게 더 넓은 수용 영역(Receptive Field)을 확보하는지 수식적 관점에서 설명해 보세요.

답변:
Dilated Convolution은 표준 컨볼루션의 필터 내부에 일정한 간격(dilation rate)을 두어, 파라미터 수를 늘리지 않으면서도 수용 영역을 효과적으로 확장하는 기법입니다.

표준 컨볼루션의 수용 영역 크기가 $k\times k$일 때, dilation rate $r$을 적용한 필터의 유효 크기 $k'$는 다음과 같습니다.

$$ k' \;=\; k + (k-1)(r-1) $$

예를 들어, $3\times 3$ 필터($k=3$)에 $r=2$를 적용하면, 필터는 실제로 $5\times 5$ 영역 $\big(k'=3+(3-1)(2-1)=5\big)$을 커버하게 됩니다. 이는 필터의 각 요소 사이에 $r-1$개의 공간을 삽입하는 것과 같습니다.

장점:
이 방식은 추가적인 파라미터나 계산 비용 없이도 수용 영역을 지수적으로 증가시킬 수 있어, 이미지 분할(semantic segmentation)과 같이 넓은 맥락 정보가 중요한 태스크에서 매우 효율적입니다. 예를 들어, dilation rate $r=1,2,4$인 $3\times3$ 컨볼루션을 연속으로 쌓으면, 파라미터는 $3\times3$ 컨볼루션 3개와 동일하지만 수용 영역은 훨씬 넓어집니다.


33. 라벨 스무딩(Label Smoothing) 기법의 수식을 쓰고, 이것이 모델 일반화에 어떻게 기여하는지 설명해 보세요.

답변:
라벨 스무딩은 분류 문제에서 모델이 정답 레이블에 대해 과도하게 확신하는 것(overconfidence)을 방지하여 일반화 성능을 높이는 규제(regularization) 기법입니다. 기존의 원-핫(one-hot) 인코딩된 정답 레이블을 부드럽게 만들어줍니다.

원-핫 레이블 $y_k$가 정답 클래스 $k$에 대해서는 1, 나머지는 0이라면, 라벨 스무딩 적용 후의 레이블 $y'_k$는 다음과 같습니다.

$$ y'_k \;=\; (1-\alpha)\,y_k \;+\; \frac{\alpha}{K} $$

  • $\alpha$: 스무딩 정도를 조절하는 작은 하이퍼파라미터 (예: $0.1$)
  • $K$: 전체 클래스 수

결과:
정답 클래스: $y'_k = 1\cdot(1-\alpha)+\tfrac{\alpha}{K}=1-\alpha+\tfrac{\alpha}{K}$ (1보다 약간 작은 값)
오답 클래스: $y'_k = 0\cdot(1-\alpha)+\tfrac{\alpha}{K}=\tfrac{\alpha}{K}$ (0보다 약간 큰 값)

기여 원리:
이 기법은 모델이 로짓(logit)의 차이를 무한정 키우려는 것을 막습니다. 타겟 확률을 $1$이 아닌 $1-\alpha+\frac{\alpha}{K}$로 설정함으로써, 모델이 정답과 오답 클래스 간의 로짓 차이를 적절하게 유지하도록 유도합니다. 이는 모델의 과신을 억제하고 결정 경계(decision boundary)를 부드럽게 만들어 과적합을 방지하며, 더 나은 일반화 성능을 가져옵니다.


34. Group Normalization이 배치 크기가 작은 상황에서 Batch Normalization보다 유리한 이유를 정규화 통계량 계산 수식의 차이로 설명해 보세요.

답변:
Group Normalization(GN)은 배치 크기에 독립적으로 동작하기 때문에, 배치 크기가 매우 작은 상황에서 불안정해지는 Batch Normalization(BN)의 대안으로 사용됩니다. 데이터가 $(N,C,H,W)$ 형태로 주어지고, $C$개의 채널을 $G$개의 그룹으로 나눈다고 하겠습니다.

Batch Normalization (BN): 채널별로, 배치에 포함된 모든 데이터에 대해 평균과 분산을 계산합니다.

$$ \mu_c^{(B)}=\frac{1}{NHW}\sum_{n=1}^N\sum_{h=1}^H\sum_{w=1}^W x_{n,c,h,w},\quad (\sigma_c^{2})^{(B)}=\frac{1}{NHW}\sum_{n,h,w}\big(x_{n,c,h,w}-\mu_c^{(B)}\big)^2 $$

Group Normalization (GN): 각 샘플 $n$ 내부에서, 채널 그룹 $g$별로 평균과 분산을 계산합니다.

$$ \mu_{n,g}=\frac{1}{(C/G)HW}\sum_{c\in S_g}\sum_{h=1}^H\sum_{w=1}^W x_{n,c,h,w},\quad \sigma_{n,g}^2=\frac{1}{(C/G)HW}\sum_{c\in S_g}\sum_{h,w}\big(x_{n,c,h,w}-\mu_{n,g}\big)^2 $$

$S_g$: $g$번째 그룹에 속한 채널들의 집합.

유리한 이유:
BN의 통계량 $\big(\mu_c^{(B)},(\sigma_c^2)^{(B)}\big)$은 배치 크기 $N$에 직접적으로 의존합니다. $N$이 매우 작아지면 통계량이 불안정해집니다. 반면 GN의 통계량 $\big(\mu_{n,g},\sigma_{n,g}^2\big)$은 배치와 무관하게 각 샘플 내부에서만 계산되므로, 배치 크기가 1이어도 안정적으로 정규화를 수행할 수 있습니다.


35. 쌍선형 보간법(Bilinear Interpolation)이 이미지 크기를 조절할 때 어떻게 동작하는지 수식으로 설명해 보세요.

답변:
쌍선형 보간법은 이미지의 크기를 변경할 때, 새로운 픽셀 위치에 대한 값을 주변 4개 픽셀의 값을 이용하여 선형적으로 보간하는 방법입니다.

새로운 위치를 $(x,y)$, 이를 둘러싼 기존 격자점을 $Q_{11}=(x_1,y_1)$, $Q_{21}=(x_2,y_1)$, $Q_{12}=(x_1,y_2)$, $Q_{22}=(x_2,y_2)$라 하고, 각 픽셀 값을 $f(Q)$라 하겠습니다.

x축 보간:

$$ f(R_1)=f(x,y_1)\approx \frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21}) $$ $$ f(R_2)=f(x,y_2)\approx \frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22}) $$

y축 보간(최종):

$$ f(P)=f(x,y)\approx \frac{y_2-y}{y_2-y_1}f(R_1)+\frac{y-y_1}{y_2-y_1}f(R_2) $$

이렇게 계산된 $f(P)$는 최근접 이웃 보간보다 훨씬 부드러운 결과를 제공합니다.


36. 드롭커넥트(DropConnect)가 드롭아웃(Dropout)과 어떻게 다른지 수식으로 설명해 보세요.

답변:
드롭커넥트와 드롭아웃은 모두 모델의 과적합을 방지하기 위한 규제 기법이지만, 무작위로 비활성화하는 대상이 다릅니다.

드롭아웃 (Dropout): 신경망의 뉴런(활성화 출력)을 확률적으로 0으로 만듭니다.

$$ a^{(l)}=\phi\!\big(W^{(l)}a^{(l-1)}+b^{(l)}\big),\qquad \tilde a^{(l)} = a^{(l)}\odot r^{(l)},\;\; r_j^{(l)}\sim \mathrm{Bernoulli}(p) $$

드롭커넥트 (DropConnect): 가중치를 개별적으로 0으로 만듭니다.

$$ \tilde a^{(l)}=\phi\!\big((M^{(l)}\odot W^{(l)})\,a^{(l-1)}+b^{(l)}\big),\;\; M_{ij}^{(l)}\sim \mathrm{Bernoulli}(p) $$

$\,\odot\,$: 원소별 곱(element-wise product).

차이점: 드롭아웃은 특정 뉴런의 모든 출력 연결을 한 번에 끊는 반면, 드롭커넥트는 각 연결을 개별적으로 끊습니다. 따라서 드롭커넥트가 더 강한 규제 효과를 낼 수 있습니다.


37. Siamese Network의 손실 함수 중 하나인 Contrastive Loss의 수식을 설명하고, 각 항이 어떤 역할을 하는지 설명해 보세요.

답변:
샴 네트워크(Siamese Network)는 "분류"가 아닌 "비교"의 패러다임을 통해, 전통적인 분류기가 가진 한계를 해결하기 위해 등장했습니다. 전통적인 분류기는 클래스가 너무 많거나, 클래스당 데이터가 매우 적은 경우(One-shot Learning)에 학습이 어렵습니다.

샴 네트워크는 "이 사진은 누구의 얼굴인가?" 대신 "이 두 사진이 같은 사람의 얼굴인가?"라는 질문에 답하는 법을 배웁니다. 이를 위해 동일한 구조와 가중치를 공유하는 두 개의 신경망을 사용하여, 입력된 두 데이터가 얼마나 유사한지를 측정하는 유사도/거리 함수 자체를 학습하는 것을 목표로 합니다. 궁극적인 목표는 '의미적으로 유사한' 입력은 가깝게, '의미적으로 다른' 입력은 멀리' 떼어놓는 임베딩 공간(Embedding Space)을 학습하는 것입니다.

Contrastive Loss(대조 손실)는 이러한 목적을 달성하기 위해 특별히 설계된 손실 함수입니다. 두 샘플 쌍의 관계에 따라 손실을 다르게 계산하여, 임베딩 공간을 효과적으로 구조화합니다.

Contrastive Loss의 수식 유도

손실 함수는 "같은 것은 당기고, 다른 것은 민다"는 직관을 수학적으로 구현합니다. 두 임베딩 벡터 $G_W(X_1), G_W(X_2)$ 사이의 거리를 $D_W$라고 할 때, 손실은 두 가지 경우로 나뉘어 설계됩니다.

  1. 유사한 쌍 (Positive Pair, Y=0)의 경우:
    목표: 거리 $D_W$를 최대한 0에 가깝게 만드는 것.
    손실 설계: 거리 $D_W$ 자체가 벌점(penalty)이 될 수 있습니다. 거리가 멀수록 더 큰 벌점을 주기 위해 제곱 오차 형태를 사용합니다.
    손실 항: $L_{\text{pos}} = \frac{1}{2} D_W^2$
  2. 유사하지 않은 쌍 (Negative Pair, Y=1)의 경우:
    목표: 거리 $D_W$를 특정 기준(마진, $m$)보다 멀게 만드는 것.
    손실 설계: 만약 $D_W$가 이미 $m$보다 크면 벌점은 0이어야 합니다. 만약 $D_W$가 $m$보다 작으면, 그 차이($m - D_W$)만큼 벌점을 부과하여 밀어내야 합니다. 이는 힌지 손실(Hinge Loss)과 유사합니다.
    손실 항: $L_{\text{neg}} = \frac{1}{2} \{ \max(0, m - D_W) \}^2$

최종 수식과 상세 설명

위 두 손실 항을 레이블 $Y$를 스위치로 사용하여 결합하면 최종 Contrastive Loss 수식이 완성됩니다.

$$L(W, Y, X_1, X_2) = (1-Y) \cdot \frac{1}{2} D_W^2 + Y \cdot \frac{1}{2} \{ \max(0, m - D_W) \}^2$$

여기서 각 변수의 의미는 다음과 같습니다.

  • $X_1, X_2$: 입력 데이터 쌍.
  • $Y$: 두 입력의 관계를 나타내는 이진 레이블.
    • $Y=0$: $X_1$과 $X_2$가 유사한 쌍 (같은 클래스, positive pair).
    • $Y=1$: $X_1$과 $X_2$가 유사하지 않은 쌍 (다른 클래스, negative pair).
  • $G_W(\cdot)$: 파라미터 $W$를 갖는 신경망 (인코더). 샴 네트워크에서는 $G_W(X_1)$과 $G_W(X_2)$에 동일한 네트워크가 사용됩니다.
  • $D_W$: 두 입력의 임베딩 벡터 $G_W(X_1)$과 $G_W(X_2)$ 사이의 유클리드 거리(Euclidean distance).$$D_W = \| G_W(X_1) - G_W(X_2) \|_2$$
  • $m$: 마진(margin). 음수 쌍이 가져야 할 최소한의 거리를 정의하는 하이퍼파라미터입니다. $m>0$.

각 항의 역할 분석

손실 함수는 $Y$의 값에 따라 두 부분으로 나뉘어 동작합니다.

  1. 유사한 쌍 (Positive Pair, $Y=0$)일 경우:
    이때 $Y=0$이므로 두 번째 항은 사라지고, 손실 함수는 다음과 같이 간단해집니다. 이 손실을 최소화하는 것은 거리 $D_W$를 직접적으로 최소화하는 것과 같습니다. 즉, 네트워크는 비슷한 두 입력 $X_1, X_2$를 임베딩 공간에서 서로 가까운 위치로 매핑하도록 학습됩니다.
  2. $$L = \frac{1}{2} D_W^2$$
  3. 유사하지 않은 쌍 (Negative Pair, $Y=1$)일 경우:
    이때 $Y=1$이므로 첫 번째 항이 사라지고, 손실 함수는 다음과 같습니다. 이 항은 두 가지 경우로 나뉩니다.
    • 만약 $D_W > m$ 이라면 (두 임베딩 사이의 거리가 이미 마진 $m$보다 크다면), $m - D_W$는 음수가 되고 $\max(0, m - D_W)$는 0이 됩니다. 따라서 손실은 0이며, 가중치 업데이트가 발생하지 않습니다. 이미 충분히 멀리 떨어져 있으므로 더 밀어낼 필요가 없다는 의미입니다.
    • 만약 $D_W < m$ 이라면 (거리가 마진 $m$보다 가깝다면), 손실은 $\frac{1}{2}(m - D_W)^2$이 됩니다. 이 손실을 최소화하기 위해 네트워크는 거리 $D_W$를 증가시켜야 합니다. 즉, 다른 두 입력을 임베딩 공간에서 서로 밀어내어 최소한 마진 $m$만큼의 거리를 확보하도록 학습됩니다.
  4. $$L = \frac{1}{2} \{ \max(0, m - D_W) \}^2$$

결론적으로 Contrastive Loss는 "같은 것은 당기고, 다른 것은 최소한 $m$만큼 밀어내라"는 직관적인 원리를 통해 효과적인 거리 학습(metric learning)을 수행합니다.


38. 확률적 경사 하강법(SGD)에서 발생하는 노이즈(noise)가 어떤 긍정적인 효과를 가져올 수 있는지 설명해 보세요.

답변:
확률적 경사 하강법(Stochastic Gradient Descent, SGD)은 전체 데이터셋을 사용하여 계산한 실제 그래디언트($\nabla J(W)$) 대신, 랜덤하게 선택된 단 하나의 데이터 샘플(또는 작은 미니배치)을 사용하여 그래디언트($\nabla J_i(W)$)를 근사하는 최적화 알고리즘입니다.

$$\nabla J(W) = \frac{1}{N} \sum_{i=1}^N \nabla J_i(W) \approx \nabla J_i(W)$$

이 근사 과정 때문에 SGD의 그래디언트는 실제 그래디언트 방향 주변에서 무작위로 흔들리는 노이즈(noise)를 포함하게 됩니다. 이러한 노이즈는 종종 단점으로 여겨지지만, 실제로는 다음과 같은 중요한 긍정적 효과를 가져올 수 있습니다.

노이즈의 긍정적 효과

  1. 지역 최적점(Local Minima) 및 안장점(Saddle Point) 탈출:손실 함수 공간은 종종 수많은 뾰족한 지역 최적점(sharp local minima)과 평평한 안장점으로 가득 차 있습니다. 노이즈가 없는 경사 하강법(Batch Gradient Descent)은 이러한 지점에 한번 빠지면 그래디언트가 0에 가까워져 탈출하기 어렵습니다. 하지만 SGD의 그래디언트 노이즈는 마치 시스템을 무작위로 흔들어주는 것처럼 작용하여, 이러한 지점에서 "걷어차주는" 효과를 냅니다. 이 덕분에 더 나은(더 낮은 손실 값을 갖는) 최적점으로 이동할 기회를 얻게 됩니다. 이는 담금질 기법(Simulated Annealing)에서 온도를 이용해 탐색하는 과정과 유사합니다.
  2. 일반화(Generalization) 성능 향상 (Flat Minima 선호):최근 연구에 따르면, 손실 함수의 평평한 최적점(flat minima)을 찾는 것이 뾰족한 최적점(sharp minima)을 찾는 것보다 더 나은 일반화 성능을 보이는 경향이 있습니다. 평평한 최적점은 테스트 데이터에 약간의 변화가 있더라도 손실 값이 크게 변하지 않아 더 강건(robust)하기 때문입니다.
  3. SGD의 노이즈는 파라미터 공간을 넓게 탐색하게 만들어, 뾰족하고 불안정한 최적점보다는 넓고 안정적인 평평한 최적점 영역으로 수렴하도록 유도하는 경향이 있습니다. 이는 모델이 훈련 데이터에 과적합되는 것을 방지하고, 보지 못한 데이터에 대해서도 좋은 성능을 내도록 돕는 일종의 암묵적인 정규화(implicit regularization) 효과를 낳습니다.

결론적으로, SGD의 노이즈는 계산 효율성을 위한 부산물일 뿐만 아니라, 딥러닝 모델의 학습 과정과 최종 성능에 핵심적인 긍정적 역할을 수행하는 중요한 요소입니다.


39. Weight Initialization 기법 중 Xavier/Glorot 초기화의 수식을 쓰고, 이것이 왜 필요한지 설명해 보세요.

답변:
딥러닝 모델을 학습시킬 때, 가중치 초기화는 매우 중요합니다. 만약 가중치를 너무 작게 초기화하면, 네트워크를 통과하면서 신호(활성화 값)가 점점 줄어들어 결국 그래디언트 소실(Vanishing Gradient) 문제로 이어집니다. 반대로 너무 크게 초기화하면, 신호가 증폭되어 그래디언트 폭주(Exploding Gradient) 문제가 발생합니다. 두 경우 모두 학습이 제대로 이루어지지 않습니다.

Xavier/Glorot 초기화는 이러한 문제를 해결하기 위해 제안되었습니다. 핵심 목표는 네트워크의 순전파(forward propagation) 시 활성화 값의 분산역전파(backpropagation) 시 그래디언트의 분산이 각 층을 통과하더라도 일정하게 유지되도록 하는 것입니다. 이를 통해 신호가 안정적으로 전파되어 깊은 네트워크에서도 효과적인 학습이 가능해집니다.

수식과 원리

Xavier 초기화는 이전 층의 노드(fan-in) 수를 $n_{\text{in}}$, 다음 층의 노드(fan-out) 수를 $n_{\text{out}}$이라 할 때, 이 두 값에 기반하여 가중치의 초기 분산을 결정합니다. 활성화 함수가 선형이거나 Sigmoid, Tanh 와 같이 원점 대칭인 경우에 최적화되어 있습니다.

  1. 균등 분포(Uniform Distribution)를 이용한 초기화:
    가중치 $W$를 다음 범위의 균등 분포에서 샘플링합니다.
  2. $$W \sim \mathcal{U} \left[ -\sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}}, \quad \sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}} \right]$$
  3. (참고: 왜 이 범위의 분산이 $\frac{2}{n_{\text{in}} + n_{\text{out}}}$ 인가?)
    균등 분포 $\mathcal{U}[-a, a]$의 분산은 $\frac{(a - (-a))^2}{12} = \frac{(2a)^2}{12} = \frac{a^2}{3}$ 입니다. 우리가 원하는 분산 값이 $\text{Var}(W) = \frac{2}{n_{\text{in}} + n_{\text{out}}}$ 이므로, $\frac{a^2}{3} = \frac{2}{n_{\text{in}} + n_{\text{out}}}$ 를 만족하는 $a$를 찾으면 됩니다. 이를 정리하면 $a^2 = \frac{6}{n_{\text{in}} + n_{\text{out}}}$ 이고, 따라서 $a = \sqrt{\frac{6}{n_{\text{in}} + n_{\text{out}}}}$ 가 됩니다.
  4. 정규 분포(Normal Distribution)를 이용한 초기화:
    가중치 $W$를 평균이 0이고 분산이 아래와 같은 정규 분포에서 샘플링합니다.
  5. $$W \sim \mathcal{N} \left( 0, \quad \frac{2}{n_{\text{in}} + n_{\text{out}}} \right)$$

원리:

  • 순전파 시 활성화 값의 분산을 보존하기 위해서는 $\text{Var}(W) = \frac{1}{n_{\text{in}}}$ 이어야 합니다.
    어떤 층의 출력 $y$는 $y = \sum_{i=1}^{n_{\text{in}}} w_i x_i$ 로 표현됩니다. 입력 $x_i$와 가중치 $w_i$가 서로 독립이고 평균이 0이라고 가정하면, $y$의 분산은 $\text{Var}(y) = \sum_{i=1}^{n_{\text{in}}} \text{Var}(w_i x_i)$ 입니다. 또한 $\text{Var}(w_i x_i) = \text{E}[w_i^2]\text{E}[x_i^2] = \text{Var}(w_i)\text{Var}(x_i)$ 이므로, $\text{Var}(y) = n_{\text{in}}\text{Var}(w)\text{Var}(x)$ 가 됩니다. 순전파 시 분산을 보존하려면 출력의 분산과 입력의 분산이 같아야 하므로($\text{Var}(y) = \text{Var}(x)$), 결과적으로 $n_{\text{in}}\text{Var}(w) = 1$, 즉 $\text{Var}(W) = \frac{1}{n_{\text{in}}}$ 이라는 조건이 필요합니다.
  • 역전파 시 그래디언트의 분산을 보존하기 위해서는 $\text{Var}(W) = \frac{1}{n_{\text{out}}}$ 이어야 합니다.
    역전파 시, 어떤 층으로 들어오는 그래디언트 $\frac{\partial L}{\partial x}$는 그 다음 층으로부터 전파된 그래디언트 $\frac{\partial L}{\partial y}$와 가중치의 곱의 합으로 계산됩니다. 이는 순전파와 유사한 구조이지만, 합산이 다음 층의 노드 수($n_{\text{out}}$)에 대해 이루어집니다. 따라서 같은 논리로 그래디언트의 분산을 보존하기 위해서는 $n_{\text{out}}\text{Var}(w) = 1$, 즉 $\text{Var}(W) = \frac{1}{n_{\text{out}}}$ 이라는 조건이 필요합니다.

Xavier 초기화는 이 두 조건을 모두 만족시키기 위해 두 값의 조화 평균인 $\frac{2}{n_{\text{in}} + n_{\text{out}}}$를 분산으로 사용합니다. 이는 순전파와 역전파 사이의 균형을 맞추려는 시도입니다.

주의사항:

Xavier 초기화는 활성화 함수가 선형적이거나 원점 대칭일 때 효과적입니다. ReLU와 같이 비대칭적인 활성화 함수에서는 분산이 절반으로 줄어드는 효과 때문에 신호가 점차 작아질 수 있습니다. 이 경우에는 ReLU에 특화된 He 초기화(He Initialization)가 더 적합합니다. (분산으로 $\frac{2}{n_{\text{in}}}$ 사용)


40. Mixup 데이터 증강 기법의 수식을 쓰고, 이것이 모델의 결정 경계(Decision Boundary)에 어떤 영향을 미치는지 설명해 보세요.

답변:
Mixup은 두 개의 서로 다른 데이터 샘플과 그에 해당하는 레이블을 선형으로 보간(linearly interpolate)하여 새로운 학습 데이터를 생성하는 매우 간단하면서도 효과적인 데이터 증강(data augmentation) 기법입니다.

수식

데이터셋에서 랜덤하게 두 샘플 $(x_i, y_i)$와 $(x_j, y_j)$를 선택합니다. 그리고 베타 분포(Beta distribution)에서 샘플링한 혼합 비율 $\lambda$를 사용하여 새로운 데이터 $(\tilde{x}, \tilde{y})$를 생성합니다.

$$\tilde{x} = \lambda x_i + (1 - \lambda) x_j$$

$$\tilde{y} = \lambda y_i + (1 - \lambda) y_j$$

여기서 $\lambda$는 다음 베타 분포를 따릅니다.

$$\lambda \sim \text{Beta}(\alpha, \alpha)$$

  • 하이퍼파라미터 $\alpha$는 보간의 강도를 조절합니다. $\alpha$가 작으면 $\lambda$가 0 또는 1에 가까워져 원본 데이터와 유사해지고, $\alpha$가 크면 0.5에 가까워져 두 데이터가 더 많이 섞입니다. (보통 0.1 ~ 0.4 사용)
  • $y_i, y_j$는 보통 원-핫 인코딩된 레이블 벡터입니다. 따라서 $\tilde{y}$는 소프트 레이블이 됩니다.

왜 혼합 비율 $\lambda$에 베타 분포를 사용할까?

혼합 비율 $\lambda$를 샘플링하는 데 베타 분포를 사용하는 이유는 그 유연성과 제어 가능성 때문입니다.

  1. [0, 1] 범위: 베타 분포는 정의 자체가 [0, 1] 구간으로 한정되어 있어, 비율을 나타내는 $\lambda$의 값으로 완벽하게 적합합니다.
  2. 유연한 확률 분포 형태: 베타 분포는 두 개의 하이퍼파라미터($\alpha, \beta$)에 따라 그 형태가 다양하게 변합니다. Mixup에서는 두 파라미터를 동일하게($\alpha=\beta$) 설정하여 분포를 대칭적으로 만듭니다.
    • $\alpha > 1$이면, $\lambda$는 0.5 근처에서 샘플링될 확률이 높아져 두 데이터가 균등하게 섞인 샘플이 많이 생성됩니다.
    • $\alpha = 1$이면, 베타 분포는 균등 분포(Uniform Distribution)가 되어 모든 비율이 동일한 확률로 샘플링됩니다.
    • $\alpha < 1$ (논문에서 권장하는 방식)이면, 분포의 양 끝, 즉 $\lambda$가 0 또는 1에 가까운 값에서 샘플링될 확률이 높아집니다. 이는 생성된 데이터가 대부분 원본 데이터 $(x_i, y_i)$ 또는 $(x_j, y_j)$에 가깝게 만들어짐을 의미합니다.
  3. 규제 효과 제어: $\alpha$를 1보다 작은 값(예: 0.2)으로 설정함으로써, 대부분의 증강 데이터를 원본 데이터 근처에 머무르게 하고, 일부 데이터만 두 샘플 사이 공간에 있도록 조절할 수 있습니다. 이는 모델이 원본 데이터의 특징을 잊지 않으면서도, 샘플 간의 선형적인 관계를 학습하도록 하는 효과적인 규제(regularization) 장치로 작용합니다.

결정 경계에 미치는 영향

기존의 데이터 증강(회전, 자르기 등)은 데이터 분포 내에서만 새로운 샘플을 생성합니다. 반면 Mixup은 데이터 샘플들 사이의 공간에 가상의 데이터를 생성하여 모델이 이 공간에 대해서도 학습하도록 합니다. 이를 통해 모델의 동작 방식에 다음과 같은 중요한 영향을 미칩니다.

  1. 결정 경계의 평활화(Smoothening):일반적인 모델은 학습 데이터 포인트 근처에서는 확신을 가지고 예측하지만, 데이터가 없는 샘플 사이의 공간에서는 예측이 급격하게 변동할 수 있습니다. Mixup은 모델이 이러한 볼록 조합(convex combination)으로 만들어진 가상 데이터에 대해서도 부드러운 선형적인 예측(예: $\tilde{y}$)을 하도록 강제합니다. 이로 인해 클래스 간의 결정 경계(decision boundary)가 더 매끄러워지고 덜 복잡해집니다.
  2. 과적합 감소 및 일반화 성능 향상:매끄러운 결정 경계는 모델이 학습 데이터의 노이즈나 특이점에 과도하게 맞추는 것을 방지합니다. 즉, 모델이 개별 샘플을 "암기"하기보다는 클래스 간의 전반적인 특징을 학습하도록 유도하여 과적합을 줄이고 일반화 성능을 향상시킵니다.
  3. 모델의 강건성(Robustness) 증가:Mixup으로 학습된 모델은 입력에 약간의 노이즈나 변형이 가해졌을 때 예측이 급격하게 변하지 않아, 적대적 공격(adversarial attacks)과 같은 교란에 대해 더 강건한 특성을 보입니다.

결론적으로 Mixup은 모델이 학습 데이터 사이의 공간에서 더 '상식적인' 예측을 하도록 훈련시켜, 더 부드럽고 강건하며 일반화 성능이 뛰어난 모델을 만듭니다.


41. Wasserstein GAN (WGAN)의 손실 함수는 기존 GAN의 목적 함수와 어떻게 다르며, 이것이 학습 안정성에 어떻게 기여하는지 수식으로 설명해 보세요.

답변:
기존 GAN의 목적 함수는 판별자를 이진 분류기로 학습시켜, 실제 데이터 분포 $p_{\text{data}}$와 생성된 데이터 분포 $p_g$ 사이의 젠슨-섀넌 발산(Jensen-Shannon Divergence, JSD)을 최소화하는 것과 같습니다. 하지만 두 분포의 지지집합(support)이 거의 겹치지 않는 경우, JSD는 $\log 2$로 상수 값을 가지며 그래디언트가 소실(vanish)됩니다. 이는 학습 초기에 생성자가 서툴러 실제와 전혀 다른 샘플을 만들 때 흔히 발생하며, 생성자가 유의미한 학습 신호를 받지 못해 학습이 불안정해지고 모드 붕괴(mode collapse)가 발생하는 주요 원인이 됩니다.

용어 설명:

  • 지지집합 (Support): 확률 분포에서 확률값이 0이 아닌 모든 점들의 집합입니다. 예를 들어, 두 분포의 지지집합이 겹치지 않는다는 것은 두 분포가 서로 다른 공간에 존재하여 공통된 영역이 없다는 의미입니다.
  • 젠슨-섀넌 발산 (JSD): 두 확률분포 P와 Q 사이의 유사성을 측정하는 방법으로, 쿨백-라이블러 발산(Kullback-Leibler Divergence, KLD)을 기반으로 합니다. $M = \frac{1}{2}(P+Q)$일 때, JSD는 다음과 같이 정의됩니다.
    $$JSD(P \parallel Q) = \frac{1}{2} KLD(P \parallel M) + \frac{1}{2} KLD(Q \parallel M)$$
    두 분포 P와 Q가 겹치는 부분이 전혀 없으면, 특정 지점에서 P는 0이고 Q는 양수이거나 그 반대입니다. 이 경우 KLD는 무한대로 발산하고, JSD는 $\log 2$라는 상수로 고정되어 버립니다. 이는 '두 분포가 얼마나 멀리 떨어져 있는지'에 대한 정보를 주지 못하고, '그냥 겹치지 않는다'는 사실만 알려주므로 그래디언트가 0이 됩니다.

WGAN의 해결책: Wasserstein 거리와 Critic

Wasserstein GAN (WGAN)은 이 문제를 해결하기 위해, 두 분포 간의 거리를 측정하는 척도를 JSD에서 Wasserstein-1 거리(또는 어스 무버 거리, Earth-Mover's Distance)로 변경합니다.

  • Wasserstein 거리란?: 한 분포를 다른 분포로 바꾸는 데 필요한 '최소한의 일(비용)'로 비유할 수 있습니다. 흙더미($p_g$)를 옮겨서 원하는 모양의 구덩이($p_{\text{data}}$)를 채운다고 할 때, '흙의 양 x 이동 거리'의 총합을 최소화하는 값입니다.수학적으로 Wasserstein 거리는 두 분포 $p_{\text{data}}$와 $p_g$의 모든 가능한 결합 확률분포 $\gamma(x,y)$의 집합 $\Pi(p_{\text{data}}, p_g)$에 대해, $\gamma$로부터 샘플링한 $(x,y)$ 쌍의 거리 기댓값의 하한(infimum)으로 정의됩니다.
    $$W(p_{\text{data}}, p_g) = \inf_{\gamma \in \Pi(p_{\text{data}}, p_g)} \mathbb{E}_{(x, y) \sim \gamma}[\|x - y\|]$$
  • 이 '일'의 양은 두 분포가 서로 겹치지 않아도, 얼마나 멀리 떨어져 있는지에 따라 $\|x - y\|$ 값이 부드럽게 변하는 거리 값을 제공합니다. 거리가 멀수록 비용이 커지고 가까울수록 작아지는 선형적인 관계를 가지므로, JSD와 달리 어디에서나 미분 가능한 유의미한 손실 함수를 만들 수 있습니다.

수식 비교: GAN vs WGAN

  1. 기존 GAN (Minimax 목적 함수):
    판별자 $D$는 출력이 (0, 1) 사이의 확률인 분류기입니다.
  2. $$\min_G \max_D \; V(D,G) = \underbrace{\mathbb{E}_{x\sim p_{\text{data}}}\![\log D(x)]}_{\text{진짜 데이터를 진짜로 판별할 확률을 최대화}} + \underbrace{\mathbb{E}_{z\sim p_z}\![\log(1-D(G(z)))]}_{\text{가짜 데이터를 가짜로 판별할 확률을 최대화}}$$
  3. 판별자 $D$는 위 식 전체를 최대화하려고 합니다(진짜는 1, 가짜는 0에 가깝게). 생성자 $G$는 두 번째 항, 즉 $D(G(z))$가 1에 가까워지도록 하여 위 식 전체를 최소화하려고 합니다.
  4. WGAN (Wasserstein 거리 근사):
    판별자는 크리틱(Critic)이라 불리며, 확률이 아닌 임의의 스칼라 점수(scalar score)를 출력합니다 (출력층의 시그모이드 함수 제거).
  5. $$\min_G \max_{D\in \mathcal{D}} \; L(D,G) = \underbrace{\mathbb{E}_{x\sim p_{\text{data}}}\![D(x)]}_{\text{진짜 데이터의 점수를 최대화}} - \underbrace{\mathbb{E}_{z\sim p_z}\![D(G(z))]}_{\text{가짜 데이터의 점수를 최소화}}$$
  6. 크리틱 $D$는 진짜 데이터의 점수는 높이고 가짜 데이터의 점수는 낮춰서 두 점수 간의 차이를 최대로 벌리려고 합니다. 생성자 $G$는 자신이 만든 가짜 데이터가 크리틱으로부터 높은 점수를 받도록, 즉 $D(G(z))$를 최대화하여 위 식 전체를 최소화하려고 합니다.

핵심 차이점과 안정성 기여 원리

  1. 목적 함수의 의미:
    • GAN: 판별자는 '진짜일 확률'을 예측.
    • WGAN: 크리틱은 '얼마나 진짜 같은지'에 대한 점수를 예측. 이 목적 함수는 칸토로비치-루빈스타인 이중성(Kantorovich-Rubinstein duality)에 의해 Wasserstein 거리를 근사합니다. 이 이론은 계산이 매우 어려운 Wasserstein 거리($W = \inf \mathbb{E}[\|x-y\|]$)를, 특정 제약 조건(1-립시츠)을 만족하는 함수 집합 중에서 아래 식을 최대로 만드는 상한(supremum)을 찾는 문제로 변환할 수 있음을 보여줍니다. $$W(p_{\text{data}}, p_g) = \sup_{\|D\|_L \le 1} (\mathbb{E}_{x \sim p_{\text{data}}}[D(x)] - \mathbb{E}_{z \sim p_{z}}[D(G(z))])$$ 이것이 바로 WGAN의 크리틱 목적 함수와 정확히 일치합니다.
  2. 1-립시츠(1-Lipschitz) 제약:
    WGAN의 수식이 Wasserstein 거리를 올바르게 근사하기 위한 수학적 전제 조건은, 크리틱 $D$가 1-립시츠 함수 집합 $\mathcal{D}$에 속해야 한다는 것입니다. 이는 함수의 기울기 크기가 어디에서나 1 이하로 제한됨을 의미합니다.
  3. $$|D(x_1) - D(x_2)| \le \|x_1 - x_2\|$$
  4. 이 제약은 크리틱이 너무 급격하게 변하는 것을 막아, 생성자가 항상 유의미하고 안정적인 그래디언트를 받을 수 있도록 보장하는 결정적인 역할을 합니다. 이 제약은 주로 다음과 같은 방법으로 구현됩니다.
    • 가중치 클리핑 (Weight Clipping): WGAN 논문에서 제안. 크리틱의 모든 가중치를 작은 범위 (예: [-0.01, 0.01])로 강제로 제한.
    • 그래디언트 페널티 (Gradient Penalty): WGAN-GP에서 제안. 크리틱의 그래디언트 크기가 1에 가깝도록 손실 함수에 페널티 항을 추가. (더 선호되는 방식)
  5. 학습 안정성 기여:
    • 유의미한 그래디언트: Wasserstein 거리는 분포가 겹치지 않아도 부드러운 값을 제공하므로, 생성자는 항상 학습할 방향을 알 수 있습니다.
    • 모드 붕괴 완화: 손실 값이 생성 품질과 강한 상관관계를 가져, 학습 진행 상황을 모니터링하기 용이합니다. 립시츠 제약 덕분에 크리틱이 과도하게 학습되어 생성자가 길을 잃는 현상이 줄어듭니다.

결론적으로 WGAN은 더 나은 거리 척도와 립시츠 제약을 도입하여 기존 GAN의 근본적인 불안정성 문제를 해결하고, 안정적인 학습을 가능하게 했습니다.


42. 트랜스포머(Transformer)에서 Positional Encoding이 왜 필요하며, 사인/코사인 수식은?

답변:
트랜스포머의 핵심 구조인 셀프 어텐션(Self-Attention) 메커니즘은 입력 시퀀스 내의 모든 단어 쌍 간의 관계를 직접 계산합니다. 이 과정은 어떤 단어가 다른 단어보다 먼저 나왔는지, 즉 단어의 순서(position)상대적인 위치(relative position)에 대한 정보를 전혀 고려하지 않습니다. 예를 들어 "나는 너를 사랑해"와 "너는 나를 사랑해"라는 문장은 셀프 어텐션에게 완전히 동일한 입력으로 보일 수 있습니다.

하지만 언어에서 순서는 의미를 결정하는 매우 중요한 요소입니다. 따라서 모델이 순서 정보를 이해할 수 있도록, 각 토큰의 위치 정보를 담은 벡터를 만들어 입력 임베딩에 더해주어야 합니다. 이것이 바로 위치 인코딩(Positional Encoding, PE)의 역할입니다.

사인/코사인 위치 인코딩 수식

트랜스포머 논문에서는 학습되지 않고 고정된 값으로 계산되는 사인/코사인 함수 기반의 위치 인코딩을 제안했습니다.

시퀀스 내의 위치 인덱스를 $pos$, 임베딩 벡터의 차원 인덱스를 $i$라고 할 때, $d_{\text{model}}$ 차원의 위치 인코딩 벡터 $\text{PE}$의 각 요소는 다음과 같이 계산됩니다.

$$\text{PE}_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$

$$\text{PE}_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$

  • $pos$: 단어의 시퀀스 내 위치 (0, 1, 2, ...).
  • $i$: 임베딩 차원 내의 인덱스 (0, 1, 2, ..., $d_{\text{model}}/2 - 1$). 짝수 차원에는 사인 함수를, 홀수 차원에는 코사인 함수를 적용합니다.
  • $d_{\text{model}}$: 모델의 임베딩 차원 (예: 512).

이 수식의 장점

  • 고유한 위치 값: 각 위치 $pos$마다 고유한 인코딩 벡터가 생성됩니다.
  • 상대 위치 정보 표현: 이 방식의 가장 큰 장점은 상대 위치 정보를 쉽게 학습할 수 있다는 점입니다. 임의의 오프셋 $k$에 대해, $\text{PE}_{(pos+k)}$는 $\text{PE}_{(pos)}$의 선형 변환으로 표현될 수 있습니다. 이는 삼각함수의 덧셈정리($\sin(A+B), \cos(A+B)$) 덕분이며, 모델이 "두 칸 뒤의 단어"와 같은 상대적 관계를 쉽게 학습하도록 돕습니다.
  • 외삽 가능성(Extrapolation): 학습 시 보았던 길이보다 더 긴 시퀀스가 입력으로 들어와도, 이 공식을 통해 위치 인코딩 값을 계산하여 적용할 수 있습니다.

최종적으로, 이 위치 인코딩 벡터는 단어의 의미를 담은 입력 임베딩(Input Embedding)에 더해져 트랜스포머의 입력으로 사용됩니다.

$$X_{\text{final}} = \text{InputEmbedding}(X) + \text{PositionalEncoding}$$


43. 대조 학습(Contrastive Learning)의 InfoNCE 손실을 수식으로 설명

답변:
대조 학습(Contrastive Learning)은 레이블이 없는 대규모 데이터셋에서 유용한 표현(representation)을 학습하기 위한 자기 지도 학습(Self-Supervised Learning)의 한 방법입니다. 핵심 아이디어는 "같은 이미지로부터 나온 증강된 뷰(view)들은 가깝게, 다른 이미지로부터 나온 뷰들은 멀게" 만드는 것입니다.

이를 위해, 하나의 '앵커(anchor)' 샘플이 주어졌을 때, 이와 쌍을 이루는 '포지티브(positive)' 샘플은 구별해내고, 나머지 '네거티브(negative)' 샘플들과는 구별하도록 모델을 학습시킵니다.

InfoNCE 손실 함수

InfoNCE (Noise Contrastive Estimation) 손실은 이러한 대조 학습의 목표를 효과적으로 달성하는 손실 함수로, SimCLR과 같은 여러 대표적인 모델에서 사용됩니다.

미니배치에 $N$개의 이미지가 있다고 가정해 봅시다. 각 이미지를 두 가지 다른 방식으로 증강(augmentation)하여 총 $2N$개의 데이터 뷰를 만듭니다. 이 $2N$개의 뷰 중 하나인 $z_i$를 앵커로 선택했을 때,

  • $z_j$: $z_i$와 같은 원본 이미지에서 나온 다른 뷰 (이것이 유일한 포지티브 샘플).
  • $\{z_k\}_{k \neq i,j}$: 나머지 $2N-2$개의 뷰들 (모두 네거티브 샘플).

$z_i$에 대한 InfoNCE 손실 $\ell_i$는 다음과 같이 정의됩니다.

$$\ell_i = -\log \frac{\exp(\text{sim}(z_i, z_j) / \tau)}{\sum_{k=1, k \neq i}^{2N} \exp(\text{sim}(z_i, z_k) / \tau)}$$

  • $\text{sim}(u, v)$: 두 임베딩 벡터 $u, v$ 간의 코사인 유사도(cosine similarity). $\text{sim}(u,v) = \frac{u^\top v}{\|u\|\|v\|}$.
  • $\tau$ (temperature): 온도 하이퍼파라미터. 유사도 분포를 얼마나 뾰족하게 만들지 조절합니다. $\tau$가 작을수록 모델은 어려운 네거티브 샘플(앵커와 유사한)을 더 강하게 밀어내도록 학습됩니다.
  • 분자: 앵커 $z_i$와 포지티브 샘플 $z_j$ 간의 유사도를 지수 함수에 통과시킨 값.
  • 분모: 앵커 $z_i$와 자기 자신을 제외한 모든 $2N-1$개의 샘플(1개의 포지티브, $2N-2$개의 네거티브) 간의 유사도를 지수 함수에 통과시켜 모두 더한 값.

손실 함수의 의미와 역할

이 수식은 소프트맥스(softmax) 함수와 동일한 형태를 가집니다. 본질적으로 이 손실은 $(2N-1)$-way 분류 문제를 푸는 것과 같습니다.

  • 목표: 앵커 $z_i$가 주어졌을 때, $2N-1$개의 후보군 중에서 자신의 짝인 포지티브 샘플 $z_j$를 올바르게 분류할 확률을 최대화하는 것입니다.
  • 최소화 과정: 이 손실 $\ell_i$를 최소화하려면, 로그 안의 분수 값이 최대화되어야 합니다. 즉,
    1. 분자를 키워야 합니다: $\exp(\text{sim}(z_i, z_j) / \tau)$ 값을 키워야 하므로, 포지티브 쌍 $(z_i, z_j)$의 코사인 유사도를 최대화해야 합니다 (가깝게 당기기).
    2. 분모의 다른 항들을 줄여야 합니다: 네거티브 샘플 $z_k$에 대한 $\exp(\text{sim}(z_i, z_k) / \tau)$ 값들을 줄여야 하므로, 네거티브 쌍 $(z_i, z_k)$의 코사인 유사도를 최소화해야 합니다 (멀리 밀어내기).

최종 손실은 미니배치 내의 모든 샘플에 대한 $\ell_i$의 평균으로 계산됩니다. 이 과정을 통해 모델은 이미지의 본질적인 특징을 포착하는 고품질의 표현을 학습하게 됩니다.


44. MAML(Model-Agnostic Meta-Learning)의 가중치 업데이트 규칙

답변:
MAML(Model-Agnostic Meta-Learning)은 "학습하는 방법을 학습"하는 메타 학습(Meta-Learning)의 대표적인 알고리즘입니다. MAML의 목표는 다양한 태스크(task)에 대해 단 몇 번의 경사 하강 업데이트만으로도 빠르게 적응할 수 있는 최적의 초기 가중치(initialization weights) $\theta$를 찾는 것입니다. 이 가중치는 특정 태스크에 특화된 것이 아니라, 어떤 새로운 태스크가 주어지더라도 좋은 성능을 내기 위한 "최적의 출발점" 역할을 합니다.

두 단계의 업데이트 규칙: Inner Loop & Outer Loop

MAML의 학습 과정은 두 개의 중첩된 루프로 구성됩니다.

  1. Inner Loop (내부 루프): 태스크별 빠른 적응이 단계에서는 샘플링된 각 개별 태스크 $\mathcal{T}_i$에 대해, 현재 메타 파라미터 $\theta$에서 시작하여 가상의(hypothetical) 업데이트를 한 번 (또는 여러 번) 수행합니다. 이 업데이트는 해당 태스크의 손실 함수 $\mathcal{L}_{\mathcal{T}_i}$를 최소화하는 방향으로 이루어지며, 이를 통해 태스크에 특화된 파라미터 $\theta'_i$를 얻습니다.
    • $\theta$: 현재의 메타 파라미터 (모든 태스크에 대한 공통 출발점).
    • $\alpha$: 내부 루프의 학습률 (보통 큰 값을 사용).
    • $\mathcal{L}_{\mathcal{T}_i}(f_{\theta})$: 파라미터 $\theta$를 사용하는 모델 $f_{\theta}$의 태스크 $\mathcal{T}_i$에 대한 손실.
    • $\theta'_i$: 태스크 $\mathcal{T}_i$에 빠르게 적응한 후의 파라미터. 이 파라미터는 실제 모델을 업데이트하는 데 사용되지 않고, 다음 단계인 외부 루프를 위해 임시로 계산됩니다.
  2. $$\theta'_i = \theta - \alpha \nabla_{\theta} \mathcal{L}_{\mathcal{T}_i}(f_{\theta})$$
  3. Outer Loop (외부 루프): 메타 업데이트이 단계에서는 "어떻게 하면 빠른 적응의 결과가 더 좋아질까?"를 학습합니다. 즉, 내부 루프에서 계산된 적응 후 파라미터 $\theta'_i$를 사용하여 계산한 손실의 총합을 최소화하는 방향으로 원본 메타 파라미터 $\theta$를 업데이트합니다.
    • $\beta$: 외부 루프(메타)의 학습률.
    • $\mathcal{L}_{\mathcal{T}_i}(f_{\theta'_i})$: 적응이 끝난 모델 $f_{\theta'_i}$의 성능. 태스크 $\mathcal{T}_i$의 테스트 데이터(또는 다른 데이터 배치)에 대한 손실입니다.
    • $\nabla_{\theta} \sum_{i} \mathcal{L}_{\mathcal{T}_i}(f_{\theta'_i})$: 이 그래디언트 계산이 MAML의 핵심입니다. $\theta'_i$가 $\theta$에 대한 함수($\theta'_i = \theta - \alpha \nabla_{\theta} \mathcal{L}_{\mathcal{T}_i}$)이므로, 연쇄 법칙(chain rule)에 의해 이 그래디언트는 2차 미분(second-order derivative)을 포함하게 됩니다.
  4. $$\theta \leftarrow \theta - \beta \nabla_{\theta} \sum_{i} \mathcal{L}_{\mathcal{T}_i}(f_{\theta'_i})$$

이 전체 과정을 통해, MAML은 다양한 태스크의 손실 곡면(loss surface)에서 약간의 업데이트만으로도 각 태스크의 최적점에 쉽게 도달할 수 있는, 즉 일반화 성능이 뛰어난 초기 파라미터 $\theta$를 찾게 됩니다.


45. 정규화 흐름(Normalizing Flows)과 변수 변환 공식

답변:
정규화 흐름(Normalizing Flows)은 간단하고 다루기 쉬운 확률 분포(기본 분포, Base Distribution)를 일련의 가역적(invertible)이고 미분 가능한(differentiable) 변환을 통해 우리가 모델링하고자 하는 복잡한 실제 데이터 분포(타겟 분포, Target Distribution)로 점진적으로 변환하는 생성 모델입니다. 마치 찰흙을 주물러 원하는 모양을 만들듯이, 표준 정규 분포와 같은 단순한 분포에서 시작하여 복잡한 분포를 만들어냅니다. 여기서 '흐름(Flow)'이라는 단어는 데이터 포인트들이 변환 과정을 따라 흐르듯이 움직이는 것을 의미합니다.

이 접근법은 VAE와 달리 잠재 변수를 근사하지 않고, GAN과 달리 적대적 학습을 사용하지 않으면서도 데이터의 정확한 로그 가능도(exact log-likelihood)를 계산할 수 있다는 큰 장점을 가집니다.

핵심 원리: 변수 변환 공식과 야코비안의 직관적 의미

정규화 흐름의 수학적 기반은 확률 변수의 변수 변환 공식(Change of Variables Formula)입니다. 간단한 분포를 따르는 잠재 변수 $\mathbf{z}_0 \sim p_0(\mathbf{z}_0)$가 가역 함수 $f$를 통해 데이터 공간의 변수 $\mathbf{x}$로 변환된다고 가정합시다 ($\mathbf{x} = f(\mathbf{z}_0)$). 이때 $\mathbf{x}$의 확률 밀도 함수 $p_X(\mathbf{x})$는 단순히 $p_0(\mathbf{z}_0)$가 아니라, 변환으로 인한 공간의 부피 변화를 보정해주어야 합니다.

단일 변환:

$$p_X(\mathbf{x}) = p_0(f^{-1}(\mathbf{x})) \left| \det\left( \frac{\partial f^{-1}(\mathbf{x})}{\partial \mathbf{x}} \right) \right| = p_0(\mathbf{z}_0) \left| \det(J_{f^{-1}}(\mathbf{x})) \right|$$

  • $J_{f^{-1}}(\mathbf{x})$: 역함수 $f^{-1}$의 야코비안 행렬입니다.
  • $|\det(\cdot)|$: 야코비안 행렬식의 절댓값으로, 변환에 의한 미소 부피의 변화율을 의미합니다. 이 항은 변환 $f$가 공간을 얼마나 '늘리거나(expansion)' 혹은 '줄이는지(contraction)'를 측정합니다. 확률의 총합은 항상 1로 보존되어야 하므로, 변환에 의해 특정 영역의 부피가 커졌다면 그 영역의 밀도는 낮아져야 하고, 부피가 작아졌다면 밀도는 높아져야 합니다. 야코비안 행렬식은 이러한 밀도 보정 역할을 수행합니다.

다중 변환 (Flows):

실제 복잡한 분포를 모델링하기 위해, 정규화 흐름은 이러한 가역 변환 $f_1, f_2, \dots, f_K$를 연속적으로 적용합니다.

$$\mathbf{z}_0 \xrightarrow{f_1} \mathbf{z}_1 \xrightarrow{f_2} \dots \xrightarrow{f_K} \mathbf{z}_K = \mathbf{x}$$

이 경우, 최종 로그 가능도는 연쇄 법칙에 의해 각 단계의 로그 야코비안 행렬식의 합(또는 차)으로 표현됩니다. 역함수와 그 야코비안을 계산하는 대신, $\log|\det(J_{f^{-1}})| = -\log|\det(J_f)|$ 관계를 이용하여 순방향 함수와 그 야코비안으로 표현하는 것이 더 편리합니다.

최종 로그 가능도 수식:

$$\log p_K(\mathbf{x}) = \log p_0(\mathbf{z}_0) - \sum_{k=1}^{K} \log \left| \det\left( \frac{\partial f_k(\mathbf{z}_{k-1})}{\partial \mathbf{z}_{k-1}} \right) \right|$$

  • 학습: 모델은 주어진 데이터 $\mathbf{x}$에 대한 로그 가능도 $\log p_K(\mathbf{x})$를 최대화하는 방향으로 학습됩니다. 즉, 관측된 데이터가 이 모델로부터 생성되었을 확률을 가장 높이는 변환 함수들의 파라미터를 찾습니다.
  • 생성: 학습이 완료된 후, 간단한 기본 분포 $p_0$에서 잠재 변수 $\mathbf{z}_0$를 샘플링한 후, 학습된 순방향 변환 $f_1, \dots, f_K$를 순차적으로 적용하여 새로운 데이터 $\mathbf{x}$를 생성합니다.

이 모델이 실용적이기 위해서는 각 변환 함수 $f_k$가 (1) 가역적이어야 하고 (역변환 계산이 쉬워야 함), (2) 야코비안 행렬식을 효율적으로 계산할 수 있어야 합니다. 일반적인 행렬식 계산은 복잡도가 $O(D^3)$으로 매우 비싸기 때문입니다. RealNVP, Glow, MAF 등의 모델들은 이러한 조건을 만족시키는 특별한 신경망 아키텍처(예: 결합층, Coupling Layers)를 제안하여 야코비안 행렬식이 삼각행렬(triangular matrix) 형태가 되도록 만들어 계산 복잡도를 $O(D)$로 낮춥니다.


이 모델이 실용적이기 위해서는 각 변환 함수 $f_k$가 (1) 가역적이어야 하고, (2) 야코비안 행렬식을 효율적으로 계산할 수 있어야 합니다. RealNVP, Glow, MAF 등은 이러한 조건을 만족시키는 특별한 신경망 아키텍처(예: 결합층)를 제안합니다.


46. 옵티마이저 Lookahead의 동작과 수식

답변:
Lookahead 옵티마이저는 기존의 다른 옵티마이저(예: Adam, SGD)를 감싸서 사용하는(wrapper) 기법으로, 학습의 안정성을 높이고 수렴을 가속화하는 것을 목표로 합니다. 핵심 아이디어는 두 종류의 가중치, 즉 빠른 가중치(fast weights)느린 가중치(slow weights)를 함께 운용하는 것입니다.

  1. 빠른 가중치 ($\theta$): 내부 옵티마이저(Adam 등)를 사용하여 일반적인 방식으로 여러 스텝($m$회) 동안 파라미터 공간을 빠르게 탐색합니다.
  2. 느린 가중치 ($\phi$): 빠른 가중치가 $m$번 탐색을 마친 후, 그 최종 도달 지점 방향으로 천천히 한 걸음 이동합니다.

이러한 방식은 빠른 가중치의 단기적인 진동이나 불안정한 움직임을 평균화하여, 더 안정적이고 신뢰할 수 있는 방향으로 나아가게 해줍니다.

동작 방식과 수식

Lookahead는 $m$번의 내부 업데이트와 1번의 외부 업데이트를 반복합니다.

  • $\phi_k$: 외부 업데이트 단계 $k$에서의 느린 가중치.
  • $\theta_{k,i}$: 외부 단계 $k$ 내부의 $i$번째 스텝에서의 빠른 가중치.
  • $\mathcal{A}$: 기본 옵티마이저 (예: Adam).
  • $\alpha$: 느린 가중치의 보간 계수 (학습률과 유사한 역할).
  1. Inner Loop (빠른 가중치 업데이트, $m$회 반복):느린 가중치 $\phi_k$에서 시작하여, 기본 옵티마이저 $\mathcal{A}$를 사용해 $m$번의 업데이트를 수행합니다.$$\theta_{k,i} = \theta_{k,i-1} - \eta_i \nabla L(\theta_{k,i-1}) \quad (\text{for } i=1, \dots, m)$$
  2. (위 식은 SGD의 예시이며, 실제로는 옵티마이저 $\mathcal{A}$의 업데이트 규칙을 따릅니다)
  3. $$\theta_{k,0} = \phi_k \quad (\text{시작점 동기화})$$
  4. Outer Loop (느린 가중치 동기화, 1회 수행):$m$번의 내부 업데이트가 끝나면, 최종적으로 도달한 빠른 가중치 $\theta_{k,m}$과 시작점이었던 느린 가중치 $\phi_k$의 차이만큼을 보간하여 느린 가중치를 업데이트합니다.이후 다음 외부 스텝을 위해 빠른 가중치의 시작점을 새로운 느린 가중치로 재설정합니다: $\theta_{k+1,0} = \phi_{k+1}$.
  5. $$\phi_{k+1} = \phi_k + \alpha (\theta_{k,m} - \phi_k)$$

효과:

  • 분산 감소: 여러 스텝의 빠른 업데이트를 평균내는 효과가 있어, 그래디언트의 노이즈로 인한 진동을 줄여줍니다.
  • 수렴 안정성 및 속도 향상: 더 안정적인 방향으로 파라미터를 업데이트하여, 학습이 불안정한 문제에서 수렴을 돕고 때로는 더 빠르게 최적점에 도달하게 합니다.
  • 범용성: 어떤 내부 옵티마이저와도 결합할 수 있어 적용이 쉽습니다.

47. 캡슐 네트워크의 동적 라우팅(Dynamic Routing) 수식

답변:
캡슐 네트워크(Capsule Network)는 CNN의 단점을 보완하기 위해 제안되었습니다. CNN은 특징의 존재 여부는 잘 감지하지만, 특징 간의 공간적 계층 관계(예: 눈, 코, 입이 모여 얼굴을 이룸)를 명시적으로 모델링하는 데 한계가 있습니다. 캡슐은 스칼라 값을 출력하는 뉴런 대신, 객체의 다양한 속성(자세, 크기, 질감 등)을 벡터 형태로 표현합니다.

동적 라우팅(Dynamic Routing)은 하위 계층 캡슐의 출력을 어느 상위 계층 캡슐로 보낼지 동적으로 결정하는 알고리즘입니다. "부분이 전체에 동의하는(parts agree on the whole)" 경우에만 신호를 강하게 전달하는, 일종의 합의에 의한 라우팅(routing by agreement) 메커니즘입니다.

동적 라우팅 알고리즘과 수식

하위 계층의 캡슐 $i$가 상위 계층의 캡슐 $j$로 정보를 라우팅하는 과정은 다음과 같습니다 ($r$회 반복).

입력:

  • $u_i$: 하위 캡슐 $i$의 출력 벡터 (활성화).
  • $W_{ij}$: 하위 캡슐 $i$의 출력을 상위 캡슐 $j$의 예측 벡터로 변환하는 학습 가능한 가중치 행렬.
  1. 예측 벡터 계산:먼저, 각 하위 캡슐 $i$는 모든 상위 캡슐 $j$에 대해 예측 벡터 $\hat{u}_{j|i}$를 계산합니다.
  2. $$\hat{u}_{j|i} = W_{ij} u_i$$
  3. 라우팅 반복 ($r$회):라우팅 로짓 $b_{ij}$를 0으로 초기화한 후, 다음 4단계를 반복합니다.
    1. 커플링 계수 계산:라우팅 로짓 $b_{ij}$에 Softmax를 적용하여 커플링 계수 $c_{ij}$를 계산합니다. $c_{ij}$는 하위 캡슐 $i$의 출력이 상위 캡슐 $j$로 라우팅될 가중치를 의미하며, $\sum_j c_{ij} = 1$ 입니다.
    2. $$c_{ij} = \frac{\exp(b_{ij})}{\sum_k \exp(b_{ik})}$$
    3. 상위 캡슐의 입력 계산:상위 캡슐 $j$의 총 입력 벡터 $s_j$는 모든 하위 캡슐로부터의 예측 벡터들을 커플링 계수로 가중합하여 구합니다.
    4. $$s_j = \sum_i c_{ij} \hat{u}_{j|i}$$
    5. 스쿼싱(Squashing) 활성화:$s_j$에 비선형 활성화 함수인 스쿼싱을 적용하여 최종 출력 벡터 $v_j$를 얻습니다. 이 함수는 벡터의 방향은 유지하되, 길이를 0과 1 사이로 압축합니다. 긴 벡터(강한 합의)는 1에 가깝게, 짧은 벡터(약한 합의)는 0에 가깝게 만듭니다.
    6. $$v_j = \frac{\|s_j\|^2}{1 + \|s_j\|^2} \frac{s_j}{\|s_j\|}$$
    7. 라우팅 로짓 업데이트:예측 벡터 $\hat{u}_{j|i}$와 상위 캡슐의 출력 $v_j$ 사이의 내적(agreement)을 계산하여 로짓 $b_{ij}$를 업데이트합니다. 두 벡터가 유사할수록(내적이 클수록) 다음 반복에서 커플링 계수 $c_{ij}$가 더 커지게 됩니다.
    8. $$b_{ij} \leftarrow b_{ij} + \hat{u}_{j|i} \cdot v_j$$

이 반복 과정을 통해, 하위 캡슐들의 예측과 가장 잘 일치하는 상위 캡슐과의 연결이 강화되고, 그렇지 않은 연결은 약화되어 정보가 가장 적절한 경로로 라우팅됩니다.


48. 스토캐스틱 깊이(Stochastic Depth) 수식과 효과

답변:
스토캐스틱 깊이(Stochastic Depth)는 매우 깊은 잔차 네트워크(Residual Network, ResNet)의 훈련을 효과적으로 만들기 위한 정규화(regularization) 기법입니다. 핵심 아이디어는 훈련 과정에서 네트워크의 일부 잔차 블록(residual block)을 무작위로 건너뛰는(drop) 것입니다. 이는 마치 네트워크의 깊이를 동적으로 변경하는 것과 같습니다.

수식과 동작 방식

ResNet의 $l$번째 잔차 블록은 다음과 같이 표현됩니다.

$$H_l = \text{ReLU}(f_l(H_{l-1}) + H_{l-1})$$

  • $H_{l-1}$: $l-1$번째 블록의 출력.
  • $f_l$: $l$번째 블록의 잔차 함수 (Conv 레이어 등).
  • $H_{l-1}$: 항등 매핑 (Identity mapping) 또는 스킵 커넥션.

스토캐스틱 깊이는 각 잔차 블록 $l$에 대해 생존 확률 $p_l$을 정의하고, 베르누이 확률 변수 $b_l \sim \text{Bernoulli}(p_l)$를 사용하여 블록의 활성화 여부를 결정합니다.

훈련(Training) 시:

$$H_l = \text{ReLU}(b_l \cdot f_l(H_{l-1}) + H_{l-1})$$

  • $b_l = 1$ (확률 $p_l$): 블록이 활성화되어 정상적으로 계산됩니다.
  • $b_l = 0$ (확률 $1-p_l$): 잔차 함수 $f_l$ 부분이 0이 되어, 블록은 $H_l = H_{l-1}$ (항등 함수)처럼 동작합니다. 즉, 블록을 건너뛰게 됩니다.

생존 확률 $p_l$은 보통 네트워크의 앞부분에서는 1에 가깝게, 뒷부분으로 갈수록 선형적으로 감소하도록 설정합니다 ($p_L = 0.5$ 등). 이는 초반 레이어의 기본 특징 추출은 유지하고, 후반 레이어의 복잡한 특징 학습을 정규화하기 위함입니다.

테스트(Inference) 시:

테스트 시에는 모든 블록을 사용해야 합니다. 하지만 훈련 중에는 일부 블록이 비활성화되었으므로, 이를 보정해주어야 합니다. 각 블록의 기대 출력을 맞춰주기 위해 잔차 함수의 출력에 생존 확률 $p_l$을 곱해줍니다.

$$H_l = \text{ReLU}(p_l \cdot f_l(H_{l-1}) + H_{l-1})$$

효과

  • 훈련 시간 단축: 매 반복마다 일부 레이어를 건너뛰므로 순전파/역전파 계산량이 줄어들어 훈련 속도가 빨라집니다.
  • 그래디언트 소실 완화: 일부 경로가 매우 짧아지므로(많은 블록을 건너뛰면), 그래디언트가 깊은 네트워크의 초기 레이어까지 더 잘 전파될 수 있습니다.
  • 정규화 및 성능 향상: Dropout과 유사하게, 매번 다른 깊이와 구조를 갖는 여러 서브네트워크를 훈련시키는 것과 같은 암묵적인 앙상블(implicit ensemble) 효과를 낳습니다. 이는 모델의 과적합을 방지하고 일반화 성능을 향상시킵니다.

49. Multi-Head Attention 수식과 장점

답변:
단일 스케일드 닷-프로덕트 어텐션(Scaled Dot-Product Attention)은 한 번에 한 가지 종류의 관계에만 집중하는 경향이 있습니다. 하지만 문장 내 단어들은 문법적 관계, 의미적 관계 등 다양한 관계를 동시에 가질 수 있습니다.

멀티-헤드 어텐션(Multi-Head Attention, MHA)은 이러한 다양한 관계를 동시에 포착하기 위해, 어텐션을 여러 개의 "헤드(head)"로 나누어 병렬적으로 수행하는 메커니즘입니다. 각 헤드는 입력 Query, Key, Value를 서로 다른 선형 투영(linear projection)을 통해 다른 "표현 부분공간(representation subspace)"으로 보낸 후, 독립적으로 어텐션을 계산합니다.

수식과 동작 과정

입력 $Q, K, V$와 헤드의 수 $h$가 주어졌을 때, MHA는 다음 3단계로 동작합니다.

  1. 선형 투영 (Linear Projection):먼저, 입력 $Q, K, V$를 각 헤드 $i$ ($i=1, \dots, h$)에 대해 서로 다른 학습 가능한 가중치 행렬 $W_i^Q, W_i^K, W_i^V$를 사용하여 선형으로 투영합니다. 이를 통해 각 헤드는 입력의 다른 측면에 집중할 수 있습니다.
    • $W_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}$, $W_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}$, $W_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}$
    • 보통 $d_k = d_v = d_{\text{model}} / h$ 로 설정합니다.
  2. $$Q_i = QW_i^Q, \quad K_i = KW_i^K, \quad V_i = VW_i^V$$
  3. 병렬 어텐션 계산 (Parallel Attention):각 헤드에 대해 스케일드 닷-프로덕트 어텐션을 병렬적으로 수행합니다.
  4. $$\text{head}_i = \text{Attention}(Q_i, K_i, V_i) = \text{softmax}\left(\frac{Q_i K_i^\top}{\sqrt{d_k}}\right)V_i$$
  5. 결과 결합 및 최종 투영 (Concatenation & Final Projection):모든 헤드의 출력 벡터 $\text{head}_1, \dots, \text{head}_h$를 모두 이어 붙인(concatenate) 후, 또 다른 학습 가능한 가중치 행렬 $W^O$를 사용하여 최종 출력 벡터를 만듭니다. 이 과정은 각 헤드가 학습한 다양한 관점의 정보를 통합하는 역할을 합니다.
    • $W^O \in \mathbb{R}^{h \cdot d_v \times d_{\text{model}}}$
  6. $$\text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O$$

장점

  • 다양한 관계 포착: 각 헤드는 서로 다른 표현 부분공간에서 작동하므로, 모델이 동시에 다양한 종류의 정보(예: 장거리 의존성, 구문 구조, 단어 간 의미 관계 등)에 주의를 기울일 수 있게 해줍니다.
  • 표현력 강화: 단일 헤드가 전체 정보를 평균내는 것보다, 여러 헤드가 각각 다른 측면에 집중한 후 그 결과를 종합하는 것이 더 풍부하고 세밀한 표현을 학습하는 데 도움이 됩니다.
  • 안정적인 학습: 각 헤드가 전체 차원을 나누어 맡기 때문에, 어텐션 과정이 더 안정적으로 이루어질 수 있습니다.

50. 베이지안 신경망(Bayesian Neural Network)의 가중치 처리와 예측

답변:
일반적인 신경망은 학습을 통해 가중치 $w$를 하나의 최적점(point estimate)으로 결정합니다. 하지만 베이지안 신경망(Bayesian Neural Network, BNN)은 근본적으로 다른 접근 방식을 취합니다. BNN은 가중치 $w$를 고정된 값이 아닌, 확률 분포를 따르는 확률 변수로 취급합니다.

  • 목표: 데이터 $\mathcal{D}$가 주어졌을 때, 가중치의 사후 분포(posterior distribution) $p(w|\mathcal{D})$를 추론하는 것입니다.

사후 분포 추론 (베이즈 정리):

베이즈 정리에 따라, 사후 분포는 가능도(likelihood)와 사전 분포(prior)의 곱에 비례합니다.

$$p(w|\mathcal{D}) \propto p(\mathcal{D}|w) \cdot p(w)$$

  • $p(w)$: 가중치에 대한 우리의 사전 믿음(prior belief). 보통 가우시안 분포를 사용합니다.
  • $p(\mathcal{D}|w)$: 주어진 가중치 $w$에서 데이터 $\mathcal{D}$가 관찰될 가능도(likelihood).
  • $p(w|\mathcal{D})$: 데이터를 관찰한 후 업데이트된 가중치에 대한 사후 믿음(posterior belief).

실제로는 사후 분포 $p(w|\mathcal{D})$를 정확하게 계산하는 것이 불가능(intractable)하므로, 변분 추론(Variational Inference)이나 MCMC(Markov Chain Monte Carlo)와 같은 기법으로 근사합니다.

예측: 불확실성의 정량화

BNN의 가장 큰 장점은 예측의 불확실성(uncertainty)을 자연스럽게 정량화할 수 있다는 것입니다. 일반 신경망이 새로운 데이터 $x^*$에 대해 단 하나의 예측 값 $y^*$를 출력하는 반면, BNN은 예측 값에 대한 확률 분포를 출력합니다.

베이지안 모델 평균 (Bayesian Model Averaging):

예측 분포 $p(y^*|x^*, \mathcal{D})$는 가능한 모든 가중치 $w$에 대한 예측을 사후 분포 $p(w|\mathcal{D})$로 가중 평균하여 얻습니다.

$$p(y^*|x^*, \mathcal{D}) = \int p(y^*|x^*, w) \cdot p(w|\mathcal{D}) \, dw$$

실제로는 이 적분을 몬테카를로 샘플링으로 근사합니다.

  1. 사후 분포 $p(w|\mathcal{D})$에서 여러 가중치 샘플 $w^{(1)}, w^{(2)}, \dots, w^{(N)}$을 추출합니다.
  2. 각 샘플링된 가중치를 사용하여 예측을 수행합니다.
  3. 이 예측들을 평균냅니다.

근사 예측:

$$p(y^*|x^*, \mathcal{D}) \approx \frac{1}{N} \sum_{i=1}^N p(y^*|x^*, w^{(i)})$$

불확실성의 의미:

  • 이렇게 얻은 예측 분포의 분산(variance)은 모델의 불확실성을 나타냅니다.
  • 모델이 학습 데이터와 유사한 입력에 대해서는 예측 분포의 분산이 작게 나타나(확신이 높음), 낯선 입력(out-of-distribution)에 대해서는 분산이 크게 나타납니다(확신이 낮음).

이러한 불확실성 정보는 의료, 자율 주행과 같이 안전이 중요한 분야에서 모델의 예측을 신뢰할 수 있는지 판단하는 데 매우 유용하게 사용될 수 있습니다.