Data2Vec Review
Self supervied learning은 사람이 만든 정답 없이 데이터 자체(self)에서 만들어진 정답(supervised)으로 학습하는 방법이고, 현재 여러 모달리티(이미지, 텍스트, 음성 등)에서 잘 동작하고 있는 아이디어이다. 지금까지 방법론들은 특정 모달리티에 집중하였기 때문에, 각 모달리티별로 학습 방법(objective, algorithm 등)이 다르다. 이를 더 일반적인 방법으로 확장하기 위해 data2vec이라는 self supervised learning 방법을 제안하는 data2vec: A General Framework for Self-supervised Learning in Speech, Vision and Language을 리뷰한다.
Vision Transformer Review
Transformer 구조와 self-supervised learning(pretrian -> finetune) 학습법은 여러 NLP 테스크들에서 표준으로 자리잡고 있음. 이러한 성공에 힘입어, 최근에는 Vision 테스크들 에서도 Transformer 구조를 적용 하려는 시도들이 많이 이루어지고 있음. 이번 글에서는 별도의 Convolution 연산 없이, Transformer 구조 만으로 이미지 인식 문제를 풀고자 했던 “An Image Is Worth 16X16 Words:Transformers for Image Recognition at Scale”를 리뷰함.
Tensorflow-text로 Sentencepiece 토크나이저 이용하기
이번 포스트에서는 tensorflow-text
, tf_sentencepiece
모듈을 이용하여 학습 코드 상에서 토크나이징을 진행하고, 결과 모델을 export하는 과정까지의 경험을 기록한다. tensorflow-text
는 텍스트 전처리 과정의 연산들을 Tensorflow 그래프 상에포함할 수 있도록 해주고, tf-sentencepiece
는 자연어 처리에서 자주 이용되는 Sentencepiece 토크나이저를 tensorflow-text
토크나이저 형식에 맞춰 쉽게 이용할 수 있도록 해준다.
LXMERT Review
작년 EMNLP 2019에 갔을 때, Vision & NLP(이름은 정확하지 않지만..) 세션에서 눈여겨 봤던 논문 중 하나인 LXMERT: Learning Cross-Modality Encoder Representations from Transformers를 리뷰하려고 한다. Visual Question Answering 2019 challenge 에서 3등에 위치해 있는 것을 볼 수 있다. (하지만 공식적으로 레퍼런스가 있는 방법들 중에는 첫번째이다.)
2020년 상반기 회고
상반기를 되돌아 보고 하반기 계획을 세워보기. 2020년 상반기를 간단하게 되짚어보면, 2월말-3월까지 훈련소를 다녀오는 계획이 잡혀있었고, 1-2월은 진행하던 프로젝트의 마무리를 진행했다. 4-5월은 일과 이직준비를 병행, 6월은 기존의 일들을 마무리, 7월은 새로운 회사에서 적응을 하고있는 중이다. 쉴틈없이 빠르게 지나간 반년이였다. 2020년 시작 당시에 세웠던 목표들을 얼마나 달성했고, 어떤 부분들이 부족했는지 정리하고 남은 2020년의 목표를 다시 세워보자!
Machine Learning Engineer 이직 후기
Machine Learning Engineer라는 역할로 지난 1년 4개월 정도를 근무했고, 동일한 역할로 타 회사로 이직하게 되었습니다. 이번 포스트에서는 이직 준비를 하면서 겪었던 경험들과 그에 대한 개인적인 느낌을 기록하려고 합니다.
Google Cloud TPU를 이용해서 BERT 학습하기 - (2)
이번 글에서는 TPU를 이용하기 위해 코드레벨에서 어떤 작업들을 수행해야 하는지 알아봅니다. 데이터를 만드는 부분부터, 실제 학습 루프까지 간단한 구현체로 살펴봅니다. Tensorflow2.x 에서는Keras
api를 사용하는 것이 공식적으로 권장되면서, 전반적으로 코드 작성이 매우 간편해졌습니다. 또한 학습 환경또한 Strategy
를 이용해 단일 GPU/ 여러 GPU에 걸친 분산 학습 / TPU를 이용한 학습을 간단하게 전환할 수 있습니다. 실제로 TPU학습을 해보면서 참고했던 코드들(ALBERT, BERT, ELECTRA)을 종합하여 유용했던 내용들을 기록합니다.
Google Cloud TPU를 이용해서 BERT 학습하기 - (1)
뉴럴넷을 학습하기 위해서 일반적으로 GPU를 이용합니다. 하지만 최근에 많은 양의 데이터를 이용할 뿐만 아니라 엄청난 크기의 모델을 이용하는 연구들이 발표되고 있고, 이들은 GPU로 학습하기에 많은 시간이 소요됩니다. 이를 위해 Google Cloud에서는 TPU(Tensor Processing Unit)라는 연산장치를 제공하고 있고, TPU는 GPU에 비해 엄청난 성능을 보여줍니다. 또한 BERT 등 구글에서 공개한 많은 모델들은 이를 이용하여 학습되었습니다. TPU 자체에 대한 자세한 내용은 얼마전에 핑퐁팀 블로그의 포스트를 참고하면 더 많은 정보를 얻을 수 있습니다. 이번 포스트부터 3개의 포스트로 나누어 실제로 TPU를 이용해 모델을 학습하면서 경험했던 내용을 기록하려고 합니다.
schuBERT Review
BERT기반의 모델들(XLNet, ALBERT 등)은 여러 NLP 테스크에서 좋은 성능을 보여주고 있지만, 이들 각각은 거대한 파라메터들로 구성되어 있습니다. 그래서 리더보드에 등록되어있는 크기의 모델들(일반적으로 Base/Large 모델들)은 서비스에 바로 적용하기에 무리가 있습니다. (BERT의 경우 이를 위해 더 작은 크기의 모델을 공개했습니다.) 최근에는 이를 해결하기위해 다양한 경량화 방법들이 연구되어지고 있는데요, 크게 Knowledge Distillation, Pruning, Quantization 3가지 종류의 방법으로 나눌 수 있습니다. 이번 포스트에서는 새로운 Pruning 방법을 이용하여 BERT 경량화를 진행한 “schuBERT: Optimizing Elements of BERT(ACL 2020)”를 리뷰하겠습니다.
UniLM Review
Pre-trained LM은 많은 양의 데이터로 부터 컨텍스트를 반영한 representation을 학습합니다. 이를 통해 NLU-BERT
, RoBERTa
, NLG-GPT
와 같이 각각의 downstream 테스크에서 좋은 성능을 보여주고 있습니다. 이번 포스트에서는 NLU와 NLG를 함께 pre-train하여 하나의 pre-trained 모델이 각 테스크에 “모두” fine-tuning될 수 있는 방법인 “Unified pre-trained Language Model(UniLM)”를 제시한 논문 “Unified Language Model Pre-training for Natural Language Understanding and Generation (NeurIPS 2019)”를 리뷰하려고 합니다.