DL&ML 38

Multi-Sample Dropout for Accelerated Training and Better Generalization

https://arxiv.org/pdf/1905.09788.pdf NLP 관련 캐글 상위권 솔루션들을 보다보면 간혹 등장하는 multi-sample dropout 구조를 이용해 모델의 일반화 능력을 향상 시키는 것을 볼 수 있다. 관련 논문이 있어 아이디어 정도만 정리해본다. Dropout의 효과 리마인드 예를 들어, 랜덤하게 50%의 뉴런을 매 학습 이터레이션 마다 버림 그 결과, 뉴런들이 서로 의존하는 것을 막을 수 있고, better generalization이 가능해짐 inference 시에는 학습 때 처럼 랜덤하게 버리지 않고, 각 뉴런의 출력에 0.5를 곱함. Multi-sample Dropout 이게 전부다. ​ BERT를 fine-tuning할 때를 예를 들면, BERT의 output fe..

DL&ML/papers 2021.04.15

Kaggle TSE 2020 대회 top-solution 정리

작년에 참여해서 은메달을 획득했던 Kaggle Tweet Sentiment Extraction 대회에서 다른 사람들은 어떻게 성능을 끌어올렸는지 top solution을 훑어 보면서 정리해보려고 한다. Tweet Sentiment Extraction Extract support phrases for sentiment labels www.kaggle.com 흥미롭고 배울 게 많은 답안 위주로... 13-th www.kaggle.com/c/tweet-sentiment-extraction/discussion/159505 RoBERTa-base로 시작 데이터가 적어서 아이디어를 검증할 때, 5-CV를 10번(random seed 다르게) 돌려 벨리데이션을 수행 빈칸 자체도 패턴이 될 수 있다고 판단해서, 전처리..

ALBERT: A Lite BERT for self-supervised learning of language representations

arxiv.org/abs/1909.11942 ALBERT: A Lite BERT for Self-supervised Learning of Language Representations Increasing model size when pretraining natural language representations often results in improved performance on downstream tasks. However, at some point further model increases become harder due to GPU/TPU memory limitations and longer training times. To arxiv.org ALBERT에 대해 갑자기 궁금하여 빠르게 훑어 보았다..

DL&ML/papers 2021.04.14

Seq2Seq & Beam Search

앞서 Seq2Seq의 구조와 학습 방법에 대해서 알아봤었다. Seq2Seq, Auto Regressive, Attention, Teacher Forcing, Input Feeding 최근에 번역 모델을 직접 구현해보면서 공부하게 된 구조 seq2seq. 개념만 알고 직접 구현해본 적은 없어서 굳이 호기심을 가지고 해본 것인데, 새롭게 배운 것이 꽤 있다. 이해하기 위해선 RNN이나 aimaster.tistory.com 그러면, 추론은 어떻게 할까? seq2seq을 기준으로 입력 문장(영어)을 컨텍스트 벡터로 인코딩 한 뒤 타겟 문장(한글)으로 디코딩하는 방법에 대해 정리해 본다. 입력/출력 문장을 구성하는 단어 사전의 크기는 3만개라고 가정하자. 디코딩 과정은 곧 매 타임스텝마다 3만 개 단어중 하나를 ..

DL&ML/concept 2021.04.14

분류 문제 관련 torch loss (BCEWithLogitsLoss, CrossEntropyLoss, LogSoftmax, NLLLoss)

torch.nn.BCEWithLogitsLoss 이진 분류 문제를 풀 때 쓰는 BCEWithLogitsLoss Sigmoid layer + BCELoss의 조합으로 구현되어 있다. 이미 최적화 되어 있으므로 별도로 구현하기 보다 갖다 쓰는게 낫다고 한다. 기본적으로는 'mean'으로 reduction 되어 스칼라 값을 리턴한다. single label 이진 분류 문제 뿐만 아니라 multi-label 이진 분류 문제를 풀 때도 활용 가능하다. single label 이진 분류 예시 logits = model(ids, token_type_ids=token_type_ids, attention_mask=mask, ans_indices=ans_indices) # |logits| = (batch, 1) # |la..

torch amp mixed precision (autocast, GradScaler)

1.5 버전 부터인가 nvidia의 amp모듈이 torch 기본 모듈로 자리잡았다. amp의 Mixed Precision 기능을 이용하면 float16으로 Type Casting 되는 것이 빠른 연산(Linear Layer, Conv Layer etc.)은 float16으로 변환해서 연산을 수행하는 것이 가능해진다. (계산 정확도를 유지하는 선에서) torch amp 모듈은 autocasting을 위한 모듈을 제공하며, 아래 예시 코드에서 확인할 수 있듯 그 이름도 autocast이다. with 문과 함께 선언해서 사용하면 그 안에 선언되는 토치 연산들은 mixed precision으로 실행이 된다. model의 forward 연산과, loss 계산 연산을 with문 아래에 위치 시키자. autocast..

Focal Loss

Object Detection에서 Background / Foreground Class의 불균형 문제를 로스 함수로 해결하기 위해 제안된 focal loss 이걸 클래스 분균형이 심한 일반 분류 문제에도 적용할 수 있을 것 같아서 살펴보았다.. 핵심 아이디어는 다음과 같다. 모델 입장에서 쉽다고 판단하는 example에 대해서 모델의 출력 확률(confidence) Pt가 높게 나올테니 (1-Pt)^gamma를 CE에 추가해줌으로써 높은 확신에 대해 패널티를 주는 방법 반대로 어려워하고 있는 example에 대해선 Pt가 낮게 나올테니 (1-Pt)^gamma가 상대적으로 높게 나올 것! gamma가 높을 수록 (1-Pt)가 작을 수록 더 작아진다 (확신이 높은 example은 패널티를 더 받음) 일반적인..