1) 강의 복습 내용
최적화optimization에 대해서 총체적으로 배웠다.
그렇지 않은 경우도 있지만
대부분의 경우 모델의 일반화generalization을 최대로 하면서
최적의 모델을 찾고자 하는 시도를 한다.
일반화란 학습하지 않은 문제에 대해서도 일반적으로 동일한 성능을 기대할 수 있는 것을 말한다.
일반화도 잘 되면서 성능도 뛰어난 모델을 얻을 수 있는 방법에 대한 연구가 굉장히 많이 이루어졌다.
트레이닝 데이터에 과적합되면 테스트 데이터에 대해서 잘 대처하지 못하는 현상을 보이므로
이런 현상이 발생하지 않도록 하면서 성능을 최적화해야한다.
가장 첫번째 전략으로는 어느정도 성능이 안정되었다고 판단되면
generalization gap 이 더이상 벌어지기전에 학습을 중단하는 것이다.
두번째 방법은 Cross-validation 인데
test 데이터 없이 train 데이터를 일정하게 분할하여
여러번의 비복원 추출을 통해서 validation data를 만들어보는 방법이다.
이렇게 하는 경우 해당 데이터에 대해서 모델이 어느정도의 성능을 기대할 수 있는지 확인이 가능하다.
이렇게 확인하여 최적의 모델을 고른 후에는 모든 train 데이터를 이용해서 학습한다.
사실 직접 kaggle 을 하기 전까지는 validation 데이터의 의미를 몰라서
이 cross-validation을 정확히 이해하지 못하고 있었다.
왜냐하면 연구에서 사용하는 testset은 보통 라벨까지 주어지는데
그래야 test에대한 성능지표를 얻기 때문이다.
그런데 실전에서 어떤 모델을 쓰려면 혹은 대회에서 쓸때는
testset에 라벨데이터가 없다.
그러니까 입력만 있을뿐 내가 정답을 맞춘건지 아닌지 알 길이 없다는 말이다.
이럴때 할 수 있는 방법이 바로 내 trainset을 분할하여 일부만 train 해보고
일부의 알고있는 라벨에 대해서 점수를 매겨보는 방법이다.
모델이 훈련될때는 bias와 variance 라는 개념도 등장하는데
이 개념은 탄착군에 비유하여 설명하셨다.
low bais low variance 가 더 좋긴 하지만 그래도 굳이 선택을 해야한다면
output의 variance가 낮을 수록 더 좋은 모델이라고 할 수 있다.
우리가 cost를 구할때 이 bias와 variance의 tradeoff 를 가지게되는데
이건 MDN과제 정리할때 한번 자세하게 수식으로 다루고
지금은 그냥 이 tradeoff를 선택하려면 낮은 variance를 선택하는 것이 좋다고 알아두자.
Bootstrapping, Bagging과 Boosting 도 배웠다.
이 세개는 사실 통계모델이나 ML모델링에서 많이 쓰인다.
Bootstrapping은 가지고있는 한정적인 데이터를 최대한 쥐어짜고 또 짜서 최선의 해답을 얻어보자는 시도인데
아까 말한 cross-validation과 유사한 방식으로
비복원 추출한 일부의 그렇지만 충분한 양의 데이터만을 훈련하고
그런 모델들을 여러개 만들어서 그 모든 모델에 대한 앙상블을 적용하는 것이다.
이 앙상블은 평균일수도 혹은 다수결일 수도 있다.
boosting은 훈련된 모델이 일부 잘 맞추지 못하는 데이터라벨에 대해서
더 정교하게 훈련된 모델을 한번 더 통과시키는 방법으로
여러개의 특화된 모델을 여러번 통과하면서 성능을 높이고자하는 방법이다.
위의 많은 전략은 DL뿐만 아니라 ML에서도 많이 쓰이며 어떤 전략은 DL에서는 전혀만나보지 못한 전략들도 많다.
특히 Decision tree 계열의 모델과 궁합이 잘 맞는 전략들이 많았다.
그러면 이번에는 DL에 특화된 Gradient Descent 를 좀 더 practical하게
실용적으로 사용하는 방법을 알아보자.
먼저는 batch를 조절하여 stochastic 한 기울기를 얻는 방법이 있는데
이건 매번의 subsample에 대해서 minimize 하는 loss function의 개괄적인 꼴이 달라지기 때문에
국소해를 탈출하는 시나리오가 있다는 이야기를 이미 한 적이 있다.
이 부분은 나도 처음듣는 굉장히 신선한 연구에대한 소개였는데
배치의 크기가 작아질수록 Flat Mnimum에 도달할 확률이 높고
그렇지 않을 수록 Sharp Minimum에 도달할 확률이 높다는 수학적 근거가 있다고 한다.
Sharp Minimum일수록 test 데이터가 그리는 loss function에서 큰 오차를 만들 확률이 높기 때문에
Flat Minimum에 도달하는 작은 배치를 쓰라는 말이다.
주말에 한번 꼼꼼하게 읽어봐야겠다.
이것말고도
SGD / Momentum / Nesterov accelerated gradient / Adagrad / Adadelta / RMSprop / Adam
이런 수많은 변천사를 거치면서 지금의 Adam optimizer가 나오게 되었다.
RMSprop은 Santiago Pascual 의 SEGAN에서 처음 만나서 한동안 썼었는데
이게 힌튼아저씨의 '잘된다카더라'에서 나온 식이어서
레퍼런스를 그 카더라가 나온 렉쳐로 적는다는 말은 들을때마다 웃기다.
그 외에도 regulariztion / Augmentation / Noise Robustness 같은 내용들도 한번씩 소개 됐다.
그중에도 흥미로운 것은 Label Smoothing을 쓰면 성능향상에 도움이 된다는 문장이었는데
이 개랑 고양이를 섞은 cutmix가 너무 웃겨서 한참을 낄낄댔다. 아마 교수님도 웃참하고 계셨던듯.
교수님은 어떤 방법론이 잘 된다고 소개할때
왜 그러한가에 대한 추측을 말하는 것을 조심하시는 스타일인것 같다.
나는 일단 지르고 브레인스토밍을 해보는 편인데 나랑은 정 반대의 스타일 이시다.
아무튼 나는 이게 distillation 과 연관이 있지 않나하는 생각이 바로 들었는데
그부분도 주말에 한번 후벼파봐야겠다.
그 외에도 DropOut / BN / LN 등의 정말 많은 내용들을 한번씩 꼼꼼하게 짚어주셔서 너무 감사했다.
2) 과제 수행 과정 / 결과물 정리
3) 피어세션 정리
오늘 발표 첫날이었는데 자료준비들을 꼼꼼하게 잘 해오셔서 감사했다.
AAE 는 Adversarial training을 통해서 더 깔끔한 데이터 manifold를 찾게 된다는 점
MDN에서는 multimodal estimation을 할 수 있다는 점
ViT에서는 attension을 사용하고 데이터가 많이 큰 상황에서 유리한 학습을 한다는 점
등을 이야기했는데 셋다 논문에 가장 핵심적인 부분이라고 생각한다.
4) 학습 회고
피어세션에서 시간이 많이 걸리게되어 다음 세션에 늦을뻔 했는데
피어세션 발표시간을 잘 생각해서 발표자료를 준비해야할것 같다.
앞으로 계속해서 세션들이 많아질것 같은데 발표를 핵심만 찌르게 준비하는 연습을 해야겠다.
내일은 이고잉님(ㅎㄷㄷㄷㄷ)의 깃헙강의가 있을 예정인데
부스트캠프는 강사진이 진짜 국내에서 1위들만 불러모아서 강사진을 꾸려놓았다 이게 가능한건지 ㅎㄷㄷ
뭔가 연예인보는 느낌이다. 코딩연예인
'딥러닝 머신러닝 데이터 분석 > BoostCampAITech' 카테고리의 다른 글
[ BoostCamp ] Day-11 학습로그(RNN) (0) | 2021.08.15 |
---|---|
[ Boost Camp ] Day-10 학습로그( CNN ) (0) | 2021.08.13 |
[ Boost Camp ] Day-8 학습로그 (0) | 2021.08.10 |
[ Boost Camp ] BPTT를 이해해 보자 (4) | 2021.08.09 |
[ Boost Camp ] Day-4 학습로그 ( CNN, RNN ) (0) | 2021.08.06 |
댓글