딥러닝, 논문 리뷰

[딥러닝] 최적화와 경사하강법 Deep Dive(배치 경사하강법, 확률적 경사하강법) - 1

cheorish 2025. 1. 16. 18:47

 

 

최적화에 대한 개념

딥러닝 모델을 통한 학습으로 우리는 옵티마이저를 자주 보게 되는데(Optimization), 훈련을 처음 시작하면서 순전파 → 활성화 함수 → 출력층 → 역전파를 진행하는 과정에서 예측값과 실제값(라벨)의 차이를 통해 손실 함수를 구하게 되는데,

 

이 차이를 최소화 하기 위한 방법입니다. 방법 중 가장 유명하면서도 자주 쓰이는 방법이 기울기 조정이라는 것인데, 이는 우리가 고등학교 때 굉장히 괴롭힘 받았던 미분과도 굉장히 밀접한 연관이 있습니다(아예 그냥 미분이 중요함)

 

그렇기 때문에, 우리는 미분과 기울기에 대해서 명확히 알 필요가 있다고 생각합니다.

기울기란 무엇일까?

기울기는 변화율 즉 순간변화율을 나타내는 것인데, 특히 이런 순간적인 변화율 자체는 미분을 통해 계산하고 변화하는 것을 볼 수 있으며 함수의 그래프가 가지는 접선의 기울기라고 생각하면 쉽다.

왜 기울기를 사용하는 것일까?

우리가 손실이 발생했을 때, 입력 값이 단순 1차원일 경우에는 직관적으로 우리가 쉽게 조정할 수 있지만 우리는 딥러닝 학습을 할 때 있어서 입력 값 자체는 다차원(Tensor)로 변환하기 때문에 직접적으로 각각의 변수들이 손실 함수에 어떻게 영향을 미치는지 알 수 없다.

그렇기 때문에 이 과정에 편미분과 같은 미분 기법을 통해 해결한다.

미분이란?

미분이란 함수 \(f\)에서 특정 점 (\(x,f(x))\)에서 접선 기울기를 계산하는 과정이다.

한 점에서의 접선 기울기를 알게 된다면 함수 값이 증가하거나 감소하는 방향을 결정할 수 있는데

 

이를 차원이 낮은 그래프로 본다면 직관적으로 이해할 수 있지만, \(n\)차원 같은 고차원 공간에서는 그래프로도 볼 수 없고 우리가 직접 볼 수 없다

 

그러므로 미분값을 활용해서, 함수 값을 변화시키는 올바른 방향을 수학적으로 결정하기에 가장 중요한 방법이라고 볼 수 있다.

예제

출처 : https://blogik.netlify.app/BoostCamp/U_stage/05_gradient_descent/#-2

 

이러한 기울기를 예제로 함수 값의 조정 방향을 통해서, 경사 하강법의 원리를 각 요소별로 설명하겠다.

왼쪽 그림 함수 값의 감소를 표현

  • 초록 곡선 : 함수 \(f(x)\)
  • 검은 직선 : 현재 위치에서의 접선
  • 빨간 점 : 현재위치 \(x, f(x)\)
  • 빨간 화살표 : \(x\)값을 조정해야 하는 방향
    • 설명 :
      1. 현재 위치에서 기울기(접선의 기울기)는 양수(+)
      2. 함수 값을 줄이기 위해서 \(x\)를 기울기의 반대 방향(왼쪽)으로 이동
      3. 결과적으로 \(x\)가 왼쪽으로 이동하면, 함수 값 \(f(x)\)가 줄어듦.

오른쪽 그림 함수 값의 증가를 표현

  • 초록 곡선 : 함수 \(f(x)\)
  • 검은 직선 : 현재 위치에서의 접선
  • 빨간 점 : 현재위치 \(x, f(x)\)
  • 빨간 화살표 : \(x\)값을 조정해야 하는 방향.
    • 설명:
      1. 현재 위치에서 기울기(접선의 기울기)는 음수(-)
      2. 함수 값을 늘리기 위해 \(x\)를 기울기의 반대 반향(오른쪽)으로 이동
      3. 결과적으로 \(x\)가 오른쪽으로 이동하면 함수 값 \(f(x)\)가 증가

 

정리하자면 ...

 

  • 미분 값이 `양수`이면, 기울기가 증가하고 있으므로, 미분 값을 더했을 때 \(x + f ' (x) > x\), 즉, 오른쪽으로 이동하며 함수 값이 증가한다.
  • 미분 값이 `양수`이면, 기울기가 감소하고 있으므로, 미분 값을 더했을 때 \(x + f ' (x) < x\), 즉, 왼쪽으로 이동하며 함수 값이 감소한다.
  • 미분 값이 `양수`이면, 기울기가 증가하고 있으므로, 미분 값을 뺐을 때 \(x - f ' (x) < x\), 즉 왼쪽으로 이동하며 함수 값이 감소하게 된다.
  • 미분 값이 `음수`이면, 기울기가 감소하고 있으므로, 미분 값을 뺐을 때 \(x - f ' (x) > x\), 즉 오른쪾으로 이동하며 함수 값이 감소하게 된다.

 

헷갈릴 수 있으니 한 번 보고 볼드처리 된 곳과 상기 그래프를 보며 비교해보는 것을 추천드린다.

 

벡터의 기울기 조정

만약, 입력 값이 벡터 그러니까 다차원 텐서를 통해 입력했을 때 과연 기울기 조정은 어떻게 할 수 있을까?

 

차원이 무한대로 넓어질 수 있는 벡터(n차원 공간이라고도 합니다.) 그래프를 따라 왼쪽, 오른쪽 이런식으로 단순하게 이동할 수 있는 것이 아니라 차원에 따라서 조정하기에 우리가 직관적으로 볼 수 없다는 것이 관건이다.

 

그렇기에 단순한 미분이 아닌 편미분을 통해 다변수 함수가 들어가는 벡터 값에 특정 변수 한 가지의 변화율을 구한다고 보면 된다.

 

수식

 

\(\frac{\partial f}{\partial x_i} = \lim_{h \to 0} \frac{f(x + h e_i) - f(x)}{h}\)

 

각 값에 대한 설명

  1. \(\frac{\partial f}{\partial x_i}\): \(x_i\)에 대한 편미분을 표현.
  2. \(\lim_{h \to 0}\): \(h\)가 0에 가까워지는 극한을 의미.
  3. \(\frac{f(x + h e_i) - f(x)}{h}\): 함수 \(f\)의 \(x_i\) 방향으로의 변화율을 계산.

그러니까 다변수 함수로 특정 되는 입력 값 벡터를 통해 특정 변수 한 개의 변화율을 구하는 과정이며, 이를 통해서 함수의 국소적인 변화 (특정 어느 부분이라는 말)의 방향을 볼 수 있습니다.

 

다른 변수들은 고정된 상태를 유지하면서, 특정 변수 방향에서의 함수 값 변화를 측정하기 위해 사용합니다.

간단한 예제를 통해 설명

 

상기 이미지는 간단한 수식 \(f(x,y) = x^2 +2y^2\)의 곡면 그래프와(왼쪽), 기울기를 이용한 벡터 필드(오른쪽)을 시각적으로 나타낸 그래프

왼쪽 그래프

\(f(x,y) = x^2 +2y^2\)

  • 이 그래프는 함수\(f(x,y) = x^2 +2y^2\)의 3D 곡면을 보여줌
  • \(x^2 +2y^2\)는 이차 함수로, \(x\)와 \(y\)가 모두 0일 때 최소 값(전역 최적점)을 가집니다.
  • 곡면의 특징
    • 볼록한 모양으로. 이는 함수가 볼록(convex) 함수임을 나타냄
    • 곡면의 가장 낮은 점이 최적점 \(f(0,0) = 0\)

오른쪽 그래프

 

기울기 벡터(Gradient Vector)와 경사하강법

 

함수 \(f(x,y) = x^2 +2y^2\)에 대한 기울기는 하기와 같다.

 

\(\nabla f(x, y) = \left( \frac{\partial f}{\partial x}, \frac{\partial f}{\partial y} \right) = (2x, 4y)\)

 

경사하강법(Gradient Descent)을 적용하면, 기울기의 반대 방향으로 이동합니다

 

\(-\nabla f(x, y) = -(2x, 4y)\)

 

각 점에서의 기울기 벡터(화살표)는 이 식을 통해 계산되며, 이는 함수 값이 감소하는 방향을 나타냄.

경사 하강법을 적용시킨다면, 기울기는 반대 방향으로 이동하기에, 이는 함수 값이 감소하는 방향으로 진행한다는 것을 나타냅니다.


다차원 기울기 변화의 실제 예제

함수

 

\(f(x, y) = x^2 + 2y^2\)

 

초기값

 

\((x_0, y_0) = (2, 2)\)

 

기울기 계산

 

\(\nabla f(x, y) = (2x, 4y)\)

 

학습률

 

\(\eta = 0.1\)

 

경사 하강법의 업데이트 공식

 

\(x_{t+1} = x_t - \eta \cdot \frac{\partial f}{\partial x}, \quad y_{t+1} = y_t - \eta \cdot \frac{\partial f}{\partial y}\)

 

1차 업데이트

 

\(x_1 = 2 - 0.1 \cdot 2(2) = 2 - 0.4 = 1.6\)

\(y_1 = 2 - 0.1 \cdot 4(2) = 2 - 0.8 = 1.2\)

 

2차 업데이트

 

\(x_2 = 1.6 - 0.1 \cdot 2(1.6) = 1.6 - 0.32 = 1.28\)

\(y_2 = 1.2 - 0.1 \cdot 4(1.2) = 1.2 - 0.48 = 0.72\)

 

결과

 

\((x, y)\)

 

이 점은 점점 최적점인 \((0,0)\)으로 수렴함.


 

배치 경사 하강법 (Batch Gradient Descent)

배치 경사하강법이란, 전체 데이터셋에 대해 손실 함수의 기울기를 계산하고 매개 변수를 업데이트 하는 방법

 

모든 데이터를 한 번에 사용하기 때문에 기울기 계산이 정확하지만, 그만큼 계산비용이 높아 학습이 매우 느린편

 

수식

 

\(\theta = \theta - \eta \cdot \frac{1}{m} \sum_{i=1}^m \nabla_\theta J(\theta; x^{(i)}, y^{(i)})\)

 

수식 설명

  • \(\theta\): 모델의 매개변수(가중치와 편향 등).
  • \(\eta\) : 학습률
  • \(m\) : 전체 데이터의 샘플의 개수
  • \(\nabla_\theta J(\theta; x^{(i)}, y^{(i)})\) :\(i\)-번째 데이터 샘플 \(x^{(i)}, y^{(i)}\)에 대해 손실 함수 \(J\)의 기울기.

확률적 경사 하강법 (Stochastic Gradient Descent)

기존 배치 경사하강법의 단점을 보완하기 위해, 각 데이터 포인트별로 한 개씩 기울기를 계산하고 매개변수를 업데이트하는 방법

 

데이터를 한 개씩 처리하므로, 계산이 빠르고 효율적이나 손실 함수 값이 매번 크게 변동할 가능성이 크고, 수렴 안정성이 매우 낮음

 

수식

 

\(\theta = \theta - \eta \cdot \nabla_\theta J(\theta; x^{(i)}, y^{(i)})\)

 

수식 설명

  • \(\theta\) : 모델의 매개변수(가중치, 편향 등)
  • \(\eta\): 학습률
  • \(\nabla_\theta J(\theta; x^{(i)}, y^{(i)})\) : 데이터 샘플 \(x^{(i)}, y^{(i)}\)에서 손실 함수 \(J\)의 기울기

완전 배치 경사하강법과 SGD(확률적 경사하강법)을 직관적으로 구분시켜주는 표현

출처 : https://heeya-stupidbutstudying.tistory.com/entry/ML-%EC%8B%A0%EA%B2%BD%EB%A7%9D%EC%97%90%EC%84%9C%EC%9D%98-Optimizer-%EC%97%AD%ED%95%A0%EA%B3%BC-%EC%A2%85%EB%A5%98#google_vignette

 


그림으로 표현한 배치 경사 하강법과 확률적 경사 하강법의 차이

 

출처 : https://velog.io/@5050/%EA%B2%BD%EC%82%AC%ED%95%98%EA%B0%95%EB%B2%95

 

참조

 

https://blogik.netlify.app/BoostCamp/U_stage/05_gradient_descent/#-2

 

경사하강법(Gradient Descent)의 기초와 이해

AI Math by 임성빈 교수님, BoostCamp AI Tech 2주차

blogik.netlify.app