ML,DL

경사하강법(Gradient Descent)

BKM 2021. 8. 14. 15:08

'경사하강법'은 함수의 1차 미분계수를 이용하여 함수의 최소값(최대값)을 구하는 방법이다.

'경사하강법'을 사용하는 이유

  • 경사하강법의 목적은 함수의 '최소값'을 구하기 위함이다.
  • Q. 최소값을 구하는 것이 목적이라면 미분계수 값이 0인 점을 찾으면 되는것이 아닌가?
    • 실제로 분석하는 데이터의 함수는 닫힌 형태(closed form)이 아니거나, 형태가 복잡해서 미분계수와 근을 구하기 어려운 경우가 있다.
    • 실제 미분계수를 컴퓨터로 구현하는 것보다 Gradient Descent를 구현하는 것이 더 쉽다.
    • 데이터양이 방대한 경우, iterative한 방법을 통해 값을 구하면 계산량 측면에서 더 효율적이다.

'경사하강법'의 수식유도 과정

0. Check-Point

  1. 기울기의 부호(+/-)
  2. 기울기의 절댓값

1.  기울기의 부호

  • 특정 point 'x'에서 x가 커질수록 함수값이 커진다면(기울기 = 양수), 음의 방향으로 x를 옮겨야한다.
  • 특정 point 'x'에서 x가 커질수록 함수값이 작아진다면(기울기 = 음수), 양의 방향으로 x를 옮겨야한다.

기울기의 부호를 통해서 Gradient Descent의 방향을 정할 수 있다.

2.  기울기의 절댓값

  • 절댓값이 클수록 Optimal Point에서 멀리 떨어져 있다는 의미이므로, 더 많은 거리를 이동 시켜야한다.
  • 이때, 이동 거리의 조정값을 보통 'Step Size'라고 부른다.

∴ 기울기의 절댓값을 통해서 Gradient Descent의 이동거리(정도)를 정할 수 있다.


주의점

  • 적절한 크기의 Step Size를 설정해야한다.
    • 너무 작은 경우, 시간이 오래 소요될 수 있다.
    • 너무 큰 경우, 수렴하지 않을 수 있다.

출처: https://angeloyeo.github.io/2020/08/16/gradient_descent.html

  • Local Minima(극소값)문제
    • 최소값을 찾아야 하지만, 극소값을 찾아버릴수도 있다.

출처: https://angeloyeo.github.io/2020/08/16/gradient_descent.html

경사 하강법의 수행 방식

  1. Stochastic Gradient Descent
    • Gradient의 업데이트를 data-by-data로 하는 경우(single datum)
  2. Mini-batch Gradient Descent
    • Gradient의 업데이트를 데이터의 subset마다 하는 경우(a few data)
  3. Batch Gradient Descent
    • Gradient의 업데이트를 전체 데이터를 사용해 하는 경우(The whole data)

경사 하강법을 활용한 Optimizer의 종류

optimizer에는 기본적으로 흔히 알고 있는 basic한 경사 하강법 말고도 여러 가지 유형들이 존재한다.

Momentum

Nesterov Accelerated Gradient

AdaGrad

AdaDelta

RMSprop

Adam