경사하강법

- 미분의 개념과 그래디언트 벡터에 대해 알면 경사하강법의 알고리즘과 수식을 이해할 수 있다!

- 특히 변수가 벡터인 경우, 편미분을 통해서 구한 그래디언트 벡터를 통해 d-차원으로 경사하강법을 확장할 수 있다

 

미분(differentiation)의 개념:

변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법(최소점과 최대점 찾기)

-> sympy.diff 함수 이용해서 계산할 수 있음

-> 미분을 어디에 쓰지? : 접선의 기울기를 구할때/ 한점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가하는지/ 감소하는지 알 수 있다

-> 미분값을 빼면 경사하강법(gradient descent)이라고 하며 극소값의 위치를 구할 때 사용한다.

-> 미분값을 더하면 경사상승법(gradient ascent)이라 하며 함수의 극대값의 위치를 구할 때 사용한다.

-> 경사상승/하강법은 극값에 도달하면 움직임을 멈춤: 극값에서는 미분값이 0이므로 더 이상 업데이트가 안된다. 그러므로 목적함수 최적화가 자동으로 끝난다.

# 경사하강법 알고리즘
# gradient: 미분을 계산하는 함수
# init: 시작점, lr:학습률, eps:알고리즘 종료조건

var = init
grad = gradient(var)
while(abs(grad) > eps):
	var = var - lr * grad
    grad = gradient(var)

-> 변수가 벡터나 행렬일 경우: 편미분(partial differentiation) 사용

     단위벡터: 주어진 벡터 x가 있을 때, 그 x의 i번째 벡터에만 영향을 주고 나머지에는 영향을 주지 않음

-> 각 변수별로 편미분을 계산한 그레디언트(gradient) 벡터를 이용해 경사하강/ 경사상승법에 사용할 수 있다.(편미분이 d개)

# 경사하강법 알고리즘(벡터나 다변수일 경우)
# gradient: 그레디언트 벡터를 계산하는 함수
# init: 시작점, lr:학습률, eps:알고리즘 종료조건

var = init
grad = gradient(var)
while(norm(grad) > eps):  # 절대값 대신에 노름을 계산해서 종료조건 설정
	var = var - lr * grad
    grad = gradient(var)

출처:부스트 캠퍼스

'Data Scientist > Machine Learning' 카테고리의 다른 글

이상치 탐지 및 시각화 (코드 예제 포함)  (0) 2023.07.24
[ML] 벡터의 개념  (0) 2022.07.04
[ML] XGBoost  (0) 2022.03.31
[ML] 앙상블 기법  (0) 2022.02.09
[ML] tensorflow와 keras 의 차이  (0) 2022.02.03

+ Recent posts