경사하강법(순한맛)

경사하강법 I


미분

  • 미분은 변수의 움직임에 다른 함수값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법이다.
  • 최근엔 미분은 컴퓨터가 계산한다.

image.png

수식

$$f(x) = x^{2} +2x+3$$$$f'(x) = 2x+2$$


image.png

  • 미분은 함수 $f$의 주어진 점$(x,f(x))$에서의 접선의 기울기를 구한다.
  • 함수에서 $h$→0으로 보내면 $(x,f(x))$에서 접선의 기울기로 수렴한다.
  • 미분을 계산하려면 연속 함수이어야 한다.


image.png

  • 한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가하는지, 감소하는지 알 수 있다.
  • 증가시키고 싶다면 미분값을 더한다.
  • 감소시키고 싶다면 미분값을 뺀다



미분값이 음수 일 때


image.png

미분값이 양수 일 때

image.png

  • 미분값을 더하면 경사상승법(gradient ascent)이라 하며 함수의 극대값의 위치를 구할 때 사용한다.
  • 목적함수를 최대화할 때 사용한다.
  • 미분값을 빼면 경사하강법(gradient descent)이라 하며 함수의 극소값의 위치를 구할 때 사용한다.
  • 목적함수를 최소화할 때 사용한다.


극값

image.png

  • 경사상승/경사하강 방법은 극값에 도달하면 움직임을 멈춘다.
  • 극값에서는 미분값이 0이므로 더이상 업데이트가 안 된다.



경사하강법: 알고리즘(미분값)

# gradient: 미분을 계산하는 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var=init
grad=gradient(var)
while(abs(grad) > eps):
    var=var- lr*grad
    grad=gradient(var)

while(abs(grad) > eps)
컴퓨터로 계산할 때 미분이 정확히 0이 되는것은 불가능하므로 eps보다 작을 때 종료하는 조건이 필요하다.

var=var- lr*grad 이 부분이 $x- \lambda f'(x)$을 계산하는 부분. lr은 학습률로서 미분을 통해 업데이트하는 속도를 조절한다. 이 값은 잘 조절해야 한다.



변수가 벡터인 경우

  • 벡터가 입력인 다변수 함수의 경우 편미분(partial differentiation)을 사용한다.

image.png

  • $e_{i}$는 $i$번째 값만 1이고 나머지는 0인 단위벡터이다.


예시) image.png

  • $x$에 대해서 편미분한 값이다.


image.png

각 변수 별로 편미분을 계산한 그레디언트(gradient) 벡터를 이용하여 경사하강/경사상승법에 사용할 수 있다. 앞서 사용한 미분값인 $f'(x)$대신 벡터$\nabla f$를 사용하여 변수 $x=(x_{1},...,x_{d})$를 동시에 업데이트 가능하다.



경사하강법: 알고리즘(norm)

# gradient: 그레디언트을 계산하는 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var=init
grad=gradient(var)
while(norm(grad) > eps):
    var=var- lr*grad
    grad=gradient(var)

벡터에서는 절대값 대신 노름(norm)을 계산해서 종료조건을 설정

'AI > 이론' 카테고리의 다른 글

딥러닝 학습방법 이해하기  (0) 2021.01.27
Pandas II  (0) 2021.01.27
Pandas I  (0) 2021.01.27
경사하강법 II  (0) 2021.01.26
행렬  (0) 2021.01.25
벡터  (0) 2021.01.25
Numpy part III  (0) 2021.01.25
Numpy part II  (0) 2021.01.25

+ Recent posts