경사하강법 I¶
미분¶
- 미분은 변수의 움직임에 다른 함수값의 변화를 측정하기 위한 도구로 최적화에서 제일 많이 사용하는 기법이다.
- 최근엔 미분은 컴퓨터가 계산한다.
수식¶
$$f(x) = x^{2} +2x+3$$$$f'(x) = 2x+2$$
- 미분은 함수 $f$의 주어진 점$(x,f(x))$에서의 접선의 기울기를 구한다.
- 함수에서 $h$→0으로 보내면 $(x,f(x))$에서 접선의 기울기로 수렴한다.
- 미분을 계산하려면 연속 함수이어야 한다.
- 한 점에서 접선의 기울기를 알면 어느 방향으로 점을 움직여야 함수값이 증가하는지, 감소하는지 알 수 있다.
- 증가시키고 싶다면 미분값을 더한다.
- 감소시키고 싶다면 미분값을 뺀다
미분값이 음수 일 때¶
미분값이 양수 일 때¶
- 미분값을 더하면 경사상승법(gradient ascent)이라 하며 함수의 극대값의 위치를 구할 때 사용한다.
- 목적함수를 최대화할 때 사용한다.
- 미분값을 빼면 경사하강법(gradient descent)이라 하며 함수의 극소값의 위치를 구할 때 사용한다.
- 목적함수를 최소화할 때 사용한다.
극값¶
- 경사상승/경사하강 방법은 극값에 도달하면 움직임을 멈춘다.
- 극값에서는 미분값이 0이므로 더이상 업데이트가 안 된다.
경사하강법: 알고리즘(미분값)¶
# gradient: 미분을 계산하는 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var=init
grad=gradient(var)
while(abs(grad) > eps):
var=var- lr*grad
grad=gradient(var)
while(abs(grad) > eps)
컴퓨터로 계산할 때 미분이 정확히 0이 되는것은 불가능하므로 eps
보다 작을 때 종료하는 조건이 필요하다.
var=var- lr*grad
이 부분이 $x- \lambda f'(x)$을 계산하는 부분. lr
은 학습률로서 미분을 통해 업데이트하는 속도를 조절한다. 이 값은 잘 조절해야 한다.
- $e_{i}$는 $i$번째 값만 1이고 나머지는 0인 단위벡터이다.
예시)
- $x$에 대해서 편미분한 값이다.
각 변수 별로 편미분을 계산한 그레디언트(gradient) 벡터를 이용하여 경사하강/경사상승법에 사용할 수 있다. 앞서 사용한 미분값인 $f'(x)$대신 벡터$\nabla f$를 사용하여 변수 $x=(x_{1},...,x_{d})$를 동시에 업데이트 가능하다.
경사하강법: 알고리즘(norm)¶
# gradient: 그레디언트을 계산하는 함수
# init: 시작점, lr: 학습률, eps: 알고리즘 종료조건
var=init
grad=gradient(var)
while(norm(grad) > eps):
var=var- lr*grad
grad=gradient(var)
벡터에서는 절대값 대신 노름(norm)을 계산해서 종료조건을 설정
'AI > 이론' 카테고리의 다른 글
딥러닝 학습방법 이해하기 (0) | 2021.01.27 |
---|---|
Pandas II (0) | 2021.01.27 |
Pandas I (0) | 2021.01.27 |
경사하강법 II (0) | 2021.01.26 |
행렬 (0) | 2021.01.25 |
벡터 (0) | 2021.01.25 |
Numpy part III (0) | 2021.01.25 |
Numpy part II (0) | 2021.01.25 |