그녀의 일

SGD (Stochastic Gradient Descent : 확률적 경사 하강법)

뻔짓 2023. 3. 5. 19:37
728x90
반응형

 
Batch (묶음)

10만개 데이터가 있을 때,
  a. 1개씩 x 10만번 연산
  b. 10묶음 (1묶음당 1000개) x 10번 연산 (=epoch)
   - 묶음 : mini-batch, 1묶음당 데이터 개수 : batch size, 연산 횟수 : epoch
b가 더 빠르고, 계산 효율 높음
 
 
 
SGD (Stochastic Gradient Descent : 확률적 경사 하강법)
 

  1. 배치 경사하강법
    - 매 스텝마다 전체 훈련 데이터를 반복해서 사용해 gradient를 계산하므로 느리다.
  2. 확률적 경사하강법 (SGD, Stochastic Gradient Descent)
    - 매 스텝(step)에서 딱 1개의 샘플을 무작위로 선택하고 그에 대한 gradient를 계산한다. 매 반복에서 적은 데이터를 처리하므로 속도가 매우 빠르며, 1개 샘플에 대한 메모리만 필요하므로 매우 큰 훈련 데이터 셋도 가능하다.
    - 확률적이기 때문에 훨씬 불안정하고, 매끄러운 하강이 아닌 요동치는 것을 볼 수 있을 것이다. 이렇게 요동치는 것은 역설적으로 지역 최솟값을 뛰어넘어 전역 최솟값을 찾게 도와줄 수 있어, 이 가능성이 배치에 비해 높다. 이러한 이슈들을 위해서는 learning rate을 크게 설정하고(지역 최솟값을 뛰어넘고 수렴하도록), 점차 작게 줄여서 전역 최솟값에 도달하게 하는 것이 좋다.
  3. 미니배치 경사하강법 (Mini-batch Gradient Descent)
    - 각 스텝에서 전체 훈련세트(like batch)나 하나의 샘플(like SGD)을 기반으로 하지 않고, 미니 배치라고 부르는 임의의 작은 샘플 집합에 대해 계산한다.
    - 주요 장점은 GPU를 사용해 얻는 성능 향상이라고 할 수 있다. 특히, 미니배치를 어느 정도 크게 하면 파라미터 공간에서 SGD보다 덜 불규칙적으로 움직인다.
    - 결국 미니배치 경사하강법이 SGD보다 최솟값에 더 가까이 도달할 수 있지만 동시에 지역 최솟값에서 빠져나오기는 조금 더 힘들수도 있다(convex가 아닌경우).

 
 
미니배치 경사하강법 (Mini-batch Gradient Descent) 예시

- 훈련 데이터 700개를 7개의 mini-batch (배치 사이즈 100)으로 학습 -> SGD를 7회 반복 = 1 에폭
- 8에폭을 한다면, SGD 7회 x 8에폭 = 56회 가중치 갱신
(dataset = 1000, mini-batch = iteration = SGD cnt = 7, batch size = 100)
 
- batch size는 hyper parameter로 사용 (2의 제곱수 권장)
 
 
 

728x90
반응형