# 역전파에서 경사하강법 (Gradient Descent in Backpropagation)

#### 경사하강법의 원리

경사하강법은 미분 가능한 함수의 최소값을 찾기 위한 최적화 알고리즘이다. 신경망에서의 목표는 손실 함수(loss function)의 값을 최소화하는 것이다. 손실 함수는 네트워크의 출력과 실제 값 사이의 차이를 나타내며, 이 함수의 기울기(gradient)를 계산해 가중치를 업데이트함으로써 손실을 줄여 나간다.

경사하강법의 핵심 아이디어는 현재 위치에서 손실 함수의 기울기를 계산하고, 그 기울기의 반대 방향으로 가중치를 조금씩 이동시키는 것이다. 이 과정을 반복하면 손실 함수의 값이 점차 줄어들고, 결국에는 함수의 최소값에 도달하게 된다.

수학적으로, 경사하강법은 다음과 같이 표현된다:

$$
\theta := \theta - \alpha \nabla\_\theta J(\theta)
$$

여기서:

* $ \theta $는 모델의 가중치를 의미한다.
* $ \alpha $는 학습률(learning rate)로, 한 번의 업데이트에서 가중치를 얼마나 변경할지를 결정한다.
* $ \nabla\_\theta J(\theta) $는 가중치 $ \theta $에 대한 손실 함수 $ J(\theta) $의 기울기를 나타낸다.

#### 역전파에서 경사하강법의 적용

역전파 알고리즘은 다음 단계로 구성된다:

1. **순전파(forward propagation)**: 입력 데이터를 네트워크에 통과시켜 출력을 계산한다. 이 과정에서 각 뉴런의 출력 값과 네트워크의 최종 출력을 계산한다.
2. **손실 계산(loss calculation)**: 네트워크의 출력과 실제 값을 비교하여 손실을 계산한다. 손실 함수는 일반적으로 평균 제곱 오차(mean squared error)나 크로스 엔트로피(cross-entropy)를 사용한다.
3. **역전파 단계(backpropagation step)**: 출력층에서부터 시작하여 각 층의 기울기를 계산한다. 이는 손실 함수의 값이 각 가중치에 대해 얼마나 민감한지를 나타내는 값이다. 기울기는 체인 룰(chain rule)을 통해 계산되며, 네트워크의 각 층을 거치면서 점진적으로 업데이트된다.
4. **가중치 업데이트(weight update)**: 경사하강법을 사용하여 각 가중치를 업데이트한다. 이때 각 가중치는 다음과 같이 업데이트된다:

$$
\theta\_l := \theta\_l - \alpha \nabla\_{\theta\_l} J(\theta)
$$

여기서 $ \theta\_l $은 l번째 층의 가중치를 의미한다.

5. **반복(iteration)**: 위의 과정들을 다수의 에포크(epoch)에 걸쳐 반복하여 네트워크가 학습을 진행한다.

#### 학습률과 수렴

학습률(learning rate)은 경사하강법에서 중요한 하이퍼파라미터다. 학습률이 너무 크면 손실 함수의 최소값을 지나칠 수 있으며, 너무 작으면 학습 속도가 느려져 시간이 많이 소요될 수 있다. 적절한 학습률을 선택하는 것은 신경망이 효과적으로 학습하는 데 필수적이다.

수렴(convergence)은 경사하강법이 손실 함수의 최소값에 도달했을 때를 의미한다. 이상적인 경우, 손실 함수의 기울기가 0에 가까워지면서 가중치 업데이트가 점차 작아지고, 결국 손실 함수가 일정한 값에 도달하여 학습이 종료된다.

경사하강법은 전체 데이터셋을 이용하는 배치 경사하강법(batch gradient descent), 데이터의 일부만을 사용하는 미니배치 경사하강법(mini-batch gradient descent), 그리고 하나의 데이터 포인트만을 사용하는 확률적 경사하강법(stochastic gradient descent)으로 나뉜다.각 방법은 계산 효율성과 수렴 속도에 따라 적절히 선택된다.

#### 역전파의 수학적 배경

역전파는 연쇄 법칙(chain rule)에 기초한다. 신경망의 각 가중치에 대한 손실 함수의 편미분을 구하기 위해, 역전파는 출력층에서 입력층으로 역으로 기울기를 전파시킨다. 이 과정은 크게 두 가지로 나뉜다.:

1. **출력층에서의 기울기 계산**: 손실 함수의 출력에 대한 기울기를 계산하고, 이를 바탕으로 출력층의 가중치에 대한 기울기를 구한다.
2. **은닉층에서의 기울기 전파**: 출력층에서 구한 기울기를 이전 층으로 전파하면서, 각 은닉층의 가중치에 대한 기울기를 계산한다. 이 과정은 네트워크의 모든 은닉층을 거쳐 입력층까지 이어진다.

역전파의 수학적 표현은 다음과 같다:

1. 출력층의 기울기 계산:

$$
\delta^L = \nabla\_a C \odot \sigma'(z^L)
$$

여기서:

* $ \delta^L $는 출력층의 오류 값이다.
* $ \nabla\_a C $는 출력층의 활성화 함수에 대한 손실 함수의 기울기다.
* $ \sigma'(z^L) $는 출력층의 가중합에 대한 활성화 함수의 미분값이다.

2. 은닉층의 기울기 전파:

$$
\delta^l = ((\theta^{l+1})^T \delta^{l+1}) \odot \sigma'(z^l)
$$

여기서:

* $ \delta^l $은 l번째 은닉층의 오류 값이다.
* $ (\theta^{l+1})^T $는 (l+1)번째 층의 가중치 행렬의 전치행렬이다.
* $ \delta^{l+1} $는 (l+1)번째 층의 오류 값이다.
* $ \sigma'(z^l) $는 l번째 층의 가중합에 대한 활성화 함수의 미분값이다.

#### 경사하강법의 변형

경사하강법의 여러 변형들이 있다. 대표적으로는 모멘텀(momentum), RMSProp, Adam 등이 있다. 모멘텀은 이전의 기울기를 고려하여 가중치를 업데이트하며, 이는 수렴 속도를 높이는 데 도움을 준다. RMSProp은 학습률을 동적으로 조정하여, 손실 함수가 고르지 않은 경우에도 안정적인 학습이 가능하게 한다. Adam은 모멘텀과 RMSProp의 장점을 결합한 방법으로, 최근 많이 사용되는 최적화 알고리즘이다.

***

관련 자료:

* Goodfellow, I., Bengio, Y., & Courville, A. (2016). *Deep Learning*. MIT Press.
* Bishop, C. M. (2006). *Pattern Recognition and Machine Learning*. Springer.
* Rumelhart, D. E., Hinton, G. E., & Williams, R. J. (1986). Learning representations by back-propagating errors. *Nature*, 323(6088), 533-536.
