머신러닝, 딥러닝 ML, DL/이론

[Deep Learning] 6. 경사 하강법, 기울기

킹남지 2021. 8. 4. 19:00
반응형

전 포스팅에서 수치 미분을 통해 함수의 기울기를 구했습니다.

이번에는 손실 함수의 기울기를 구하고, 경사 하강법을 통해 손실 함수가 최소가 되는 최적의 매개변수 값을 찾을 때까지

가중치를 갱신해보겠습니다.

 

이 전의 포스팅과 같이 구현과 관련된 내용은 제 깃허브 링크를 참고해주시기 바랍니다.

https://github.com/Kingnamji/BigAI/blob/main/%EB%B0%91%EC%8B%9C%EB%94%A51_re/04_NNTrain.ipynb

 

기울기

변수가 여럿인 함수 (다변수 함수)에 대해 특정 변수를 제외한 나머지 변수를 상수로 간주하고 미분하는 것을 편미분이라고 하고,

 

모든 변수에 대한 편미분을 좌표로 갖는 벡터를을 기울기(gradient)라고 합니다. (이전 포스팅 내용)

 

$f(x_0, x_1) = x_0^2 + x_1^2$의 기울기에 -1을 곱해 그려보겠습니다.

기울기는 함수의 가장 낮은 장소(최솟값)을 가리킵니다. 또한 '가장 낮은 곳'에서 멀어질수록 화살표의 크기가 커집니다.

그림에서 기울기가 가리키는 쪽은 각 장소에서 함수의 출력 값을 가장 크게 줄이는 방향입니다.

 

경사 하강법

신경망의 학습 때 최적의 매개변수 값을 찾는 기준으로 정확도가 아닌 손실 함수의 값을 이용하기로 했습니다.

그러면 최적의 매개변수 값은 손실 함수가 최솟값이 될 때의 매개변수 값이됩니다.

 

광대한 매개변수 공간에서 어디가 손실 함수 값을 최소로 만드는지 찾는 것은 쉽지 않습니다.

하지만 기울기를 잘 이용해 가능한 한 작은값을 찾으려는 것이 경사 하강법(Gradient Descent Method)입니다.

(반대로 경사 상승법은 최댓값을 찾습니다)

 

* 경사법은 기울기가 0인 장소를 찾지만 그것이 반드시 최솟값이라 할 수 없습니다! (아래 예시 그림 확인)

그림에 표시된 점의 경우 한 방향에서 보면 극댓값이고 다른 방향에서 보면 극솟값입니다.

 

 

기울어진 방향이 꼭 최솟값을 가리키지는 않지만, 그 방향으로 가야 함수의 값을 줄일 수 있습니다.

 

경사하강법은 현 위치에서 기울어진 방향으로 일정 거리만큼 이동하는 것을 반복하면서 함수의 값을 점차 줄입니다.

 

매개변수가 두개, $x_0, x_1$인 함수의 경사하강법을 수식으로 나타내면 아래와 같습니다.

$x_0 = x_0 - \eta \frac{\partial{f}}{\partial{x_0}}$

$x_1 = x_1 - \eta \frac{\partial{f}}{\partial{x_1}} $

 

이때 $\eta$ (eta) 는 갱신하는 양을 나타내며 학습률(learning rate)라고 부릅니다.

학습률 값은 0.01, 0.001같이 미리 특정 값으로 정해둬야 합니다.

 

일반적으로 학습률의 값이 너무 크거나 작으면 최적의 매개변수를찾기 힘듭니다.

 

학습률 같은 매개변수를 하이퍼파라미터(hyper parameter)라고 부릅니다. 

가중치와 편향 같은 신경망의 매개변수와는 다릅니다. 가중치나 편향은 훈련 데이터를 통해 학습하는 과정에서 '자동'으로 갱신되지만,

하이퍼파라미터는 사람이 직접 설정해야하는 매개변수를 말합니다.

 

신경망 학습에서의 기울기, 경사하강법

앞 예시에서는 이해를 돕기 위해 $f, x_0, x_1$ 에 대한 기울기를 얘기했지만

신경망 학습에서는 가중치 $W$와 손실 함수$L$에 대해서 표현하는게 일반적입니다.

 

이런 경우 기울기는 $\frac{\partial L}{\partial W}$ 로 나타낼 수 있습니다.

 

그럼 우리는 경사하강법의 수식을 아래와 같이 나타낼 수 있습니다.

$W \leftarrow W - \eta \frac{\partial L}{\partial W}$

 

이렇게하면 신경망 학습에서 기울기를 통해 $W$가 갱신됨을 알 수 있습니다.

 

지금까지는 기울기를 이용하기 위해 수치 미분을 사용했지만, 수치 미분은 계산 시간이 오래 걸린다는 단점이 있습니다.

 

기울기를 효율적으로 구하기 위해서는 오차역전파법(backpropagation)에 대해 알아야합니다.

https://deep-learning-study.tistory.com/16

 

04-1. 오차역전파법 (1) - 계산 그래프와 연쇄법칙

(밑바닥부터 시작하는 딥러닝, 사이토고치) 를 바탕으로 작성하였습니다.  오차역전파법 (1) - 계산 그래프와 연쇄법칙  이전의 포스팅에서는 신경망 학습을 공부했습니다. 그때 신경망의 가중

deep-learning-study.tistory.com

해당 블로그 게시글을 참고하면 좋을 것 같습니다.

 

읽어주셔서 감사합니다^^

 

[참고자료]

[1] 밑바닥부터 시작하는 딥러닝1 (사이토 고키)

반응형