최적화 방법2- Stochastic Gradient Descent
앞에서 경사하강법(GD)까지 정리했다. 이어서 확률적 경사하강법(SGD)에 대해서 정리하려고 한다.
~ 목차 ~
0. 서론- 왜 갑자기 최적화를 공부하고 있는가
1. 최적화란
2. 종류
2.1 경사하강법(GD)
2.2 확률적 경사하강법(SGD)
2.3 Momentum
2.4 AdaGrad
2.5 RMSProp
2.6 Adam
3. 정리
2. 종류
2.2 확률적 경사하강법(SGD)
- Stochastic Gradient Descent, SGD
- Stochastic의 의미: 데이터를 무작위로 골라냈다는 뜻
- 기본 아이디어는 GD와 비슷하다. 데이터 추출 방식을 바꾼 것 뿐이다. GD는 1번 이동할 때 모든 데이터를 사용해서 $w_{i}$를 업데이트하지만, SGD은 1번 이동할 때 1개의 데이터를 무작위로 비복원추출해서 $w_{i}$를 업데이트한다.
- 손실함수 미분값이 0에 가까워질 때까지 계속 비복원추출하고 다 추출하면 다시 넣어서 비복원추출하는 작업을 반복한다.
- GD의 단점(너무 느림, local min. 문제)들을 보완할 수 있는데..
[장점1] 빠름 (∵1번 움직일 때 1개의 데이터만 계산하면 되기 때문)
- SGD의 가중치 업데이트 공식은 GD의 가중치 업데이트 공식($ w_{i} \leftarrow w_{i} - \eta \frac {\partial L}{\partial w_{i}}$)과 같다.
데이터의 추출방식에서 차이가 있을 뿐이다.
- 전 GD 포스팅에서 사용한 손실함수 $L$을 그대로 갖고와서 비교해보겠다.
e.g. $L = {e_{1}}^{2}+{e_{2}^{2}}+{e_{3}}^{2}+{e_{4}^{2}}+{e_{5}}^{2}$일 때,
가중치를 1번 업데이트 할 때의 GD와 SGD식은 아래의 표와 같다.
Gradient Descent | Stochastic Gradient Descent |
$$\begin{bmatrix} w_1 \\ w_2 \\ w_3 \\ w_4 \\ w_5 \end{bmatrix} \leftarrow \begin{bmatrix} w_1 \\ w_2 \\ w_3 \\ w_4 \\ w_5 \end{bmatrix} - \eta \begin{bmatrix} 2 e_1 \frac{\partial e_1}{\partial w_1} \\ 2 e_2 \frac{\partial e_2}{\partial w_2} \\ 2 e_3 \frac{\partial e_3}{\partial w_3} \\ 2 e_4 \frac{\partial e_4}{\partial w_4} \\ 2 e_5 \frac{\partial e_5}{\partial w_5} \end{bmatrix}$$ | $$\begin{bmatrix} w_1 \\ w_2 \\ w_3 \\ w_4 \\ w_5 \end{bmatrix} \leftarrow \begin{bmatrix} w_1 \\ w_2 \\ w_3 \\ w_4 \\ w_5 \end{bmatrix} - \eta \begin{bmatrix} 0 \\ \vdots \\ 2 e_i\frac{\partial e_i}{\partial w_i} \\ \vdots \\ 0 \end{bmatrix}$$ |
- GD는 한 번에 모든 가중치를 업데이트해서 파라미터 수만큼의 편미분 계산이 들어가지만,
SGD는 무작위로 선택된 1개의 오차항 $e_{i}$만 사용하기 때문에 1번의 편미분 계산만 하면 된다. → 빨라짐
[장점2] 운이 좋다면 Local min.을 피해갈 수 있음
- 지그재그 형태로 움직이기 때문에 Local minimum을 피해갈 수 있는 가능성이 생긴다.
(항상 피해갈 수 있는 건 아님. 지그재그 모양으로 잘 가다가 운이 좋으면 local min.을 빠져나올 수 있는 것임)
[단점1] 비효율적임
- SGD는 비등방성(anisotropy)함수에서 탐색 경로가 비효율적이 되는 특징이 있다. [그림1]처럼 탐색 경로가 지그재그 모양이 된다. 이동거리가 길어지기 때문에 이동거리를 줄여서 속도를 더 빠르게 할 수 있지 않을까?라는 욕심을 내볼 수 있다. 그리고 수렴 자체도 불안정해져서 시간이 오래걸린다. 물론 GD보다는 속도면에서, 그리고 local min. 방지면에서 나아진 것은 확실하다. 더 욕심이 날 뿐..!!
- SGD에 대해서 정리하면서 2가지 큰 의문이 들었다.
Q1: 왜 Stochastic Gradient Descent는 ①무작위로 ②비복원추출을 할까?
- ① 무작위: local min.에 갈 가능성을 줄임. 매번 랜덤한 샘플을 사용하게 되면 경사 방향이 조금씩 달라지고, 최적화 경로가 지그재그 형태를 띄어서 global min.에 갈 수 있는 가능성이 높아짐
- ② 비복원추출: 모든 데이터가 1번씩만 사용되도록 하기 위해
- 매 epoch마다 모든 데이터를 고르게 반영할 수 있음. 복원추출을 하면 일부 데이터가 여러 번 사용되고 다른 데이터는 아예 사용되지 않을 가능성이 생기는데, 이는 편향을 가져올 수 있음
Q2: 왜 최적화 경로가 지그재그 모양일까?
- 솔직히 모르겠음.. 이해가 안 됨..
- 『밑바닥부터 시작하는 딥러닝』에서는 위에 있는 그림처럼 $f(x,y)=\frac{1}{20}x^{2}+y^{2}$라는 함수를 예시로 들고 보여주면서 근본적인 원인이 '기울어진 방향이 원래의 최솟값과 다른 방향을 가리키기 때문'이라고 하고, 혁펜하임 유튜브에서는 오른쪽 아래의 그림을 그리면서 1번 이동할 때마다 각각의 오차들의 방향을 따라서 이동한다고 하는데.. 그럼 타원에서는 왜 저렇게 예쁜 지그재그 형태로 이동하고 원에서는 저렇게 삐뚤빼뚤하게 이동하는거지..? 저 타원에서 SGD말고 GD를 적용했을 때의 이동경로는 어떻게 되는거지..? 약간 공 떨어뜨렸을 때 진동하는 것처럼 생각하면 GD를 적용하면 (-7,0)에 수렴하는 걸까.? 하지만 GPT는 (0,0)에 수렴한다고 알려주는걸.. 누가 맞는거지.
- 이러한 질문들을 해결하려고 구글링도 해보고 GPT한테도 물어봤지만 아직도 잘 모르겠다. 공부의 효율성을 따져야 하는 상황에 있기 때문에 한없이 붙잡고 있을 수는 없으므로.. 나중에 다시 돌아와서 보면 이해가 되겠지 싶은 마음으로 어떤 의문이 들었는지만 써놓고 일단 넘어가려고 한다.
- 다음 포스팅에서는 SGD의 단점인 비효율성을 개선한 Momentum에 대해서 정리해보려고 한다.
참고문헌
- 사이토 고키, 『밑바닥부터 시작하는 딥러닝』, Chapter 6: 학습 관련 기술들, 한빛미디어, 2017.
- 혁펜하임, "[Easy! 딥러닝] 3-2강. 확률적 경사 하강법 (Stochastic Gradient Descent) 주머니 예시로 쉽게 설명해드려요," 동영상, 2024년 4월 1일. https://www.youtube.com/watch?v=goBkxDdJX8Y.
'기본기 다지기 > Optimization' 카테고리의 다른 글
[기본이론] 최적화 방법6- Adam (수식o) (4) | 2024.11.08 |
---|---|
[기본이론] 최적화 방법5- RMSProp (수식o, 그래프o) (0) | 2024.11.06 |
[기본이론] 최적화 방법4- AdaGrad (수식o) (0) | 2024.11.04 |
[기본이론] 최적화 방법3- Momentum (수식o) (4) | 2024.11.03 |
[기본이론] 최적화 방법1- Gradient Descent (수식o) (8) | 2024.11.01 |