Week 4. 회귀 2: 다중회귀, 로지스틱, 소프트맥스
변수가 여러 개로 늘어나고, 출력이 0/1이 되면, 출력이 여러 클래스로 늘어나면 — 회귀의 세 가지 진화.
이번 주에 배우는 것
- 다중 변수 선형회귀
- 벡터화 표기와 행렬
- 이진 분류와 시그모이드
- 로지스틱 회귀의 비용함수 — 크로스 엔트로피
- 다중 클래스 분류와 소프트맥스
1. 다중 변수 선형회귀 — 차원을 늘리면
현실의 문제는 입력이 하나로 깔끔하지 않습니다. 집값을 예측한다고 하면 면적뿐만 아니라 방 수, 건축 연도, 지하철역까지 거리, 학군 점수까지 고려해야 합니다. 입력이 한 개($x$)에서 여러 개($x_1, x_2, \dots, x_n$)로 늘어나도 W3 단변수 회귀의 본질은 그대로 유지됩니다 — 단지 가설이 "여러 특징의 선형 결합"이 될 뿐입니다.
$$ \hat{y} = w_1 x_1 + w_2 x_2 + \dots + w_n x_n + b = \mathbf{w}^\top \mathbf{x} + b $$가중치 벡터 $\mathbf{w} = (w_1, \dots, w_n)^\top$는 각 입력의 "중요도"를 학습합니다. $w_j$의 부호와 크기가 특징 $x_j$가 $y$를 얼마나, 어떤 방향으로 끌어당기는지 알려줍니다. 예를 들어 집값 예측에서 $w_\text{면적} > 0$이면 "면적이 클수록 비싸다", $w_\text{역까지 거리} < 0$이면 "역에서 멀수록 싸다"가 됩니다.
비용함수도 단변수와 완전히 동일한 MSE:
$$ J(\mathbf{w}, b) = \frac{1}{N}\sum_{i=1}^N (\mathbf{w}^\top \mathbf{x}_i + b - y_i)^2 $$벡터화하면 구현이 훨씬 깔끔합니다. $N\times n$ 설계 행렬 $\mathbf{X}$의 각 행이 한 샘플의 특징 벡터이고, 열벡터 $\mathbf{y}$가 라벨이라면:
$$ J(\boldsymbol\beta) = \frac{1}{N}\|\mathbf{X}\boldsymbol\beta - \mathbf{y}\|^2 $$여기서 편의상 $b$를 $\mathbf{w}$에 흡수해 $\boldsymbol\beta = [b, w_1, \dots, w_n]^\top$으로 두고 $\mathbf{X}$의 첫 열을 모두 1로 두는 트릭이 표준입니다. 그러면 W3 §3.2에서 본 정규방정식이 그대로 여러 차원에 확장됩니다:
$$ \boldsymbol\beta^* = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y} $$1.1 특징 스케일이 중요한 이유
다중 변수가 되면 새 문제가 생깁니다. 면적(수치 범위 30~200)과 방 수(1~5)는 단위가 완전히 다릅니다. 경사하강법은 비용 함수의 곡률이 방향마다 극도로 다르면 지그재그로 수렴이 느려집니다. 그래서 W2 §표준화에서 본 정규화/표준화가 여기서 결정적입니다. 각 특징을 $z = (x - \mu)/\sigma$로 바꾸면 모든 차원이 "같은 스케일"이 되어 학습이 훨씬 빠르고 안정적입니다.
🎮 인터랙티브: 두 변수의 가중치 효과
$\hat{y} = w_1 x_1 + w_2 x_2$의 예측 평면을 색으로 그립니다. 두 가중치를 움직이며 평면이 어떻게 기우는지 보세요.
2. 시그모이드와 이진 분류 — 왜 선형 회귀로는 안 되나
출력이 "예/아니오", "스팸/정상", "암환자/정상"처럼 두 값 중 하나인 경우를 이진 분류(binary classification)라 부릅니다. 이 때 선형 회귀 $\hat y = \mathbf w^\top \mathbf x + b$를 그대로 쓰면 여러 가지 문제가 생깁니다:
- 출력 범위 문제: 예측값이 음수나 1을 훌쩍 넘는 값을 반환할 수 있습니다. "확률 1.73"이나 "-0.5"는 해석이 안 됩니다.
- 이상치 민감: 한쪽 끝에 극단 샘플이 있으면 회귀선이 그쪽으로 휘면서 결정 경계가 엉뚱한 곳으로 밀립니다.
- MSE가 좋은 손실이 아님: 0 또는 1을 예측해야 하는데 MSE는 0.5와 0의 오차와 1과 0.5의 오차를 똑같이 취급합니다. 판별의 "결단력"을 반영 못함.
해법의 핵심 아이디어: 선형 함수 $z = \mathbf w^\top \mathbf x + b$의 출력을 0과 1 사이로 눌러 넣는 부드러운 "스위치 함수"를 덧붙이자. 가장 유명한 선택이 시그모이드(sigmoid)입니다:
$$ \sigma(z) = \frac{1}{1 + e^{-z}}, \qquad z = \mathbf{w}^\top \mathbf{x} + b $$$\sigma$는 $z \to -\infty$일 때 0, $z \to +\infty$일 때 1, $z = 0$일 때 정확히 0.5로 부드럽게 전이합니다. 그래프가 S자라서 "sigmoid"(그리스어 sigma 모양)라 부릅니다. 이 함수의 출력을 "클래스 1일 확률" $P(y=1 \mid \mathbf x)$로 해석합니다. 그러면 분류 규칙은 간단하게 "확률이 0.5 이상이면 1, 아니면 0".
2.1 결정 경계는 여전히 직선
재미있는 사실: 시그모이드가 비선형이지만, $\sigma(z) = 0.5$가 되는 곳은 $z = 0$, 즉 $\mathbf w^\top \mathbf x + b = 0$입니다. 이것은 여전히 직선(또는 초평면)입니다. 즉, 로지스틱 회귀는 "직선으로 두 클래스를 나누는" 선형 분류기입니다. 시그모이드는 그 직선 양쪽의 "확신도"를 부드럽게 바꿔주는 역할일 뿐. 비선형 경계가 필요하다면 W7 MLP에서 신경망이 어떻게 해결하는지 다룹니다.
2.2 시그모이드의 뿌리 — Logit과 Odds
시그모이드는 하늘에서 떨어진 게 아닙니다. 통계학의 로짓(logit) 함수가 뒤집힌 형태입니다. "오즈(odds)"는 "일어날 확률 나누기 일어나지 않을 확률"로 정의됩니다:
$$ \text{odds} = \frac{p}{1-p}, \quad \text{logit}(p) = \log\frac{p}{1-p} $$로짓은 $(0, 1)$ 확률을 $(-\infty, \infty)$ 실수로 펼칩니다. 이 역함수가 정확히 시그모이드:
$$ p = \sigma(z) = \frac{1}{1 + e^{-z}} \iff z = \log\frac{p}{1-p} $$그래서 "로지스틱 회귀(logistic regression)"라는 이름이 붙었습니다. 본질은 "로그 오즈를 선형으로 모델링"하는 것입니다. 이 관점은 L4 칼만 필터의 로그 확률 업데이트와도 연결됩니다.
🎮 인터랙티브: 시그모이드 곡선
$z = wx + b$의 $w$와 $b$를 움직이며 시그모이드의 모양과 위치 변화를 관찰하세요.
3. 로지스틱 회귀의 비용함수 — 크로스 엔트로피
로지스틱 회귀에 W3의 MSE를 그대로 쓰면 두 가지 문제가 생깁니다. 첫째, 비용 곡면이 비볼록(non-convex)이 되어 지역 최솟값에 갇힐 위험이 큽니다. 둘째, 시그모이드를 미분하면 $(1-\sigma)\sigma$가 끼어들어 기울기가 너무 작아 학습이 멈춥니다. 그래서 통계학자들이 오랫동안 검증한 대안이 크로스 엔트로피(cross-entropy, log loss)입니다:
$$ J(\mathbf{w}, b) = -\frac{1}{N} \sum_{i=1}^{N} \big[ y_i \log \hat{y}_i + (1-y_i) \log (1-\hat{y}_i) \big] $$여기서 $\hat y_i = \sigma(\mathbf w^\top \mathbf x_i + b)$. 이 함수는 시그모이드 출력에 대해 엄밀히 볼록이므로 전역 최솟값이 하나뿐이고 경사하강법이 항상 거기로 수렴합니다.
3.1 왜 이런 형태인가 — Bernoulli MLE로부터 유도
MSE가 가우시안 잡음의 최대우도(MLE)에서 나왔던 것처럼(W3 §2.1), 크로스 엔트로피는 베르누이 분포의 MLE에서 자연스럽게 나옵니다. 이진 분류에서 $y_i \in \{0, 1\}$이 "성공 확률 $\hat y_i$인 베르누이 시행"이라고 가정하면:
$$ P(y_i \mid \mathbf x_i) = \hat y_i^{y_i} (1 - \hat y_i)^{1 - y_i} $$($y_i = 1$이면 $\hat y_i$, $y_i = 0$이면 $1 - \hat y_i$.) 전체 데이터의 로그 우도:
$$ \log \mathcal L = \sum_i \bigl[ y_i \log \hat y_i + (1 - y_i) \log (1 - \hat y_i) \bigr] $$이것을 "최대화"하는 것은 음수 부호를 붙여 "최소화"하는 것과 같고, 샘플 수로 나누면 위 $J$가 정확히 나옵니다. 즉 크로스 엔트로피 최소화 = 베르누이 MLE. MSE↔가우시안, 크로스 엔트로피↔베르누이라는 이 대응이 머신러닝 전체의 확률론적 기반입니다.
3.2 그래디언트가 아름답게 떨어지는 이유
크로스 엔트로피를 $\mathbf w$로 편미분하면, 시그모이드의 미분 $(1-\sigma)\sigma$와 로그 미분 $1/\hat y$가 정확히 상쇄되어 다음 놀랍도록 깔끔한 식이 나옵니다:
$$ \frac{\partial J}{\partial \mathbf w} = \frac{1}{N} \sum_i (\hat y_i - y_i) \, \mathbf x_i $$MSE 선형 회귀의 그래디언트와 형태가 똑같습니다 — "예측 오차" 곱하기 "입력". 이 우연이 아닌 필연이, 로지스틱 회귀가 MLE와 맞물려 있는 구조에서 나옵니다. 실전에서 중요한 의미도 있습니다: 예측이 거의 맞으면 $(\hat y - y) \approx 0$이라 업데이트가 작고, 크게 틀리면 업데이트가 크다 — "덜 아는 것을 먼저 배운다"는 자연스러운 학습 다이나믹이 됩니다.
3.3 작은 예시
데이터 두 점만 가지고 계산해봅시다. $(x, y) = (2, 1), (-1, 0)$, 초기 $w = 0, b = 0$. 그럼 $\hat y_1 = \sigma(0) = 0.5$, $\hat y_2 = 0.5$. 손실은:
$$ J = -\frac{1}{2}[1 \cdot \log 0.5 + 0 + 0 + 1 \cdot \log 0.5] = -\log 0.5 = 0.693 $$그래디언트 $\partial J/\partial w = \frac{1}{2}[(0.5 - 1) \cdot 2 + (0.5 - 0) \cdot (-1)] = \frac{1}{2}[-1 - 0.5] = -0.75$. 즉 $w$를 늘리는 방향으로 가야 합니다. 직관적으로도 맞습니다 — $x=2$일 때 1이 나오려면 $w$가 양수여야 하니까요.
4. 2D 로지스틱 결정경계
🎮 인터랙티브: 2D 결정경계 학습
두 가우시안 클러스터(빨강/파랑)를 분리하는 직선을 로지스틱 회귀로 학습합니다. "학습" 버튼을 누르면 경사하강이 돌아갑니다.
5. 소프트맥스 — 여러 클래스 분류
클래스가 셋 이상이면 시그모이드 대신 소프트맥스를 씁니다. $K$개의 점수 $z_1, \dots, z_K$를 받아 합이 1인 확률 분포로 변환합니다.
$$ p_k = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}} $$가장 큰 점수 클래스가 자연스럽게 가장 큰 확률을 갖되, 모든 클래스가 0보다 큰 부드러운 출력을 줍니다.
🎮 인터랙티브: 소프트맥스 막대그래프
세 클래스의 점수 $z$를 슬라이더로 조절하면 소프트맥스 확률이 어떻게 변하는지 보입니다.
5.1 소프트맥스 유도 — 시그모이드의 일반화
소프트맥스가 하늘에서 떨어진 게 아닙니다. 시그모이드를 클래스 $K$개로 일반화하면 정확히 소프트맥스가 됩니다. 각 클래스 $k$에 대한 로짓(점수) $z_k = \mathbf w_k^\top \mathbf x + b_k$가 있을 때, 클래스 $k$일 확률을:
$$ P(y = k \mid \mathbf x) = \frac{e^{z_k}}{\sum_{j=1}^{K} e^{z_j}} $$세 가지 핵심 성질을 보면 왜 이게 "확률"로 적절한지 납득됩니다:
- 양수 보장: $e^{z_k} > 0$이므로 모든 확률이 양수.
- 합이 1: 분모가 분자들의 합이라 $\sum_k P(y=k) = 1$.
- 단조성: $z_k$가 클수록 $P(y=k)$가 크다 — 점수 순위가 확률 순위로 보존.
$K=2$ 특별한 경우를 생각해보면, 소프트맥스는 정확히 시그모이드로 환원됩니다. $z_2 - z_1 = z$로 두면:
$$ P(y=1) = \frac{e^{z_1}}{e^{z_1} + e^{z_2}} = \frac{1}{1 + e^{z_2 - z_1}} = \sigma(-z) $$5.2 다중 클래스 크로스 엔트로피
다중 클래스에서는 라벨을 원-핫 인코딩(one-hot)으로 표현합니다. 클래스가 3개이고 정답이 2번이라면 $\mathbf y = [0, 1, 0]^\top$. 크로스 엔트로피는 자연스럽게 확장됩니다:
$$ J = -\frac{1}{N} \sum_{i=1}^N \sum_{k=1}^K y_{i,k} \log \hat y_{i,k} $$$y_{i,k}$가 원핫이라 한 항만 살아남고, 결국 "정답 클래스의 로그 확률"의 합이 됩니다. 만약 모델이 정답에 확률 1을 주면 $\log 1 = 0$으로 손실 0, 확률 0.1을 주면 $-\log 0.1 \approx 2.3$, 확률 0.01이면 $\approx 4.6$. 정답에 낮은 확률을 줄수록 비용이 급격히 커지는 — 이것이 "잘못을 강하게 벌주는" 크로스 엔트로피의 학습 원동력입니다.
6. 코드 예제
from sklearn.linear_model import LogisticRegression
import numpy as np
# 두 특성, 이진 라벨
X = np.array([[2,3],[3,3],[4,5],[1,1],[2,1],[3,2]])
y = np.array([1,1,1,0,0,0])
clf = LogisticRegression().fit(X, y)
print(clf.coef_, clf.intercept_)
print(clf.predict_proba([[3,3]])) # [[0.07, 0.93]]
# 다중 클래스 (소프트맥스)
clf3 = LogisticRegression(multi_class='multinomial').fit(X3, y3)
📖 더 깊이 공부하기
- Sung Kim Lec 4-6 — hunkim.github.io/ml. 다중회귀부터 소프트맥스까지 차근차근.
- Bishop PRML, 4장 — 로지스틱 회귀의 베이즈적 해석.
- Cross Entropy 직관 — Chris Olah, Visual Information Theory.
- scikit-learn LogisticRegression — 정규화 옵션 C 파라미터의 의미.