Machine Learning

[부캠AI] AI Math - 경사하강법- 순한맛

욜스터 2022. 5. 12. 03:42
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)

미분값을 더하여 함수의 극대값의 위치를 구할 수 있다.

 

미분값이 음수라서 $x+f'(x)<x$는 왼쪽으로 이동하여 함수값이 증가

 

 

경사하강법(gradient descent)

미분값을 빼서 함수의 극소값의 위치를 구할 수 있다.

 

미분값이 양수라서 $x-f'(x) > x$는 왼쪽으로 이동하여 함수값이 감소

# 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