80. 경사 하강법 (GD, Gradient Descent)
⚠️ 이 문서는 딥러닝 모델이 눈을 가린 채로 어떻게 수백만 개의 가중치(Weight)를 조절하여 오차가 가장 적은 최적의 상태를 찾아가는지를 수학적으로 구현한 인공지능 최적화의 가장 근본적이고 위대한 알고리즘, 경사 하강법을 다룹니다.
핵심 인사이트 (3줄 요약)
- 본질: 모델의 예측이 얼마나 틀렸는지 나타내는 손실 함수(Loss Function) 그래프의 산비탈에서, 현재 서 있는 위치의 기울기(미분값)를 구한 뒤 그 경사가 아래로 향하는 반대 방향으로 한 발짝씩 내려가 가장 낮은 골짜기 밑바닥(오차 최소점)을 찾는 탐색 방법이다.
- 가치: 수십억 개의 변수(가중치)가 조합해 낼 수 있는 무한대에 가까운 경우의 수를 컴퓨터가 일일이 계산해 보지 않고도, 오직 '현재 내 발끝의 기울기' 정보 하나만으로 가장 오차가 적은 지름길로 하산할 수 있게 해 준다.
- 기술 체계: 한 번에 얼만큼의 보폭으로 내려갈지 결정하는 학습률(Learning Rate) 설정이 생명이며, 데이터를 처리하는 덩어리에 따라 BGD(전체), SGD(1개씩), 미니배치 SGD(수십 개씩 쪼개기) 방식으로 진화했다.
Ⅰ. 눈을 가리고 산을 내려가는 수학적 원리
기계는 지형 전체를 조망할 눈이 없으므로 발바닥의 감각(미분)에만 의존한다.
- 지형의 형태 (손실 함수 그래프):
- x축이 가중치($W$), y축이 오차(Loss)라고 상상하자. 그래프는 둥근 밥그릇(U자) 모양의 포물선 곡선을 그린다. 밥그릇의 맨 밑바닥이 오차가 0에 가까워지는 우리가 찾아야 할 정답(최적의 가중치)이다.
- 기울기(Gradient)의 계산:
- 현재 산 중턱에 무작위로 툭 떨어져 있다(가중치 초기화). 발바닥의 경사도(미분값)를 계산해 보니 오른쪽으로 가파르게 치솟고 있다(기울기가 양수
+).
- 현재 산 중턱에 무작위로 툭 떨어져 있다(가중치 초기화). 발바닥의 경사도(미분값)를 계산해 보니 오른쪽으로 가파르게 치솟고 있다(기울기가 양수
- 하산 공식 (가중치 업데이트):
- $W_{new} = W_{old} - (\text{학습률} \times \text{기울기})$
- 공식에 마이너스($-$)가 붙어있다. 기울기가 양수(+)면 왼쪽(-)으로 가고, 기울기가 음수(-)면 오른쪽(+)으로 간다. 즉, **"오르막의 반대 방향(내리막)으로 걸어라"**라는 단순 무식하고 확실한 논리다.
📢 섹션 요약 비유: 눈에 안대를 한 채 험한 산을 내려가야 할 때, 동서남북을 헤맬 필요 없이 지팡이로 내 주변 땅을 더듬어 보고(미분 계산) 무조건 가장 가파르게 밑으로 푹 꺼지는 방향으로만 한 발짝씩 내디디면 언젠가는 산의 가장 깊은 계곡 바닥(정답)에 안전하게 도착한다는 기발한 원리입니다.
Ⅱ. 학습률 (Learning Rate)의 딜레마
산을 내려가는 방향은 알았는데, 한 걸음에 보폭을 얼마나 크게 뛸 것인가?
- 학습률이 너무 작을 때 (Overly Small):
- 보폭이 개미처럼 너무 작으면, 안전하긴 하지만 바닥까지 도달하는 데 수만 번의 걸음(Epoch)을 걸어야 하므로 며칠 밤낮이 지나도 학습이 끝나지 않는다.
- 중간에 아주 작은 얕은 물웅덩이(Local Minima, 지역 최솟값)를 만나면, 그것이 진짜 밑바닥인 줄 착각하고 그곳에 영원히 갇혀버릴 위험이 크다.
- 학습률이 너무 클 때 (Overly Large / Overshooting):
- 보폭이 거인처럼 너무 크면, 바닥을 향해 내려가다가 한 번의 발걸음으로 산 건너편 중턱으로 훌쩍 점프(Overshooting)해 버린다.
- 양쪽 벽을 핑퐁처럼 크게 왔다 갔다 튕기다가 결국 계곡 밖으로 날아가 버려 손실(오차) 값이 무한대로 터져버리는 발산(Divergence) 현상이 발생한다.
📢 섹션 요약 비유: 계곡 바닥에 동전(정답)이 떨어져 있을 때, 보폭이 너무 크면(학습률 큼) 바닥을 밟지 못하고 계곡 좌우 벽을 널뛰기하듯 점프하다 동전을 영영 놓쳐버리고, 보폭이 너무 작으면(학습률 작음) 바닥까지 내려가는데 천 년이 걸리다 중간에 지쳐 쓰러지는 극단적인 딜레마입니다. 적당한 보폭 설정이 AI 엔지니어의 핵심 실력입니다.
Ⅲ. GD의 한계와 미니배치 SGD로의 진화
전체 데이터를 한 번에 보고 걷는 것은 멍청하고 느리다.
- 배치 경사 하강법 (BGD, Batch GD):
- 원래의 알고리즘은 발을 한 번 내디딜 때마다, 회사가 가진 100만 개의 전체 데이터를 모두 계산해서 오차를 구한 뒤 완벽하게 안전한 방향으로 한 발짝 걷는다. (너무 느려서 최신 딥러닝에서는 절대 안 쓴다)
- 확률적 경사 하강법 (SGD, Stochastic GD):
- 100만 개를 다 보지 말고, 랜덤하게 딱 1개의 데이터만 꺼내서 그 오차로 즉시 걷는다. 엄청나게 빠르지만 데이터 1개가 엉뚱한 이상치(노이즈)라면 산 위로 거꾸로 뛰어 올라가 버리는 등 발걸음이 술 취한 듯 비틀거린다.
- 미니배치 SGD (Mini-Batch SGD):
- 양쪽의 장점만 타협한 현대의 표준 방법이다. 100만 개를 **64개 또는 256개 단위(Batch Size)**의 적당한 덩어리로 묶어서, 64개의 평균 오차를 구한 뒤 빠르게 걷는다. 컴퓨터의 메모리(GPU) 병렬 연산에 딱 맞고 속도와 안정성을 동시에 잡았다.
📢 섹션 요약 비유: 시력이 나쁜 사람이 지도를 그릴 때, 100만 명을 다 인터뷰하고 한 줄 그리는 것(BGD)은 완벽하지만 평생이 걸리고, 지나가는 아무나 1명 붙잡고 물어보는 것(SGD)은 빠르지만 사기꾼을 만나면 지도를 망칩니다. 그래서 적당히 64명 정도를 모아서 다수결 의견(미니배치)을 묻고 방향을 그리는 것이 가장 빠르고 현명한 현대의 하산 기법입니다.