DL&ML 38

ML General 잡질문/답변 (기술면접)

기존 글에도 정리를 해왔지만, 기술 면접 준비하면서 정리 했던 것들 몇 가지 보충해서 정리해봤다. 틀린 내용이 있을 수 있으니 의심하면서 보길... Backpropagation 계산법 (이상한 곳에서는 간단한 계산 시킬 수도...) 로컬 그래디언트에 업스트림 그래디언트를 곱해줌으로써 구하는 것을 기본 원칙으로 계산 하면 된다 Regression vs. Classification 확률적인 관점에서 설명할 줄 알면 든든... 가정하는 분포가 뭔지 (이산? 연속? / 베르누이? 가우시안?) 가정 분포에 따라 Loss는 어떻게 달라지는지... Sigmoid 쓰는 이유? In order to map predicted value to probability a는 sigmoid의 기울기를 결정, b는 중심 위치를 결정..

DL&ML/concept 2021.05.14

Kaggle Shopee 대회 top-solution 정리

얼마 전 종료 되었던 Shoppe - Price Match Guarantee 대회 비록 뒤늦게 참여해서 아쉽게 메달은 획득하지 못했지만, 짧은 기간 동안 즐겁게 팀플레이를 할 수 있었던 대회였다. 상품 이미지와 제목이 주어졌을 때 유사한 제품 id를 찾는 멀티모달리티를 이용한 대회였다. 탑솔루션이 몇 개 공개되어, 상위권 사람들이 보여준 핵심 아이디어 몇 가지를 정리해보았다. 1등 솔루션 (한국인 yoonsoo님, from embeddings to matches) https://www.kaggle.com/c/shopee-product-matching/discussion/238136 eca_nfnet_l1, xlm-roberta-large, xlm-roberta-base, bert-base-indonesi..

모델이 학습 이후에 모든 입력에 대해 동일한 출력을 내는 문제

유사도 판단을 위한 임베딩을 얻기 위해 pretrained model을 가져다 fine-tuning을 통해 태스크에 좀 더 적합한 임베딩을 만들기 위해서 Arcface Loss를 학습을 했는데, 학습 후에 모든 입력에 대해 동일한 출력을 내는 기이한 현상을 겪었다. Loss는 줄어드는 것을 보고 학습은 되고 있는게 아닌가 싶었는데... 아래 글에서 힌트를 얻어 확인해보니, 결국 Learning Rate이 너무 높은게 문제였다. 아마 이 때, ArcFace에 속한 FC Layer에 높은 LR을 부여하다가, 너무 큰 LR을 할당해버리는 바람에 학습이 이상하게 된 듯 싶다. https://discuss.pytorch.org/t/outputs-from-a-simple-dnn-are-always-the-same-..

Knowledge Distillation: A Survey

arxiv.org/pdf/2006.05525.pdf 모델 경량화 방법인 Knowledge Distillation (이하 KD) 서베이 논문. KD가 무엇으로 구성되고 어떻게 학습이 이루어지는지에 관한 것들을 정리해보고자 한다. 딥러닝 모델을 한정된 자원을 가진 모바일 디바이스로 배포하고 싶다면 모델의 경량화는 필수다. 이 때 KD를 이용하면 모델을 압축시킬 수 있을 뿐만 아니라 추론 속도도 가속시킬 수 있다. 딥러닝 기반의 실서비스를 구성할 때도 모델 경량화기법이 유용하게 활용될 수 있다. 모델 Compression / Acceleration 방법 Parameter Pruning / Sharing Low-rank factorization Knowledge Distillation 등등 Knowledge D..

DL&ML/papers 2021.04.28

모델 학습이 잘 되는지 여부를 판단할 수 있는 지표

모델 학습이 잘 진행되는지 parameter norm과 gradient norm을 활용할 수 있다. (김기현님 강의를 보다가 알게 됨...) 일반적으로(?) parameter norm(L2)은 학습이 진행될 수록 커져야 한다. 모델이 복잡해 지면서... gradient norm(L2)는 점점 작아져야 한다. grad norm이 크다? 그 만큼 많이 배우고 있다는 뜻. 학습이 진행되면서 점점 작아진다. 학습 초반일 수록 틀리는 것이 많고, 많이 틀릴 수록 기울기가 가팔라짐. @torch.no_grad() def get_grad_norm(parameters, norm_type=2): parameters = list(filter(lambda p: p.grad is not None, parameters)) to..

ArcFace Loss

유사 이미지, 유사 텍스트를 찾는 태스크를 건들여보고 있는데, 이 때 입력을 잘 표현하는 임베딩을 학습하는 방법이 필요했다. (클러스터링에 활용할...) arcface에 대해선 이전에 들어보기는 했지만, 실제로 어떻게 동작하는지도 잘 모르겠고 뭐, 대충 메트릭 러닝이라곤 들었는데, 메트릭 러닝이라고 하면 유일하게 들어 본 것이 triplet loss 정도...? 였다. 아는게 triplet loss이다 보니, arcface도 비슷하게 동작/구현 되지 않을까? 라는 편견에 사로 잡혀 코드를 이해하는데 한참 걸렸다. 아래 코드를 보면 알겠지만, triplet loss처럼 입력으로 여러 비교 대상(anchor, positive, negative)이 들어오지 않고 단일 입력(+정답 라벨)을 기대하기 때문이다. ..

DL&ML/concept 2021.04.25

DistilBERT (a distilled version of BERT: smaller, faster, cheaper and lighter)

arxiv.org/abs/1910.01108 DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter As Transfer Learning from large-scale pre-trained models becomes more prevalent in Natural Language Processing (NLP), operating these large models in on-the-edge and/or under constrained computational training or inference budgets remains challenging. In t arxiv.org Knowledge Distillation에 대해 훑..

DL&ML/papers 2021.04.23

ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators

arxiv.org/abs/2003.10555 Electra 모델은 어떻게 학습이 되는지 알아보자. ELECTRA? Masked Language Modeling(MLM) pre-training 방법은 입력 일부를 [MASK] 토큰으로 변경해버린 뒤 원래 토큰을 복원하는 식으로 학습을 한다. 그런데 이게 과연 효율적인가? 라는 의문에서 Electra의 아이디어가 나왔다. 마스킹을 할 때 15% 정도의 확률로 선택을 하고, 마스킹 된 것을 원본으로 복원하는 것을 학습하는데, 하나의 Example 당 15% 토큰만 학습에 기여하기 때문에 계산 효율적이지 못하다. Electra에선 Replaced Token Detection (RTD) 방식의 pre-training 방법을 제안한다. 단순히 특정 토큰을 [MASK..

DL&ML/papers 2021.04.16