미분 Differentiation
변수의 움직임에 따른 함수값의 변화 측정법
기울기=변화율
변화율의 극한 = 미분 = 한 점에서의 접선의 기울기
import sympy as sym
from sympy.abc import x
fx=sym.poly(x**2 +2*x +3) # 다항식
sym.diff(fx,x) #x로 미분하라
>>>Poly(2𝑥+2,𝑥,𝑑𝑜𝑚𝑎𝑖𝑛=ℤ)
미분을 어디에 쓸까?
현재 주어진 점에서 어느 방향으로 움직여야 함수값이 증가 혹은 감소하는지 알 수 있다.
차원이 높아질 수록 어느 방향으로 가야 함수값이 커질지 작아질지 에측하기 어렵다.
어느 차원에서든 미분값이 양수든 음수든 상관없이
- 함수값을 증가시키고 싶으면 미분값을 더해준다
경사상승법 (gradient ascent) : 함수 최대화, 주어진 점에서 극댓값의 위치를 구할 때 사용한다. - 함수값을 감소시키고 싶으면 미분값을 빼준다
경사하강법 (gradient descent) : 목적함수 최소화, 극솟값의 위치를 구할 때 사용한다.
극값에서의 미분값은 0 이기때문에 더해도 빼도 더이상 움직이지 않는다. 그러므로 목적함수 최적화(최대화나 최소화)가 끝나게 된다
위의 예시는 함수의 변수가 하나일 때 였다. 그래서 한 변수인 x에 대해서 +이냐 -이냐 두 가지 선택지 밖에 없었다.
변수가 벡터일 때
변수가 2개 이상인 다변수 함수가 입력으로 주어질 수 있다.
ex) $ f(x,y) = x^2 + 2xy + 3 + cos(x + 2y)$
그렇다면 다변수함수에서의 한 점은 다차원의 한 점이기 때문에 많고 다양한 방향으로 이동할 수 있다.
편미분(partial differentiation)은 한 변수에 대해서만 하는 미분이다.
이 편미분으로 특정 방향의 좌표축으로 이동하게 할 수 있다.
모든 방향에서의 편미분을 하면 주어진 함수의 변수의 갯수만큼 하게 된다.
그레디언트 벡터 gradient vector
d차원이면 편미분을 d번 해서 그 각 변수의 편미분을 모아서 하나의 벡터로 만든 것이 gradient vector이다.
그래서 각 gradient vector의 구성성분은 편미분으로 정의된다.
식의 $\nabla $ (nabla) 이 기호는 다변수를 입력으로 가지는 함수의 gradient vector를 나타낸다.
이제 f'(x)대신에 gradient vector를 사용하게 된다.
아까는 다변수를 표시할 때 x,y 로 했으나, 이제 여러 개가 될 수 있으니 y 대신 $x_1, x_2 ...$와 같이 표시한다.
왼쪽이 다변수함수이고 오른쪽이 왼쪽의 함수의 gradient vector에 -를 붙힌 것이다.
$-{\nabla}f $ 를 따라 내려가면 극솟점을 찾을 수 있다.
어느 점에서든지 시작해도 모두 극솟점을 향한다.
반대로 -를 붙히지 않은 ${\nabla}f $ 는 각 점에서 증가하는 방향으로 흐르게 된다.