[U] Week 3 - Optimization

JaeJun Lee ·2022년 10월 3일
0

부스트캠프 AI Tech

목록 보기
16/30

Generalization

일반적으로 train error와 test error의 차이를 말한다.

  • 학습 데이터 및 테스트 데이터에서 유사한 성능이 나오는 것이 좋다

Overfitting

학습 데이터에 대해서 잘 동작을 하지만 테스트 데이터에서는 그렇지 않은 경우를 말한다.

Underfitting

네트워크가 간단하거나 학습이 충분하지 못해서 학습 데이터에서도 잘 동작을 못하는 것을 말한다.

Cross-validation

데이터를 학습 데이터와 검증 데이터로 나누어서 학습 데이터로 학습시킨 모델이 학습에 사용하지 않은 검증 데이터를 사용해서 얼마나 잘 동작하는 지 확인하기 위해 검증 데이터를 나누는 방법을 말한다.

  • K-fold

Bias & Variance

Variance는 어떠한 입력이 주어졌을 때 출력이 얼마나 일관성이 있는지를 말한다.
Bias는 출력이 일관성 없이 많이 분산이 되더라도 평균적으로 target에 가까이 있으면 low blas 높으면 high bias라 한다.

E[(tf^)2]=E[(tf+ff^)2]=...cost  =E[(fE[f^]2)2]+E[(E[f^]f^)2]+E[ϵ]bias2variancenoise\mathbb{E}[(t-\hat{f})^2]=\mathbb{E}[(t-f \,+\, f-\hat{f})^2]=...\\ \small{cost} \qquad\qquad\qquad\qquad\qquad\qquad\; \\ \normalsize=\mathbb{\mathbb{E}}[(f-\mathbb{E}[\hat{f}]^2)^2]\,+\,\mathbb{E}[(E[\hat{f}]-\hat{f})^2]\,+\, \mathbb{E}[\epsilon]\\ \qquad\qquad \small{bias^2} \qquad\qquad\quad variance \qquad\quad noise

다음 수식과 같이 cost를 최소화할 때 bias와 variance는 trade-off한 관계를 가진다.

Bootstrapping

학습 데이터가 고정되어있을 때 subsampling을 통해 데이터를 여러 개로 나누고 여러 모델 및 metric으로 나누어서 각 예측 값들을 ensemble처럼 활용하는 방법이다.

Bagging vs Boosting

Bagging은 Bootstrapping과 같은 ensemble 방법들이 주로 속한다.
Boosting은 예를 들어 데이터 셋을 80%와 20%로 나뉘었을 때 80%를 가지고 학습을 시킨 모델이 80% 데이터에 대해서 예측을 잘하지만 20% 데이터에서는 그렇지 않을 경우 20% 데이터로만 새로운 모델을 만든다. 이렇게 여러 개 모델을 만든 후 합쳐서 sequential하게 예측을 하도록 만드는 방법이다.

  • Bagging은 여러 모델이 독립적으로 동작하는 방법

Batch-size Matters

batch size가 너무 크면 sharp minimum에 도달할 가능성이 높고 작은 크기를 사용하면 flat minimum에 도달할 가능성이 높기 때문에 일반적으로 큰 사이즈보단 작게 사용하는 것이 generalization 성능에서 좋다.

Gradient Descent Methods

  • (Stochastic) Gradient Descent Methods

    Wt+1WtηgtW_{t+1} \leftarrow W_t-\eta g_t
  • Momentum

    at+1βat+gtWt+1Wtηat+1a_{t+1} \leftarrow \beta a_t+g_t\\ W_{t+1} \leftarrow W_t - \eta a_{t+1}
    • 현재 주어진 파라미터에서 기울기를 계산한 뒤 이전 기울기 정보를 활용해 다음 기울기를 고려하는 방법
  • Nesterov Accelerated Gradient

    at+1βat+L(Wtηβat)Wt+1Wtηat+1a_{t+1} \leftarrow \beta a_t + \triangledown \mathcal{L}(W_t-\eta \beta a_t) \\ W_{t+1} \leftarrow W_t - \eta a_{t+1}
    • 현재 주어진 파라미터에서 기울기를 계산한 뒤 그 방향으로 가보고 간 곳에서 기울기를 계산해 다음 기울기를 고려하는 방법
  • Adagrad

    Wt+1=WtηGt+ϵgtW_{t+1}=W_t - \frac{\eta}{\sqrt{G_t+\epsilon}}g_t
    • 지금까지 Neural Network 파라미터가 얼마나 변해왔는지를 고려한다
    • 많이 변해온 것은 적게 변화시키고 변하지 않거나 적게 변해온 것은 많이 변화시킨다
    • 그러나 GtG_t(Sum of gradient squares)가 계속 증가해서 \infty가 되면 WW가 업데이트가 되지 않기 때문에 뒤로 갈수록 학습이 점점 멈춰지는 현상이 발생한다
  • Adadelta

    Gt=γGt1+(1γ)gt2Wt+1=WtHt1+ϵGt+ϵgtHt=γHt1+(1γ)(ΔWt)2G_t=\gamma G_{t-1}+(1-\gamma)g_t^2 \qquad W_{t+1}=W_t-\frac{\sqrt{H_{t-1}+\epsilon}}{\sqrt{G_t + \epsilon}}g_t \\{}\\ H_t = \gamma H_{t-1} + (1-\gamma)(\Delta W_t)^2
    • t가 주어졌을 때 window size를 정해 해당 시간 만큼의 gt2g_t^2을 고려한다
    • 파라미터가 큰 모델을 사용했을 때 gtg_t도 커지기 때문에 메모리 문제가 발생한다
    • 이를 방지하기 위해 γ\gamma를 활용하여 지수 가중 평균 (Exponentially Weighted(Moving) Averages)방법을 사용해 HtH_t(EMA of difference squares)를 구한다
    • learning rate가 없기 때문에 수정 요소가 많이 없어서 주로 활용되지는 않는다
  • RMSporp

    Gt=γGt1+(1γ)gt2Wt+1=WtηGt+ϵgtG_t=\gamma G_{t-1}+(1-\gamma)g_t^2 \\{}\\ W_{t+1}=W_t-\frac{\eta}{\sqrt{G_t+\epsilon}}g_t
  • Adam

    mt=β1mt1+(1β1)gtvt=β2vt1+(1β2)gt2Wt+1=Wtηvt+ϵ1β2t1β1tmtm_t=\beta_1 m_{t-1}+(1-\beta_1)g_t \qquad v_t=\beta_2 v_{t-1}+(1-\beta_2)g_t^2 \\{}\\ W_{t+1}=W_t-\frac{\eta}{\sqrt{v_t+\epsilon}}\frac{\sqrt{1-\beta_2^t}}{1-\beta_1^t}m_t
    • vtv_t(EMA of gradient squares)와 mtm_t(Momentum)을 같이 활용한다
    • 가장 무난하고 잘 활용된다

Reference

0개의 댓글