대학원 일기

경사하강법(Gradient descent) 본문

AI/인공지능 기초

경사하강법(Gradient descent)

대학원생(노예) 2022. 1. 27. 01:51

경사하강법(Gradient descent)

미분의 개념과 그래디언트 벡터에 대해 설명합니다.

경사하강법의 알고리즘과 실제 코드에서의 구현을 보여줍니다.

 

접선의 기울기를 이용해서 함수의 최솟값으로 점을 이동시키는 원리를 알면 이를 바탕으로 경사하강법의 알고리즘과 수식을 이해할 수 있습니다.

특히 변수가 벡터인 경우, 편미분을 통해서 구한 그래디언트 벡터를 통해 d-차원으로 경사하강법을 확장할 수 있다는 개념을 확실하게 잡고 가시기 바랍니다.

 

미분(differentiation)이란?

미분(differentiation)

- 미분(differentiation)은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로 최적화에서 가장 많이 사용되는 기법이다.

- 파이썬 sympy.diff로 미분 계산이 가능하다.

code in python

 

접선의 기울기

- 미분으로 함수 $f$의 주어진 점$(x, f(x))$에서의 접선의기울기를 구할 수 있다.

- 미분을 계산하려면 함수는 연속적(비선형)이어야 한다.

- 변화율 $\frac{f(x + h)-f(x)}{h}$의 $h$를 0으로 보내면 $(x, f(x))$에서 접선의 기울기로 수렴하게 된다.

 

 

접선의 기울기 부호(+/-)

- 접선에서 미분하여 기울기를 구할 때, 미분값이 양수라면 접하는 접선은 증가하는 함수이고, 미분값이 음수라면 접하는 접선은 감소하는 함수이다.

- 이를 통해, 한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가/감소하는 지 알 수 있다.

 

 

경사하강법(gradient descent)

경사 상승법(gradient ascent) / 경사하강법(gradient descent)

- 미분값을 더해줌으로써 함수값을 극대화 하는 것을 경사상승법(gradient ascent)이라고 한다.

- 미분값을 빼줌으로써 함수값을 극소화 하는 것을 경사하강법(gradient descent)이라고 한다.

- 경사상승/경사하강 방법은극값에 도달하면 움직임이 멈춘다.

- 극값에서는 미분값이 0이므로 더 이상 업데이트가 되지 않으므로 목적함수의 최적화가 끝나게 된다.

 

경사하강법 알고리즘

- 컴퓨터로 계산할 때 미분값이 0이 되는 것은 불가능하므로 eps보다 작을 때 종료하는 조건이 필요하다.

- var = var - lr * grad (주어진 변수 - 미분값)은 $x - \lambda f^{'}(x)$을 계산하는 부분이다. lr은 학습률로써 미분을 통해 업데이트 하는 속도를 조절한다.(학습률을 다룰 때에는 조심히 다루어야 함)

- 종료조건이 성립하기 전까지 미분값을 계속 업데이트한다.

code in python

 

경사하강법에서 다루는 변수가 벡터(vector)나 행렬(matrix)일 경우 = 편미분

- 벡터는 n차원 공간에서 계산되는 한 점이기 때문에 이동을 할 때 많은 방향을 가지게 된다. 이 경우, 미분을 특정 방향의 좌표축으로 이동하는 형식으로 정의할 수 있는데 이를 편미분(partial differentiation)이라고 부른다.

- 편미분 공식에서 $e_{i}$라는 벡터는 주어진 벡터 $x$가 있을 때 $x$의 $i$번째에 벡터에만 영향을 주고 나머지에는 영향을 주지 않는 단위벡터이다.

단위벡터: $i$ 번째 벡터값만 1이고 나머지는 0인 벡터

- 단위벡터를 이용하면 i번째 변수에서만 변화율을 계산하여 경사하강법 알고리즘을 사용할 수 있다.

정리: 변수가 벡터인 경우에도 편미분을 통해 경사하강법을 사용할 수 있다.

- 위 식과 코드를 보면 $x$ 방향에서 편미분한 것을 확인할 수 있다. → $x$ 방향의 움직임만 계산

 

 

그레디언트(gradient) 벡터

- 각 변수 별로 편미분을 계산한 그레디언트(gradient) 벡터를 이용하여 경사하강/경사상승법에 사용 할 수 있다.

- 일반적인 d차원 공간에서 벡터에 적용되는 경사하강법을 똑같이 구현할 수 있다.

- 각 점 $(x, y, z)$ 공간에서 $f(x, y)$ 표면을 따라 $-\nabla f$ 벡터를 그리면 아래와 같이 그려진다

 

벡터에서의 경사하강법 알고리즘

- 함수가$f(x) = x^{2} +2y^{2}$ 일때 경사하강법으로 최소점을 찾는 코드

code in python

 

'AI > 인공지능 기초' 카테고리의 다른 글

pandas(1)  (0) 2022.01.31
경사하강법(Gradient descent)(2)  (0) 2022.01.29
행렬(Matrix)  (0) 2022.01.26
벡터(Vector)  (0) 2022.01.26
Numerical Python - Numpy  (0) 2022.01.25
Comments