일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Eliza
- 백준
- Relation Extraction
- BELU
- 취업
- fine-tuning
- text classification
- bert
- Transformers
- ai-tech
- scaled dot-product attention
- Chatbot
- Dialogue System
- huggingface
- boj
- MT-DNN
- KLUE
- multi-head attention
- BoostCamp
- pytorch
- Conversation System
- Prompt Tuning with Rules for Text Classification
- GPT-1
- layer normalization
- FSML
- BLEU Score
- Transformer
- NLP
- KLUE-RE
- beam search
- Today
- Total
dukim's blog
[WK02-Day007][21.08.10.Tue] Optimization, 도메인 특강, 1주차 피드백 본문
[WK02-Day007][21.08.10.Tue] Optimization, 도메인 특강, 1주차 피드백
eliza.dukim 2021. 8. 10. 19:12Intro
- 강의가 얼마 없다 생각해서 여유로울 줄 알았는데 특강이 많았던 하루
강의 내용 복습
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
- [선지민님 블로그][(https://jiminsun.github.io/2018-04-30/erm/)
- Wikipedia
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 하게 합친다.
(출처: https://www.datacamp.com/community/tutorials/adaboost-classifier-python)
PracticalGradientDescentMethods
Gradient Descent Methods
- 파라미터 업데이트시 사용한 Gradient를 계산하는 샘플의 개수에 따라
- Stochastic Gradient Descent : a single sample
- Mini-batch Gradient Descent : a subset of data
- 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를 활용하려면 어떻게 하면 좋을지에 대한 테크닉을 말한 논문.
Gradient Descent Methods
- 각각의 optimizer가 왜 제안되었고 어떤 특징이 있는지 알아야한다.
(Stochastic) Gradient Descent
- learning rate(or step size) 잡는 것이 어렵다.
- 뒤에 나오는 방법론은 learning rate를 사람이 신경써서 설정해주지 않고 gradient info만 활용해도 더 좋은 성능, 또는 더 빠른 optimization을 찾게하려 연구한 결과물
Momentum
- optimizer들의 기본이 되는 방법론
- 이전 batch에서 계산된 gradient 방향을 현재 gradient update에 활용해보자(일종의 관성처럼)
- $g_t$ : 현재 시점 $t$의 gradient
- $a_t$ : 현재 시점 $t$까지의 momentum이 포함된 accumulated gradient
- 지난 번 batch에서 계산된 gradient를 버리지 않고 어느 정도 유지시켜주기 때문에, gradient가 batch마다 심하게 튀어도 잘 학습이 됨
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한다.
여기까지가 momentum을 이용한 방법. gradient를 계산했고, 다음 번 gradient 계산시 이 정보를 전달해서 활용하겠다.
이에 반해 adaptive한 방법이 있는데 아래에서 소개
Adagrad
- NN의 parameter가 얼만큼 지금까지 변해왔는지를 보게됨
- 많이 변해온 parameter에 대해서는 learning rate를 적게, 그렇지 않은 경우는 크게 변화시킴
- $G_t$ : Sum of gradient squares, 지금까지 각 파라미터가 얼만큼 변해왔는지를 제곱해서 더한 것. 계속해서 커짐, 이것이 커진 다는 건 해당 파라미터가 많이 변했음을 의미
- $G_t$를 역수에 집어넣었기 때문에, 지금까지 많이 변한 파라미터는 적게 변화시키고, 지금까지 적게 변한 파라미터는 많이 변화 시키겠다.
- 문제는 $G_t$가 계속 커지기 때문에, 분모가 무한대로가 W의 업데이트가 안될 것. 즉, 뒤로 가면 갈수록 학습이 멈추는 문제 발생
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이 없어 바꿀 수 있는 요소가 많지 않기 때문에 활용되지 않는다.
RMSprop
- Adagrad에서 gradient squares의 합 대신 EMA를 사용
- $G_t$가 무한정 커지지 않게 하면서 변수간 상대적인 변화량 크기 차이를 유지할 수 있다.
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라고 부르기도 함
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)
- Batch Norm: 현재 레이어에 입력된 batch에 대해
- Layer Norm: 각각의 레이어에 대해
- Instance Norm: 데이터 샘플 하나 하나에 대해
- Group Norm: 2, 3의 중간
소개한 방법들을 하나 하나 테스트 해보면서 generalization performance가 높은 것을 선택할 것
피어세션
- 모더레이터 : 김대웅
- 회의록: 한진
- 발표: 추창한, 한진
- 추창한 : Optimization 학습 내용 공유
- 한진 : ResNet과 ensemble의 상관관계 간단히 리뷰
- Talk
- 각자 BoostCamp에서 NLP와 CV 선택한 이유
- 서울대 AI 여름학교 링크 공유
- 알고리즘이 취업에 미치는 영향
학습 회고
- Optimization 학습 내용 정리를 하다보니 10시에 시작해서 3시에 끝났다.
- Optimizer가 종류별로 대략 어떤 컨셉인지 이해했으나, 최근 추가된 것들에 대해 정리 필요
- AdamP, RAdam, AdamW, Learning rate scheduling 기법 정리 필요함
- 도메인 특강에서 취업 준비 방향에 대한 조언을 들을 수 있어 도움이 되었다. 방향을 알았으니 이젠 하기만 하면 된다.
'Boostcamp AI Tech 2th' 카테고리의 다른 글
[WK02-Day009][21.08.12.Thu] RNN, Sequential Models Git&Github 특강 (0) | 2021.08.13 |
---|---|
[WK02-Day008][21.08.11.Wed] CNN (0) | 2021.08.11 |
[WK02-Day006][21.08.09.Mon] 가독성을 고려한 시각화 (0) | 2021.08.09 |
[WK01-Day 005][21.08.06.Fri.] 주간 학습 내용 정리 (0) | 2021.08.07 |
[WK01-Day 004][21.08.05.Thu.] 선택과제, 첫 멘토링, 온보딩 키트 도착 (0) | 2021.08.06 |