[부캠AI] 1주차 AI Math 3-4강

😊 경사하강법 - 순한맛

미분이란?

변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구

# sympy.diff을 사용하면 컴퓨터로 미분을 계산할 수 있다. 
import sympy as sym
from sympy.abc import x

sym.diff(sym.poly(x**2 + 2*x + 3), x)
  • 미분으로 함수 ff의 주어진 점 (x,f(x))(x, f(x))에서의 접선의 기울기를 구할 수 있다. 이 기울기를 알면 어느 방향으로 움직여야 함수값이 증가하는지, 감소하는지 알 수 있다.

경사상승법 (gradient ascent)

미분값을 더하여 함수의 극대값의 위치를 구할 수 있다.

경사하강법(gradient descent)

미분값을 빼서 함수의 극소값의 위치를 구할 수 있다.

이 방법들은 극값에 도달하면 움직임을 멈춘다.

# gradient: 미분 계산 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var = init
grad = gradient(var)

# 컴퓨터로 계산할 때 미분이 정확히 0이 되는 것은 불가능
# eps보다 작을 때 종료하는 조건이 필요
while (abs(grad) > eps):
	var = var - lr * grad
	grad = gradient(var)  # 업데이트

변수가 벡터인 경우?

다변수 함수의 경우, 편미분(partial differentiation)을 사용한다.

import sympy as sym
from sympy.abc import x

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

위 식은 변수들인 xx 또는 yy로 편미분이 가능하다.

각 변수만큼 편미분을 계산하면 그레이디언트(gradient) 벡터를 구할 수 있다.

이로 경사하강, 경사상승법에 사용할 수 있다.

그레이디언트 벡터란?

임의의 점에서 가장 빠르게 증가하는 방향

- 를 붙이면 각점에서 가장빨리 감소하게 되는 방향

경사하강법 : 알고리즘

다변수 함수에서 최소점을 찾는 코드

# gradient: 그레이디언트 벡터를 찾는 함수
var = init
grad = gradient(var)
while (norm(grad) > eps):
	var = var - lr * grad
	grad = gradient(var)

🥵 경사하강법 - 매운맛

선형회귀분석 복습

역행렬을 이용하지 않고 경사하강법을 이용해 적절한 선형모델 찾아보기

선형모델이 아닌 경우에도 경사하강법 사용가능!

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

선형회귀의 목적식:

이부분 진짜 모르겠다

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

for t in range(T):
	error = y- X @ beta
	grad =- transpose(X) @ error
	beta = beta - lr * grad

# 지정된 시간동안 하고싶으면 T사용, 아니면 종료조건 사용해도 됨
# (그대신 학습횟수가 너무 작으면 안됨) 

역행렬을 이용하지 않고 회귀계수를 계산할 수 있다!

정확한 값을 구하는게 아니라서 학습률(lr)학습횟수(T)가 중요하다!

경사하강법은 만능?

미분가능하고 볼록한 함수일 경우 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장!

비선형회귀일 경우는 항상 수렴이 보장되지 않는다.

그래서 변형된 경사하강법을 사용!

확률적 경사하강법 (Stochastic gradient descent) aka SGD

모든 데이터를 사용해서 업데이트하는 것이 아니라 데이터 한개 또는 일부를 활용해서 업데이트

볼록이 아닌 경우에는 SGD를 통해 최적화 가능!

만능은 아니지만 딥러닝에서는 SGD가 실증적으로 더 낫다고 한다. 데이터 일부를 가지고 업데이트하는거라 연산자원을 좀 더 효율적으로 활용

확률적 경사하강법의 원리: 미니배치 연산

경사하강법: 전체데이터를 가지고 목적식의 그레디언트 벡터를 계산

SGD: 미니배치를 가지고 그레디언트 벡터를 계산

완전히 똑같지 않지만 방향은 유사함

매번 다른 미니배치를 사용하기 때문에 목적식 모양이 바뀐다. 그래서 극소점이 더이상 아닌 경우가 생기거나 탈출하기도 한다. 따라서 볼록 아닌 경우에서 사용이 좋다.

정확하지 않지만 훨씬 빠르고 볼록이 아닌 목적식에서도 사용가능

경사하강법보다 머신러닝 학습에 더 효율적!!!

확률적 경사하강법의 원리: 하드웨어

ex) 엄청난 양의 이미지 데이터를 가짐

일반적인 경사하강법으로 하면 모든 데이터를 업데이트 → 메모리 부족

미니배치로 쪼갠 데이터로 업데이트!

좋은 웹페이지 즐겨찾기