경사하강법과 미분

minchoul2·2022년 1월 18일
1

AI_math

목록 보기
1/9
post-thumbnail

이 글은 부스트캠프 AI Tech 3기 강의를 듣고 정리한 글입니다.

경사하강법에 대해

미분

미분의 간단한 정의와 경사하강법에서 왜 미분이 필요한지 아라보자!

미분의 정의

미분(differentiation) 은 변수의 움직임에 따른 함수 값의 변화를 측정하기 위한 도구로 최적화에서 많이 사용

변화율의 극한으로 정의 한다 ( 접선에서의 기울기 )

미분 by python

import sympy as sym
from sympy.abc import x

sym.diff(sym.poly(x**2 + 2*x + 3), x)

미분의 쓰임새

한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가/감소하는지 알 수있다.
x에 미분한 값을 더하거나 뺴주면 항상 f(x)의 값을 증가시키거나 감소시킨다.

경사 상승법

미분값을 더하면 극대값의 위치를 알 수 있다.
목적함수f(x)를 최대화

경사하강법

미분값을 뺴면 극솟값의 위치를 알 수 있다.
목적함수f(x)를 최소화

경사하강법

기본적인 알고리즘

종료조건으로 기울기(grad)가 eps(작은 임의의 값)보다 작을 때 종료
x - lr*f'(x) 를 통해 미분할 var을 업데이트한다.

변수가 벡터라면?

다변수함수의 경우 편미분(partial differentiation) 사용
편미분은 각 변수마다 미분을 해주는 것

각 변수별로 편미분을 계산하여 그레디언트 벡터 만듦(역삼각형은 nabla)

이 그레디언트 벡터를 사용하면 동시에 모든 변수를 동시에 업데이트 가능하다.

그레디언트 벡터로 경사하강법 알고리즘

벡터이기 때문에 기울기의 norm으로 대체하는 것 빼고 동일하다.

(단 L2-norm을 써야하는데, 잔차가 L1-norm(멘하튼거리)일리 없으니 당연하다)

경사하강법에서의 목적식

y:참값 / XB:추정값(y햇 역할)

최소화해야하는 목적식은 참값에서 추정값을 뺀 크기로 베타(B)를 찾아야 한다.
이떄 L2-norm의 제곱을 써도 괜춘하다.

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


종료조건을 일정학습횟수로 변경한 것을 뺴면 앞에서 쓴 알고리즘과 동일하다.

이론적으로 경사하강법은 미분가능&convex(볼록)한 함수에 대해서
적절한 학습률과 학습횟수를 선택 했을 때 수렴이 보장됨

하지만 Non-linear한 경우 목적식이 Non-convex 할 수 있기 때문에 최소값으로의 수렴이 항상 보장X

SGD 확률적 경사 하강법

정의

모든 데이터를 사용하여 업데이트 하는 것이 아닌 데이터 한개(SGD) or 일부활용(미니배치SGD)로 기울기 업데이트

  • SGD가 만능은 아니지만 모든 데이터를 사용하는 경사하강법보다 실증적으로 더 낫다.

미니배치 SGD

  • 데이터의 일부(X_b,Y_b)를 가지고 parameter를 업데이트함
  • 연산자원을 효울적으로 활용 가능
    전체 데이터를 쓰지않고 미니배치(X_b,Y_b)를 써서 업데이트 하므로 연산량이 b/n으로 감소
  • non-convex 목적식은 SGD로 가능
  • 확률적으로 선택된 데이터의 일부를 가지고 그레디언트 벡터를 계산하기 때문에 다른 미니배치 사용시 곡선 모양이 바뀌게 됨
profile
옹오옹오오오옹ㅇㅇ

0개의 댓글