모델을 잘 만드는 것만큼 중요한 것이 학습 설정입니다.
이번 포스트에서는 좋은 모델을 빠르게 만들기 위한 실전 팁들을 정리해보겠습니다.
1. Learning Rate (학습률)
학습률이란?
경사 하강법에서 W를 업데이트할 때 기울기를 얼마나 반영할지 결정하는 값입니다.
W := W - α * gradient
러닝레이트(α)와 기울기의 관계를 통해 최적의 모델 학습 값을 찾아내게 됩니다.
모델을 만들어가기 위한 설정값이기 때문에 하이퍼 파라미터 라고 부릅니다.
Good vs Bad Learning Rate
학습이 잘 되면 cost 값이 점점 떨어집니다.
하지만 러닝레이트를 잘못 설정하면 오히려 더 멀어질 수 있습니다.
러닝레이트가 너무 클 때 (Overshooting)
cost
↑
│ *
│ *
│ * *
│ * * ← 왔다갔다하다가 위로 올라가버린다
└──────────────────→ step
기울기 방향으로 너무 크게 이동해서 최솟값을 지나쳐버립니다.
결국 cost가 오히려 커지는 현상이 발생합니다.
러닝레이트가 너무 작을 때
cost
↑
│ *
│ *
│ *
│ * * * * * * ← 잘 내려가질 못한다
└──────────────────→ step
조금씩밖에 이동하지 못해 학습이 매우 느려집니다.
시간이 너무 오래 걸리거나 Local Minimum에 빠질 수 있습니다.
적절한 러닝레이트
cost
↑
│ *
│ *
│ *
│ *
│ * * * ← 빠르게 수렴
└──────────────────→ step
일반적으로 0.01 을 사용하거나, Adam 옵티마이저의 경우 0.0003 정도를 추천합니다.
Learning Rate Decay (러닝레이트 감소)
학습이 잘 되지 않을 때 의도적으로 러닝레이트를 줄여나가는 기법입니다.
처음엔 크게 이동하다가 점점 조금씩 세밀하게 조정하는 방식입니다.
대표적인 방법 3가지:
① Step Decay
- N번의 epoch마다 또는 validation loss가 개선되지 않을 때 러닝레이트를 낮춥니다
- 가장 직관적이고 많이 사용되는 방식
② Exponential Decay
α = α₀ * e^(-kt)
- 지수 함수적으로 감소
- k: 감소 속도를 조절하는 상수
③ 1/t Decay
α = α₀ / (1 + kt)
- 시간(step)이 지날수록 점점 작아짐
- 초반에는 빠르게, 후반에는 천천히 감소
2. 데이터 전처리 (Data Preprocessing)
Feature Scaling
데이터의 범위가 너무 크면 학습이 잘 되지 않습니다.
표준화(Standardization)
x_new = (x - 평균) / 표준편차
x값을 평균으로 뺀 것을 표준편차로 나눕니다.
결국 평균에서 얼마나 떨어졌는지 를 표현하는 것으로, 결과가 평균 0, 표준편차 1이 됩니다.
"이 데이터가 평균에서 얼마나 떨어져 있냐?" 를 나타내는 것입니다.
예를 들어 시험 점수 데이터가 있다면:
점수 : [60, 70, 80, 90, 100]
평균 : 80
표준편차 : 14.1
각 점수를 표준화하면:
60 → (60 - 80) / 14.1 = -1.4 (평균보다 많이 낮음)
70 → (70 - 80) / 14.1 = -0.7 (평균보다 조금 낮음)
80 → (80 - 80) / 14.1 = 0.0 (평균이랑 같음)
90 → (90 - 80) / 14.1 = 0.7 (평균보다 조금 높음)
100 → (100 - 80) / 14.1 = 1.4 (평균보다 많이 높음)
결과가 항상 0 근처 (-3 ~ 3) 로 모입니다.
정규화(Normalization)
x_new = (x - 최솟값) / (최댓값 - 최솟값)
실제 x값에서 최솟값을 뺀 것을, 최댓값과 최솟값의 차이로 나눕니다.
결과가 항상 0과 1 사이로 변환됩니다.
"이 데이터가 최솟값~최댓값 범위에서 어느 위치냐?" 를 0~1로 나타내는 것입니다.
같은 점수 데이터로 정규화하면:
최솟값 : 60
최댓값 : 100
60 → (60 - 60) / (100 - 60) = 0.0 (최솟값)
70 → (70 - 60) / (100 - 60) = 0.25
80 → (80 - 60) / (100 - 60) = 0.5 (딱 중간)
90 → (90 - 60) / (100 - 60) = 0.75
100 → (100 - 60) / (100 - 60) = 1.0 (최댓값)
결과가 항상 0 ~ 1 사이 로 나옵니다.
왜 필요한가? (핵심!)
x1, x2 두 특성이 있다고 가정하면:
x1 (나이) : 20, 30, 40
x2 (연봉) : 3000, 5000, 8000
스케일이 너무 다르면 연봉(x2)이 학습에 훨씬 큰 영향을 미쳐서 나이(x1)는 거의 무시됩니다. 전처리 후엔:
x1 (나이 정규화) : 0.0, 0.5, 1.0
x2 (연봉 정규화) : 0.0, 0.4, 1.0
두 특성이 같은 스케일로 학습에 균등하게 반영됩니다!
언제 뭘 쓸까?
- 정규화 → 데이터 범위가 명확할 때 (0~255 픽셀값, 0~100 점수)
- 표준화 → 이상치(너무 크거나 작은 값)가 있을 때 더 안전
| 표준화 | 정규화 | |
|---|---|---|
| 범위 | 제한 없음 (보통 -3 ~ 3) | 0 ~ 1 |
| 수식 | (x - 평균) / 표준편차 | (x - min) / (max - min) |
| 특징 | 이상치에 덜 민감 | 범위가 명확히 고정됨 |
노이즈 데이터 제거
학습에 의미없는 데이터는 제거하고, 의미있는 데이터만 남겨야 합니다.
예를 들어 아래 문장에서 피자를 주문하는 의도를 파악하려면:
"Will you order a pizza..??"
불필요한 단어들을 제거하고 핵심만 남깁니다:
"will you order a pizza" → "you order pizza"
노이즈 데이터가 많을수록 모델이 엉뚱한 패턴을 학습할 수 있기 때문에, 의미있는 데이터만 남기는 전처리 과정이 중요합니다.
정리
개념 설명 팁
| Learning Rate | 기울기를 얼마나 반영할지 결정 | 일반적으로 0.01, Adam은 0.0003 |
|---|---|---|
| Overshooting | 러닝레이트가 너무 커서 cost가 발산 | 러닝레이트를 줄인다 |
| Learning Rate Decay | 학습 중 러닝레이트를 점점 줄이는 기법 | Step / Exponential / 1/t Decay |
| 표준화 | 평균 0, 표준편차 1로 변환 | (x - 평균) / 표준편차 |
| 정규화 | 0~1 사이로 변환 | (x - min) / (max - min) |
| 노이즈 제거 | 의미없는 데이터 제거 | 핵심 데이터만 남긴다 |
좋은 모델을 만들려면 알고리즘만큼 데이터 전처리와 하이퍼파라미터 설정이 중요합니다.
'AI > ML' 카테고리의 다른 글
| XOR 문제와 Neural Network : 딥러닝의 시작 (0) | 2026.03.19 |
|---|---|
| Overfitting : 과적합 이해하고 해결하기 (0) | 2026.03.13 |
| Softmax Classifier : 실제 데이터로 동물 분류하기 (TensorFlow) (0) | 2026.03.11 |
| Softmax Classifier 코드로 구현해보기 (TensorFlow) (0) | 2026.03.11 |
| Softmax Classifier : 여러 클래스를 분류하기 (0) | 2026.03.10 |