경사하강법은 미분 가능한 함수를 최소화하기 위해, 함수값이 가장 크게 줄어드는 국소 방향으로 반복해서 이동하는 알고리즘입니다. "경사하강법이란?"을 찾고 있다면 핵심 아이디어는 간단합니다. 기울기를 계산하고, 조금 아래로 내려가고, 이를 반복하는 것입니다.

이 방법은 미적분 기반 최적화와 머신러닝에서 널리 쓰입니다. 도함수나 기울기를 계산할 수 있고, 학습률을 안정성을 해치지 않을 만큼 충분히 작게, 동시에 진전이 있을 만큼 충분히 크게 고를 수 있을 때 특히 잘 작동합니다.

한 변수에서는 갱신 규칙이

xk+1=xkηf(xk),x_{k+1} = x_k - \eta f'(x_k),

이고, 여러 변수에서는

xk+1=xkηf(xk),\mathbf{x}_{k+1} = \mathbf{x}_k - \eta \nabla f(\mathbf{x}_k),

가 됩니다. 여기서 η>0\eta > 0는 학습률입니다. 학습률은 각 단계에서 얼마나 멀리 이동할지를 결정하므로, 알고리즘이 수렴하는지, 정체되는지, 혹은 지나쳐 버리는지에 직접적인 영향을 줍니다.

경사하강법의 직관

기울기는 오르막 방향을 가리킵니다. 목표가 최소화라면, 자연스러운 국소 이동은 그 반대 방향으로 가는 것입니다.

하지만 이런 국소 규칙이 모든 문제에서 항상 최선의 답을 보장하는 것은 아닙니다. 볼록 함수에서는 경사하강법이 전역 최솟값으로 이어질 수 있습니다. 비볼록 함수에서는 국소 최솟값, 평평한 구간, 또는 다른 정지점에 머무를 수 있습니다.

경사하강법 알고리즘은 어떻게 작동할까

각 반복에서는 현재 기울기 정보를 사용해 점을 갱신하고, 계속 진행할지 확인합니다.

  1. 초기 추정값 x0x_0 또는 x0\mathbf{x}_0에서 시작합니다.
  2. 현재 점에서 도함수 또는 기울기를 계산합니다.
  3. 그 도함수 또는 기울기에 η\eta를 곱한 값을 빼서 갱신합니다.
  4. 기울기가 작아지거나, 갱신량이 매우 작아지거나, 미리 정한 반복 횟수 제한에 도달하면 멈춥니다.

표준 갱신 규칙은 적용하는 점들에서 목적함수가 미분 가능하다고 가정합니다. 매끄럽지 않은 문제에서는 서브그래디언트를 쓰는 최적화 방법도 있지만, 그것은 다른 설정입니다.

경사하강법에서 학습률이 중요한 이유

학습률 η\eta는 스텝 크기입니다.

η\eta가 너무 작으면 경사하강법은 대체로 올바른 방향으로 움직이지만 매우 느릴 수 있습니다. 반대로 η\eta가 너무 크면 갱신이 최솟값을 지나쳐 버리거나, 왔다 갔다 진동하거나, 심지어 발산할 수도 있습니다.

이런 상충 관계는 이차함수에서 특히 분명하게 보입니다. 최솟값에서 멀어질수록 기울기가 더 가팔라지기 때문입니다. 어떤 위치에서는 안전해 보이는 스텝 크기가 다른 위치에서는 지나치게 공격적일 수 있습니다.

예제로 보기: 이차함수에서의 경사하강법

다음을 생각해 봅시다.

f(x)=(x3)2.f(x) = (x-3)^2.

이 함수는 x=3x=3에서 최솟값을 가집니다. 도함수는

f(x)=2(x3).f'(x) = 2(x-3).

입니다.

학습률 η=0.1\eta = 0.1, 시작점 x0=0x_0 = 0으로 경사하강법을 적용해 봅시다.

그러면 갱신 규칙은

xk+1=xk0.12(xk3)=xk0.2(xk3).x_{k+1} = x_k - 0.1 \cdot 2(x_k-3) = x_k - 0.2(x_k-3).

가 됩니다.

x0=0x_0 = 0에서 시작하면

x1=00.2(03)=0.6.x_1 = 0 - 0.2(0-3) = 0.6.

그다음

x2=0.60.2(0.63)=1.08.x_2 = 0.6 - 0.2(0.6-3) = 1.08.

그리고

x3=1.080.2(1.083)=1.464.x_3 = 1.08 - 0.2(1.08-3) = 1.464.

입니다.

각 단계마다 값은 33에 더 가까워지고, 함수값도 매번 감소합니다. 여기서 주목할 핵심 패턴은 경사하강법이 답으로 한 번에 점프하지 않는다는 점입니다. 반복적인 국소 보정을 통해 추정값을 점점 개선해 나갑니다.

자주 쓰이는 경사하강법의 변형

배치 경사하강법

배치 경사하강법은 전체 데이터셋을 사용해 매번 갱신을 계산합니다. 목적함수가 고정되어 있다면 결정론적인 스텝을 얻을 수 있지만, 데이터셋이 크면 비용이 많이 들 수 있습니다.

확률적 경사하강법

확률적 경사하강법은 한 번에 하나의 샘플만 사용해 갱신합니다. 각 단계의 비용은 더 작지만 잡음이 더 큽니다. 이런 잡음은 방법이 계속 움직이도록 도와줄 수 있지만, 경로를 덜 매끄럽게 만들기도 합니다.

미니배치 경사하강법

미니배치 경사하강법은 한 번의 스텝마다 작은 샘플 묶음을 사용합니다. 이는 순수한 확률적 갱신보다 잡음을 줄이면서도, 전체 배치 갱신보다 훨씬 저렴하기 때문에 실용적인 절충안이 되는 경우가 많습니다.

이런 변형들은 특히 머신러닝에서 중요합니다. 목적함수가 많은 학습 예제에 대한 평균 손실인 경우가 많기 때문입니다.

경사하강법에서 흔한 실수

학습률을 단지 겉모양의 설정으로 여기는 것

η\eta를 바꾸면 알고리즘 자체의 동작이 달라집니다. 어떤 학습률에서는 수렴하던 방법이, 다른 학습률에서는 실패할 수 있습니다.

경사하강법이 항상 전역 최솟값을 찾는다고 가정하는 것

그 결론에는 조건이 필요합니다. 예를 들어 볼록성은 일반적인 비볼록 지형보다 훨씬 강한 보장을 제공합니다.

응용 문제에서 특성 스케일을 무시하는 것

변수들의 스케일이 좋지 않게 맞춰진 최적화 문제에서는 한 방향이 다른 방향보다 훨씬 빠르게 변할 수 있습니다. 그러면 문제를 다시 정식화하거나 더 신중하게 스케일링하지 않는 한, 경사하강법은 지그재그로 움직이며 느리게 수렴할 수 있습니다.

기울기가 정확히 0이 아니라고 해서 멈추지 않는 것

수치 알고리즘은 완벽한 0을 거의 기다리지 않습니다. 실제 종료 규칙은 보통 기울기 노름, 매개변수 변화량, 또는 목적함수 변화량이 충분히 작은지를 확인합니다.

경사하강법은 언제 사용될까

경사하강법은 수치 최적화, 통계학, 머신러닝에서 사용됩니다. 정확한 닫힌형 해를 구할 수 없거나 직접 계산하기에 비용이 너무 클 때 특히 흔히 쓰입니다.

작고 식이 단순한 문제에서는 미적분으로 최솟값을 정확히 구할 수 있습니다. 하지만 매개변수 공간이 크거나, 목적함수에 변수가 많거나, 손실이 대규모 데이터셋에서 나올 때는 경사하강법이 훨씬 더 유용해집니다.

비슷한 문제를 직접 해보기

f(x)=(x5)2f(x) = (x-5)^2, 시작점 x0=12x_0 = 12로 직접 해보세요. 하나는 η=0.1\eta = 0.1로, 다른 하나는 η=1.2\eta = 1.2로 실행해 보세요. 하나는 안정적으로 진행되고 다른 하나는 불안정하게 되는 모습을 보면, 공식만 볼 때보다 학습률의 역할이 훨씬 더 분명해집니다.

문제 풀이가 필요하신가요?

문제를 올리면 검증된 단계별 풀이를 몇 초 만에 받을 수 있습니다.

GPAI Solver 열기 →