본문 바로가기
AI Theory/DL Basic

딥러닝을 위한 경사하강법(Gradient Descent)

by climba 2022. 9. 23.
Reference : 네이버 부스트캠프 AI Tech 교육 자료

1. 경사하강법이란?

경사하강법(Gradient Descent)은 미분값을 이용해 어떤 함수의 극소값(최소점)을 찾아가는 최적화 알고리즘이다.

 

위키백과에 따르면 미분(微分, 영어: derivative) 또는 도함수(導函數)는 어떤 함수의 정의역 속 각 점에서 함숫값의 변화량과 독립 변숫값의 변화량 비의 극한 혹은 극한들로 치역이 구성되는 새로운 함수다. 이러한 정의는 우리가 고등학교에서 배웠듯, 다항함수, 삼각함수와 같은 함수의 특정 점에서의 순간 기울기를 구하는데 사용된다.

일반적인 미분

경사하강법에서 사용되는 미분의 의미 역시 거의 비슷하다.

미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로 최적화(Optimization)에서 제일 많이 사용되는 기법이다.

파이썬에서는 sympy.diff를 이용해 쉽게 미분을 계산할 수 있다.

2. 미분으로 본 경사하강법

그렇다면 다시 경사하강법으로 돌아와서, 미분값을 어떻게 이용하길래 함수의 극소값을 찾을 수 있다는 것일까?

 

미분값 즉, 기울기는 더할 경우 함수가 증가하고, 뺄 경우 함수는 감소한다.

예를들어 위와 같은 위로 볼록한 함수에서 기울기가 -3(음수)이라면 이 값을 더하면 x축 기준 왼쪽 방향으로 이동할 것이고 함수는 증가할 것이다.(아래 사진 참고)

반대로 기울기가 +5(양수)라면 더했을 때 x축 기준 오른쪽 방향으로 이동할 것이고 마찬가지로 함수는 증가할 것이다. 이차함수보다 훨씬 더 복잡한 함수 역시 이와 같은 방법을 이용해 극대값 혹은 극소값을 찾을 수 있는것이다.

이때, 미분값을 더해가며 극대값을 찾는 방법을 경사상승법이라한다.

경사상승법

반대로 미분값을 빼가며 극솟값을 찾는 방법을 경사하강법이라고 한다.

일반적으로 딥러닝 학습에서 최적화에 사용되는 함수는 Loss 함수 즉 손실함수인데 학습의 목적은 이 loss함수의 크기를 최소화하는 것이기 때문에 극솟값을 찾는 경사하강법이 주로 사용되는 것이다.

경사하강법

경사상승/경사하강법은 극값에 도달하면 미분값이 0이 되기 때문에 움직임을 멈춘다.

3. 알고리즘으로 본 경사하강법

경사하강법의 알고리즘은 아래와 같다.

경사하강법 알고리즘

컴퓨터로 미분을 계산할때 미분값이 0이 되는 것은 불가능하므로 eps를 설정해 종료 조건을 명시해야한다. 또한 lr(learning rate)은 학습률로서 미분을 통해 업데이트 하는 속도를 조절한다.

4. 만약 변수가 벡터라면?

변수가 벡터인 다변수 함수의 경우에는 편미분을 통해 그레디언트(gradient) 벡터를 구한 뒤 이를 경사하강/경사상승법에 사용한다. 또한 종료 조건에서 절대값(abs) 대신 노름(norm)을 이용한다.

그래디언트 벡터는 주어진 함수의 각 변수 별로 편미분을 통해 계산한 것이고 이를 이용하여 경사하강/경사상승법에 사용하는 것이다.

경사하강법에서 사용되는 그래디언트 벡터

그래디언트 벡터를 이용한 다변수 함수의 경사하강법 알고리즘은 아래와 같다.

댓글