일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- LSTM
- GRU
- tensorflow
- kde
- pytorch
- triu
- forward
- error
- tril
- Til
- 네이버 부스트캠프
- nn.Sequential
- kernel density estimation
- RNN
- Linux
- ubuntu
- 크롬 원격 데스크톱
- Chrome Remote Desktop
- ai tech
- band_part
- Today
- Total
무슨 생각을 해 그냥 하는거지
[학습정리] 2021-08-10 본문
※ 정보전달이 목적인 포스트가 아니라 개인 학습 기록 및 정리가 목적인 포스트입니다 ※
해당 포스트는 네이버 커넥트 재단의 부스트캠프 마스터님이신 최성준 교수님의 강의를 바탕으로 작성되었습니다.
1. 강의 복습 내용
[Optimization]
Cross validation
독립적인 데이터에 대해 얼마나 모델이 일반화(generalization) 될 지 평가하는 방법
보통 5-fold cross validation을 사용한다. (일반화해서 k-fold cross validation)
- 위 그림처럼 test data는 손대지 않고, train 데이터를 파티션하여 k개의 fold를 만든다.
- 하나의 fold를 validation dataset으로 지정하고, 나머지 k-1개의 fold로 모델을 학습시킨다.
- 학습한 모델을 지정했던 validation dataset으로 테스트해본다 → 결괏값 하나 획득!
- 다시 다른 fold를 validation dataset으로 지정하고, 나머지 k-1개의 fold로 모델을 새로 학습시킨다.
- 학습한 모델을 지정했던 validation dataset으로 테스트해본다 → 결괏값 두 개 획득!
- 이렇게 다른 fold가 모두 한 번씩 validation dataset이 되도록 반복 .. → 총 k개의 결괏값을 얻음
- 마지막에 모든 시도에 대한 평균을 구해 모든 train dataset을 이용해 모델을 학습시키고 test dataset에 테스트!
Bias and Variance Tradeoff
bias는 Network가 지속적으로 잘못된 것을 학습하고 있는 경향을 얘기한다. underfitting과 관계가 있다.
varience는 Network가 얼마나 민감한지 보여준다. 너무 여러 요소들을 고려해서 overfitting되는 것과 관계가 있다.
이렇게 하나는 underfitting, 다른 하나는 overfitting과 관계 되어 있어서 tradeoff라고 하나보다.
Bagging vs. Boosting
Bagging (Bootstrapping and aggregating) ~ ensemble과 비슷함
: bootstrapping은 original training dataset에서 (중복가능한) random sampling을 이용해 여러 데이터셋을 만들어 각각의model을 학습시키는 방법이고, 이 bootstrapping을 통해 얻은 모델들의 결과를 모아(aggregation) 평균을 취하는 것이 Bagging이다.
Boosting
: 분류하기 어려운 특정 training sample들에 집중하는 방법이다. original training dataset에서 random sampling을 해 weak learner를 학습시키고, 그 다음 데이터 선정 및 모델 학습에서 앞의 weak learner의 에러를 반영한다.
Bagging은 Parallel하게 모델을 학습하지만, Boosting은 sequential하게 모델을 학습한다.
Gradient Descent Methods
- Gradient Descent
- Momentum
운동량으로 익숙한데 여기선 관성과 같은 개념으로 사용한다. 다음 weight를 update할 때 현재의 gradient 뿐만 아니라 그 이전의 gradient(a_t에 g_(t-1)이 포함되어 있으니까)도 고려를 해준다. 이전의 gradient를 고려해준다는 점에서 관성을 유지한다는 것 같다. momentum 계수 베타가 0이면 일반적인 gradient descent와 같아진다!
원래 방향을 유지하니까 momentum을 사용하지 않는 gradient descent보다 좀 더 빠르게 수렴할 수 있다.
- Nesterov Accelerated Gradient
처음 접해 보는 내용이라 잘 이해가 안돼서 블로그를 참조했다. momentum에서 조금 더 개선된 방식으로, momentum은 gradient와 momentum step을 독립적으로 계산하고 더하지만 NAG에서는 momentum을 먼저 고려해 momentum step을 먼저 이동했다고 생각한 후 그 자리에서의 gradient를 구해서 gradient step을 이동한다고 한다.
momentum 방식은 멈춰야 할 시점에서도 관성에 의해 수렴을 잘 못 할 수 있다는 단점이 있는데, NAG는 적절한 시점에서 멈출 수 있다.
- Adagrad
Adagrad는 분모에 이전의 모든 gradient들의 합이 있다(이게 step size가 된다). 그래서 그동안 gradient가 많이 변했으면 적게 업데이트를 하고, gradient가 적게 변했으면 많이 업데이트를 한다. 하지만 학습이 길어질 경우 모든 gradient가 누적되어 G_t가 커지게 되고, G_t가 분모에 있기 때문에 업데이트가 더뎌지면서 멈추게 된다.
- Adadelta
Adagrad의 단점을 보완하기 위해 제안된 방법. G_t를 구할 때 단순 합이 아닌 EMA (Exponential Moving Average, 지수이동 평균)을 사용한다. learning rate가 없다는 특이사항(?)이 있다. 잘 쓰지 않는 방법이라 자세하게 공부하지는 않았다.
- RMSprop
RMSprop도 Adagrad와 마찬가지로 G_t를 구할 때 단순 합이 아닌 EMA를 사용했다. 유명한 제프리 힌튼 교수가 강의에서 언급하기만 하고 따로 논문으로 publish 되지는 않았다고 한다.
- Adam
드디어 Adam! Adaptive Moment Estimation의 약자로, RMSProp과 momentum 방식을 합친듯한 방법이다. 데이터, 모델마다 optimizer를 다르게 쓴다지만 보통 Adam을 자주 쓰기는 하는 것 같다(지극히 개인적인 경험담ㅎㅎ).
Regularization
Early stopping, Parameter norm penalty (이게 그동안 배웠던 regularization term인듯), Data augmentation, Noise robustness, Label smoothing, Dropout, Batch Normalization. 이처럼 여러 종류의 regularization 기법이 있지만 잘 들어보지 못했던 Label smoothing에 대해서만 정리를 해보려고 한다.
이미지 분류의 경우 사람이 annotation을 해서 label을 만드는 것이기 때문에 오류가 있을 수도 있다. 이런 경우 잘못된 학습을 하기 때문에 이런 잘못된 loss의 영향을 줄이기 위해 label을 극단적으로 설정하지 않고 smooth하게 설정하는 것을 label smoothing이라고 한다.
- Mixup은 이미지 두개를 overlap하고 label도 반반씩 부여 하는 방법이다.
- Cutout은 이미지의 일부분만으로도(일부분을 잘라낸 채로) 같은 label을 부여하는 방법이다.
- CutMix는 overlap하거나 이미지를 잘라낸 부분을 비워두지 않고, 다른 label을 가진 두 개의 이미지를 일정부분 합치고, 그에 비례하게 label을 smooth하게 주는 방법이다.
2. 과제 수행 과정 / 결과물 정리
[필수과제 Optimization]
model.train()
optimizer.zero_grad()
loss.backward()
optimizer.step()
3. 피어세션 정리
- cross validation의 설명이 조금 애매해서 피어분들과 함께 얘기해봤는데 명확한 해답을 얻을 수 있었다.
- Model과 optimizer의 차이에 대해 질문해주셔서 model은 파라미터를 갖고 있는 친구고 optimizer는 그 파라미터를 업데이트 해주는 방식이라고 답변을 드렸다. (옳은 답이었으면 좋겠다...^^)
- 오늘도 한 명씩 자기소개를 하는 중! 서로를 알아가면서 질문도 좀 더 편하게 할 수 있어서 좋은 것 같다.
4. 학습 회고
- 어제 visualization 강의를 다 들어놨고, 오늘은 강의가 별로 없어서 온전히 내 것으로 만들 시간이 꽤 충분했다.
- 확실히 혼자 공부하는 시간을 갖는 게 중요한 것 같다.
- 도메인 특강을 통해 한번 더 그래도 좀 익숙한 CV가 나은지, 새로운 NLP가 좋을지 고민할 시간을 가졌다.
- 안수빈 강사님의 시각화 특강을 들었다. 시각화를 정말 사랑하시는 것 같아서 시각화가 더 돋보이고 멋져보인다. 나도 내 분야를 다른 사람에게 자신 있게 소개하고 영업(?)할 수 있는 사람이 됐으면 좋겠다. 그만큼의 실력을 가질 수 있도록 더 노력해야지.. 개발자가 실력이 없으면 죄라고 하신 게 기억에 남는다....^^ 알고리즘(코테)에만 10000시간을 쏟으셨다고 했다. 무언가에 통달하려면 만 시간이면 된다고 어디서 들은 것 같은데... 정말 존경스러운 분이다.
'Naver AI Tech 2기 > Today I Learned' 카테고리의 다른 글
[학습정리] 2021-08-17 (0) | 2021.08.17 |
---|---|
[학습정리] 2021-08-13 (0) | 2021.08.13 |
[학습정리] 2021-08-09 (0) | 2021.08.09 |
[학습정리] 2021-08-06 (0) | 2021.08.06 |
[학습정리] 2021-08-04 (0) | 2021.08.04 |