본문 바로가기

카테고리 없음

딥러닝 기초 (경사하강법)

경사하강법(Gradient Decent)

 

볼록함수(Convex Function)


비볼록함수(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)조절 또는 다른 초기값 설정을 통해 수정해야함