[Day 4] 경사하강법

2021. 8. 5. 23:18AI 부스트캠프

  • 인공지능에서의 미분 : 변수의 따른 함수값의 변화를 측정하기 위한 도구 / 최적화에서 많이 사용한다.
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