728x90
AI Math 2강: 경사하강법- 순한맛
미분의 개념과 gradient vector, 경사하강법의 알고리즘
📌미분이란?
변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구
# sympy.diff을 사용하면 컴퓨터로 미분을 계산할 수 있다.
import sympy as sym
from sympy.abc import x
sym.diff(sym.poly(x**2 + 2*x + 3), x)
- 미분으로 함수 의 주어진 점 에서의 접선의 기울기를 구할 수 있다.
- 기울기를 알면 어느 방향으로 움직여야 함수값이 증가하는지, 감소하는지 알 수 있다.
경사상승법 (gradient ascent)
미분값을 더하여 함수의 극대값의 위치를 구할 수 있다.
경사하강법(gradient descent)
미분값을 빼서 함수의 극소값의 위치를 구할 수 있다.
# gradient: 미분 계산 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var = init
grad = gradient(var)
# 컴퓨터로 계산할 때 미분이 정확히 0이 되는 것은 불가능
# eps보다 작을 때 종료하는 조건이 필요
while (abs(grad) > eps):
var = var - lr * grad
grad = gradient(var) # 업데이트
이 방법들은 극값에 도달하면 움직임을 멈춘다.
❓변수가 벡터인 경우?
다변수 함수의 경우, 편미분(partial differentiation)을 사용한다.
import sympy as sym
from sympy.abc import x
sym.diff(sym.poly(x**2 + 2*x*y + 3) + sym.cos(x+2*y), x)
각 변수만큼 편미분을 계산하면 그레이디언트(gradient) 벡터를 구할 수 있다.
이로 경사하강, 경사상승법에 사용할 수 있다.
📌그레이디언트 벡터란?
임의의 점에서 가장 빠르게 증가하는 방향,
를 붙이면 각점에서 가장빨리 감소하게 되는 방향
경사하강법 : 알고리즘
다변수 함수에서 최소점을 찾는 코드
# gradient: 그레이디언트 벡터를 찾는 함수
var = init
grad = gradient(var)
while (norm(grad) > eps):
var = var - lr * grad
grad = gradient(var)
728x90
반응형
'Machine Learning' 카테고리의 다른 글
[부캠AI] AI Math - 행렬이 뭐예요? (0) | 2022.05.12 |
---|---|
[부캠AI] AI Math - 백터가 뭐예요? (0) | 2021.08.09 |
[인공지능] 개념! (0) | 2021.06.14 |