[부스트캠프 Pre-Cource] 7. Optimization

김상윤·2022년 7월 30일
0

기본 개념들

Gradient Descent

  • loss function에 대한 gradient(partial derivative 편미분)을 구해서 (learning rate를 곱해서) 파라미터에서 빼주는 방식
  • 1차 미분값만 사용하게 된다.
  • 반복적으로 최적화 시킨다.
  • local minimum으로 향하게 된다.

scaling, normalization

  • scaling : 데이터들의 범위를 변경
  • normalization : 데이터들의 분포 모양을 변경

generalization

  • 최적화 성능
    : 새로운 data에 대해 학습된 모델이 얼마나 잘 작동하는가
  • train data와 test data사이의 성능 차이

overfitting, underfitting

Cross-validation

= k-fold validation

  • 제공된 학습데이터(train data)를 나눠서 일부를 validation data로 사용
  • train-set와 val-set을 k개의 partition으로 나눈 후, 번갈아가면서 하나의 partition을 val-set으로 사용하고 나머지 k-1개로 학습하는 것을 반복해보는 방법!
  • 최적의 hyperparameter를 찾은 후,
    해당 정보를 활용하여 최종 학습을 한다. (모든 train data이용)

Bias & Variance

  • variance
    • 일관적인 output이 나오는가 (variance 낮을 수록 일관적임)
    • varaince가 크면 비슷한 입력에 대해 출력이 많이 달라진다.
      : overfitting될 가능성이 큼
  • Bias
    • 값들의 평균이 true target에 가깝다. (bias 낮을 수록)
    • bias 높으면 평균이 target에서 벗어나있다.
  • cost를 최소화하기 위해
    : bias(절대값), variance, noise를 최소화해야 한다.
  • bias와 variance는 trade-off

Bootstrapping

  • 주어진 data에 대해 random으로 일부를 사용해서 (sub-sampling) 학습데이터를 여러개 만들어 train data를 늘린 후,
    그에대한 여러가지 모델, metric을 얻는 방법
  • 적은 data로 overfitting을 줄일 수 있다.

Bagging, Boosting

  • Bagging : Bootstrapping aggregation
    • bootsrapping을 통해 여러 random sub-sampling을 만들고, 여러 모델들을 만든 후 평균을 내는 방법
      : ensemble
    • 통째로 사용해서 하나의 모델을 만드는 것 보다 성능이 좋을 때가 많다. (overfitting 감소)
  • Boosting
    • 이전 모델에서 잘 예측하지 못 한 데이터에 대해 잘 동작하는 모델을 생성.
      : 각각 weak model
    • weak model들을 sequential하게 합쳐서 하나의 strong model을 만든다.

Gradient Descent

Stochastic gradient descent

: 한 개의 data (single sample)로 gradient를 구해서 update
-> 계속 반복

Mini-batch gradient descent

: batch-size에 따라 나눠진 data의 subset단위로 gradient를 구해서 update
-> 계속 반복

Batch gradient descent

: 모든 data를 한 번에 다 써서 gradient구해서 update

batch-size

  • batch-size 크면 -> sharp minimizer 도달
    batch-size 작으면 -> flat minimizer 도달
  • sharp minimum : 예측이 조금만 벗어나도 오차가(loss값) 크다.
  • batch-size 작을 수록 generalize performance가 좋아진다.

Optimization

: Gradient Descent Method

  • gradient는 라이브러리에서 auto로 계산해준다.
  • g에 대해 사용할 Optimizer를 골라야 한다.

(stochastic) gradient descent

  • 적절한 learning rate를 잡는 것이 어렵다.

momentum

  • gradient에 momentum을 더한 accumulation으로 update한다.
  • 한 번 gradient가 흐르는 방향을 유지함으로써(관성) g가 너무 자주 바뀌더라도 좋은 학습이 가능하도록 해준다.
  • 관성때문에 local-minimal로 수렴하지 못하고 계속 지나치는 (진자운동) 현상이 생길 수 있다.

Nesterov Accelerated Gradient

  • Lookahead gradient를 이용
  • local minima로 수렴을 더 빨리할 수 있다.

Adagard

  • G : 현재까지 해당 파라미터가 변화한 정도
    -> 분모에 있기에 많이 변한 파라미터는 적게, 적게 변한 파라미터는 많이 update 한다.
  • G가 계속 커지기 때문에 학습이 이어질 수록 무한대로 가서 (update)학습이 멈추게 된다.

Adadelta

  • G가 계속 커지는 것을 막기 위해 최근 몇 개의 학습에 대한 변화만 저장한다.
  • learning rate가 없다.

RMSprop

Adam

  • G와 함께 momentum을 사용하는 방법

Regularization

  • generalization performance를 높이기 위해 학습을 방해하는 방향으로 규제를 거는 것
  • Train-data뿐만아니라, Test-data에 대해서도 예측을 잘 하도록 해준다.

Eearly stopping

  • validation-data를 활용하여, overfitting이 발생하기 전에 학습을 멈춘다.

Parameter Norm Penalty

  • network (weight)parameter의 값을 작게하기 위해 숫자를 다같이 줄인다.
  • parameter가 작아지면 -> 부드러운 함수

Data Augmentation

  • 데이터의 규모와 DeepLearning 성능은 영향이 크다.
  • 데이터의 label이 바뀌지 않는 선에서 데이터를 조작해 데이터 수를 늘리는 방법

Noise Robustness

  • 데이터에 noise를 넣어서 데이터를 늘리는 것
  • 학습 때, weight에도 noise를 넣어서 흔들어주면 성능이 좋아진다.

Label smooting

  • 학습 데이터 두개를 뽑아서, classification label의 경계를 부드럽게 하는 것
  • 성능이 잘 올라간다.

Drop-out

  • Neural Network의 일부 weight를 0으로 바꾸는 것
    -> 각 뉴런들 Robust한 feature를 잡을 수 있다.

Batch Normalization

  • 적용하려는 Layer의 모든 parameter에 대해, 평균을 빼고 표준편차로 나눈다.
    (예를들어 모두 100정도의 값을 가지고 있었으면 0으로 줄이는 동작)
  • 후속

0개의 댓글