최적화 기초: 경사 하강법 · 볼록성 · 라그랑주 승수
경사 하강과 학습률 · 볼록성 · 안장점 · SGD와 미니배치 · 뉴턴법 · 라그랑주 승수를 숫자로 익히는 최적화 기초
먼저 알아야 할 것
다루는 내용
학습을 수학적으로 보면 최적화입니다. 이차 함수로 학습률에 따른 수렴 · 진동 · 발산과 수렴 조건 η < 2/곡률을 확인하고, 볼록 함수의 정의 · 젠센 부등식 · 지역=전역 최솟값 성질과 볼록하지 않은 함수의 여러 골짜기 · 안장점을 비교합니다. 미니배치 크기와 기울기 잡음의 관계를 실험으로 보이고, 뉴턴법과 라그랑주 승수 · KKT · 정규화와의 연결까지 다룹니다.
해설
최적화 기초: 경사 하강법 · 볼록성 · 라그랑주 승수
머신러닝의 "학습"은 수학적으로는 최적화, 즉 손실 함수를 가장 작게 만드는 파라미터 찾기입니다. 이 수업은 경사 하강법이 학습률에 따라 어떻게 수렴 · 진동 · 발산하는지, 볼록 함수에서는 왜 안심할 수 있고 신경망처럼 볼록하지 않은 함수에서는 무엇을 조심해야 하는지, 확률적 경사 하강(SGD)과 미니배치가 왜 쓰이는지, 제약이 있을 때 라그랑주 승수로 푸는 법을 작은 숫자로 계산합니다.
| 항목 | 내용 |
|---|---|
| 참고 자료 | Dive into Deep Learning 12.2절 'Convexity' · d2l.ai/chapter_optimization/convexity.html, 같은 책 12장의 경사 하강 · SGD · 미니배치 절 |
| 트랙 · 수준 | 수학 · 중급 |
| 이 수업의 범위 | 최적화 문제의 꼴, 경사 하강과 학습률(수렴 조건), 볼록 집합 · 볼록 함수, 젠센 부등식, 지역 최솟값 = 전역 최솟값, 2차 미분 판정, 볼록하지 않은 함수 · 안장점, 확률적 경사 하강 · 미니배치 · 에포크, 뉴턴법, 등식 제약과 라그랑주 승수, 벌점 · 투영 |
| 먼저 알면 좋은 것 | 미분 최소한의 기울기 · 헤세 행렬, 선형대수 2의 고유값 |
들어가기 전에
- 미분 최소한: 도함수 · 편미분 · 기울기 · 연쇄 법칙 — 기울기를 구하고 그 반대 방향으로 한 걸음 가는 법을 알고 오면 됩니다.
한눈에 보기
- 경사 하강법에서 학습률이 너무 작으면 느리고, 너무 크면 진동 · 발산한다는 것을 숫자로 확인합니다.
- 볼록 함수는 지역 최솟값이 곧 전역 최솟값이라 "내려가기만 하면 된다"는 것을 압니다.
- 신경망 손실처럼 볼록하지 않은 함수에서는 시작점에 따라 다른 골짜기에 빠질 수 있음을 봅니다.
- SGD · 미니배치가 기울기를 "싸고 시끄럽게" 어림하는 방법이며, 배치 크기와 잡음의 관계를 압니다.
- 제약 조건이 있는 최적화를 라그랑주 승수로 풀고, 정규화 · SVM과의 연결을 압니다.
1. 최적화 문제의 꼴
| 기호 | 뜻 |
|---|---|
| 파라미터 벡터 | |
| 전체 손실 — 예제별 손실 의 평균 | |
| 값을 가장 작게 만드는 "입력" |
왜 "평균"인가: 손실이 예제별 손실의 평균이라는 구조 덕분에, 일부 예제만 뽑아 평균을 내도 전체 기울기를 어림할 수 있습니다. 이것이 5절의 SGD를 가능하게 합니다. 단, 최적화와 학습은 목표가 조금 다릅니다. 최적화는 학습 데이터의 손실을 줄이는 것이 목표지만, 학습은 새 데이터에서 잘 맞는 것이 목표입니다. 이 차이는 모델 평가와 과적합에서 다룹니다.
2. 경사 하강법과 학습률
직관(해설용 비유): 안개 낀 산에서 골짜기로 내려가려면, 발밑의 경사를 느끼고 내리막 쪽으로 한 걸음씩 갑니다. 보폭(학습률)이 너무 작으면 해가 지도록 못 내려가고, 너무 크면 골짜기를 건너뛰어 맞은편 비탈로 갔다가 다시 넘어오기를 반복합니다.
숫자로 해 보기(해설용, 파이썬으로 실행): , , 시작 . 최솟값은 입니다.
| 학습률 | 결과 | |
|---|---|---|
| 0.1 | 0.6, 1.08, 1.464, 1.771, 2.017 | 천천히 수렴 |
| 0.5 | 3, 3, 3, 3, 3 | 한 번에 도착 |
| 1.0 | 6, 0, 6, 0, 6 | 영원히 진동 |
| 1.1 | 6.6, −1.32, 8.18, −3.22, 10.47 | 발산 |
왜 이런 일이 생기나: 이 함수에서 한 걸음은 입니다. 최솟값까지의 거리에 매번 를 곱하는 셈이라
- , 즉 이면 거리가 줄어 수렴하고,
- 이면 을 곱해 한 번에 도착하고,
- 이면 을 곱해 진동, 이면 거리가 커져 발산합니다.
일반적으로 곡률(2차 미분, 다차원에서는 헤세 행렬의 가장 큰 고유값)이 인 이차 함수에서 경사 하강이 수렴하려면 여야 합니다. 방향마다 곡률이 다르면 가장 가파른 방향이 학습률의 상한을 정하고, 완만한 방향은 그 학습률로는 느리게 움직입니다. 이 "곡률 차이" 문제를 모멘텀 · Adam이 줄여 줍니다(옵티마이저와 학습률 스케줄).
3. 볼록성: 내려가기만 하면 되는 함수
직관: 그릇처럼 생긴 함수는 어디서 출발하든 내려가면 바닥 하나에 닿습니다. 이런 함수가 볼록 함수(convex function)입니다. 그래프 위 아무 두 점을 이은 선분이 항상 그래프 위쪽(또는 위)에 놓입니다.
| 기호 | 뜻 |
|---|---|
| 와 사이의 한 점 | |
| 왼쪽 | 그 점에서의 함수값 (그래프) |
| 오른쪽 | 두 끝점을 이은 선분의 높이 |
숫자로 해 보기(해설용): , , , 이면 가운데 점은 , 이고 선분 높이는 입니다. ✓. 이 부등식을 확률로 일반화한 것이 젠센 부등식(Jensen's inequality) 이고, 변분 오토인코더의 ELBO 유도에 쓰입니다.
볼록 함수의 좋은 성질
- 지역 최솟값 = 전역 최솟값. 주변보다 낮은 곳을 찾으면 그곳이 전체에서 가장 낮습니다.
- 2차 미분 판정: 한 변수면 , 여러 변수면 헤세 행렬이 양의 준정부호(고유값이 모두 0 이상)이면 볼록입니다.
- 볼록 함수의 합 · 양수배도 볼록이라, "볼록 손실 + L2 정규화"도 볼록입니다.
| 함수 | 볼록? | 머신러닝에서 |
|---|---|---|
| , | 예 | 제곱 오차, L2 정규화 |
| , | 예 (꺾인 점 있음) | L1 정규화 |
| , | 예 | 로그 손실의 재료 |
| 선형 회귀의 MSE | 예 | 정규방정식으로 바로 풀림 |
| 로지스틱 회귀의 로그 손실 | 예 | 경사 하강이 전역 최솟값으로 감 |
| 신경망의 손실 | 아니요 | 여러 골짜기 · 안장점 |
4. 볼록하지 않은 함수: 골짜기가 여럿
숫자로 해 보기(해설용, 파이썬으로 실행): 에 학습률 0.01로 200걸음 경사 하강을 합니다.
| 시작점 | 도착점 | |
|---|---|---|
| (전역 최솟값) | ||
| (지역 최솟값) | ||
| (지역 최솟값) |
같은 알고리즘이 시작점에 따라 다른 골짜기에 멈춥니다. 오른쪽 골짜기에서는 기울기가 0이라 더 나아갈 이유가 없습니다.
안장점(saddle point): 의 원점은 기울기가 0이지만 방향으로는 바닥, 방향으로는 꼭대기입니다. 헤세 행렬 의 고유값 부호가 섞여 있으면 안장점입니다. D2L 12.1절은 차원이 높으면 기울기 0인 점에서 헤세 고유값 중 일부가 음수일 가능성이 매우 커서, 안장점이 지역 최솟값보다 더 흔하다고 설명합니다. SGD의 잡음과 모멘텀이 이런 곳을 빠져나오는 데 도움이 됩니다.
그런데도 신경망 학습이 되는 이유: 볼록하지 않아 전역 최솟값을 보장할 수는 없지만, 실무에서는 좋은 초기화(초기화 · 정규화 · 규제), 적절한 학습률 스케줄, 충분히 큰 모델로 "충분히 좋은" 지점을 꾸준히 찾습니다. 목표는 가장 낮은 점이 아니라 새 데이터에서 잘 맞는 점입니다.
5. 확률적 경사 하강과 미니배치
직관(해설용 비유): 전교생 1만 명의 평균 키를 알고 싶을 때 매번 모두를 재는 대신 무작위로 100명만 재도 꽤 정확합니다. 손실의 기울기도 예제별 기울기의 평균이므로, 일부만 뽑아 평균을 내면 "싸지만 약간 시끄러운" 어림값이 됩니다.
| 용어 | 뜻 |
|---|---|
| 배치 경사 하강 | 매 걸음 전체 데이터의 기울기 — 정확하지만 비쌈 |
| 확률적 경사 하강(SGD) | 매 걸음 예제 1개 — 싸지만 잡음이 큼 |
| 미니배치 SGD | 매 걸음 예제 개(보통 수십~수천) — 실무 표준 |
| 에포크(epoch) | 학습 데이터를 한 바퀴 다 쓰는 단위 |
| 반복(iteration, step) | 파라미터를 한 번 갱신하는 단위 |
숫자로 해 보기(해설용, 파이썬으로 실행): 예제 1,000개인 선형 회귀에서 일 때 전체 기울기는 입니다. 미니배치 크기별로 2,000번 뽑아 기울기 어림값의 평균과 흔들림(표준편차)을 쟀습니다(무작위로 만든 데이터에서 한 번 잰 예시값이라, 데이터 · 시드에 따라 소수점 아래 값은 달라집니다).
| 배치 크기 | 어림값 평균 | 표준편차 |
|---|---|---|
| 1 | −5.47 | 8.20 |
| 10 | −5.87 | 2.95 |
| 100 | −5.83 | 0.89 |
평균은 모두 전체 기울기 근처(편향 없음)이고, 흔들림은 배치를 10배 키울 때마다 대략 배로 줄었습니다. 배치를 키우면 정확해지지만 계산도 그만큼 늘어나므로, GPU 메모리와 속도에 맞춰 고릅니다.
계산해 보기: 학습 데이터 50,000개, 배치 128이면 한 에포크는 걸음입니다.
왜 미니배치가 표준인가: ① 전체 기울기를 기다리지 않고 자주 갱신해 같은 시간에 더 멀리 갑니다. ② GPU는 수십~수백 개 예제를 한꺼번에 계산할 때 효율이 좋습니다. ③ 적당한 잡음이 안장점 · 날카로운 골짜기를 피하는 데 도움이 되기도 합니다.
flowchart LR
A[학습 데이터 섞기] --> B[미니배치 B개 뽑기]
B --> C[순전파: 예측 · 손실]
C --> D[역전파: 기울기 g_B]
D --> E[θ ← θ − η g_B]
E --> F{에포크 끝?}
F -- 아니요 --> B
F -- 예 --> G[검증 손실 확인 · 학습률 조정]
G --> A6. 뉴턴법: 곡률까지 쓰기
직관: 경사 하강은 기울기(1차 정보)만 씁니다. 뉴턴법(Newton's method)은 곡률(2차 정보)까지 써서 "이 지점에서 함수를 포물선으로 어림했을 때의 바닥"으로 단숨에 갑니다.
숫자로 해 보기(해설용): 에서 이면 , , — 이차 함수는 한 번에 끝납니다. 하지만 파라미터가 개면 헤세 행렬이 라 딥러닝(가 수백만 이상)에서는 그대로 쓰기 어렵습니다. Adam 같은 방법은 곡률을 값싸게 어림하는 방향으로 이 아이디어를 빌려 씁니다.
7. 제약이 있는 최적화: 라그랑주 승수
직관(해설용 비유): 산에서 가장 낮은 곳을 찾되 "정해진 등산로 위에서만" 움직여야 한다고 합시다. 등산로 위의 가장 낮은 점에서는 등산로가 그 점의 등고선에 딱 스치듯 닿습니다. 이때 함수의 기울기와 제약의 기울기가 같은 방향(평행)이 됩니다.
라그랑주 함수 의 모든 편미분을 0으로 놓은 것과 같습니다.
| 기호 | 뜻 |
|---|---|
| 등식 제약 (등산로) | |
| 라그랑주 승수 — 두 기울기의 비율, 제약을 조금 풀 때 최솟값이 바뀌는 비율 |
숫자로 해 보기(해설용): 위에서 (원점까지 거리의 제곱)을 최소로 합니다.
- ,
- , →
- 제약 → ,
- 최솟값
검산: 제약 위의 다른 점 은 , 은 로 모두 0.5보다 큽니다.
머신러닝과의 연결
- 정규화 = 제약: "을 지키며 손실 최소화"는 라그랑주 승수를 통해 "손실 최소화"와 연결됩니다. 릿지 회귀 · 가중치 감쇠의 다른 얼굴입니다.
- 부등식 제약과 KKT 조건: 제약이 이면 카루시-쿤-터커(KKT) 조건으로 일반화합니다. 서포트 벡터 머신의 쌍대 문제와 서포트 벡터가 여기서 나옵니다.
- 최대 엔트로피: "확률의 합 = 1" 제약 아래 엔트로피를 최대로 하면 균등 분포가 나오는 것도 같은 방법으로 보입니다.
D2L 12.2절은 제약을 다루는 세 방법으로 라그랑주 함수, 벌점(penalty), 투영(projection)을 소개합니다. 벌점은 제약 위반에 비용을 매겨 손실에 더하는 방식, 투영은 한 걸음 간 뒤 허용 영역 안의 가장 가까운 점으로 되돌리는 방식입니다(예: 기울기 클리핑).
연습 문제
1. 에서 경사 하강이 수렴하는 학습률 범위는?
풀이: 이므로 , → 입니다. 이면 한 번에 도착합니다.
2. 은 볼록인가요?
풀이: 는 에서 음수이므로 전체 실수에서 볼록이 아닙니다(에서만 볼록).
3. 학습 데이터 12,000개, 배치 크기 64로 10 에포크 학습하면 파라미터 갱신은 몇 번인가요?
풀이: 한 에포크 걸음(마지막 배치는 32개), 10 에포크면 1,880번입니다.
4. 위에서 의 최솟값은?
풀이: → , → , , 최솟값 , 입니다.
스스로 점검
- 학습 손실이 줄지 않고 계속 커지거나
nan이 나면 가장 먼저 의심할 것은?- 답: 학습률이 너무 큰 경우입니다. 2절처럼 곡률에 비해 걸음이 크면 진동하다 발산합니다. 학습률을 줄이거나 웜업을 써 봅니다.
- 로지스틱 회귀는 경사 하강으로 전역 최솟값을 찾을 수 있는데 신경망은 왜 보장이 없나요?
- 답: 로지스틱 회귀의 손실은 볼록이라 지역 최솟값이 곧 전역 최솟값이지만, 신경망 손실은 볼록하지 않아 골짜기와 안장점이 여럿이기 때문입니다.
- 미니배치를 키우면 무엇이 좋아지고 무엇이 나빠지나요?
- 답: 기울기 어림의 잡음이 줄어 걸음이 안정되지만, 한 걸음의 계산과 메모리가 늘고 한 에포크당 갱신 횟수가 줄어듭니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 최적화(optimization) | 함수를 가장 작게(크게) 만드는 입력 찾기 |
| 학습률(learning rate) | 경사 하강 한 걸음의 크기 |
| 수렴 · 진동 · 발산 | 최솟값에 가까워짐 · 왔다 갔다 함 · 점점 멀어짐 |
| 볼록 함수(convex function) | 두 점을 이은 선분이 그래프 위에 있는 그릇 모양 함수 |
| 젠센 부등식(Jensen's inequality) | 볼록 함수에서 |
| 지역 · 전역 최솟값 | 주변에서 가장 낮은 점 · 전체에서 가장 낮은 점 |
| 안장점(saddle point) | 기울기 0이지만 어떤 방향은 오르막, 어떤 방향은 내리막인 점 |
| 확률적 경사 하강(SGD) | 일부 예제의 기울기로 전체 기울기를 어림해 갱신 |
| 미니배치(mini-batch) | 한 번 갱신에 쓰는 예제 묶음 |
| 에포크(epoch) | 학습 데이터 한 바퀴 |
| 뉴턴법(Newton's method) | 곡률까지 써서 포물선의 바닥으로 가는 방법 |
| 라그랑주 승수(Lagrange multiplier) | 제약 최적화에서 두 기울기의 비율 |
| KKT 조건 | 부등식 제약까지 다루는 최적 조건 |
더 깊이 보려면
D2L 12장 '최적화 알고리즘'은 최적화와 딥러닝의 관계, 볼록성(12.2절: 볼록 집합 · 볼록 함수 · 젠센 부등식, 지역 최솟값 = 전역 최솟값, 2차 미분 판정, 라그랑주 · 벌점 · 투영), 경사 하강, SGD, 미니배치 SGD, 모멘텀, Adagrad, RMSProp, Adadelta, Adam, 학습률 스케줄링을 차례로 다룹니다. 더 엄밀한 내용은 머신러닝을 위한 수학의 7장(Continuous Optimization)이 제약 최적화 · 라그랑주 쌍대 · 볼록 최적화를 정리합니다.
다음에 볼 것
- 확률과 통계 최소한: 기댓값 · 분산 · 조건부 확률 · 베이즈 정리 — SGD의 "기댓값이 같다" · "분산이 줄어든다"를 확률 언어로 다시 봅니다.
- 최대우도 추정과 MAP: 손실 함수는 어디서 오나 — 오늘 최소화한 손실 함수가 확률 모델에서 어떻게 나오는지 봅니다.
라이선스
이 글은 원문 번역이 아니라 KAITABASE가 직접 쓴 해설이며, 숫자 예는 모두 설명용으로 만들고 파이썬으로 다시 계산해 확인했습니다. 참고 자료 D2L은 CC BY-SA 4.0으로 공개되어 있습니다.
출처
- 참고: d2l.ai/chapter_optimization/convexity.html (D2L 12.2 Convexity)
- 참고: d2l.ai/chapter_optimization/index.html (D2L 12장 Optimization Algorithms)
- 참고: mml-book.github.io (Mathematics for Machine Learning, 7장 Continuous Optimization)
AI 원리부터 이해하기 · 수학 모듈
수학 모듈 학습
이 글은 수학 모듈의 학습 자료입니다. 전체 9개 자료 중 4번째입니다.
출처·원문
원문 보기요약만