# 경사하강법 (Artificial Neural Networks: Gradient Descent)

#### 경사하강법의 기초 (Fundamentals of Gradient Descent)

경사하강법(Gradient Descent)은 인공신경망의 학습에서 가장 널리 사용되는 최적화 알고리즘이다. 이 방법은 손실 함수(loss function)의 기울기(gradient)를 계산하고, 이를 이용해 네트워크의 가중치(weights)를 반복적으로 조정하여 손실을 최소화하는 방향으로 학습을 진행한다. 경사하강법의 핵심은 함수의 기울기가 가장 가파른 방향으로, 즉 손실이 가장 빠르게 감소하는 방향으로 가중치를 업데이트하는 것이다.

경사하강법은 다양한 변형 및 변종 알고리즘을 포함하고 있으며, 이들은 주로 학습 속도, 안정성, 그리고 수렴 속도 측면에서 차이가 있다. 기본적인 경사하강법은 다음의 수식으로 표현된다:

$$
w\_{new} = w\_{old} - \eta \cdot \nabla L(w)
$$

여기서 $ w $는 가중치, $ \eta $는 학습률(learning rate), 그리고 $ \nabla L(w) $는 손실 함수의 가중치에 대한 기울기이다.

#### 학습률 (Learning Rate)

학습률(learning rate, $ \eta $)은 경사하강법에서 매우 중요한 하이퍼파라미터로, 가중치를 얼마나 크게 업데이트할지를 결정한다. 학습률이 너무 크면 최적점에 수렴하지 않고 발산할 수 있으며, 너무 작으면 학습 속도가 느려지고 지역 최소점(local minimum)에 갇힐 수 있다. 따라서 적절한 학습률을 선택하는 것이 경사하강법의 성공적인 적용에 매우 중요하다.

* **고정 학습률**: 학습률이 일정한 값으로 유지되는 방식이다. 간단하지만, 최적의 학습률을 찾기 어렵다는 단점이 있다.
* **적응 학습률**: 학습이 진행됨에 따라 학습률이 변하는 방식이다. 대표적으로 AdaGrad, RMSProp, Adam 등이 있다.

#### 미니배치, 확률적, 배치 경사하강법 (Mini-Batch, Stochastic, and Batch Gradient Descent)

경사하강법은 주어진 데이터를 사용하는 방식에 따라 크게 세 가지로 나뉜다: 배치 경사하강법(Batch Gradient Descent), 확률적 경사하강법(Stochastic Gradient Descent), 그리고 미니배치 경사하강법(Mini-Batch Gradient Descent)이다.

* **배치 경사하강법**: 전체 데이터셋을 사용해 기울기를 계산하고 가중치를 업데이트하는 방식이다. 정확하지만 계산 비용이 크며, 큰 데이터셋에서는 비효율적일 수 있다.
* **확률적 경사하강법**: 각 데이터 포인트마다 기울기를 계산하고 가중치를 업데이트하는 방식이다. 계산이 빠르고 메모리 요구량이 적지만, 기울기의 노이즈로 인해 수렴이 불안정할 수 있다.
* **미니배치 경사하강법**: 전체 데이터셋을 작은 배치로 나누어 각 배치에 대해 기울기를 계산하고 가중치를 업데이트하는 방식이다. 배치와 확률적 방법의 절충안으로, 계산 효율성과 수렴 안정성의 균형을 제공한다.

#### 경사하강법의 변형 알고리즘 (Variants of Gradient Descent)

경사하강법의 기본 개념을 바탕으로 다양한 변형 알고리즘이 개발되었다. 이러한 알고리즘들은 학습의 안정성과 속도를 개선하기 위해 제안되었다.

* **모멘텀(Momentum)**: 경사하강법에 속도 개념을 도입하여 이전 업데이트 방향을 고려하여 가중치를 조정하는 방식이다. 이는 기울기의 진동을 줄이고 더 빠른 수렴을 가능하게 한다.
* **AdaGrad**: 매개변수마다 개별 학습률을 설정하여 드물게 발생하는 기울기는 크게, 자주 발생하는 기울기는 작게 반영되도록 한다. 그러나 학습률이 너무 작아질 수 있는 단점이 있다.
* **RMSProp**: AdaGrad의 단점을 개선하기 위해 제안된 방법으로, 지수 이동 평균(exponentially moving average)을 사용해 학습률이 지나치게 작아지는 것을 방지한다.
* **Adam**: 모멘텀과 RMSProp을 결합한 알고리즘으로, 학습률이 자동으로 조정되며, 대부분의 경우 좋은 성능을 보이다. Adam은 현재 가장 널리 사용되는 경사하강법 변형 중 하나이다.

#### 수렴 속도와 최적화 (Convergence Speed and Optimization)

경사하강법의 수렴 속도는 학습률, 데이터의 특성, 그리고 손실 함수의 형상에 의해 결정된다. 잘못된 학습률을 선택하거나 부적절한 초기화(initialization)를 하면 학습이 너무 느리거나 최적점에 도달하지 못할 수 있다. 또한, 경사하강법은 비볼록 함수(non-convex function)에서 지역 최소점에 갇힐 수 있으며, 이를 극복하기 위한 방법으로는 초기값을 다르게 설정하거나 다양한 최적화 기법을 사용하는 방법이 있다.

경사하강법은 강력한 최적화 도구이지만, 이론적 연구와 경험적 실험을 통해 각 문제에 적합한 변형 알고리즘과 파라미터 설정이 필요하다. 수렴 속도와 최적화 전략을 신중하게 선택하는 것이 모델의 성능에 큰 영향을 미친다.

***

관련 자료:

1. Ruder, S. (2016). An overview of gradient descent optimization algorithms. arXiv preprint arXiv:1609.04747.
2. Kingma, D. P., & Ba, J. (2015). Adam: A method for stochastic optimization. arXiv preprint arXiv:1412.6980.
3. Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
4. Nesterov, Y. (1983). A method of solving a convex programming problem with convergence rate O(1/k^2). Soviet Mathematics Doklady.
