15차시: 경사하강법
15-1. 경사하강법(순한 맛)
1. 미분이 뭔가요?
미분(Differentiation)은 변수의 움직임에 따른 함숫값이 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법이다.
최근에는 미분을 손으로 직접 계산하는 대신 컴퓨터가 계산해 줄 수 있다.
2. 미분을 그림으로 이해해 보자
미분은 함수 f의 주어진 점 (x, f(x))에서의 접선의 기울기를 구한다.
3. 미분을 어디에 쓸까?
한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함숫값이 증가/감소하는지 알 수 있다.
미분값을 더하면 경사상승법(Gradient Ascent)이라 하며 함수의 극대값의 위치를 구할 때 사용한다.
미분값을 빼면 경사하강법(Gradient Descent)이라 하며 함수의 극소값의 위치를 구할 때 사용한다.
경사상승/경사하강 방법은 극값에 도달하면 움직임을 멈춘다.
4. 경사하강법: 알고리즘
var = var - lr * grad
lr은 학습률(learning rate)로서 미분을 통해 업데이트하는 속도를 조절한다.
grad = gradient(var)
종료조건이 성립하기 전까지 미분값을 계속 업데이트한다.
def func(val):
fun = sym.poly(x**2 + 2*x + 3)
return fun.subs(x, val), fun
def func_gradient(fun, val):
_, function = fun(val)
diff = sym.diff(function, x)
return diff.subs(x, val), diff
def gradient_descent(fun, init_point,lr_rate=1e-2, epsilon=1e-5):
cnt = 0
val = init_point
diff, _ = func_gradient(fun, init_point)
while np.abs(diff) > epsilon:
val = val - lr_rate*diff
diff, _ = func_gradient(fun, val)
cnt+=1
print("함수: {}, 연산횟수: {}, 최소점: ({}, {})".format(fun(val)[1], cnt, val, fun(val)[0]))
gradient_descent(fun=func, init_point = np.random.uniform(-2,2))
5. 변수가 벡터이면요?
미분(Differentiation)은 변수의 움직임에 따른 함숫값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법입니다.
벡터가 입력인 다변수 함수의 경우 편미분(Partial Differentiation)을 사용한다.
각 변수 별로 편미분을 계산한 그레디언트(Gradient) 벡터를 이용하여 경사하강/경사상승법에 사용할 수 있다.
6. 그레디언트 벡터가 뭐예요?
그레디언트 벡터를 이용하여 극대, 극소로 향하는 방향을 알 수 있다.
7. 경사하강법: 알고리즘 2
© NAVER Connect Foundation. All Rights Reserved
'취업준비 > 인공지능' 카테고리의 다른 글
[AI Tech] 3주차 16-1차시 딥러닝 학습방법 이해하기 (0) | 2024.02.03 |
---|---|
[AI Tech] 3주차 15-2차시 경사하강법 연습 (1) | 2024.02.02 |
[AI Tech] 3주차 14-2차시 행렬이 뭐예요? (1) | 2024.01.30 |
[AI Tech] 3주차 14-1차시 벡터가 뭐예요? (0) | 2024.01.30 |
[AI Tech] 2주차 13차시 프로젝트 5 (1) | 2024.01.27 |