당니의 개발자 스토리

Gradient Descent 본문

LG Aimers/AI Essential Course

Gradient Descent

clainy 2025. 7. 27. 15:50

Gradient Descent(경사 하강법)은 기울기(gradient)를 따라 손실(loss)을 줄여가는 과정

몇가지 가정을 해야하는데,

내가 함수 f와 f' 혹은 l을 알 뿐만 아니라 l에 대한 Gradient 정보가 나한테 있다는 것을 가정해야함.

내가 함수를 전체적으로 안다고 하면, 당연히 어디가 작은지 알 수 있을 것임. 그래서 이러한 Global View는 없다고 가정할 것임.

 

우리가 전체적인 함수의 개형을 모르고, 함수의 특정 값에 대한 특정 위치에서의 미분값만 계산할 수 있는 능력이 있다고 했을 때

결국 Gradient Descent가 주장하는 것은 우리가 할 수 있는 건 산에서 슬로프를 따라 걸어 내려가는 것밖에 없다는 것임.

Learning Rate(학습률)는 기계학습에서 모델이 한 번에 얼마나 크게 움직일지를 결정하는 숫자

그리고 이 Learning Rate는 직접 설정한 값(하이퍼파라미터)

첫 번째 스텝 (i = 0)

x_1 = x_0 - α * f'(x_0) = 0 - 0.1 * 2(0 - 3) = 0 - 0.1 * (-6) = 0 + 0.6 = 0.6

두 번째 스텝 (i = 1)

x_2 = 0.6 - 0.1 * 2(0.6 - 3) = 0.6 - 0.1 * (-4.8) = 0.6 + 0.48 = 1.08

 

이런 식으로 계속해서 계산한 값들이 그래프에 빨간 점으로 찍힌 x_0, x_1, x_2, ... 이다.

 

너무 작은 Learning Rate를 적용하면 여러번 Gradient를 계산해야 해서 굉장히 오래 반복되는 iteration을 통해 최소값에 도달할 때까지 시간이 오래걸리게 될 것임.

굉장히 복잡한 함수인 경우에는 Gradient를 계산하고 그 방향으로 파라미터를 업데이트 하는 것이 굉장히 어려운 일이 될 수 있기 때문에 작은 Learning Rate를 사용하는 것은 권장하지 x

 

그렇다고 반대로 단기간에 최소값에 수렴하겠다는 생각으로 굉장히 큰 Learning Rate를 사용하면

너무 많이 이동해버림. 우리가 결국에는 3이라는 값에 수렴을 해야하는데 왔다갔다 거릴 것. 함수값이 발산해버린다.

데이터를 한개씩만 사용해서 θ 업데이트

빠르고 매번 다르게 움직여서 local minimum을 피할 수 있음

데이터를 작게 묶어서(예: 32개, 64개씩) 계산함.

계산량 줄이면서 안정성도 챙김 → 요즘 가장 많이 쓰는 방식!

loss = (θᵀxᵢ - yᵢ)²

gradient = (θᵀxᵢ - yᵢ)xᵢ

xᵢ : i번째 입력 벡터 (예: 키, 몸무게 같은 입력 특성들)

θ : 우리가 찾고 싶은 가중치(weight) 벡터

θᵀxᵢ : i번째 입력에 대한 모델의 예측값

yᵢ : i번째 입력의 정답(label)

 

물론 선형회귀 문제는 미분해서 0이 되는 지점을 표준 방정식을 통해서 애널리틱하게 찾아낼 수 있지만,

당연히 Gradient Descent를 사용해서 휴리스틱하게도 문제를 해결할 수 있음.

데이터가 너무 많거나 나에게 변수의 차원이 너무 높거나 한 경우에는 휴리스틱하게 문제를 풀어나갈 수 있음.

 

Analytic (해석적 방법)

수학적으로 딱 떨어지게 정확한 공식을 써서 정답을 계산하는 방식

 

Heuristic (휴리스틱 방법)

딱 맞는 정답은 모르지만, 경험상 괜찮은 방향으로 푸는 요령, 직관, 임시방편

 

전체 그림의 개형을 보지 않고 경사를 따라가도 보면 결국 우리의 목적지는 굉장히 낮은 지대가 됨

수많은 함정을 피해서 손실 목적지에 도달할 수 있는가 라는 질문은 결코 당연한 질문이 아님.

최소값을 찾으려다가 평평한 지대에 갇혀서 더 나아가지 못하고 전체적인 글로벌한 최소값을 얻지 못하는 경우도 존재할 수 있게됨.

Momentum : 이전까지 움직였던 방향을 기억해서, 다음엔 더 부드럽고 빠르게 가자!

 

  • 파란 선: 기본 SGD → y축으로 튀고 진동 많음
  • 빨간 선: Momentum SGD덜 튀고, 더 곧게 중심으로 감
  • 초록 점: 시작 위치

Momentum이 왜 더 효과적인가?

공이 굴러갈 때 관성처럼 이전 방향을 기억해서 더 빠르게 내려가게 도와주는 방법이다보니,

마치 공이 구불구불한 길을 따라 구르듯이 방향이 계속 바뀌더라도 관성을 갖고 잘 내려감

진동 줄여주고 수렴 빨라짐

 

 

이러한 형태에 관성을 주거나 그냥 SGD를 교정하는 방법들은 굉장히 다양한 것들이 있는데,

대표적으로 RMS Prop이라고 하는 방법이 있고 ADAM 이라고 하는 방법이 있음.

RMSPropAdam이라는 두 가지 고급 최적화 알고리즘을 소개

둘 다 기본적인 Gradient Descent보다 훨씬 똑똑하게 학습함

 

RMSProp (Root Mean Square Propagation)

기울기가 너무 크면 학습률을 줄이고, 기울기가 작으면 학습률을 키워서 학습을 더 안정적으로 만듦!

그리고 RMSProp은 방향들에 대해서 차별화하겠다. 즉, 각 방향(x축, y축 등)에 따라 다르게 속도를 조절하는 방법임.

 

현재 위치에서 Gradient를 계산할 때 각 Gradient의 위치에 따라서 정규화 해주는 형태로 진행한 것이 RMSProp 이다.

SGD 모멘텀은 1차원 모멘텀을 생각하는 것이고,

RMSProp은 2차원 모멘텀(각 축(x, y 등)에 대해 따로따로)을 생각하는 형태의 Gradient Descent의 변형이라고 생각할 수 있음

이 둘을 합친 ADAM 이라고 하는 기법을 굉장히 많이 사용

 

ADAM은 Momentum + RMSProp을 합친 방식

이전 방향의 정보도 기억하면서 (모멘텀), 방향마다 속도를 다르게 조절하면서 (RMSProp), 아주 스마트하게 내려가는 방법

그래서 머신러닝에서 가장 많이 쓰이는 최적화 알고리즘 중 하나임.

 

ADAM은 기울기의 1차원 모멘텀, 2차 모멘텀을 동시에 사용하고

Bias Correction이라고 하는 테크닉을 이용해서 발생하는 약간의 편향을 교정한 다음

이것을 이용해서 일차 모멘텀, 이차 모멘텀을 이용해서 현재 나아가야 하는 방향을 결정하는 알고리즘이 실제로는 굉장히 많이 사용되고 있는 테크닉 중에 하나라고 생각하고 넘어가면 된다.

 

 

Random Initialization (랜덤 초기화)

처음 시작 위치(공이 어디 있는지)를 랜덤하게 정한다는 뜻

공을 산 위에 놓을 때, 항상 같은 자리에 놓는 게 아니라 매번 랜덤한 위치에 놓고 굴리는 것.
WHY? 항상 같은 위치에서 시작하면 같은 결과만 나올 수 있기 때문

랜덤하게 시작하면 최적값을 찾을 가능성이 높아진다

 

Learning Rate (학습률)

한 번에 얼마만큼 이동할지를 결정하는 비율

 

Momentum은 공이 굴러가던 방향을 기억해서 더 빠르고 부드럽게 가게 도와주는 기능

 

'LG Aimers > AI Essential Course' 카테고리의 다른 글

Logistic Regression  (0) 2025.07.28
Classification  (0) 2025.07.27
Linear Regression  (0) 2025.07.26
Supervised Learning Overview  (0) 2025.07.25
인과추론을 위한 다양한 방법과 특징  (0) 2025.07.25