경사하강법
- 미분의 개념과 그래디언트 벡터에 대해 알면 경사하강법의 알고리즘과 수식을 이해할 수 있다!
- 특히 변수가 벡터인 경우, 편미분을 통해서 구한 그래디언트 벡터를 통해 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 |