dukim's blog

[WK02-Day007][21.08.10.Tue] Optimization, 도메인 특강, 1주차 피드백 본문

Boostcamp AI Tech 2th

[WK02-Day007][21.08.10.Tue] Optimization, 도메인 특강, 1주차 피드백

eliza.dukim 2021. 8. 10. 19:12

Intro

  • 강의가 얼마 없다 생각해서 여유로울 줄 알았는데 특강이 많았던 하루

강의 내용 복습

Important Concepts in Optimization

1. Generalization

  • Generalization Performance: Gap between training err and test err

    2. Underfitting vs. Overfitting

    3. Cross-validation(K-fold Validation)

  • NN 학습시 hyperparameter 선택을 위한 방법
  • hyperparameter 선택 후 최종 학습시 모든 데이터 다 사용
  • test data는 학습에 어떤 방법으로든 사용되선 X

    4. Bias and Variance(직관적인 설명)

  • variance: 입력에 대한 출력이 일관적인 정도
  • bias: 평균적으로 봤을 때 이것이 같은 입력에 대해 많이 분산되더라도, 평균적으로 봤을 떄, 다 True target에 접근하게 되면 그 자체로 bias가 낮다고 하고, bias가 높은 건 mean과 많이 벗어나는 것.

    Bias & Variance Tradeoff

  • cost를 minimize 한다는 것은 bias^2, variance, noise를 minimize하는 3파트로 분해될 수 있다.
  • bias를 줄이게 되면 variance가 높아질 가능성이 크고 variance를 줄이면 bias가 높아질 가능성이 크다.
  • 근본적으로 데이터에 noise가 많이 껴있을 경우 둘 모두를 줄이긴 힘들다.
  • 기타 참고 자료: Empirical Risk Minimization

5. Bootstrapping

  • 통계학 용어로, 가설 검증(test) 또는 메트릭(metric) 계산을 할 때 random sampling을 적용하는 것을 말하며, 이때 random sampling은 중복을 허용한다(출처)

    Bagging vs. Boosting

  • Bagging(Bootstrapping aggregating)
    • 여러 개의 모델을 학습 데이터를 sub sampling 해서 만들고, 여러 모델들의 output을 모아 voting 또는 averaging을 통해 최종값 산출
    • Ensemble
    • 각 모델이 overfitting 되어있어도 여러 결과를 voting or avergaing하므로 보다 general한 모델
  • Boosting
    • 성능이 좋지않은 분류기(weak classifier)를 sequential 하게 이어붙여 성능이 좋은 분류기를 만드는 방식
    • 직전 모델이 분류하지 못했던 training samples에 대해서만 잘 동작하는 분류기를 만들어 sequential 하게 합친다.

image
(출처: https://www.datacamp.com/community/tutorials/adaboost-classifier-python)

PracticalGradientDescentMethods

Gradient Descent Methods

  • 파라미터 업데이트시 사용한 Gradient를 계산하는 샘플의 개수에 따라
  1. Stochastic Gradient Descent : a single sample
  2. Mini-batch Gradient Descent : a subset of data
  3. Batch Gradient Descent : the whole.data

Batch-size Matters

  • On Large-batch Training for Deep Learning: Generalization Gap and Sharp Minima, 2017
  • Batch-size를 작게 쓰는 것이 일반적으로 성능이 좋다.
  • Sharp minimizer 보다는 flat minimizer에 도달하는 것이 좋다.
  • 아래 그림에서 우리의 목적은 Testing Function의 minimum을 찾는 것, 근데 flat minimum의 특징은 training function에서 조금 멀어져도, testing function에서도 적당히 낮은 값이 나옴. 다시 말해, training data에서 잘 되면, test data에서도 잘 된다. 즉 flat minimizer는 generalization performance가 높은 것
  • 근데 sharp minimum의 경우, training function에서 local minimum에 해당하는 곳에 도착했어도 testing function에서는 약간만 벌어져있어도 높은 값이 나옴. 다시 말해, training 단계와 testing 단계의 성능차이가 커 generalization performance가 낮다는 것.
  • 배치 사이즈를 줄이게 되면 일반적으로 generalization performance가 좋아짐을 실험적으로 보이고, 그러면 우리가 large-batch size를 활용하려면 어떻게 하면 좋을지에 대한 테크닉을 말한 논문.

image

Gradient Descent Methods

  • 각각의 optimizer가 왜 제안되었고 어떤 특징이 있는지 알아야한다.

(Stochastic) Gradient Descent

  • learning rate(or step size) 잡는 것이 어렵다.
  • 뒤에 나오는 방법론은 learning rate를 사람이 신경써서 설정해주지 않고 gradient info만 활용해도 더 좋은 성능, 또는 더 빠른 optimization을 찾게하려 연구한 결과물

image

Momentum

  • optimizer들의 기본이 되는 방법론
  • 이전 batch에서 계산된 gradient 방향을 현재 gradient update에 활용해보자(일종의 관성처럼)
  • $g_t$ : 현재 시점 $t$의 gradient
  • $a_t$ : 현재 시점 $t$까지의 momentum이 포함된 accumulated gradient
  • 지난 번 batch에서 계산된 gradient를 버리지 않고 어느 정도 유지시켜주기 때문에, gradient가 batch마다 심하게 튀어도 잘 학습이 됨
    image

Nesterov Accelerated Gradient(NAG)

  • 비슷하나 약간 컨셉이 다름

  • accumulated gradient $a$를 계산할 때, Lookahead Gradient를 계산

  • 앞의 방법이 이전 batch에서 계산한 $a_t$을 더했다면 여기선 현재의 $a_t$로 한 스텝 먼저 업데이트했을 떄의 gradient를 계산해 더한다.

  • 직관적인 설명:

    • U 자형의 convex function의 왼쪽편에서 시작해 업데이트 후 local minima를 지나서 오른쪽으로 이동했다고 할 때, momentum 방식의 경우 이전 스텝의 $a_{t-1}$는 U의 오른쪽 방향인 반면, 현재 gradient 방향은 왼쪽방향. 즉, 누적된 accumulated gradient가 현재 업데이트되어야할 방향과 반대로 momentum을 주고 있어 oscillation이 발생, local minima로 converge를 못 하는 상황이 생김
    • 그러나 NAG는 같은 상황에서 (U의 왼쪽편에 있을 떄) 미리 한 스텝 업데이트한 상태(local minima를 지나 오른쪽에 위치했을 때)의 gradient(왼쪽 방향)를 계산하여 accumulation 하기 떄문에, Momentum 방식보다는 local minima를 지나칠 가능성이 적다.
    • 즉, momentum보다 빨리 converge한다.
      image
  • 여기까지가 momentum을 이용한 방법. gradient를 계산했고, 다음 번 gradient 계산시 이 정보를 전달해서 활용하겠다.

  • 이에 반해 adaptive한 방법이 있는데 아래에서 소개

Adagrad

  • NN의 parameter가 얼만큼 지금까지 변해왔는지를 보게됨
  • 많이 변해온 parameter에 대해서는 learning rate를 적게, 그렇지 않은 경우는 크게 변화시킴
  • $G_t$ : Sum of gradient squares, 지금까지 각 파라미터가 얼만큼 변해왔는지를 제곱해서 더한 것. 계속해서 커짐, 이것이 커진 다는 건 해당 파라미터가 많이 변했음을 의미
  • $G_t$를 역수에 집어넣었기 때문에, 지금까지 많이 변한 파라미터는 적게 변화시키고, 지금까지 적게 변한 파라미터는 많이 변화 시키겠다.
  • 문제는 $G_t$가 계속 커지기 때문에, 분모가 무한대로가 W의 업데이트가 안될 것. 즉, 뒤로 가면 갈수록 학습이 멈추는 문제 발생

image

Adadelta

  • $G_t$가 계속 커지는 것을 막기위해 적용해볼 수 있는 가장 간단한 아이디어는 현재 타임 스텝 t가 주어졌을 때 윈도우 사이즈만큼의 타임 스텝만을 고려해 $g^2_t$의 변화량을 고려하는 것.
  • 그러나 이 방식도 윈도우 사이즈에 따라 문제가 있다. 각 시점마다의 gradient를 들고 있어야하므로 GPU 메모리에 다 저장할 수 없음. 따라서 윈도우 사이즈 만큼의 지수이동평균 EMA(exponential moving average)으로 문제 해결
  • $H_t$ : 강의에서 이에 대한 설명은 넘어감, 업데이트 하려 하는 $W_t$의 변화량
  • 의의: adagrad의 learning rate이 $G_t$의 역수로 표현됨으로써 생기는 monotonic decrease property를 막는 방법, learning rate이 없어 바꿀 수 있는 요소가 많지 않기 때문에 활용되지 않는다.

image

RMSprop

  • Adagrad에서 gradient squares의 합 대신 EMA를 사용
  • $G_t$가 무한정 커지지 않게 하면서 변수간 상대적인 변화량 크기 차이를 유지할 수 있다.

image

Adam(Adaptive Momentum Estimation)

  • 가장 일반적인 방법
  • RMSProp + Momentum
  • Gradient Squares를 EMA로 적용함과 동시에, 앞의 Momentum을 함께 활용
  • Hyperparameter:
    • $\beta_1$: momentum을 얼마나 유지시킬지
    • $\beta_2$: gradient squares에 대한 EMA 정보
    • $\eta$: learning rate
    • $\epsilon$: numerical stability를 위한 값(1e-7이 기본값인데, 실제 실험에서 이 값을 잘 조절하는게 매우 중요)
  • 식에서 $\frac{\sqrt{1-\beta_2^t}}{1-\beta_1^t}$는 전체 gradient descent가 unbiased estimate되기 위해 수학적으로 증명한 값으로 상세 증명은 생략.

##Regularization

  • 일반화 성능을 높이기 위한 방법

Early Stopping

  • skip

Parameter Norm Penalty

  • NN의 parameter가 너무 커지지 않게 함
  • 가정: 부드러운 함수일수록 generalization performance가 높다.
  • weight decay라고 부르기도 함
    image

Data Augmentation

  • 데이터셋의 크기가 어느 수준 이상 커지게되면 ML 방법론은 많은 수의 데이터를 표현할 만한 표현력이 부족해 성능 향상이 정체되는 반면, DL 방법론은 이를 다 표현할만큼의 능력이 된다. 문제는 데이터셋이 한정적이라는 것
  • 더 많은 데이터를 얻기 위해 기존 데이터를 이용해 늘리자
  • Label Preserving Augmentation: 변환 후에도 label이 바뀌지 않는 한도 내에서 변환(e.g. MNIST 2와 5는 상하 반전 X)

Noise Robustness

  • Noise를 입력 데이터 뿐만 아니라 wights에도 집어 넣음

Label Smoothing

  • Data Augmentation과 비슷한데, 서로 다른 label data 두 개를 뽑아서 섞어주는 것
  • 분류문제를 푼다는 것은 decision boundary를 찾는 것. 이를 부드럽게 만들어 주는 효과
  • Mixup: 서로 다른 label의 두 데이터를 샘플링해 이미지와 label을 섞음(Muxup이 실제 적용시 성능이 많이 오른다, 또한 코드 자체도 되게 간단함).
  • Cutout: 이미지에서 일정 영역 제거
  • CutMix: Mixtup과 비슷한데 blending하게 섞는게 아니라 잘라 붙이듯 섞음

Dropout

  • Inference시 NN의 일정 비율을 0으로 바꿔줌
  • 각각의 Neuron이 robust한 feature를 잡을 수 있다 해석을 하나 증명된 것은 아님

Batch Normalization

  • internal covariate shift 용어에 논란이 있음

  • BN을 적용할 layer의 statistics를 정규화 시키는 것

  • 방식: NN의 각각의 레이어가 mean이 0이고 uni variance가 되도록 만드는 것

  • 효과: internal covariate shift를 줄여, 네트워크가 잘 학습이 된다(covariate == feature) -> 뒤에 나오는 연구들이 이 부분을 동의하지 않음. 그러나 확실한 건, BN을 활용하게되면 일반적으로 특히 레이어가 깊게 쌓아올리게되면 성능이 많이 올라간다.

  • Variants of normalizations...(출처:Group Normalization, 2018)

    1. Batch Norm: 현재 레이어에 입력된 batch에 대해
    2. Layer Norm: 각각의 레이어에 대해
    3. Instance Norm: 데이터 샘플 하나 하나에 대해
    4. Group Norm: 2, 3의 중간
  • 소개한 방법들을 하나 하나 테스트 해보면서 generalization performance가 높은 것을 선택할 것

피어세션

  • 모더레이터 : 김대웅
  • 회의록: 한진
  • 발표: 추창한, 한진
    • 추창한 : Optimization 학습 내용 공유
    • 한진 : ResNet과 ensemble의 상관관계 간단히 리뷰
  • Talk
    • 각자 BoostCamp에서 NLP와 CV 선택한 이유
    • 서울대 AI 여름학교 링크 공유
    • 알고리즘이 취업에 미치는 영향

학습 회고

  • Optimization 학습 내용 정리를 하다보니 10시에 시작해서 3시에 끝났다.
  • Optimizer가 종류별로 대략 어떤 컨셉인지 이해했으나, 최근 추가된 것들에 대해 정리 필요
  • AdamP, RAdam, AdamW, Learning rate scheduling 기법 정리 필요함
  • 도메인 특강에서 취업 준비 방향에 대한 조언을 들을 수 있어 도움이 되었다. 방향을 알았으니 이젠 하기만 하면 된다.
Comments