경사하강법(Gradient Decent)
볼록함수(Convex Function)
- 어떤 지점에서 시작하더라도 최적값(손실함수가 최소로하는 점)에 도달할 수 있음
- 1-D Convex Function
출처: https://www.researchgate.net/figure/A-strictly-convex-function_fig5_313821095 - 2-D Convex Function
출처: https://www.researchgate.net/figure/Sphere-function-D-2_fig8_275069197
비볼록함수(Non-Convex Function)
- 비볼록 함수는 시작점 위치에 따라 다른 최적값에 도달할 수 있음.
- 1-D Non-Convex Function
출처: https://www.slideserve.com/betha/local-and-global-optima
- 2-D Non-Convex Function
출처: https://commons.wikimedia.org/wiki/File:Non-Convex_Objective_Function.gif
경사하강법
미분과 기울기
- 스칼라를 벡터로 미분한 것
$\quad \frac{df(x)}{dx} = \lim_{\triangle x \to 0} \frac{f(x+\triangle x) - f(x)}{\triangle x}$
출처: https://ko.wikipedia.org/wiki/%EA%B8%B0%EC%9A%B8%EA%B8%B0_(%EB%B2%A1%ED%84%B0)
- 변화가 있는 지점에서는 미분값이 존재하고, 변화가 없는 지점은 미분값이 0
- 미분값이 클수록 변화량이 크다는 의미
경사하강법의 과정
- 경사하강법은 한 스텝마다의 미분값에 따라 이동하는 방향을 결정
- $f(x)$$f(x)$의 값이 변하지 않을 때까지 반복
- $\eta$ : 학습률(learning rate)
- $\qquad x_n = x_{n-1} - \eta \frac{\partial f}{\partial x}$$\qquad x_n = x_{n-1} - \eta \frac{\partial f}{\partial x}$
- 즉, 미분값이 0인 지점을 찾는 방법
출처: https://www.kdnuggets.com/2018/06/intuitive-introduction-gradient-descent.html
- 2-D 경사하강법
출처: https://gfycat.com/ko/angryinconsequentialdiplodocus
경사하강법 구현
경사하강법 시각화
비볼록 함수(Non-Convex Function)에서의 경사하강법
비볼록함수 경사하강법 시각화
[
전역 최적값 vs 지역 최적값
- 초기값이 어니냐에 따라 전체 함수의 최솟값이 될 수도 있고,
지역적으로 최솟값일 수 있음
출처: https://www.kdnuggets.com/2017/06/deep-learning-local-minimum.html
$\quad f_3(x) = x sin(x^2) + 1$$\quad f_3(x) = x sin(x^2) + 1$ 그래프
전역 최솟값 vs 지역 최솟값 시각화
[
경사하강법 구현(2)
- 경사하강을 진행하는 도중, 최솟값에 이르면 경사하강법을 종료하는 코드
$f_3(x) = x sin(x^2) + 1$$f_3(x) = x sin(x^2) + 1$ 그래프
- 각 시작점마다 경사하강법으로 내려가다가 최솟값으로 인지하는 부분에서 멈춤하지만 주어진 범위 내에서의 최솟값은 첫번째 시작점일 때이다.
- step_num(반복횟수)만큼 다 돌지 않는 경우도 발생
학습률(learning rate)
- 학습률 값은 적절히 지정해야 한다!
- 너무 크면 발산하고, 너무 작으면 학습이 잘 되지 않는다.
출처: https://mc.ai/an-introduction-to-gradient-descent-algorithm/
학습률별 경사하강법
안장점(Saddle Point)
- 기울기가 0이지만 극값이 되지 않음
- 경사하강법은 안장점에서 벗어나지 못함
출처: https://www.pngegg.com/en/png-czdxs
$f_2(x) = 0.01x^4 - 0.3x^3 - 1.0x + 10.0$$f_2(x) = 0.01x^4 - 0.3x^3 - 1.0x + 10.0$ 그래프로 확인하기
- 첫번째 시작점
- count가 100, 즉 step_num(반복횟수)만큼 루프를 돌았음에도
손실함수의 값이 10 언저리에서 멈춤. 변화 X - 안장점 (Saddle Point)
- 이는 학습률(learning rate)조절 또는 다른 초기값 설정을 통해 수정해야함
- count가 100, 즉 step_num(반복횟수)만큼 루프를 돌았음에도