오늘은 딥러닝에서 자주 사용하는 Maximum Likelihood, NLL, Cross Entropy, Softmax + Cross Entropy, MSE와 데이터 전처리에서 사용하는 정규화, 표준화, Whitening에 대해 정리한다.
단순히 수식을 외우는 것보다 "왜 이걸 사용하는가?"를 중심으로 이해해보자.
분류 모델을 학습한다고 생각해보자.
입력 데이터와 정답은 다음과 같이 표현할 수 있다.
예를 들어 MNIST라면,
x_i = 숫자 3 이미지
y_i = 3
이다.
🚨 여기서 는 One-Hot Encoding의
0,1값이 아니다.
정답 클래스의 번호를 의미한다.
모델은 입력 가 들어왔을 때 각 클래스에 대한 확률을 계산한다.
이 식의 의미는:
현재 모델 에서 입력 가 들어왔을 때 실제 정답 가 나올 확률
이다.
예를 들어:
정답: class 3
모델 출력:
[0.01, 0.02, 0.05, 0.80, 0.12]
↑
class 3
이면,
이다.
우리는 당연히 이 정답 확률을 높이고 싶다.
데이터가 하나가 아니라 개라면 모든 데이터에 대해 정답 확률을 높이고 싶다.
그래서 다음과 같이 확률을 곱한다.
여기서:
그리고 우리의 진짜 목적은:
이다.
즉,
실제 정답들이 나올 확률을 가장 크게 만드는 모델 파라미터 를 찾자.
이것이 Maximum Likelihood Estimation, MLE이다.
현재 모델이 세 데이터의 정답에 다음 확률을 줬다고 하자.
데이터 1 → 0.6
데이터 2 → 0.7
데이터 3 → 0.5
Likelihood는:
그런데 학습 후:
데이터 1 → 0.8
데이터 2 → 0.9
데이터 3 → 0.7
이 되었다면:
Likelihood가 증가했다.
💡 Maximum Likelihood의 핵심
모델이 우리가 실제로 관측한 정답에 높은 확률을 주도록 모델의 weight를 찾는 것.
Maximum Likelihood에는 한 가지 문제가 있다.
데이터가 많아지면 작은 확률들을 계속 곱해야 한다.
0.8 × 0.7 × 0.9 × 0.6 × 0.8 × ...
확률은 1보다 작기 때문에 계속 곱하면 값이 매우 작아진다.
또한 곱셈은 미분하기도 상대적으로 불편하다.
그래서 log를 사용한다.
로그의 중요한 성질은:
이다.
따라서:
가 된다.
곱셈이 덧셈으로 변경되었다.
이것을 Log-Likelihood라고 한다.
Maximum Likelihood는 값을 최대화해야 한다.
하지만 딥러닝에서는 일반적으로 Loss를 최소화하는 방식으로 학습한다.
따라서 Log-Likelihood에 음수를 붙인다.
이것이 Negative Log Likelihood(NLL) 이다.
즉:
Likelihood 최대화
↓
Log-Likelihood 최대화
↓
Negative Log-Likelihood 최소화
세 개는 결국 같은 목적을 다른 형태로 표현한 것이다.
🎯 NLL을 왜 쓰는가?
Maximum Likelihood라는 통계적 목표를 딥러닝에서 사용하기 편한 Loss 최소화 문제로 바꾸기 위해 사용한다.
Cross Entropy는 정답 확률 분포와 모델이 예측한 확률 분포의 차이를 측정한다.
다중 클래스 분류에서:
여기서:
예를 들어 정답이 class 3이라면:
정답 t:
[0, 0, 0, 1, 0]
예측 p:
[0.01, 0.02, 0.05, 0.80, 0.12]
Cross Entropy는:
결국:
만 남는다.
NLL은:
즉 정답 클래스에 모델이 준 확률만 사용한다.
Cross Entropy는:
이지만 One-Hot Encoding에서는 정답 클래스만 이고 나머지는 0이다.
따라서:
만 남는다.
즉 One-Hot + 다중 클래스 분류 환경에서는
가 된다.
| 개념 | 관점 |
|---|---|
| NLL | 실제 정답이 나올 확률을 최대화하자 |
| Cross Entropy | 정답 분포와 예측 분포의 차이를 줄이자 |
💡 NLL은 Likelihood 관점, Cross Entropy는 확률분포 관점에서 시작하지만 One-Hot 분류에서는 같은 식으로 귀결된다.
Neural Network의 마지막 출력은 바로 확률이 아니다.
예를 들어:
z = [2.0, 1.0, 0.5]
이런 값을 출력할 수 있다.
이를 Logit이라고 한다.
Softmax는 logit을 확률로 변환한다.
여기서:
🎯 Softmax를 왜 쓰는가?
모델이 출력한 임의의 실수값을 합이 1인 클래스 확률분포로 만들기 위해서다.
Softmax + Cross Entropy를 함께 사용하는 중요한 이유 중 하나는 gradient가 매우 깔끔해지기 때문이다.
정답이 번째 클래스라고 하자.
Cross Entropy:
Softmax는:
이므로 합치면:
로그 성질을 사용하면:
우리가 원하는 것은:
이다.
여기서:
정답 클래스가 라면:
를 로 미분하면:
그리고:
를 로 미분하면:
가 된다.
그런데 이것은 바로 Softmax의 이다.
따라서:
정답이 아닌 클래스 에서는 와 관계가 없으므로 미분하면 0이다.
따라서:
가 된다.
p - tOne-Hot 정답을 사용하면 이를 하나의 식으로 표현할 수 있다.
여기서:
예를 들어:
예측:
p = [0.23, 0.63, 0.14]
정답:
t = [0, 1, 0]
이라면:
gradient = p - t
= [0.23, -0.37, 0.14]
이다.
Gradient Descent에서는:
여기서 는 learning rate다.
정답 클래스는 gradient가 음수이므로 logit이 증가하고, 오답 클래스는 gradient가 양수이므로 logit이 감소한다.
🎯 Softmax + Cross Entropy를 사용하면 모델이 정답 확률은 올리고 오답 확률은 내리는 방향의 gradient가 매우 직접적으로 만들어진다.
MSE 계열의 제곱 오차는 예측값과 정답값의 거리를 보는 방식이다.
분류 출력을 One-Hot과 비교한다고 하면:
여기서:
예를 들어:
예측:
[0.1, 0.2, 0.7]
정답:
[0, 0, 1]
이면 3개 값 모두 계산한다.
| MSE | Cross Entropy |
|---|---|
| 예측 벡터와 정답 벡터의 거리 | 정답 클래스의 확률 |
| 모든 출력의 오차를 계산 | One-Hot에서는 정답 항만 남음 |
| 회귀에서 주로 사용 | 분류에서 주로 사용 |
💡 MSE는 "얼마나 멀리 틀렸는가?"를 보고, Cross Entropy는 "정답에 얼마나 높은 확률을 줬는가?"를 본다고 이해하면 쉽다.
모델에 들어오는 feature마다 값의 크기가 크게 다르면 학습이 불안정하거나 느려질 수 있다.
그래서 모델이 다루기 쉬운 형태로 데이터를 변환한다.
대표적으로:
이 있다.
여기서는 흔히 사용하는 Min-Max Scaling 기준으로 생각한다.
여기서:
예를 들어 이미지 픽셀은:
0 ~ 255
이므로:
를 하면 0 ~ 1 범위로 변경된다.
🎯 왜 쓰는가?
데이터의 값 범위를 비슷하게 맞춰 모델이 특정 큰 값에 과도하게 영향을 받는 것을 줄이기 위해서다.
표준화는 데이터를 평균 0, 표준편차 1에 가깝게 만든다.
여기서:
🎯 왜 쓰는가?
Feature마다 평균과 분산이 다른 문제를 줄여서 학습을 안정적으로 만들기 위해서다.
Whitening은 표준화보다 한 단계 더 나아간다.
표준화는 각각의 feature의 스케일을 맞추지만, feature끼리의 상관관계는 남아 있을 수 있다.
Whitening은:
분산을 맞추고 feature 간 상관관계까지 제거
하는 것이 목적이다.
먼저 평균을 제거한다.
여기서:
그리고 공분산 행렬:
를 구한다.
이를 고유값 분해하면:
여기서:
PCA Whitening은:
와 같이 수행할 수 있다.
결과적으로:
가 된다.
즉:
각 feature의 분산 ≈ 1
feature 사이 상관관계 ≈ 0
가 된다.
🎯 왜 쓰는가?
Feature 간 중복된 상관관계를 제거하고 각각의 방향을 비슷한 스케일로 만들어 데이터를 더 독립적으로 다루기 위해서다.
| 방법 | 핵심 목적 | 결과 |
|---|---|---|
| 정규화 | 값의 범위를 맞춤 | 예: 0~1 |
| 표준화 | 평균과 분산을 맞춤 | 평균 0, 표준편차 1 |
| Whitening | 스케일 + feature 상관관계 제거 | 공분산 ≈ 단위행렬 |
이미지 딥러닝에서는 흔히:
픽셀값 0~255
↓
0~1 Scaling
↓
채널별 Mean / Std 표준화
↓
Neural Network
와 같은 형태를 사용한다.
Model
↓
Logit z
↓
Softmax
↓
Probability p
↓
Cross Entropy
↓
Loss
↓
Gradient 계산
↓
Weight Update
Cross Entropy의 배경을 따라가면:
실제 정답이 나올 확률을 높이고 싶다.
↓
Maximum Likelihood
↓
Log-Likelihood
↓
Negative Log-Likelihood
↓
One-Hot Classification
↓
Cross Entropy
그리고 모델에 데이터를 넣기 전에는:
Raw Data
↓
Normalization / Standardization
↓
필요하다면 Whitening
↓
Model Input
과 같은 전처리 과정을 사용할 수 있다.
💡 Maximum Likelihood는 실제 정답의 확률을 최대화하자는 원칙이고, NLL은 이를 Loss 최소화 형태로 바꾼 것이며, One-Hot 다중분류에서는 Cross Entropy와 같은 형태가 된다. Softmax + Cross Entropy는 gradient가 로 깔끔하게 계산되어 분류 학습에 매우 적합하다.
그리고 전처리는:
💡 정규화는 범위, 표준화는 평균과 분산, Whitening은 여기에 feature 간 상관관계까지 조정하는 과정이다.