Week2 Day2

김종영·2021년 1월 26일

📝 경사 하강법

📌 미분 (defferentiation)

  • 변수의 움직임에 따른 함수 값의 변화를 측정하기 위한 도구 (최적화 기법)
  • 미분은 함수 f의 주어진 점 (x, f(x))에서의 접선 기울기를 구한다.
  • 한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수 값이 증가하는지 / 감소하는지 알 수 있다.
  • 변수에 미분값을 더하면 경사 상승법
  • 변수에 미분값을 빼면 경사 하강법
def func(val):
    fun = sym.poly(x**2 + 2*x + 3)
    return fun.subs(x, val), fun

def func_gradient(fun, val):
    _, function = fun(val)
    diff = sym.diff(function, x)
    return diff.subs(x, val), diff

def gradient_descent(fun, init_point, lr_rate=1e-2, epsilon=1e-5):
    cnt = 0
    val = init_point
    diff, _ = func_gradient(fun, init_point)
    while np.abs(diff) > epsilon:
        val = val - lr_rate * diff
        diff, _ = func_gradient(fun, val)
        cnt += 1
        
    print("함수: {}, 연산횟수: {}, 최소점: ({}, {})".format(fun(val)[1], cnt, val, fun(val)[0]))  
    
gradient_descent(fun= func, init_point=np.random.uniform(-2,2))

📌 선형 회귀 분석(역행렬)

  • 주어져있는 데이터와 가장 근사한 선형모델을 찾기 위해서
    L2 norm을 최소화 하는 계수찾기 위해서 무어펜로즈 역행렬이용

📌 선형 회귀 분석(경사하강법)

  • 경사하강법을 이용해 적절한 선형모델을 찾아보자
    (선형모델이 아닌 다른 방식일 때도 일반적으로 사용 할 수 있다)
  • 역행렬을 사용하지 않고도 최적화 할 수 있는 편리한 알고리즘
  • 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장된다.

📌 확률적 경사하강법(SGD)

  • 모든 데이터를 사용하여 업데이트하는 것이 아니라 데이터 하나, 일부만 사용하여 업데이트 한다.
  • 목적식이 볼록함수가 아닌경우 local minima가 존재할 수 있는데 SGD를 사용하면 이러한 극소지점에서 목적식이 확률적으로 바뀌면서 극소점을 더 이상 기울기 0이지 않게 하면서 탈출할 수 있도록 한다.
  • 일반적 경사하강법 보다 효율적으로 연산한다.

0개의 댓글