미분의 개념과 그래디언트 벡터에 대해 설명합니다.
경사하강법의 알고리즘과 실제 코드에서의 구현을 보여줍니다.
접선의 기울기를 이용해서 함수의 최솟값으로 점을 이동시키는 원리를 알면 이를 바탕으로 경사하강법의 알고리즘과 수식을 이해할 수 있습니다.
특히 변수가 벡터인 경우, 편미분을 통해서 구한 그래디언트 벡터를 통해 d-차원으로 경사하강법을 확장할 수 있다는 개념을 확실하게 잡고 가시기 바랍니다.
미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구, 최적화에서 제일 많이 사용하는 기법
sympy.abc라는 모듈에 diff라는 함수를 이용하면 미분을 사용할 수 잇다.
사진
파이썬에선 아래 코드를 입력하면, 미분을 해볼수 잇다.
import sympy as sys
from sympy.abc import x
sys.diff(sys.poly(x**2+ 2*x+3),x)
사진
사진
var = init
grad = gradient(var)
while(abs(grad) > eps):
var = var - lr * grad
grad = gradient(var)
n개의 데이터로 이루어진 상황에서 데이터를 가장 잘 차즌ㄴ 방법을 선형 회귀분석을 설명햇다. 지난 시간에는 무어펠런즈의 역행렬에 의해 해를 찾는것에 대해 설명을 했다.
이번 시간에 무어펠런즈 역행렬을 사용하지 않고 경사하강법으로 선형모델을 찾는 방법을 배워 보겟다.
선형 모델을 이용해서 분석을 한다면 무어펠러즈 역행렬만 이용해서 분석을 해도 되지만, 선형모델이 아닌 다른 모델도 이 경사하강법을 통해 찾을 수 있기 떄문에 이 방법을 알아본다.
주어진 성형회귀의 목적식을 먼저 이해해야하고,이 목적식을 최소화 해야하기 때문에, 목적식을 최소화하는 방향으로서의 미분을 계산할수 있어야합니다.
우리가 선형회귀에서 사용하는 목적식은 l2입니다.,
주어진 데이터에서 정답에 해당하는 y, 우리가 사용하는 선형 모델인, (X(벡터(베타벡터임)))
||y - X벡터||2 를 최소화 하는 벡터를 찾는게 목적임.
무슨 말이냐면, 결과 값과, X라는 입력값에, 벡터를 곱하게 되었을떄의 차이값이 최소화 되는게 목적이란 말.
그방법은 지난시간에 설명햇는데, 자 잘봐,
X는 입력으로 들어오는 값이다. 이 값에,
함수의 값을 최소화하거나, 최대화하거나 하는 목적을 가진 함수를 목적 함수(Objective function)라고 합니다.
므어펠로즈의 역행력을 이용해서 선형 회귀를 찾는 방법도, 좋지만 경사하강법을 이용하면, 선형 회귀말고 다른 모양의 회귀들도 분석 할수 있기 떄문에, 경사하강법을 배운다.
경사하강법에서도, 결과 예상값 == X*(벡타) , 결과값 == y
목적식 == ||y - X*(벡타)||2 노름의 최솟값을 구하는 건 똑같다.
이렇게 구한 선형회귀 목적식을 벡타에 대해 미분을 한 다음에, 주어진 벡타에서 미분한 값을 뺴게 되면 경사하강법에서 최소화 되는 값을 구할수 있따.