import sympy as sym
from sympy.abc import x
sym.diff(sym.poly(x**2 + 2*x + 3), x)
고차원 공간에서는 어느 방향으로 움직여야 함수값이 증가/감소하는지 알기 어려우므로 미분을 이용하여 방향을 정함
경사상승법: 미분값을 더할 때이며, 함수의 극대값의 위치를 구할 때 사용함

경사하강법: 미분값을 뺄 때이며, 함수의 극소값의 위치를 구할 때 사용함

경사상승/경사하강 법은 극값에 도달하면 움직임을 멈춤 = 미분값이 0
- gradient: 미분을 계산하는 함수
- init: 시작점
- lr: 학습률(미분을 통해 업데이트하는 속도를 조절)
- eps: 알고리즘 종료조건

벡터가 입력인 다변수 함수의 경우 편미분(partial differeniation)을 사용함
e_i는 i번째 값만 1이고 나머지는 0이므로 원하는 부분 i에서의 값만 계산할 수 있음

x와 y가 같이 있는 식의 경우 x에 대해서 미분하면 y는 상수 취급
당연히 x에 대한 편미분뿐만 아니라 y에 대한 편미분도 계산할 수 있음

만약 n차원 벡터라고 한다면 편미분을 n번 계산할 수 있음
- n개만큼 편미분을 계산한 함수들을 하나의 벡터로 표현할 수 있는데 이것을 그레디언트(gradient) 벡터라고 함

아래 예시

