3. Optimization

유승우·2022년 5월 11일
0

3. Optimization


  • 최적화를 진행하면서 여러가지 용어가 등장하는데, 정확하게 정의를 짚고 넘어가지 않으면 여러 오해가 생길 수 있다.
  • 이번 강의에서는 여러 용어들에 대해서 명확한 의미를 이해하고 넘어가는 것이 중요!

Generalization


  • 일반화 성능을 높이는 것이 목적
  • 학습을 시키게 되면 학습 데이터에 대한 error는 줄어들지만, train error가 0이 된다고 해서 성능이 좋은 것은 아니다. train error가 작다고 하여, test error 역시 작다는 보장이 없기 때문이다.
  • 따라서 일반화는 test error와 train error 간 gap을 줄이는 것

  • overfitting이란 train data에 대해서는 잘 동작하지만, test data에 대해서는 잘 작동하지 않는 것

Cross-validation


  • 일반적으로 train data를 train, validation로 나누어 train data로 학습한 모형을 학습에 사용되지 않는 validation data에 얼마나 잘 작동하는지 검증하고, test data에 적용하는 방식으로 사용한다.

  • 이 방식은 train data를 어떠한 비율로 나누냐에 따라 성능이 다르게 나타난다. 예를 들어, train data의 수가 적으면 학습시키는 양이 적어서 성능이 잘 나오지 않는 문제가 발생한다.

  • 이러한 경우에 Cross-validation을 사용하는데, trian data를 동일한 개수의 k개로 나누어 k-1개로 학습시키고 나머지 1개로 검증하는 방식을 사용한다.

  • Cross-validation을 통해 최적의 hyper parameter를 찾고, 이것을 고정시킨 후 모든 데이터를 사용하여 학습시킨다.

Bias and Variance


  • Variance란? 내가 어떤 입력을 넣었을 때 출력이 얼마나 일관적으로 나오는 지를 말한다.
  • Bias란? 내가 어떤 입력을 넣었을 때 출력이 내가 원하는 값과 얼마나 떨어져 있는지를 말한다.
  • Bias and Variance Tradeoff
    • cost를 minimize 하기 위해서는 bias와 variance 그리고 noise 세 값을 minimize하는 것과 같다.
    • bias를 줄이면 variance가 높아질 가능성이 크고, variance를 줄이면 bias가 높아질 가능성이 크다는 것이 Bias and Variance Tradeoff이다.

Bagging vs Boosting


  • Bootstrap

    • train data에서 random sampling을 통해 뽑은 data를 가지고 여러 모델을 만들어서 사용하는 것
  • Bagging

    • Bootstrap을 이용하여 여러 모델들을 만들고 나타난 output을 voting하는 방식
  • Boosting

    • 여러 모델들을 순차적으로 잘못 분류된 케이스에 대해 가중치를 적용하여 결합하면서 strong learner를 만드는 방식

Gradient Descent Methods


  • Stochastic gradient descent
    • 10만개의 데이터 중 하나의 데이터의 gradient descent를 구하는 방식
  • Mini-batch gradient descent
    • 10만개의 데이터 중 일부분 데이터의 gradient descent를 구하는 방식
  • Batch gradient descent
    • 10만개 데이터 모두를 사용하여 gradient descent를 구하는 방식

Batch-size Matters


  • large batch를 사용하면 sharp minimum에 도달하고, small batch를 사용하면 flat minimum에 도달하는데 flat minimum에 도달하는 것이 더 좋다는 연구 결과가 있다.

  • Flat Minimum

    • generalization이 좋기 때문에 train에서 얻은 값들을 test에 적용했을 때 잘 작동한다.
  • Sharp Minimum

    • generalization이 좋지 않기 때문에 train에서 얻은 값들이 test에 적용했을 때 잘 동작하지 않는다.

Gradient Descent


  • Learning rate와 Gradient를 사용하여 update하는 방식
  • Learning rate를 잡는데 어려움이 있다.

Momentum


  • 기존의 GD에서 이전의 이동했던 gradient의 정보를 활용하여 update를 하는 방식

Nesterov Accelerated Gradient


  • NAG은 momentum과 비슷하지만 gradient를 계산하는 방식이 다르다.

  • momentum은 현재 위치에서의 gradient를 계산하는 반면, NAG는 한 번 이동한 후의 위치에서 gradient를 계산하는 방식

  • momentum은 관성에 의해 멈춰야 할 지점에서 멈추지 못하고 local minimum으로 수렴하지 못하는 경우가 생기지만, NAG는 이동한 후의 위치에서의 gradient를 계산하기 때문에 계산이 빠르고, 적절한 시점에 제동의 역할을 함으로 local minimum에 수렴하는데에 용이하다.

Adagrad


  • 지금까지의 parameter가 얼만큼 변해왔는지에 따라 gradient를 계산하는 방식

  • 지금까지 파라미터가 얼마나 변해왔는지를 저장하는 변수가 G이다.

  • 지금까지 파라미터가 많이 변해왔다면, 앞으로 적게 변화 시킬 것이고, 반대로 지금까지 파라미터가 적게 변해왔다면, 앞으로 많이 변화 시킨다.

Adadelta


  • Adagrad의 G가 무한대로 수렴하게 되면 결국 업데이트가 되지 않기 떄문에, 이를 보완하기 위해 window(시간)에 따른 gradient의 변화를 보는 방식이 Adadelta 이다.

  • Learning rate가 없기 때문에 사실상 바꿀 수 있는 요소가 많이 없기 때문에, 많이 활용되지는 않는다.

RMSprop


  • Adagrad에서 exponential moving average를 더해주고, stepsize를 추가한 방식

Adam


  • RMSprop와 momentum 방식을 합쳐서 만든 것이 Adam

최적화 방법론 정리


Regularization


  • Generalization을 잘 되게하기 위해서 사용하기 위해 규제를 두는 것

Early stopping


  • 말 그대로 학습을 일찍 멈추는 것인데, 일반적으로 validation error을 이용해 모델의 성능을 평가해 보고 Loss 가 어느 시점부터 커질 때의 시점에서 멈추는 것

Parameter Norm Penaty


  • 네트워크 파라미터들이 너무 커지지 않게 조절하는 것

  • 네트워크가 만들어내는 함수의 공간 속에서 함수를 최대한 부드럽게 보고 그로 인해 일반화가 잘 되어지는 것을 가정하는 것

Data Augmentation


  • 딥러닝, 머신러닝에서 가장 중요한 것 중 하나가 데이터의 양이다.

  • 데이터의 양이 많다면 웬만해서는 모두 잘 작동하지만, 양이 적다면 잘 작동하지 않는다.

  • 데이터가 한정적이고 수집하기 어려울 경우 변환, 뒤집기 등 어떤 식으로든 주어진 데이터를 늘리는 것을 Data Augmentation 이다.

  • 단, label이 변하지 않는 조건 하에서 데이터를 늘려야 한다.

Noise Robustness


  • 입력 데이터와 네트워크의 weight에 noise를 집어 넣는 방식

Label Smoothing


  • 데이터 두 개를 뽑아서 섞는 방식

Dropout


  • 네트워크의 일부분의 weight를 0으로 바꿈으로써 각각의 뉴런들이 조금 더 로버스트한 feature가 잡을 수 있다.

Batch Normalization


  • 내가 적용하고자 하는 layer에 statistics를 정규화 하는 것
  • 일반적으로 Batch Normalization 을 사용하게 되면 성능은 올라간다.

0개의 댓글