[BoostCamp] DAY7 AI Math#2

2 분 소요

[BoostCamp] DAY7 AI Math#2


1. What is Gradient Descent?

1) 들어가기전에….

-미분이란??

  • 미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구이며, 최적화에서 가장 많이 사용하는 기법이다.
    image
  • 최근에는 미분을 컴퓨터로도 계산 가능하다.
    image
  • 미분 f`(x)는 함수 f(x)에서 점(x, f(x))에서의 접선의 기울기를 나타낸다.
  • 한 점에서 접선의 기울기를 알면 어느 방향으로 움직여야 함수 값이 증가하는 지 감소하는지 알 수 있다.
    • 증가 시키고 싶다면 미분값을 더한다.
    • 감소 시키고 싶다면 미분값을 뺀다.
  • 위의 특성을 이용하여 경사 상승법을 통해 극댓값의 위치를 구할 수 있다.
  • 위의 특성을 이용하여 경사 하강법을 통해 극솟값의 위치을 구할 수 있다.

※ 경사 상승법의 활용
경사 상승법은 극댓값을 구하는 방법들 중 하나이다.
즉, 하나의 특성이있을 때 그 특성을 조금 더 돋보이게 표현을 할 수 있다.
이러한 점을 이용하여 학습을 하기 전 데이터의 전처리 과정에서 원하는 특성을 더 잘 찾게 하기위해 사용될 수 있다.

※ 경사 하강법을 알고리즘으로 이해해 보자.

func(gradient, init, lr, eps) :   
#gradient : 미분을 계산하는 함수   
#init : 시작 지점   
#lr:학습률   
#esp:학습 종료 조건   
  
 var = init   
 grad = gradient(var) //var값의 위치에서의 기울기   
 while(abs(grad) > eps):   
		var = var - lr * grad   
 		grad = gradient(var)    

파이썬으로는 아래와 같이 구현 가능하다.
image

변수가 벡터일때는 어떻게 미분하나요?
  • 벡터가 입력인 다변수 함수의 경우 편미분을 사용한다.
  • 각 변수 별로 편미분을 계산한 그레디언트 벡터를 이용하여 경사하강 or 상승방법을 사용할 수 있다.
  • 벡터에서는 경사하강법을 연산할 때 abs 연산 대신, Norm을 사용하여 연산한다.

    2) 경사하강법으로 선형회귀 계수를 구하자.

    선형 회귀의 목적은 ||y - Xβ||2을 최소화 하는 β를 찾아야한다. 즉 아래와 같은 그레디언트 벡터를 구해야만 한다.
    image
    이들 중 하나를 선택하여 연산해보자.
    image
    이제 우리는 위의 식을 통해 경사하강법을 이용하여 식을 최소화하는 β를 찾을 수 있다.
    image

※ 경사 하강법 기반 선형회귀 알고리즘으로 이해해 보자.

func(X, y, lr, T) :   
 #lr:학습률   
 #T:학습 종료 조건   
    
 for t in range(T): // **TIP**  
 		cost = y - X @ beta
 		grad = -transpose(X) @ cost   
 		beta = beta - lr * grad   

[TIP]
기존에 경사 하강법에서는 목표 기울기를 준다음 목표기울기에 해당하는 값을 찾을 수 있을 때까지 계속해서 연산을 하였다.
하지만, 이번에는 일정 학습횟수를 부여하여 문제를 풀었다.
두가지 방법 중 어떤 방법이 더 좋다고는 단정하지 못하겠다.
다만, 학습을 진행할 때, 시간, 자원, 효율성등을 고려하면다면 일정 학습횟수를 부여하여 문제를 푸는 것이 좋을 듯하다.
파이썬으로는 아래와 같이 구현 가능하다.
image

3) 경사하강법이 만능이라구?

  • 이론적으로 경사하강법은 미분가능하고 볼록한 함수에 대해선 적절한 학습률과 학습횟수를 선택했을 때 수렴이 보장되어 있다.
  • 특히 선형회귀의 경우 ||y - Xβ||2에서 회귀계수 β에 대해 볼록함수이기 때문에 수렴이 보장된다.
  • But 비선셩회위 문제의 경우 식이 볼록하지 않을 수 있으므로 수렴이 항상 보장되지 않는다.
    • ex) 극솟값, 극댓값이 두개 이상인 경우

※ Tip 확률적 경사하강법이란?

  • 모든 데이터를 사용해서 업데이트를 하는 대신에 데이터를 한개 또는 일부 활용하여 업데이트한다.
  • 볼록이 아닌 경우 SGD를 통해 최적화 가능하다.
    • SGD라고 해서 만능은 아니다. 다만, SDG가 경사하강법보다 실증적으로 더 낫다고 검증되었다.
  • SGD는 데이터의 일부미니 배치를 가지고 패러미터를 업데이트하기 때문에 연산자원을 좀 더 활용하는데 도움이 된다.

2. 그외 이모저모

  1. 강의
    • 혼자서 공부하면서 SGD를 알아봐야지 생각을 하고 있다가 하고 있지 못했었다. 이번기회를 통해 알아 볼 수 있어서 좋았다.
  2. 피어 세션
    • 내일부터 각자 공부해온 것들을 세미나를 하기로 하였다. 기대된다.

댓글남기기