Gradient descent
# 미분
미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로, 최적화에 제일 많이 사용하는 기법입니다.
- 미분은 변화율(’접선의 기울기’) 의 극한으로 정의합니다.
$$ f’(x) = \lim_{h \to 0}{f(x+h) - f(x) \over h} $$
sympy.diff
로 할 수 있다.- 한 점에서 접선의 기울기를 알면, 어느 방향으로 점을 움직여야 함수값이 증가, 감소하는지 알 수 있다.
- 증가시키고 싶으면 미분값을 더하고
- 미분값을 더하면 ‘경사상승법’이라 하며 함수의 극대값의 위치를 구할 때 사용한다.
- 감소시키고 싶으면 미분값을 뺸다.
- 미분값을 빼면 ‘경사하강법’이라 하며 함수의 극소값의 위치를 구할 때 사용한다.
- 목적함수를 최소화할 때 사용한다.
- 극값에 도달하면 미분값이 0이므로 더 이상 업데이트가 되지 않고 움직임이 멈춘다.
# 편미분(Partial Differentiation)
벡터가 입력인 다변수 함수의 경우 편미분을 사용한다.
$$ \partial_{x_i}f({x}) = \lim_{h \to 0}{f({x} + h{e}_i) - f({x}) \over h} $$
- ${e}_i$는 i번째 값만 1이고 나머지는 0인 단위벡터
$$ f(x,y) = x^2+2xy+3+\cos(x+2y), \\ \partial_xf(x,y) = 2xy+2y-\sin(x+2y) $$
- x 방향 편미분을 하면 y를 상수취급하고 x에 대해 미분한 결과만 반환한다.
- 각 변수 별로 편미분을 계산한 ‘그레디언트 벡터’를 이용하여 경사하강/경사상승법에 사용할 수 있다.
- 즉, 앞서 사용한 미분값 $f’(x)$ 대신 벡터 $\nabla f$를 사용하여 변수 $x = (x_1, x_2, \cdots, x_d)$를 동시에 업데이트 가능하다. 이를 수식으로 나타내면 아래와 같다.
$$ \nabla f = (\partial_{x_1}f, \partial_{x_2}f, \cdots, \partial_{x_d}f) $$
- 그레디언트 벡터 $\nabla f(x,y)$는 각 점 $(x,y)$에서 가장 빨리 증가하는 방향으로 흐르게 된다.
- 이와 반대로, 그레디언트 벡터에 마이너스를 붙이면 극소값으로 이동한다. 즉, $-\nabla f$는 극소값으로 이동한다.
$$ f(x,y) = x^2 + 2y^2 \
\nabla f = -(2x, 4y) $$
알고리즘 상에서. 벡터를 다룰 때는 노름(norm)을 계산하여 종료조건으로 설정해야 한다.