여러가지 GD(Gradient Descent)에 대해 알아보자

Updated:

여러가지 GD(Gradient Descent)에 대해 알아보자

알아볼 Gradient 종류는 아래와 같습니다. 위에서부터 아래로 파생되었다?고 생각하시면 될 것 같습니다..! 간단한 특징들을 공부하면서 정리했던 것들을 공유드리겠습니다.

최대한 발전?의 순서대로 적어보겠습니다..

Batch Gradient Descent (BGD)

  • Batch size = Training set size
  • 수렴이 안정적이지만 메모리가 매우 많이 필요하며 긴 시간이 소요된다.

Stochastic Gradient Descent (SGD)

  • Batch size가 1인 Gradient Descent
    • 전체 training set 중 하나의 data를 랜덤하게 선택
  • 수렴에 Shoothing이 발생!
    • Shoothing이란, 기울기의 방향이 데이터마다 크게 변하는 걸 의미한다. Global minimum에 수렴하기는 어려울지라도, local minimum에 빠질 확률 줄어듦
  • 1개씩 처리하므로, 벡터화 과정에서 속도를 잃으며 GPU 병렬 처리 활용 불가

Mini-Batch Stochastic Gradient Descent (MSGD)

  • 전체 training set을 1~M 사이의 적절한 batch size로 나누어 학습한다.
    • batch size는 사용자가 지정
  • Training set의 크기가 클 경우, BGD보다 속도 빠름
  • Shoothing이 적당히 발생 (Local minimum 어느정도 피할 수 있음)

  • i번째 뉴런의 j번째 weight의 업데이트 : $w^{(t+1)}{ij}$ = $w^{(t)}{ij} - \eta \frac{\partial L}{\partial w^{(t)}_{ij}}$
    • $\frac{\partial L}{\partial w^{(t)}_{ij}}$ 가 gradient며 weight를 어느 방향으로 업데이트할 지를 결정
    • L : loss function
    • $\eta$ : learning rate
  • (M)SGD의 문제점
    • Mini-batch로 학습하는 경우 최적의 값을 찾아가기 위한 방향 설정이 뒤죽박죽임
    • Step size(=learning rate)에 매우 민감
      • very high learning rate : 급격하게 치솟음
      • high learning rate : 떨어지다가 어느 구간에 수렴
      • good learning rate : 잘 수렴
      • low learning rate : 매우 천천히 수렴
  • 따라서, SGD의 변형들이 제안되었다. 크게 변형의 부분을 두 가지로 볼 수 있는데 아래와 같다. 이 두 가지의 변화를 중점으로 살펴보고자 한다.
    • Momentum 변화
    • Learning rate 조절

Momentum

  • 이전 시간의 gradient까지 고려하여 weight 업데이트

  • $w^{(t+1)}{ij} = w^{(t)}{ij} - v^{(t)}_{ij}$
    • $v^{(t)}_{ij}$ 항을 momentum이라고 한다. 이 momentum을 통해 이전 시간의 gradient를 반영한다. 식은 아래와 같다.
    • $v^{(t)}{ij} = \beta v^{(t-1)}{ij} + \eta \frac{\partial L}{\partial w^{(t)}_{ij}}$
    • 앞 항은 이전 시간의 gradient를 의미하며 여기서의 베타(=이전 gradient의 영향력)는 주로 0.9를 사용한다.
    • 뒷 항은 현재 시간의 gradient를 의미한다.
    • 따라서 여러번의 업데이트를 거친 경우의 수식은 아래와 같다.
      • $v^{(t)}{ij} = \eta \frac{\partial L}{\partial w^{(t)}{ij}} + \beta \eta \frac{\partial L}{\partial w^{(t-1)}{ij}} + \beta^{2} \eta \frac{\partial L}{\partial w^{(t-1)}{ij}} + \cdots$
      • 이전의 움직임을 유지(관성)
  • 특징
    • Local minimu, 회피할 수 있음
    • Global Minimum을 무조건 찾는건 아님
    • Local minimum 피하자고 Momentum을 사용하지는 않음
    • 스텝 계산하여 움직인 후, 이전에 내려오던 관성방향으로 다음 스텝 밟음

Nesterov Accelerated Gradient (NAG)

  • Momentum의 단점 : 멈춰야 할 때에도 이동하여 지나칠 수 있음
  • weight update 방식은 Momentum과 동일 ($w^{(t+1)}{ij} = w^{(t)}{ij} - v^{(t)}_{ij}$)
  • 차이점은 momentum에 의해 발생하는 변화를 미리 보고 momentum을 결정!
    • $v^{(t)}{ij} = \beta v^{(t-1)}{ij} + \eta \frac{\partial L}{\partial \hat{w}^{(t)}_{ij}}$
    • $w$ 에 hat이 달린 차이가 있다 momentum이 적용된 후의 gradient이며 식은 다음과 같다.
      • $\hat{w}^{(t)}{ij} = w^{(t)}{ij} - \beta v^{(t-1)}_{ij}$
  • 먼저 관성 방향으로 움직인 후, 움직인 자리에서 스텝 계산 뒤 다음 스텝을 밟는 것

AdaGrad

  • weight 업데이트 시, 각 weight마다 적합한 learning rate를 자동으로 설정
  • 학습 과정에서, 변화가 많았던 매개변수들은 optimal 근처에 있을 확률이 높다! 따라서 learning rate를 작게하여 더욱 세밀히 업데이트!
  • 학습 과정에서, 변화가 적었던 매개변수들은 optimal에서 멀리 벗어나 있을 확률이 높다! 따라서 learning rate를 크게하여 더욱 빨리 수렴하도록!
  • 매개변수의 gradient $\frac{\partial L}{\partial w^{(t)}_{ij}}$ 는 “현재 시간에 얼마나 많이 변화되었는지를 나타내는 값”이이기 때문에
    • AdaGrad는 매개변수가 현재 시간까지 얼마나 많이 변화되었는지를 $g^{(t)}_{ij}$ 로 표현
    • $g^{(t)}{ij} = g^{(t-1)}{ij} + (\frac{\partial L}{\partial w^{(t)}{ij}})^{2} \to w^{(t+1)}{ij} = \frac{\eta }{\sqrt{g^{(t)}{ij}}+\varepsilon }\frac{\partial L}{\partial w^{(t)}{ij}}$
    • $g^{(t-1)}_{ij}$ : 이전 시간까지 얼마나 변회되었는지
    • $\frac{\partial L}{\partial w^{(t)}_{ij}}$ : 현재 시간에 얼마나 변화되었는지
    • $\varepsilon$ : $1-^{-8}$ , 0으로 나누는 것 방지
    • 현재 시간까지 얼마나 변했는지의 $g^{(t)}_{ij}가 클수록 전체 learning rate가 작아지는 것 알 수 있음
  • 특징
    • learning rate를 직접 조절하지 않아도 되는 장점
    • 학습이 오래 진행될 경우, 변수의 update가 이루어지지 않는다는 단점
    • $g_{ij}$ 는 $()^{2}$가 들어가기 때문에 계속 증가하기 때문에 learning rate가 계속 감소한다. 즉 바로 윗줄과 같이 update가 이루어지지 않음
    • 추후 AdaDelta와 RMS Prop으로 단점을 극복

Root Mean Square Propagation (RMSProp)

  • 학습이 진행될수록 learning rate가 극단적으로 감소하는 AdaGrade의 문제점을 해결
    • $g^{(t)}{ij} = g^{(t-1)}{ij} + (\frac{\partial L}{\partial w^{(t)}{ij}})^{2} \to g^{(t)}{ij} = \beta g^{(t-1)}{ij} + (1 - \beta ) (\frac{\partial L}{\partial w^{(t)}{ij}})^{2}$
    • $\beta$ : 가중치 부여, 시간이 지날수록 오래된 data의 영향이 줄어들도록 설계 = 가중 평균 방식
  • Weight Update는 AdaGrad와 동일
    • AdaGrad : $g_{ij}$ 는 현재 시간까지의 변화량의 합으로 정의 -> learning rate 계속 감소
    • RMSProp : 현재 변화량에 더 높은 가중치를 주어 learning rate의 급격한 감소를 막음
      • Momentum처럼 예전 data일수록 가중치 감소

Adaptive Momentum Estimation (Adam)

  • Momentum과 RMSProp을 합친 것 같은 알고리즘
    • Momentum : 이전 gradient의 경향을 사용
    • RMSProp : 이전 learning rate의 경향을 사용하는 알고리즘
  • (gradient의 경향) : $v^{(t)}{ij} = \beta{1} v^{(t-1)}{ij} + (1 - \beta{1})\frac{\partial L}{\partial w^{(t)}_{ij}}$
  • (learning rate의 경향) : $g^{(t)}{ij} = \beat{2} g^{(t-1){ij} + (1 - \beta{2})()\frac{\partial L}{\partial w^{(t)}_{ij}})^{2}$
    • 일반적으로 $\beta_{1}$ 은 0.9, $\beta_{2}$ 는 0.99를 사용
  • Adam 논문에서는 $v_{ij}$ , $g_{ij}$ 를 unbiased expectation 형태로 이용하기 위해 아래처럼 변형
    • $\hat{v}^{(t)}{ij} = \frac{v^{(t)}{ij}}{1-\beta^{t}{1}}$ , $\hat{g}^{(t)}{ij} = \frac{g^{(t)}{ij}}{1-\beta^{t}{2}}$
    • $\beta^{t}{1}$ 와 $\beta^{t}{2}$ 는 각 $\beta_{1}$ 과 $\beta_{2}$를 t번 곱한 것
  • 최종 weight update 식은 아래와 같다.
    • $w^{(t+1)}{ij} = w^{(t)}{ij} - \frac{\eta }{\sqrt{\hat{g}^{(t)}{ij}}+\varepsilon} \hat{v}^{(t)}{ij}$

Leave a comment