[Day 4] 경사하강법
2021. 8. 5. 23:18ㆍAI 부스트캠프
- 인공지능에서의 미분 : 변수의 따른 함수값의 변화를 측정하기 위한 도구 / 최적화에서 많이 사용한다.
import sympy as sym
from sympy.abc import x
f_x = x**2 + 2x + 1
sys.diff(sym.poly(f_x), x)
이렇게 sympy를 이용하여 간단히 미분값을 구할 수 있다. (sys.diff 이용)
x좌표에서 f'(x)를 빼는 것을 gradient descent 라 하며, 극소값의 위치를 구할 때 사용한다.
*** 경사하강법을 통해 극값에 도달하면 움직임을 멈춘다 ***
더보기
알고리즘 분석
while(abs(gradient) > epslion): ## gradient가 앱실론보다 작아지면 while문을 종료
value = value - learning_rate * gradient ## value를 업데이트 해주는데, learning_rate로 조절한다.
gradient = fun(value) ## gradient를 업데이트 해준다.
만약 변수가 vector로 주어진다면?? >>> gradient vector를 이용한다.
** gradient vector >>> 각 변수별로 편미분한 vector
** abs대신 norm함수 이용!!
- 경사하강법을 통한 선형회귀 계수 구하기
- 선형회귀의 목적식은 ∥y − Xβ∥2 이고, 목적식을 최소화하기 위한 β를 구해야한다. >>> gradient vector 이용
-
for i in range(학습횟수): error = y - x @ beta gradient = -np.transpose(X) @ error beta = beta - learning_rate * gradient
- 볼록함수에 대해서 경사하강법은 항상 수렴한다. 특히 선형모델에서 수렴이 보장된다.
- 비선형모델인 경우 수렴이 보장되지 않는다 >>> SGD(확률적 경사하강법) 이용!
- SGD
- GD와 다른점 : 모든 데이터를 사용하지 않고 일부의 데이터만을 이용한다.
- SGD는 미니배치를 가지고 gradient vector을 계산한다. 미니배치는 확률적으로 선택하므로 목적식 모양이 바뀌게된다.
출저 : https://www.youtube.com/watch?v=0Lrvk3Fozsc
'AI 부스트캠프' 카테고리의 다른 글
[Day 6] 딥러닝 basic & MLP (0) | 2021.08.09 |
---|---|
[Day 1] numpy와 pandas (4) | 2021.08.06 |
[Day 5] 확률/통계학 (0) | 2021.08.06 |
[Day 3] 파이썬의 자료구조 (0) | 2021.08.04 |
[Day 2] 파이썬의 String (0) | 2021.08.03 |