경사하강법(Day10)
경사하강법(순한맛)
미분의 개념과 그래디언트 벡터에 대해 설명합니다.
경사하강법의 알고리즘과 실제 코드에서의 구현을 보여줍니다.
접선의 기울기를 이용해서 함수의 최솟값으로 점을 이동시키는 원리를 알면 이를 바탕으로 경사하강법의 알고리즘과 수식을 이해할 수 있습니다.
특히 변수가 벡터인 경우, 편미분을 통해서 구한 그래디언트 벡터를 통해 d-차원으로 경사하강법을 확장할 수 있다는 개념을 확실하게 잡고 가시기 바랍니다.
미분이 뭔가요?
-
미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구, 최적화에서 제일 많이 사용하는 기법
-
sympy.abc라는 모듈에 diff라는 함수를 이용하면 미분을 사용할 수 잇다.
사진 -
파이썬에선 아래 코드를 입력하면, 미분을 해볼수 잇다.
import sympy as sys from sympy.abc import x sys.diff(sys.poly(x**2+ 2*x+3),x)
미분을 이해해보자.
- 미분은 함수 f의 주어 진 점 (x,f(x))에서의 접선의 기울기를 구한다.
- 한점에서 접선의 기울기를 구하면 어느 방향으로 움직여야 함수값이 증가하는지, 감소하는지 앓수 있다.(함수를 증가시킨다?)
- 함수를 증가시키고 싶으면, 미분값을 더하고, 함수를 감소 시키고 싶으면 미분값을 뺸다
- 미분값을 더하면 경상상승법(gradient ascent)이라 하며, 함수의 극대값의 위치를 구할 떄 사용한다.
- 미분값을 뺴면 경사하강법 이라 하며, 함수의 극소값 의 위치를 구할떄 사용한다.
- 이차원의 함수가 있다고 가정했을떄, lim h->0의 순간 x값의 아주 작은 변화의 차에대한 비율을 구하면, 이차원 함수의 x값에 대한 기울기를 구할수 있다. 이 기울기가 의미하는 바는, 그 순간 지점의 x이동량에 대한, y값의 변화율을 의미한다.
- 고로 미분한 값을 알면,
사진 - h를 0으로 계속해서 보내주면
사진 - h의 크기가 계속 작아지다 보면 결국 한점에서 기울기를 구할수 잇다.
사진
사진
- 미분을한 f'(x) 값이 f'(x)<0 위와 같은 그림이면, f'(x)에 x를 더해 주면, 기울기는 왼쪽으로 이동하고
- 주어진 함수를 최대화 시킬떄는 경상상승법을 이용한다.
사진
- 반대로 미분값이, f'(x) > 0 일떄 f'(x) + x를 해주면, 미분이 오른쪽으로 이동한다.
경사 하강법
gradient: 미분을 계산하는 함수
init: 시작점,lr: 학습률,eps: 알고리즘 종료조건
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 노름의 최솟값을 구하는 건 똑같다.
이렇게 구한 선형회귀 목적식을 벡타에 대해 미분을 한 다음에, 주어진 벡타에서 미분한 값을 뺴게 되면 경사하강법에서 최소화 되는 값을 구할수 있따.
Author And Source
이 문제에 관하여(경사하강법(Day10)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hey-chocopie/경사하강법Day10저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)