728x90

Gradient Descent

Gradient descent is a method for unconstrained mathematical optimization. It is a first-order iterative algorithm for finding a local minimum of a differentiable multivariate function

  • Wikipedia

1. Gradient Descent란?

Gradient Descent는(경사하강법) 머신러닝 모델을 학습시키는 최적화 알고리즘으로, 모델의 Loss Function을 최소화하는 weight를 찾는 데 사용된다.

사전의 정의를 보면 미분가능한 다변수 함수의 최저점을 찾는데 사용되는 iterative한 최적화 알고리즘이라고 한다.

Gradient Descent가 동작하는 방식을 보면 이해에 도움이 되는데,

2. Gradient Descent Algorithm

  1. 현재 가중치(weight)에서 Loss Function의 기울기인 편미분값을 계산한다.
  2. 그 다음, 이 기울기에 학습률(learning rate)을 곱한 값을 현재 가중치에서 빼서 새로운 가중치로 업데이트한다.
  3. 이 과정을 도함수의 미분계수가 더 이상 감소하지 않을 때까지반복함으로써 최적의 가중치를 찾아간다.

Gradient Descent는 아래의 식을 통해 기울기를 갱신하고,

목적함수의 최저점(=argmin)이 될 때까지 위의 식을 반복하게 된다.

그런데, 이 목적함수의 최저점을 찾는다는 것은 도함수의 미분계수가 0이되는 지점을 찾는 것과 같은 의미이다.
왜냐면 목적함수의 기울기(gradient)는 순간 변화율을 의미하는 것이기 때문에

  • 도함수의 미분 계수(기울기)가 마이너스인 경우는 감소중이고,
  • 도함수의 미분 계수(기울기)가 플러스인 경우는 증가중이고,
  • 도함수의 미분 계수(기울기)가 0인 경우가 순간 변화율이 없어서 가장 낮은 지점에 있는 것이다.

3. Learning Rate

하지만 gradient descent의 목적함수의 계수가 높아지면 이동보폭이 커져서 gradient exploding problem이 발생하게된다.

그래서 0에서 1 사이의 값을 미분계수에 곱해서 마이너스 방향으로 이동시킬 미분 계수를 suppress해야 이동 보폭을 줄일 수 있게 된다.
이것이 라고 부르는 learningrate(학습률)이다.

요약하자면

경사하강법은 Gradient Descent는 최적화 알고리즘으로,
목적함수의 최저점을 구하기위해 학습 변수로 경사를 구해서 alpha라는 학습률을 곱해 weight를 갱신하고, 이 것을 여러번 반복해 optimal한 w 값을 구하는 것이다.

그래서, Gradient Descent는 딥러닝과 어떻게 연관이 되는 것인가?

이 부분에서 많이 헤맸는데,

(물론 backpropagation 과정에 수행되는 것이지… 이지만)
결론적으로 gradient descent는 Optimizer과 관련있는 것이었다.

4. Optimizer

순정 Gradient Based Learning은 전체 데이터를 대상으로 Gradient Descent를 수행해야하기 때문에
데이터가 많은 경우 덩달아 연산량이 많아지게 된다.

그래서 Stochastic Gradient Descent처럼 미니배치로 일부의 데이터로 오차를 계산해서 점진적으로 최저점에 도달하거나
Adam과 같이 Momentum 개념이 도입된 변형 알고리즘 기법이 등장하게 된 것이다.

산의 정상에서 내려올때 시야에 보이는 가장 낮은 지점으로 이동하는 방식을 반복해서 하산하는 것에 비유할 수 있겠다.


Backpropagation

1. Backpropagation이란?

backpropagation은 Chain Rule과 Gradient Descent가 결합된 딥러닝 학습 알고리즘이다.

2. Chain Rule

1개의 함수로 이루어진 경우에는 바로 Gradient Descent로 오차를 구해 weight를 갱신하면 되지만,
딥러닝의 심층 신경망은 (일반적으로) 1층의 레이어에 해당하는 뉴런이 affine 함수와 activation 함수로 구성이 되어있고,
층이 여러개로 구성되어있기 때문에 여러개의 함수가 합쳐진 형태 (합성함수)로 생겼기 때문에

최종 Loss값에서 곧바로 hidden layer 안에 있는 함수들의 미분계수를 구할 수가 없다.

그래서 Chain Rule이라는 수학적 원리를 사용해서 hidden layer안에 있는 함수들의 미분 계수를 구해야한다.

Chain Rule은 여러개의 미분가능한 함수가 합쳐진 형태의 합성함수는 위와 같은 방식으로 편미분된 도함수로 곱해서 상쇄할 수 있다는 것을 의미한다.

3. Backpropagation 과정

그래서 합성함수로 이루어진 심층신경망은 Chain Rule을 사용해 미분계수를 계산하고 gradient descent를 하게 된다.

  1. 순전파: Affine Function와 Activation Function에서 각 파라미터 별 미분 값을 구한다.
  2. Loss구하기: 순전파 이후 예측값(pred)와 타겟(y)의 차이 J를 계산한다.
  3. 역전파:
    • Loss Function 단계: 이 J를 예측값(pred)에 대해 미분하여 Activation Function으로 돌려준다.
    • Activation Function 단계: Loss Function 단계에서 돌려받은 loss 미분값과, activation function의 미분값을 곱해서 Affine Function으로 돌려준다.
    • Affine Function 단계: Activation Function 단계에서 돌려받은 activation function의 미분값과, 학습률를 곱해서 기존의 weight과 bias에서 뺀다.

Layer 1층짜리 신경망을 예시로 설명했지만, 층이 여러개인 MLP의 경우에도 chain rule은 동일하게 적용되기때문에
이전 층의 activation function에서 받는 값은 그다음 층의 affine function의 weight에 대한 미분값(gradient)이 된다.

요약하자면

Backpropagation은 딥러닝 신경망을 학습시키는 알고리즘으로,
합성함수로 구성된 심층 신경망을 chain rule을 이용해 gradient based learning을 시키는 것이다.
순전파로 각 파라미터별 미분값을 구하고, loss를 구해 chain rule로 연쇄적으로 값을 미분해 반대방향으로 돌려주면서 순전파 당시의 미분값과 돌려받은 상쇄된 loss 미분값을 학습률과 곱해 기존의 weight과 bias를 갱신시키게 된다.
gradient descent와 마찬가지로 이 과정을 반복하여 최적의 weight과 bias를 찾아가게 된다.


참고 자료

새싹 AI데이터엔지니어 핀테커스 11주차 (월) - Gradient Based Learning & Backpropagation :: Shijuan’s AI Diary (tistory.com)
새싹 AI데이터엔지니어 핀테커스 11주차 (화) - Backpropagation :: Shijuan’s AI Diary (tistory.com)

(강의 42) 어떻게 에러의 역전파가 개발되었나?: 미리어드 스페이스 인공지능, 머신러닝, 딥러닝 저자 직강 시리즈

반응형