ML,DL
경사하강법(Gradient Descent)
BKM
2021. 8. 14. 15:08
'경사하강법'은 함수의 1차 미분계수를 이용하여 함수의 최소값(최대값)을 구하는 방법이다.
'경사하강법'을 사용하는 이유
- 경사하강법의 목적은 함수의 '최소값'을 구하기 위함이다.
- Q. 최소값을 구하는 것이 목적이라면 미분계수 값이 0인 점을 찾으면 되는것이 아닌가?
- 실제로 분석하는 데이터의 함수는 닫힌 형태(closed form)이 아니거나, 형태가 복잡해서 미분계수와 근을 구하기 어려운 경우가 있다.
- 실제 미분계수를 컴퓨터로 구현하는 것보다 Gradient Descent를 구현하는 것이 더 쉽다.
- 데이터양이 방대한 경우, iterative한 방법을 통해 값을 구하면 계산량 측면에서 더 효율적이다.
'경사하강법'의 수식유도 과정
0. Check-Point
- 기울기의 부호(+/-)
- 기울기의 절댓값
1. 기울기의 부호
- 특정 point 'x'에서 x가 커질수록 함수값이 커진다면(기울기 = 양수), 음의 방향으로 x를 옮겨야한다.
- 특정 point 'x'에서 x가 커질수록 함수값이 작아진다면(기울기 = 음수), 양의 방향으로 x를 옮겨야한다.
∴ 기울기의 부호를 통해서 Gradient Descent의 방향을 정할 수 있다.
2. 기울기의 절댓값
- 절댓값이 클수록 Optimal Point에서 멀리 떨어져 있다는 의미이므로, 더 많은 거리를 이동 시켜야한다.
- 이때, 이동 거리의 조정값을 보통 'Step Size'라고 부른다.
∴ 기울기의 절댓값을 통해서 Gradient Descent의 이동거리(정도)를 정할 수 있다.
주의점
- 적절한 크기의 Step Size를 설정해야한다.
- 너무 작은 경우, 시간이 오래 소요될 수 있다.
- 너무 큰 경우, 수렴하지 않을 수 있다.
- Local Minima(극소값)문제
- 최소값을 찾아야 하지만, 극소값을 찾아버릴수도 있다.
경사 하강법의 수행 방식
- Stochastic Gradient Descent
- Gradient의 업데이트를 data-by-data로 하는 경우(single datum)
- Mini-batch Gradient Descent
- Gradient의 업데이트를 데이터의 subset마다 하는 경우(a few data)
- Batch Gradient Descent
- Gradient의 업데이트를 전체 데이터를 사용해 하는 경우(The whole data)
경사 하강법을 활용한 Optimizer의 종류
optimizer에는 기본적으로 흔히 알고 있는 basic한 경사 하강법 말고도 여러 가지 유형들이 존재한다.