Loading [MathJax]/jax/output/CommonHTML/jax.js

기본기 다지기/Optimization

[기본이론] 최적화 방법1- Gradient Descent (수식o)

syveany 2024. 11. 1. 12:53

최적화 방법1- Gradient Descent

 

~ 목차 ~

0. 서론- 왜 갑자기 최적화를 공부하고 있는가

1. 최적화란

2. 종류

  2.1 경사하강법(GD)

  2.2 확률적 경사하강법(SGD)

  2.3 Momentum

  2.4 AdaGrad

  2.5 RMSProp

  2.6 Adam

3. 정리

 

0. 서론- 왜 갑자기 최적화를 공부하고 있는가

- 논문들을 읽으면서 기본기가 부족하다는 것이 다시 느껴졌다. 최적화에 대해서 정확히 알지 못했다. 내가 아는 것은.. 최적화가 기울기를 이용해서 손실함수를 최소로 하는 방법이고, 종류로는 SGD, Adam이 있지만 최근에는 대부분 Adam을 사용한다는 정도 뿐이었다. 그래서 든든한 기본서 『밑바닥부터 시작하는 딥러닝』을 다시 꺼내들었다.

- 읽으면서 최적화 갱신 경로 부분이 이해가 안 돼서 여러 유튜브를 참고했는데, 그 중 가장 인상깊었던 건 혁펜하임님의 딥러닝 기초 강의들이었다. (강추..) (감사합니다)

1. 최적화란

- 최적화(optimization)라는 용어는 여러 의미로 사용되지만, 이 글에서는 '학습 단계에서 최적의 매개변수를 찾는 법'라고 칭하겠다.

- 최적의 매개변수란 무엇인가? 손실함수가 최솟값이 될 때의 매개변수

- 그럼 손실함수가 최솟값이 될 때의 매개변수를 어떻게 찾을 것인가? → 여기서 Gradient Descent 개념이 등장함

2. 종류

- 총 5가지(GD, SGD, AdaGrad, Momentum, Adam) 살펴볼 것이다.

  2.1 경사하강법(GD)

- 경사하강법(Gradient Descent, GD)이란 손실함수가 최솟값이 될 때의 매개변수를 찾을 때, 기울기(미분)를 통해 찾는 방법이다. 직관적으로는 최솟값을 찾기 위해 경사값을 계속 0에 가깝게 만들고자 하는 것이라고 이해했다.

    + check) Q: 기울기가 0에 수렴하면 그 점에서의 함숫값이 무조건 손실함수의 최솟값인가 ?

                  A:아님!! 찾는다고 찾은 점이 극솟점이나 안장점일 수 있고, 평평한 고원(plateau)에 빠져서 학습이 정체된 상태일 수 있기 때문

최솟점이 아닌 극솟점, 안장점, 고원
기울기가 0에 수렴한다고 해서 최솟값이 아닌 경우들 (극솟값, 안장점, 고원)

 

  - 기울기가 0에 수렴한다고 해서 무조건 손실함수의 최솟값이라고 할 수는 없지만, 기울어진 방향으로 가야 함수의 값을 줄일 수 있기 때문에 일단 기울어진 방향으로 가야 한다.

- 기울어진 방향으로 가는 수식(경사하강법의 가중치 업데이트 공식)은 아래와 같다.

wiwiηLwi

(wi: 갱신할 가중치 매개변수, η: 학습률, L: 손실함수, Lwi: wi에 대한 손실함수의 기울기)

 

- 이러한 Gradient Descent에는 크게 2가지 문제점이 있는데..

 

- [단점1] 너무 느림

      - 모든 데이터를 고려해서 이동방향을 선택하기 때문에 방향은 가장 정확하지만 시간이 오래 걸린다.

        Lwi을 구해서 가중치 업데이트를 하는 과정을 수학적으로 풀어보려고 한다.

 

        e.g. L=e12+e22+e32+e24+e52라고 하자. (ei: 오차항, yiˆyi)

 

               Lwi을 구할 때 각 오차제곱항 ei2 서로 독립적이므로 오차제곱항을 각각 미분하는 방식을 사용할 것이다.

 

               그러므로 오차제곱항 1개를 Lwi=wie2i로 나타낼 수 있고,

 

               eiwi에 대해서 미분하면 wie2i=2eieiwi가 된다. 즉, Lwi=2eieiwi이다.

 

 모든 파라미터에 대한 편미분 벡터를 L라고 할 때,

 

               L=[Lw1Lw2Lw3Lw4Lw5]=[2e1e1w12e2e2w22e3e3w32e4e4w42e5e5w5]이다. (∵ Lwi=2eieiwi)

                따라서 가중치를 1번 업데이트 할 때 식 [w1w2w3w4w5][w1w2w3w4w5]η[2e1e1w12e2e2w22e3e3w32e4e4w42e5e5w5]이다.(∵wwηL)

 

      - 식에서도 알 수 있듯이, 가중치를 1번 업데이트 할 때마다 파라미터수에 비례해서 편미분을 해야하니 계산량이 늘어나시간이 오래 걸리게 된다.

 

- [단점2] Local minimum에 빠질 수 있음

       - Global min.을 찾으려고 했지만 내가 찾은 건 global min.이 아닌 local min.?!

       - 생각해봐라.. 광활한 손실함수 그래프 위에서 우연히 시작점 근처에 global min.이 있어서 운 좋게 global min.을 찾게 될 확률? 이거야말로 0에 수렴한다.

         (+ 생활 속 e.g. 첫사랑과의 결혼은 안 좋은 local min일 가능성이 높아.. (혁펜하임 2024. 0:00))

       - 그리고 1번 이동할 때 같은 방향으로 이동하기 때문에 한번 local min.에 들어가게 되면 나오질 못 함

 

 

 - 이러한 단점을 보완하기 위해 Stochastic Gradient Descent가 등장함

   → Stochastic Gradient Descent는 속도가 빠르Local min.에 빠지는 걸 조금 방지할 수 있다는 걸 유추할 수 있음

      - 어떻게 이렇게  할까...? 는 다음 포스팅에.. 

 

 

글이 생각보다 많이 길어졌다. SGD부터는 다음 포스팅에 정리하겠다.

 

참고문헌

  1. 사이토 고키, 『밑바닥부터 시작하는 딥러닝』, Chapter 4: 신경망 학습, 한빛미디어, 2017.
  2. 사이토 고키, 『밑바닥부터 시작하는 딥러닝』, Chapter 6: 학습 관련 기술들, 한빛미디어, 2017.
  3. 혁펜하임, "[Easy! 딥러닝] 3-1강. Gradient Descent의 두 가지 치명적 단점," 동영상, 2024년 3월 25일. https://www.youtube.com/watch?v=tbxCzN3yrVU.