오늘 끝나면
활성화 · 손실 · 옵티마이저
- ✓활성화 · 손실 · 옵티마이저의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 활성화이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
Sigmoid→ReLU, SGD→Adam — 학습을 ‘되게’ 만든 진화사 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
AI · Day 3 / 지도학습 · 생성 DL
활성화·손실
옵티마이저
층 쌓는 법은 어제 함. 이제 셋 남음. 망에 비선형 넣기 / 틀린 정도를 숫자 하나로 재기 / 그 숫자 보고 어디로 얼마나 갈지 정하기. 이 셋이 학습 엔진임.
왜 비선형이 필요했나
질문 하나. "층 100개 쌓으면 표현력 100배임?"
답은 아님. 활성화 없이 선형 층만 쌓으면 W2(W1x)는 결국 (W2 W1)x로 합쳐짐. 행렬 하나임. 100층이 1층으로 무너짐. 그래서 망은 직선밖에 못 그림.
왜 그럼? 선형끼리 합성하면 또 선형이라 그럼. 곡선 그리려면 중간에 구부리는 장치가 필요함. 그게 활성화 함수임. 층마다 비선형 한 번 끼움. 그제서야 망이 곡면을 휘어 임의 함수를 흉내 냄.
핵심은 한 줄. 활성화 없으면 100층도 1층임 / 비선형 끼워야 깊이가 표현력이 됨.
활성화 없는 적층은 한 층으로 붕괴됨 — 곡선 그리려면 중간에 비선형 한 번.
활성화 — Sigmoid에서 ReLU로
2010년 전엔 sigmoid 썼음. 부드럽고 0과 1 사이로 눌러주니까. 근데 깊어지니 학습이 멈춤.
이유는 기울기임. sigmoid 도함수 최댓값이 0.25임. 역전파에서 층마다 이걸 곱함. 10층이면 0.25^10, 약 9.5e-7임. 입력층 기울기가 사실상 0 됨. 이게 기울기 소실임.
돌파구는 어이없게 단순함. ReLU임. 음수면 0, 양수면 그대로. 도함수가 0 아니면 1이라 양수 구간에선 곱해도 안 줄음. 그래서 소실이 안 생김.
변형도 있음. LeakyReLU는 음수도 살짝 흘리는 것 / GELU는 부드러운 버전, 트랜스포머 표준임.
Q. 출력층엔 어떤 활성화 씀?
이진 분류는 sigmoid — 확률 하나. 다중 분류는 softmax — 합이 1인 확률 분포. 회귀는 보통 안 씀 — 실수 그대로. 은닉층 ReLU랑 출력층 활성화는 역할이 다름.손실 — 틀린 정도를 숫자 하나로
학습은 결국 "틀린 정도" 줄이기 게임임. 그 정도를 숫자 하나로 압축한 게 손실 함수임.
회귀는 MSE(평균제곱오차) — 예측과 정답 차이를 제곱해 평균 낸 것. 분류는 Cross-Entropy — 정답 클래스에 매긴 확률의 로그에 마이너스 붙인 것. 0.99로 맞히면 손실 거의 0 / 0.01로 헛다리 짚으면 손실 폭발함.
왜 분류에 MSE 안 씀? Cross-Entropy는 softmax랑 만나면 기울기가 (예측 − 정답)으로 깔끔히 떨어짐. 틀릴수록 더 세게 밂. MSE는 확률이 극단 가면 기울기가 죽어 학습이 굼떠짐. 손실은 옵티마이저에게 주는 나침반임.
파이썬 코드 보기
import torch.nn as nn # 회귀: 평균제곱오차 mse = nn.MSELoss() # 다중 분류: softmax + 로그 + NLL 한 번에 ce = nn.CrossEntropyLoss() # 입력은 raw logits, 타깃은 정수 라벨 loss = ce(logits, labels) loss.backward() # 여기서 (예측 - 정답) 기울기가 흐른다
틀린 정답 확률(왼쪽)에서 Cross-Entropy는 손실이 폭발함 — 더 세게 밂.
옵티마이저 — 어느 방향으로 얼마나
손실이 나침반이면, 옵티마이저는 그 나침반 보고 실제로 걷는 다리임.
기본은 SGD임. 기울기 반대 방향으로 learning rate만큼 한 발. 단순함. 근데 골짜기에서 좌우로 출렁여 느림. 그래서 Momentum 나옴. 이전 속도를 일부 이어받아 관성으로 미끄러짐. 출렁임 줄고 빨라짐.
지금 표준은 Adam임. 파라미터마다 기울기 평균(1차)과 분산(2차)을 추적함. 그걸로 보폭을 자동 조절함. 자주 흔들리는 축은 작게, 잠잠한 축은 크게. 가중치 감쇠를 제대로 분리한 AdamW가 트랜스포머 학습의 사실상 디폴트임.
하나만 기억. learning rate 너무 크면 발산, 너무 작으면 평생 못 내려옴. 학습 안 되면 옵티마이저 바꾸기 전에 lr부터 의심함.
비즈니스 — 학습 속도는 돈이다
이 셋은 학문적 디테일이 아님. 실험 비용을 좌우하는 레버임.
흔한 장면임. 한 팀이 sigmoid + SGD로 한 번 학습에 GPU를 하루씩 태움. 은닉층을 ReLU로, 옵티마이저를 AdamW로 바꿈. 같은 모델이 몇 시간에 수렴함. 같은 기간에 실험 몇 배 더 돌림. 최종 성능도 올라감.
엔지니어 시간은 대부분 수렴 기다리는 시간임. 활성화·손실·옵티마이저 조합만 맞춰도 그 시간이 줄음. 가장 값싼 레버리지임. 비싼 GPU 더 사기 전에 이 세 칸부터 점검할 것.
Q. 분류 모델인데 학습이 처음부터 NaN 뜸. 어디부터 봄?
셋부터 봄. learning rate 너무 큰지 — 발산. 출력층 softmax에 CrossEntropyLoss(이미 softmax 포함)까지 먹여 이중 적용했는지. log(0) 나는 입력 없는지. 대개 lr 10배 낮추거나 loss 입력을 raw logits로 바꾸면 잡힘.| 상황 | 손실 | 출력 활성화 |
|---|---|---|
| 회귀 | MSE | 없음 |
| 이진 분류 | BCE | sigmoid |
| 다중 분류 | Cross-Ent | softmax |
은닉층 활성화: ReLU(기본) / GELU(트랜스포머). 옵티마이저: AdamW(기본), lr부터 의심.