An overview of gradient descent optimization algorithms Sebastian Ruder, 2016
Reviewer : 박이현
Gradient Descent는 신경망 최적화 과정에서 많이 사용되는 최적화 기법이다. 따라서 딥러닝 분야에서 많이 활용되고, 이를 기반으로 다양한 최적화 모델이 개발되었다. 이 논문에서는 다양한 GD 기반의 최적화 기법들에 대해서 간단하게 다루고 있다.
Gradient Descent에 대해서 간단히 소개하면, 특정 파라미터에 대한 목적함수 $J(\theta)$를 최소화하는 방법이고 주로 목적함수를 파라미터 $\theta$에 대해 1차 편미분을 진행하고, 해당 값인 $\nabla_{\theta} J(\theta)$의 반대방향으로 step의 크기를 결정하는 학습률(learning rate) $\eta$를 곱해서 원래 파라미터에서 빼는 방식으로 파라미터를 최소값을 향해 계속 업데이트한다.
GD 기법을 이용한 3가지 방법론에 대해서 먼저 한번 간단하게 알아보려고 한다. 위에서 제시된 GD의 방법을 이용한다는 것은 같지만, 목적함수의 미분을 위해 얼마나 많은 데이터를 사용해 계산하는 지가 다르다.
Batch Gradient descent는 가장 기본적인 GD의 일종으로, Vanilla Gradient descent라고도 한다. 파라미터는 다음과 같이 업데이트된다.
$$ \theta = \theta - \eta\cdot\nabla_{\theta}J(\theta) $$
BGD 방법에서는 한번의 파라미터 업데이트를 위해서 전체 데이터에 대해 모두 Gradient를 계산하고 평균을 구한다. 이후 그 값에 학습률을 곱해서 반대방향으로 이동함으로써 최적의 파라미터값을 찾아간다. 해당 방법은 convex한 형태의 목적함수에 대해서는 Global minimum으로의 수렴을 보장하지만, 그에 따른 Trade-off로써 속도가 매우 느리다. 또한 Large Dataset에 대해서는 메모리 문제도 발생하게 된다.
확률적 경사하강법인 Stochastic Gradient descent는 기존 BGD의 느린 속도를 보완하기 위한 방법으로, 파라미터 업데이트 과정은 아래와 같다.
$$ \theta = \theta - \eta \cdot \nabla_{\theta}J(\theta;x^{(i)};y^{(i)}) $$
각각의 파라미터 업데이트 과정에서 하나의 데이터만 선택하여 해당 데이터의 Gradient를 계산하고, 이를 학습률과 곱해 이동함으로써 최적의 파라미터 값을 찾게 된다. 전체 데이터에 대한 기울기를 모두 고려할 필요가 없기 때문에 BGD보다 훨씬 빠르게, 자주 파라미터의 업데이트를 진행한다.
하지만 빠른 만큼 데이터를 하나만 선택하기 때문에 Variance가 높아진다는 단점이 존재하며, 이에 따라 목적함수가 심하게 변동할 수 있다.
BGD는 모든 데이터를 고려하기 때문에 대체로 Global minimum을 향해서 간다면, SGD는 Local minimum에 빠질 가능성이 있다. 또한 정확한 minimum 값에 근접하기도 어렵다. 이러한 문제를 해결하기 위해 학습률을 점차 낮추면 BGD와 유사한 결과를 낼 수 있다.