Optimization

Motivation

DL의 목표는 데이터를 통해 데이터를 잘 설명하는 함수(parameter)를 찾는 것.
Backpropagation 의 과정을 살펴보면, analytic한 해를 구하는 방법보다는 numerical approach가 현재의 mainstream.
따라서 optimization 분야도 challenging 한 분야.

Optimization Challenges

  • NN은 기본적으로 파라미터의 단위가 매우 크기 때문에 loss 이 일반적으로 non-convex.
  • multiple local minima가 존재하지만, optimization으로 얻은 solution은 그중 하나.
    • ex) we can permute all hidden units in a layer and get the same solutions.
    • Good point! : 일반적으로 지금까지는 많은 Local minima들이 만족할 만한 성능을 보여주어서 문제가 심각하게 되지는 않고 있다.

Gradient Descent(GD)

Gradient Descent

Gradient를 이용해서 loss landscape의 minima point 를 찾아가는 기술.

Vanilla GD


while True:
	weights_grad = evalutae_gradient(loss_func, data, weights)
	weights += - step_size * weights_grad # perform parameter update

Algorithm

  1. Intialize , pick the lr
  2. 모든 데이터 포인트 에 대해, do:
  3. Forward-pass and, get the
  4. Backward-pass, to get gradient
  5. Update gradients:
  6. Validation Error가 커지면, step2로 가져 again. otherwise stop.

Remark

  • 일반적으로, 모델 파라미터 수는 Million 단위. 요즘은 Billion, Trillion 까지도 가지만,
  • 또한 데이터 포인트 수 역시, Million 단위, 마찬가지로 더 크기도 하다.
  • 때문에 computing power가 많이 요구됨.

Choosing a lr(Learning Rate)


Multi column

small lr

  • slow progress

large lr divergence

Gradient Clipping

Steep Cliff: how?


  • 이러한 경우처럼, loss curvature 혹은 landscape이 steep 하면, GD는 튕겨버릴(catapult) 수 있는데,
  • 이럴 때 Gradient clipping을 사용한다. (a common heuristics)

Gradient Clipping

easy하다. 그냥 일정 threshold 잡고 max 사용하면 된다.
Gradient exploding을 막아주는 역할.

원본 링크

원본 링크

Saddle-point problem


  • 이처럼 global maxima, minima도 아니지만, first-derivative는 0값인 지점(“saddle point”)가 문제를 일으킬 수 있으나
    • gradient = 0이니, descent할 수 없음.
    • 그러나 정확히 저 포인트에 떨어질 확률이 과연 얼마나 될까? → 거의 없겠지,,
    • 그래서 그렇게 심도있게 다뤄지진 않음.

Plateau problem


NOTE

평탄(flat)한 영역을 plateau라 하는데, 정의 상 : Slow progress

  • ex) saturated sigmoid, dead ReLU, etc..

Valley


  • 이전에 본, clipping이 필요한 case.
  • Valley는 optimization을 어렵게 한다. : easy to divergence

Algorithms


Optimization Strategies


Monitoring the Training Process


Tip

모델이 결국 optimized 되었는지 확인하려면 logging해야 한다.
주로 많이 사용되는 lib으로는 tensorboard가 있고, 학습을 진행하면서 확인할 수 있는 케이스들로는 아래가 있다.

  • Problematic scenario

Multi column

Underfitting

Summary


모델이 더 이상 충분히 loss 를 줄이지 못함.
Training loss가 validation loss에 비해 낮음. → model의 capacity가 충분치 못함.

Capacity vs Complexity

Capacity: 이론적으로 모델이 표현할 수 있는 function space의 크기
Complexity: 실제 학습된 모델의 표현력

Help

To solve the problem, several methods are recommended.

  • Add more layer/units to model: model의 capacity의 부족으로 인한 문제를 직접적으로 해결.
  • Tweak the learning rate : 기존에 잡힌 lr이 너무 커도 underfit이 되기도 하니, 줄여보고 판단.
    lr이 초기에 너무 커버리면, 아예 학습이 진행되지 않은 경우가 될 수도 있어서 이게 underfit 개형으로 보이는 것.
  • train for longer: 더 해보면 될 수도?
  • Transfer Learning: underfit의 요인 중 하나로 빈약한 representation을 꼽을 수 있고, 이는 이미 representation이 풍부한 pre-trained model에서 가져와서 수정하는 것으로 어느 정도 완화할 수 있음.
  • use less regularization: regularization 즉, penalty를 너무 tight하게 잡아서 모델의 학습이 지지부진한 걸 수도. 이때에는 오히려 penalty를 완화시켜서 접근.
원본 링크

Not Converged

Summary


두 그래프에서 값들이 각각 converge하지 않았으므로,
아직 더 수렴할 가능성이 있으니, 더 iteration 돌려야 함.

원본 링크

Overfitting

Summary


Training loss는 계속 줄지만, validation loss은 낮아지지 않음.
train을 계속하면, 모델은 train-set에만 잘 작동하는 함수로 fitting되니,
generalization이 떨어지고, validation-set 또는 unseen-data에 대해서도 loss가 커짐.

Help

To solve the problem, several methods are recommended.

  • Get more data: 사실상 이게 best. 그러나 cost-issue.
    모델한테 패턴을 학습할 기회를 더 주는 것.
  • Data Augmentation : 데이터를 더 collecting 하는 것 보단 현실적.
    train-set의 diversity를 주는 것.
  • Better Data: low-quality data를 remove.
  • Transfer Learning: task-suit 하게 준비된 set으로 fine-tune.
  • Simplify model: 모델의 capacity가 충분해서 train-set의 너무 과한 패턴을 학습한 거니, 모델의 복잡성을 줄여서 generalization performance 확보.
  • Learning Rate decay: fine-tune은 학습 후반에서 미세한 gradient에서 학습하는 거니, decaying은 후반에서 이러한 것들을 완화해줌.
  • Early Stopping: overfit 되기 전에 stop.
원본 링크

Noisy Validation

Summary


Validation set이 적절하게(충분히, 다양하게) 확보되지 않아, validation loss가 잡히지 않는 상황.

원본 링크

Improper Validation Set

Summary


Validation set이 train보다 더 쉬워서 validation loss가 더 낮은 경우.

원본 링크

  • Good Scenario

Summary

  • converged
  • not overfitted
  • not underfitted

Important


결국 가장 중요한 건, generalization performance.
Unseen Data에 대해 얼마나 날 predict할 수 있는냐가 핵심.
위는 그를 위한 strategies.

Dataset refinement


Data Augmentation

Summary

사실 best approach는 당연히 data를 더 collecting하는 것. 그러나, 현실적으로 어려우니,
그 대안으로 original train set에 적당한 transformation을 가해 train set으로 사용하는 접근.

Goal : “fake” data를 기존에 존재하는 데이터로부터 생성. → train-set으로 활용.
Note! : new data는 반드시 semantic 을 그대로 가져가야 한다.

  • DNN must be invariant to a wide variety of input variatiions
  • Often large intra-class variation in terms of pose, appearance, lightening, etc.
    • 같은 고양이더라도, 여러 포즈가 있을 수도 있고,

Tips! : translation 같은 simple한 transform도 generalization performance를 꽤 올려준다.

Typical Examples


Image Crop


Affine Transform


Gaussian Blur


Gaussian Noise


Cutout


Contrast


Clouds


Random Combination


Tips for modeling


Tip

  • 2개의 NN 비교 시, 동일한 augmentation을 사용하도록.
  • Data Augmentation 역시 network design의 일부로 취급함.
  • “It is important to specify the right distribution(often done empirically).”
  • ensemable idea 적용해서,
    • training time에는 random crop/scales + train 한 번
    • inference time에는 avg predictions for a fixed set of crops of the test image.
  • AutoAugment 는 Reinforcement Learning방법을 사용하여 strategy를 알아서 찾게 한다.
원본 링크

Data Preprocessing

Summary

모델에 넣기 직전까지 데이터를 construction.

Structed vs Unstructed

Data Representation

Summary

이전에 본 듯이, input data의 distribution이 고르게 분포하지 않을 경우,
gradient 가 fluctuate될 수 있다. → inefficient

The problem of covariate shifts



Training 과정에서 우리는 일반적으로 데이터셋이 비슷한 분포에서 나왔다고 가정하는데,
mini-batch 로 학습하는 경우에는 이 단위가 mini-batch에도 적용된다.
그러나, 그렇지 않을수도 있다. (전체 데이터가 한 번에 모델에 입력되어 iteration하는게 아니니까.)




Data preprocessing Example


Original Data

Multi column

Zero-centered with

Normalized with

Decorrelateed

  • Multiply with eigenvectors of covariance matrix

Whitened

  • Divide by sqrt of eigenvalues of covariance matrix

Tip

원본 링크

Batch Normalization

Abstract

Input Data를 Normalizing을 하는 것은 only 1st hidden layer에만 영향을 주는 건데, 다른 hidden layer에는? → BatchNorm이 하나의 방법.

Proposed by Ioffe, S., Szegedy, C. (2015). Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.(ICML)

Check

BatchNorm can

  • normalize hidden layer inputs
  • helps with exploding/vanishing gradient problem
  • can increase training stability and convergence rate
  • can be understood as additional(normalization) layers (with additional parameters)

1-step process: normalize Net Inputs



  • 마지막 normalization 식은 실제 implement 시 numerical stability를 보장하기 위해 미소 값을 더해서 사용한다. (ex: )

실제 implement 시,

2-step process: pre-activation scaling

실제 implement 시,


가 학습의 목표

  • : spread, scale
  • : mean


구조적으로 BatchNorm은 “standardization”을 (0-mean, unit variance) 방향으로도 할 수 있다.

Order of layers:

Extension


  • LayerNorm
  • GroupNorm
  • InstanceNorm

NOTE


원본 링크

Weight Initialization

Summary

학습을 시작하는 시점에서 모델의 파라미터를 초기화하는데 어떠한 파라미터가 좋을까?

Xavier Initialization


He Initialization


원본 링크

Learning Rate Scheduler

Summary

Learning Rate는 fixed 되어야 하는가? → Nope!
loss가 평탄치 않고 매으 복잡하니, lr 역시 adaptive하면 좋기도 하다.

Linear Decay


Cosine Annealing


Inverse sqrt


Linear-WarmUp


원본 링크

원본 링크