C.W.K.
Stream
Lesson 03 of 08 · published

Loss 함수

~8 min · training

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

loss 는 네 목표를 정확히 적은 것

loss 는 학습이 minimize 하려고 존재하는 바로 그 숫자야 — '이 예측이 얼마나 틀렸나' 를 optimizer 가 쫓을 수 있는 scalar 하나로 바꿔줘. 잘못 고르면 model 은 충실하게 *엉뚱한 걸* 최적화해, 에러 한 번 안 내고. 그래서 loss 선택은 장식이 아니라 '내가 실제로 푸는 문제가 뭔지' 선언이야.

task 와 label 형식을 같이 보고 매칭해 — loss 매칭이 흔한 첫 버그거든:

LossTaskLabel 형식
CategoricalCrossentropymulti-class 분류one-hot: [0,0,1,0]
SparseCategoricalCrossentropymulti-class 분류정수: 2
BinaryCrossentropybinary / multi-label0 또는 1
MeanSquaredErrorregression연속값
Huberrobust regression연속값 (outlier 강함)

Sparse 냐 아니냐 — 다들 한 번씩 걸려. SparseCategoricalCrossentropy2 같은 정수 label, 그냥 CategoricalCrossentropy[0,0,1,0] 같은 one-hot. 서로 반대 형식 넣으면 잘 돼야 shape 에러, 못 되면 gradient 가 조용히 틀려. regression 은 outlier 있으면 plain MSE 말고 Huber — 0 근처에선 MSE 처럼, 꼬리에선 MAE 처럼 굴어서 튀는 몇 개가 gradient 를 지배 못 해.

from_logits=True — 공짜 안정성

마지막 layer 가 softmax/sigmoid 없이 raw score 를 내면 from_logits=True 써. activation 먹이고 loss 거는 거랑 수학적으로 동일하지만 Keras 가 둘을 합쳐 numerical 하게 안정적인 연산 하나로 만들어 — 중간 probability underflow 가 없어. Code 섹션에 두 형태 있고, Option B 가 기본값으로 삼을 쪽이야.

Code

softmax loss vs from_logits=True·python
# Option A: softmax output + standard loss
model.compile(loss="sparse_categorical_crossentropy")

# Option B (preferred): no output activation + from_logits
model.compile(
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True)
)

External links

Exercise

MNIST 두 방식으로 학습 — (a) softmax + sparse_categorical_crossentropy, (b) softmax 없이 + crossentropy(from_logits=True). loss 값과 최종 정확도 비교.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.