Artificial Intelligence Theory : 손실 함수(Loss Function)
손실 함수(Loss Function)
순전파(Forward Propagation) & 역전파(Back Propagation)에서 모델은 예측값과 정답의 차이를 계산하고, 그 차이를 줄이는 방향으로 가중치를 갱신한다고 설명했습니다. 이때 차이를 하나의 숫자로 계산하는 함수가 손실 함수(Loss Function)입니다. 최적화 알고리즘(Optimizer)은 이 숫자를 줄이기 위해 움직이므로, 손실 함수는 모델에게 무엇이 좋은 예측인지를 알려 주는 유일한 기준이 됩니다.
같은 모델과 같은 데이터라도 손실 함수가 다르면 전혀 다른 모델이 학습됩니다. 집값을 예측하는 모델에서 “1억 원 틀린 것이 1천만 원 틀린 것보다 100배 나쁘다”고 정하면 모델은 큰 오차를 피하는 데 집중하고, “10배 나쁘다”고 정하면 모든 오차를 고르게 줄이려 합니다. 손실 함수를 고르는 것은 단순한 기술적 선택이 아니라, 어떤 실수를 얼마나 무겁게 볼지를 정하는 일입니다.
손실 함수는 학습이 가능하도록 몇 가지 조건을 갖추어야 합니다. 예측이 정답에 가까울수록 값이 작아져야 하고, 역전파로 기울기를 계산할 수 있도록 미분이 가능해야 합니다. 그래서 분류 문제에서 사람이 실제로 관심을 두는 정확도는 손실 함수로 쓰지 않습니다. 정확도는 예측이 조금 바뀌어도 맞고 틀림이 바뀌기 전까지는 변하지 않으므로, 거의 모든 곳에서 기울기가 0이기 때문입니다.
- Tip : 데이터 하나에 대한 오차를
손실 함수(Loss Function), 데이터 전체에 대한 손실의 평균을비용 함수(Cost Function)라 구분하기도 합니다. 실제로는 두 용어를 섞어 쓰는 경우가 많으며, 이 강좌에서는 모두 손실 함수라 부릅니다.
회귀 문제의 손실 함수
지도 학습(Supervised Learning)의 회귀 문제는 연속적인 값을 예측합니다. 정답 \(y\)와 예측 \(\hat{y}\)의 차이인 오차 \(y - \hat{y}\)를 어떻게 집계하느냐에 따라 손실 함수가 나뉩니다.
평균 제곱 오차(MSE)
\[\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} \left( y_{i} - \hat{y}_{i} \right)^{2}\]평균 제곱 오차(Mean Squared Error, MSE)는 오차를 제곱해 평균한 값입니다. 제곱을 하므로 오차의 부호가 사라지고, 큰 오차일수록 훨씬 무겁게 반영됩니다. 오차가 2배가 되면 손실은 4배, 10배가 되면 100배가 됩니다. 미분하면 오차에 비례하는 기울기가 나오므로, 정답에서 멀수록 크게, 가까울수록 작게 움직이는 안정적인 학습이 이루어집니다.
이 성질은 장점이자 약점입니다. 오차가 1, 2, 3인 데이터 세 개의 MSE는 약 4.67입니다. 여기에 측정 실수로 오차가 10인 데이터가 하나 섞이면 MSE는 28.5로 여섯 배 이상 뛰어오릅니다. 모델은 이 하나의 이상치를 맞추기 위해 나머지 데이터의 예측을 희생하게 되며, 결과적으로 전체 예측이 이상치 쪽으로 끌려갑니다.
평균 절대 오차(MAE)
\[\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} \left\lvert y_{i} - \hat{y}_{i} \right\rvert\]평균 절대 오차(Mean Absolute Error, MAE)는 오차의 절댓값을 평균합니다. 모든 오차를 크기에 비례해 똑같이 반영하므로 이상치의 영향이 작습니다. 위의 예에서 이상치가 없을 때 MAE는 2.0이고, 이상치가 섞여도 4.0으로 두 배에 그칩니다.
대신 기울기의 크기가 오차와 무관하게 항상 일정합니다. 정답 바로 근처에서도 큰 오차와 같은 크기로 움직이므로, 정답 주변을 맴돌며 정확히 수렴하기 어렵습니다. 오차가 0인 지점에서는 미분이 정의되지 않는다는 점도 다룰 때 주의가 필요합니다.
통계적으로 보면 MSE를 최소화하는 예측은 데이터의 평균이고, MAE를 최소화하는 예측은 중앙값입니다. 소득처럼 일부 극단적인 값이 있는 데이터에서 평균보다 중앙값이 더 대표성을 갖는 것과 같은 이유로, 이상치가 많은 데이터에는 MAE가 유리합니다.
후버 손실(Huber Loss)
\[L_{\delta}(e) = \begin{cases} \ \frac{1}{2} e^{2} & \text{if } \left\lvert e \right\rvert \le \delta \\ \ \delta \left( \left\lvert e \right\rvert - \frac{1}{2} \delta \right) & \text{otherwise} \end{cases}\]후버 손실(Huber Loss)은 두 손실의 장점을 합친 것입니다. 오차가 기준값 \(\delta\)보다 작으면 MSE처럼 제곱으로, 크면 MAE처럼 직선으로 증가합니다. 정답 근처에서는 기울기가 오차에 비례해 부드럽게 수렴하고, 멀리 떨어진 이상치에 대해서는 기울기가 \(\delta\)로 제한되어 과도하게 끌려가지 않습니다. \(\delta = 1\)일 때 위 네 오차의 후버 손실 평균은 3.5로, 이상치가 없을 때의 1.5에서 크게 늘지 않습니다.
위 그래프에서 MSE는 오차가 커질수록 가파르게 솟아오르고, MAE는 일정한 기울기로 증가하며, 후버 손실은 가운데에서는 MSE처럼 둥글고 바깥에서는 MAE처럼 곧게 뻗습니다. \(\delta\)는 어느 정도의 오차부터 이상치로 볼지를 정하는 하이퍼파라미터입니다.
분류 문제의 손실 함수
분류 문제에서 모델은 각 범주의 확률을 출력합니다. 정답이 “고양이”일 때 모델이 고양이에 0.9의 확률을 주었다면 좋은 예측이고, 0.1을 주었다면 나쁜 예측입니다. 분류의 손실 함수는 정답 범주에 준 확률이 1에서 얼마나 먼지를 측정합니다.
교차 엔트로피(Cross Entropy)
\[\text{CE} = - \sum_{k=1}^{K} y_{k} \log \hat{p}_{k}\]교차 엔트로피(Cross Entropy)는 정답 분포 \(y\)와 예측 분포 \(\hat{p}\) 사이의 차이를 측정합니다. 정답은 해당 범주만 1이고 나머지는 0인 원-핫 벡터이므로, 합 중에서 정답 범주의 항만 남아 결국 정답 범주 확률의 음의 로그 \(-\log \hat{p}_{\text{정답}}\)가 됩니다.
정답 확률에 따라 손실이 어떻게 변하는지 보면 성질이 분명해집니다. 정답 확률이 0.9이면 손실은 약 0.105, 0.5이면 약 0.693, 0.1이면 약 2.303, 0.01이면 약 4.605입니다. 확률이 0에 가까워질수록 손실은 끝없이 커집니다. 정답을 확신하며 틀린 예측일수록 매우 큰 벌을 받는 것입니다.
분류 모델은 마지막 층의 출력인 로짓(Logit)에 활성화 함수인 소프트맥스를 적용해 확률을 만듭니다. 소프트맥스와 교차 엔트로피를 함께 쓰면 기울기가 매우 간단해집니다. 로짓에 대한 손실의 기울기가 예측 확률에서 정답을 뺀 값 \(\hat{p} - y\)가 되는 것입니다. 로짓이 \([2.0, 1.0, 0.1]\)이고 첫 번째가 정답이라면, 소프트맥스 확률은 \([0.659, 0.242, 0.099]\)이고 기울기는 \([-0.341, 0.242, 0.099]\)입니다. 정답 범주의 로짓은 올리고, 나머지 범주의 로짓은 자신이 받은 확률만큼 내리라는 뜻입니다.
- Tip : PyTorch의
nn.CrossEntropyLoss는 내부에서 소프트맥스를 함께 계산하므로 로짓을 그대로 입력해야 합니다. 모델의 출력에 소프트맥스를 미리 적용한 뒤 넣으면 소프트맥스가 두 번 적용되어 학습이 제대로 되지 않습니다. 로그와 지수를 한 번에 계산하면 수치적으로도 더 안정적입니다.
이진 교차 엔트로피(Binary Cross Entropy)
\[\text{BCE} = - \left[ y \log \hat{p} + (1 - y) \log (1 - \hat{p}) \right]\]범주가 두 개인 이진 분류에서는 모델이 양성일 확률 \(\hat{p}\) 하나만 출력하고 시그모이드 함수로 0과 1 사이의 값을 만듭니다. 이진 교차 엔트로피(Binary Cross Entropy)는 정답이 1이면 \(-\log \hat{p}\)를, 정답이 0이면 \(-\log (1 - \hat{p})\)를 손실로 사용하며, 교차 엔트로피를 범주 두 개로 쓴 것과 같습니다.
이진 교차 엔트로피는 하나의 데이터가 여러 범주에 동시에 속할 수 있는 다중 레이블 분류(Multi-label Classification)에도 쓰입니다. 영화 하나가 “액션”이면서 “코미디”일 수 있다면, 범주마다 독립적인 시그모이드와 이진 교차 엔트로피를 적용합니다. 소프트맥스는 확률의 합이 1이 되도록 범주끼리 경쟁시키므로 이런 경우에 맞지 않습니다.
분류에 MSE를 쓰지 않는 이유
확률과 정답의 차이를 제곱하는 MSE로도 분류 모델을 학습할 수 있을 것 같지만, 실제로는 교차 엔트로피가 훨씬 잘 학습됩니다. 그 이유는 크게 틀렸을 때의 기울기에 있습니다.
정답이 1인 데이터에서 모델의 로짓이 -5라서 시그모이드 출력이 약 0.0067이라고 하겠습니다. 거의 완전히 틀린 예측입니다. 이때 로짓에 대한 이진 교차 엔트로피의 기울기는 \(\hat{p} - y \approx -0.993\)으로, 크게 틀린 만큼 크게 고치라는 신호를 줍니다. 반면 MSE의 기울기는 \(2(\hat{p} - y) \cdot \hat{p}(1 - \hat{p}) \approx -0.013\)으로 거의 0입니다.
차이는 시그모이드의 미분 \(\hat{p}(1 - \hat{p})\)에서 나옵니다. 출력이 0이나 1 근처로 포화되면 이 값이 0에 가까워지는데, MSE의 기울기에는 이 항이 그대로 곱해집니다. 그래서 가장 크게 틀린 데이터에서 오히려 학습이 멈추는 역설이 생깁니다. 교차 엔트로피의 로그가 시그모이드의 지수 함수를 상쇄하면서 이 항이 사라지므로, 틀린 정도에 비례하는 기울기가 유지됩니다.
최대 가능도 추정(Maximum Likelihood Estimation)
MSE와 교차 엔트로피는 서로 다른 모양이지만, 사실 같은 원리에서 나옵니다. 그 원리는 최대 가능도 추정(Maximum Likelihood Estimation, MLE)입니다.
가능도(Likelihood)는 모델의 가중치가 주어졌을 때 실제로 관측된 데이터가 나올 확률입니다. 좋은 모델이라면 실제 데이터에 높은 확률을 주어야 하므로, 가능도를 최대로 만드는 가중치를 찾는 것이 학습의 목표가 됩니다. 데이터마다 확률을 곱하면 값이 너무 작아지므로 로그를 취해 합으로 바꾸고, 최소화 문제로 만들기 위해 부호를 뒤집으면 음의 로그 가능도(Negative Log-Likelihood)가 됩니다.
분류 모델이 범주의 확률을 출력한다고 보면, 관측된 정답의 확률은 정답 범주에 준 확률 \(\hat{p}_{\text{정답}}\)입니다. 이것의 음의 로그를 모든 데이터에 대해 더한 것이 바로 교차 엔트로피입니다. 회귀 모델의 예측 주변에 정규 분포 모양의 잡음이 있다고 가정하면, 같은 계산이 오차의 제곱합, 즉 MSE가 됩니다. 잡음이 라플라스 분포를 따른다고 가정하면 MAE가 나옵니다.
이 관점은 손실 함수를 고르는 기준을 줍니다. 데이터가 어떤 확률 분포를 따른다고 가정하는지에 따라 손실 함수가 정해지는 것입니다. 오차가 대체로 작고 대칭적으로 퍼져 있다면 MSE가, 가끔 큰 오차가 섞인다면 꼬리가 두꺼운 분포에 해당하는 MAE나 후버 손실이 적합합니다.
클래스 불균형
실제 분류 데이터는 범주별 개수가 고르지 않은 경우가 많습니다. 카드 거래 데이터에서 부정 거래는 1% 미만이고, 의료 영상에서 질병이 있는 사례는 정상보다 훨씬 적습니다. 이런 데이터로 그대로 학습하면 모델은 모든 거래를 정상이라고 답하는 것만으로도 99%의 정확도를 얻으므로, 정작 찾아야 할 소수 범주를 무시하게 됩니다.
가장 간단한 대응은 범주마다 손실에 가중치를 곱하는 것입니다. 소수 범주의 손실에 큰 가중치를 주면, 소수 범주 하나를 틀리는 것이 다수 범주 여러 개를 틀리는 것만큼 무겁게 반영됩니다. 가중치는 보통 범주 빈도의 역수에 비례하게 정합니다.
포컬 손실(Focal Loss)은 범주가 아니라 데이터의 난이도에 따라 가중치를 조절합니다. 2017년 린(Tsung-Yi Lin) 연구진이 물체 검출을 위해 제안한 방법으로, 교차 엔트로피에 \((1 - \hat{p})^{\gamma}\)를 곱합니다.
이미 잘 맞히는 데이터는 \(\hat{p}\)가 1에 가까워 앞의 항이 0에 가까워지므로 손실이 크게 줄어듭니다. \(\gamma = 2\)일 때 정답 확률이 0.9인 데이터의 손실은 교차 엔트로피의 0.105에서 약 0.001로 100분의 1이 되지만, 정답 확률이 0.1인 어려운 데이터는 2.303에서 약 1.865로 거의 그대로 유지됩니다. 수많은 쉬운 배경 데이터가 손실을 차지하지 못하게 하고, 어려운 데이터에 학습을 집중시키는 것입니다.
- Tip : 불균형 데이터에서는 정확도만 보면 모델의 성능을 잘못 판단하게 됩니다. 지도 학습에서 다룬 정밀도, 재현율, F1 점수처럼 소수 범주를 따로 평가하는 지표를 함께 확인해야 합니다.
레이블 스무딩(Label Smoothing)
교차 엔트로피는 정답 확률을 1에 가깝게 만들수록 손실이 줄어드므로, 모델은 로짓을 계속 키워 지나치게 확신하는 방향으로 학습됩니다. 그러나 데이터의 레이블에는 사람의 실수가 섞여 있고, 애매한 사례도 있습니다. 모든 레이블을 100% 확신하도록 학습하는 것은 과대적합의 한 형태입니다.
레이블 스무딩(Label Smoothing)은 정답 벡터를 조금 부드럽게 만들어 이 문제를 완화합니다. 범주가 세 개이고 스무딩 정도가 \(\varepsilon = 0.1\)이라면, 원-핫 정답 \([1, 0, 0]\) 대신 정답 범주에 약 0.933, 나머지 범주에 약 0.033을 준 \([0.933, 0.033, 0.033]\)을 목표로 학습합니다. 정답 범주의 확률을 1까지 끌어올려도 손실이 더 줄지 않으므로, 로짓이 무한히 커지는 것을 막고 모델의 확신 정도를 실제 정확도에 더 가깝게 만들어 줍니다.
손실 함수 정리
| 손실 함수 | 문제 유형 | 특징 | 주의점 |
|---|---|---|---|
| MSE | 회귀 | 큰 오차를 무겁게 반영, 부드러운 수렴 | 이상치에 민감 |
| MAE | 회귀 | 모든 오차를 같은 비율로 반영 | 정답 근처에서 수렴이 거침 |
| 후버 손실 | 회귀 | 작은 오차는 MSE, 큰 오차는 MAE처럼 동작 | 기준값 δ를 정해야 함 |
| 교차 엔트로피 | 다중 클래스 분류 | 확신하며 틀릴수록 큰 손실 | 로짓을 입력, 소프트맥스 중복 금지 |
| 이진 교차 엔트로피 | 이진 · 다중 레이블 분류 | 범주마다 독립적인 확률 | 시그모이드와 함께 사용 |
| 포컬 손실 | 불균형 분류 | 쉬운 데이터의 손실을 줄임 | 하이퍼파라미터 γ 조정 필요 |
| 레이블 스무딩 | 분류 | 과도한 확신을 억제 | 스무딩 정도 ε 조정 필요 |
손실 함수는 모델이 학습하는 동안 바라보는 유일한 목표입니다. 그러므로 손실 함수가 실제로 원하는 것과 어긋나 있으면, 모델은 손실을 잘 줄이면서도 쓸모없는 결과를 낼 수 있습니다. 소수 범주를 놓치는 분류 모델이나 이상치에 끌려간 회귀 모델은 모두 손실 함수의 선택에서 비롯된 문제입니다.
손실 함수를 고를 때는 먼저 문제의 유형으로 후보를 좁히고, 다음으로 데이터의 성질을 확인합니다. 회귀라면 오차의 분포에 이상치가 많은지, 분류라면 범주가 균형을 이루는지, 레이블에 잡음이 있는지를 보고 위의 변형들을 적용합니다.
- Tip : 학습 중에 기록하는 손실 값과 최종적으로 보고하는 평가 지표는 다를 수 있습니다. 손실은 미분이 가능해야 하므로 교차 엔트로피를 쓰지만, 성능 보고에는 정확도나 F1 점수를 쓰는 것이 일반적입니다. 손실이 줄었는데 평가 지표가 나아지지 않는다면 두 기준이 어긋난 것은 아닌지 확인해야 합니다.
- Writer by : 윤대희
댓글 남기기