경사하강법 (gradient descent)

pseeej·2021년 8월 3일
0

AI_Mathematics

목록 보기
3/9
post-thumbnail

미분

  • 미분(differentiation)은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구
  • sympy.diff로 쉽게 계산 가능
> import sympy as sym
> from sympy.abc import x

>sym.diff(sym.poly(x**2 + 2*x + 3), x)
Poly(2*x + 2, x, domain='ZZ')
  • 함수 f의 주어진 점(x, f(x))에서의 접선의 기울기를 구함
  • 접선의 기울기를 이용함으로써 어느 방향으로 점을 움직여야 함수값이 증가하는지/감소하는지 알 수 있음.
    - 미분값이 음수일 경우 x의 값을 왼쪽으로 이동할수록 함수값이 증가
    - 미분값이 양수일 경우 x의 값을 오른쪽으로 이동할수록 함수값이 증가
  • 미분값을 더하면 경사상승법(gradient ascent). 함수의 극대값의 위치 구할 때 사용
  • 미분값을 빼면 경사하강법(gradient descent). 함수의 극소값의 위치를 구할 때 사용
  • 경사상승법/경사하강법은 모두 극값에 도달하면 움직임을 멈춘다

변수가 벡터일 경우

  • 벡터가 input으로 주어지는 다변수함수의 경우, 편미분(partial differentiation)을 사용
  • 각 변수별로 편미분을 계산한 gradient 벡터 이용하여 경사하강법/경사상승법에 사용할 수 있음

경사하강법으로 선형회귀 계수 구하기

  • 무어-펜로즈는 선형일 때만 사용 가능 / 선형회귀모델은 비선형에서도 사용 가능
  • 선형회귀의 목적식은 L2-norm(||y-Xβ||) 이고, 이를 최소화하는 β를 찾아야함.

  • 계산의 편리 위해 L2-norm(||y-Xβ||)를 제곱한 값을 사용.
  • 최종적으로 구해지는 β의 식은

경사하강법 기반 선형회귀 알고리즘

Input : 선형 모델 X, 정답 y, 학습률 lr, 학습 횟수 T
Output : beta β

for t in range(T):
	error = y - X @beta
    grad = - transpose(X) @ error
    beta = beta - lr * grad
  • 적절한 학습률과 학습횟수를 선택했을 때 수렴 보장됨
  • 비선형회귀 문제의 경우 목적식이 볼록하지 않을 수 있어 수렴이 항상 보장되지는 않음

확률적 경사하강법 (stochastic gradient descent)

  • 모든 데이터를 사용하는 경사하강법과 달리, 확률적 경사하강법은 데이터 한개, 또는 데이터의 일부(mini-batch)를 활용하여 업데이트
  • non-convex 목적식은 SGD를 통해 최적화할 수 있음
  • 미니배치는 데이터를 확률적으로 선택하므로 매번 목적식의 모양이 바뀜
    - 값은 다를 수 있으나, 방향은 같을 것으로 기대함
    • 연산량이 b/n으로 감소
    • 목적식의 gradient를 근사해서 계산
profile
세진니의 눈물 가득 블로그

0개의 댓글