- Published on
모델이 틀렸을 때 어떻게 고치는가 — 손실 함수, 소프트맥스, 경사하강법
- Authors

- Name
- 이다은
배운다는 건 결국 틀렸을 때 고친다는 뜻입니다.
처음부터 정답을 맞히는 모델은 없습니다.
틀리고, 얼마나 틀렸는지 측정하고, 조금씩 수정하는 과정을 수백만 번 반복하면서 점점 나아집니다.
학습의 순환 구조
모델 학습은 아래 4단계를 반복합니다.
① 데이터 입력 → 텍스트나 이미지를 숫자로 변환해 모델에 넣기
② 예측 → 현재 가중치로 정답 추정
③ 오류 측정 → 손실 함수로 얼마나 틀렸는지 점수화
④ 개선 → 경사하강법으로 가중치 업데이트
이 과정에서 핵심적인 역할을 하는 세 가지가 있습니다. 소프트맥스, 손실 함수, 경사하강법입니다.
소프트맥스 (Softmax)
왜 점수를 확률로 바꾸나?
모델은 예측 결과로 클래스별 점수(logit)를 먼저 만들어냅니다.
클래스별 점수:
1점: 4.2
2점: 1.1
3점: 2.5
4점: 0.8
5점: 3.0
"4.2가 높긴 한데... 얼마나 확실한 거지?"
숫자만 보면 직관적으로 비교하기가 어렵습니다. 소프트맥스는 이 점수들을 합이 1인 확률로 변환합니다.
변환 후:
1점: 62%
2점: 5%
3점: 18%
4점: 3%
5점: 12%
"1점일 확률이 62%구나!" ✅
어떻게 변환하는가?
점수: [2.0, 1.0, 0.1]
① 지수 함수(e^x) 적용 — 항상 양수, 차이가 클수록 비율이 크게 벌어짐
[e^2.0, e^1.0, e^0.1] = [7.39, 2.72, 1.11]
② 합계로 나누기 — 합이 1인 확률 분포 완성
합계 = 11.22
[7.39/11.22, 2.72/11.22, 1.11/11.22]
= [0.66, 0.24, 0.10] ← 합 = 1.0 ✔️
점수가 조금만 높아도 확률 차이가 크게 벌어지는 게 포인트입니다.
모델이 "이쪽이 맞을 것 같다"는 확신을 강하게 표현할 수 있게 해줍니다.
손실 함수 (Loss Function)
모델이 얼마나 틀렸는지 채점하는 도구
손실 함수는 예측이 정답과 얼마나 다른지를 하나의 숫자로 알려주는 채점표입니다.
- 정답에 가까운 예측 → 작은 손실
- 정답에서 먼 예측 → 큰 손실
단순히 맞았냐/틀렸냐가 아니라, 얼마나 확신했는지까지 반영합니다.
실제 정답: 4점
모델 A → 4점에 90% 확률 부여 → 손실 매우 작음 (거의 확신)
모델 B → 4점에 20% 확률 부여 → 손실 큼 (거의 못 맞힘)
왜 정확도(Accuracy)로는 부족할까?
정확도는 "맞으면 1, 틀리면 0"으로 끊어집니다.
실제 정답: 4점
모델 A → [0.12, 0.18, 0.38, 0.22, 0.10] → 예측: 3점 → 틀림 (정확도 0)
모델 B → [0.04, 0.08, 0.10, 0.60, 0.18] → 예측: 4점 → 맞음 (정확도 1)
모델 C → [0.05, 0.08, 0.15, 0.12, 0.60] → 예측: 5점 → 틀림 (정확도 0)
정확도로 보면 A와 C는 똑같이 "틀림"이지만, 실제로는 다릅니다.
A는 4점에 22%를 줬고, C는 4점에 12%만 줬습니다.
C가 더 많이 틀린 것인데, 정확도는 이 차이를 전혀 반영하지 못합니다.
교차 엔트로피(Cross Entropy) 손실 함수를 쓰면:
모델 A → -log(0.22) ≈ 1.51
모델 C → -log(0.12) ≈ 2.12 ← C가 더 틀렸다는 걸 수치로 표현
정확도는 계단 형태라 모델이 조금 나아져도 숫자가 바뀌지 않습니다.
손실 함수는 부드러운 곡선 형태라 조금만 나아져도 변화를 감지하고 학습 방향을 계산할 수 있습니다.
경사하강법 (Gradient Descent)
손실이 줄어드는 방향으로 가중치를 조정하는 알고리즘
언덕 위에 놓인 공이 가장 낮은 곳으로 굴러가는 것과 같습니다.
모델의 가중치가 공의 위치, 손실이 공의 높이입니다. 가장 낮은 곳(손실이 최소인 지점)을 찾아가는 과정이 학습입니다.
그래디언트란?
각 가중치를 조금 바꿨을 때 손실이 얼마나 변하는지를 나타낸 방향 벡터입니다.
그래디언트가 (0.3, -0.2)일 때:
w₁ → 올리면 손실이 +0.3 증가 → 낮춰야 함
w₂ → 올리면 손실이 -0.2 감소 → 올려야 함
그래디언트는 손실이 커지는 방향을 가리킵니다. 그래서 그 반대 방향으로 이동하면 손실이 줄어듭니다.
가중치 업데이트 수식
θ_new = θ - α × ∇L(θ)
θ : 현재 가중치
α : 학습률 (한 번에 얼마나 이동할지)
∇L(θ) : 그래디언트 (손실이 커지는 방향)
학습률(α)이 중요한 이유
학습률이 너무 작으면 → 언덕을 조금씩만 내려가 학습이 매우 느림
학습률이 너무 크면 → 최솟값을 지나쳐 튕겨나감
| 학습률 | 결과 |
|---|---|
| 너무 작음 | 학습이 매우 느림, 시간 낭비 |
| 적당함 | 안정적으로 최솟값에 수렴 |
| 너무 큼 | 최솟값을 지나쳐 발산 |
가중치와 바이어스
가중치 (Weight)
"이 단어가 나오면 해당 클래스를 얼마나 올리거나 깎는가"를 숫자로 표현한 값입니다.
z_k = Σ (x_j × w_kj)
x_j : 단어의 빈도
w_kj : 해당 단어가 k 클래스에 미치는 영향
z_k : k 클래스의 점수
수천 번 학습을 반복하면 자연스럽게 이런 구조가 형성됩니다.
"최악", "별로" → 1점 클래스 가중치 높아짐
"좋아요", "추천" → 5점 클래스 가중치 높아짐
바이어스 (Bias)
단어를 읽기 전부터 각 클래스가 갖는 기본 출발 점수입니다.
z_k = b_k + Σ (x_j × w_kj)
특정 별점 리뷰가 데이터에 훨씬 많으면, 그 클래스는 시작부터 약간 유리합니다. 바이어스는 이 불균형을 반영합니다.
