네이버 부스트캠프/LEVEL-2

[부스트캠프][WK07 / Day33] Self-supervised Pre-training Models 2

1. 강의 내용

Advanced Self-supervised Pre-training Models (주재걸 교수님)

 

1) GPT-2

모델 구조는 GPT-1과 크게 다를 바 없고 단지 transformer layer를 많이 쌓고 다음 단어를 예측하는 task입니다. 또한 데이터의 양과 질을 모두 높였습니다. GPT-2는 자연어 처리의 대부분의 문제가 QA로 해결된다는 주장을 한 논문 The Natural Language Decathlon: Multitask Learning as Question Answering에서 영감을 받았습니다.

 

GPT-2의 데이터셋은 Reddit이라는 사이트에서 3개 이상의 좋아요를 받은 글들에 대해 외부 링크의 글을 포함해 수집했습니다. 전처리는 BERT에서의 wordpiece와 비슷한 subword level에서의 단어 임베딩을 도출해주는 BPE를 사용했습니다.

 

모델의 관점에서 보면 Layer normalization이 각 sub-block의 인풋 부분으로 옮겨졌으며, 추가적인 Layer normalization은 마지막 self-attention block의 뒤에 추가되었습니다. 각 layer들을 random initialization 할 때, layer가 뒤로 가면 갈수록 인덱스에 비례해 initialization되는 값을 작은 값으로 만들어 주었습니다. 즉, 레이어가 위로 가면 갈수록 선형변환되는 값들이 0에 가까워지도록, 위쪽의 layer가 하는 역할이 줄어들 수 있도록 구성하였습니다.

 

GPT-2가 CoQA(conversation question answering) task를 수행했을 때, 일반적으로 finetuning하는 것과 달리 학습 데이터를 전혀 쓰지 않는 zero-shot으로 테스트를 했을 때도 괜찮은 성능을 냈습니다. Summarization task에서도 zero-shot setting으로 inference를 실행할 수 있는데, 이 경우 TL;DR 이라는 단어를 마지막으로 줘서 해당 단어가 학습데이터의 글의 마지막에 나오면 한 줄 요약하는 형태를 취했습니다. Translation 에서는 문장의 마지막에 in French 같은 내용을 붙여주어 해당 언어로 번역하도록 했습니다.

 

2) GPT-3

GPT-2를 개선한 모델이지만, 모델 구조는 다르지 않고 훨씬 많은 파라미터를 가지도록 self-attention block을 많이 쌓은 모델입니다. 또한 더 많은 데이터, 배치사이즈를 사용했습니다.

GPT-3는 zero-shot의 성능을 끌어올렸을 뿐만 아니라, task를 주고 예시를 하나 주는 One-shot, 예시를 여러개 주는 Few-shot을 적용하였으며 예시를 많이 줄수록 성능을 끌어올리는 모습을 보여주었습니다. 여기서 모델의 크기를 키울수록 zero, one, few-shot에 대한 성능이 계속 올라가는 것을 확인했습니다.

 

3) ALBERT (A Lite BERT for Self-supervised Learning of Language Representations)

앞선 PLM들은 많은 파라미터를 필요로 하는 방향으로 발전해 왔으며 더 많은 메모리, 학습시간을 필요로 해왔습니다. ALBERT에서는 기존의 BERT 모델들의 비대함을 성능이 오히려 좋아지면서 모델의 크기를 줄이고 학습시간도 빠르게 만들며 새로운 변형된 형태의 문장레벨의 self-supervised learning의 pre-train task를 제안하였습니다.

BERT가 word embedding 단의 입력의 모양이 첫 self-attention block에 들어갈 때도 유지가 되고, 이렇게 동일한 차원을 계속 유지를 시켜줍니다. 해당 차원이 작으면 담을 수 있는 정보가 제한적이고, 반대로 크면 모델의 크기도 커지고 필요한 연산량도 증가하게 됩니다. 그래서 여기서는 embedding layer의 차원을 줄여 연산량과 모델 크기를 줄이는 기법을 제안했는데, 그것이 Factorized Embedding Parameterization입니다.

Factorized Embedding Parameterization

[출처][http://jalammar.github.io/illustrated-transformer/]

위 그림을 보면 입력으로 주어지는 고정 차원을 4라고 할 때, embedding layer에서의 word embedding 차원도 4가 됩니다. 이 경우, word embedding 입력을 주기 전에 차원을 줄여 필요로 하는 파라미터와 계산량을 줄일 수 있도록 기법을 제시하였습니다. 첫 번째 self-attention block의 hidden state 차원이 4로 유지 되어야하기 때문에, 각 word embedding 차원을 더 작은 2로 두고 이를 4차원으로 바꿔주는 layer를 추가해 줍니다. 해당 4차원의 matrix를 W라 하고 word embedding vector와 곱해주면 각 word에 대한 embedding vector가 4차원으로 바뀌게 됩니다. 이렇게 보면 별 차이가 없을 수 있지만, 차원 h를 100으로 두고 word embedding 차원 E를 15로 두면 다음과 같이 파라미터 수가 차이나는 것을 볼 수 있습니다.

Cross-layer Parameter Sharing

서로 다른 self-attention block에서 존재하는 선형변환 matrix들을 공통적인 파라미터로 구성하여 BERT 모델을 개선한 방식입니다. output layer에 해당하는 feed-forward network(각 head의 output concat) parameters를 공유하는 Shared-FFN, attention을 수행하기 위해 쓰이는 $W^Q,W^K,W^V$의 파라미터들을 공유하는 Shared-attention, 위의 두개의 파라미터를 모두 공유하는 All-shared가 있습니다. 위의 방식들을 실험했을 때, share를 많이 할수록 파라미터의 수는 적었으며, 파라미터의 수가 많을수록 성능은 더 높았지만 share를 할때마다의 하락폭이 크지 않았습니다.

Sentence Order Prediction

Next Sentence Prediction pretraining task는 BERT에게는 너무 쉬워 실효성이 없었으며 해당 task를 제외하고 MLM을 수행했을 때의 성능이 제외하기 전과 차이가 거의 없었습니다. 그래서 ALBERT에서도 NSP task를 더 유의미한 task로 바꾸었는데, 단순히 두 개의 문장이 연속하는지 예측하지 않고 연속하는 문장을 입력으로 넣거나 연속하는 문장의 순서를 뒤집어서 넣어 자연스러운 순서인지 맞추는 방식을 제안했습니다.

 

기존의 별개의 두 문서에서 추출된 두 문장을 합쳐 연속적이지 않은 문장을 만들 때에는 내용이 상이했기 때문에 논리적인 흐름으로 맞추기보다 내용적으로 겹치는 단어가 얼마나 있느냐로 연속적이지 않다는 것을 맞추기가 너무 쉬웠고, 이러한 문제를 해결하기 위해 인접문장의 순서만을 바꿔주는 SOP를 적용하여 내용이 비슷한 두 문장이기 때문에 논리적인 흐름을 학습해야 문제를 풀 수 있도록 했습니다. 그 결과 성능이 좋아졌습니다.

 

전체적으로 BERT, XLNet, RoBERTa 등에 비해 좋은 성능을 냈으며 ALBERT도 더 큰 모델일수록 성능이 좋았습니다.

 

4) ELECTRA (Efficiently Learning an Encoder that Classifies Token Replacements Accurately)


ELECTRA는 기존의 MLM과는 다른 방식으로 학습합니다. Generator는 [MASK]된 단어를 예측된 단어로 복원해주고, Discriminator는 복원된 단어를 포함해 각각의 단어가 예측된 단어인지 원래 단어인지를 구분하는 역할을 합니다. Generator는 BERT와 동일하다고 생각하면 되고 Discriminator는 Generator의 output을 입력으로 받는데, self-attention block을 쌓은 형태의 모델이며 이진분류를 수행합니다.

 

여기서 두 모델의 관계는 GAN의 아이디어에서 착안해 자연어처리에서의 pretrain model을 제안한 것입니다. generator에서 생성된 단어인지 원래 있던 단어인지를 알아 ground truth 정보를 가지고 있기 때문에 discriminator에서 학습이 가능하고 이러한 과정을 반복함으로써 고도화시킵니다. 최종적으로 모델 학습을 진행한 뒤에는 finetuning에 사용될 pretrained 모델로 Discriminator를 활용합니다.

아래의 그래프를 보면 계산량이 많아질수록 전체적인 모델들의 성능이 올라가는데, ELECTRA는 같은 계산량에 비해 더 좋은 성능을 보입니다.

[출처][ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators, ICLR’20]

추가적인 자세한 설명은 다음 포스트에 정리해 두었습니다.
-> [논문리뷰] ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators 간단 리뷰

 

[논문리뷰] ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators 간단 리뷰

ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators Kevin Clark, Minh-Thang Luong, Quoc V. Le, Christopher D. Manning https://openreview.net/forum?id=r1xMH1BtvB ELECTRA 논문..

taeuk-kim.tistory.com

 

5) Light-weight Models

지금까지는 점점 큰 모델을 만들어 성능을 높여왔지만 그만큼 많은 GPU 자원, 학습시간, 계산량이 필요해 연구나 현업에 활용하는데 걸림돌이 되었습니다. 이러한 비대해진 모델을 적은 layer, 파라미터 수를 가지도록 경량화하는 연구가 진행되었습니다. 경량화 모델의 연구는 기존의 큰 사이즈의 모델의 성능을 최대한 유지하면서 모델의 크기를 줄이고 계산 속도를 빠르게 하는데 초점이 맞춰졌습니다.

DistillBERT (NeurIPS 2019 Workshop)

DistillBERT는 huggingface에서 발표한 논문으로, Teacher model과 Student model이 존재합니다. Teacher model은 Student model을 가르치는 역할을 하고 Student model은 Teacher model보다 더 경량화된 형태의 모델로, Teacher model의 output이나 패턴을 잘 묘사하도록 학습이 진행됩니다.

위의 예시를 보면 Teacher model에서 'go'의 softmax 확률을 0.7이라 예측할 때, Student model은 'I'라는 단어가 들어가 vocab의 사이즈만큼의 확률분포가 softmax의 output으로 나올 때 적용하는 ground truth를 Teacher model의 확률분포 output으로 사용합니다. 이렇게 Student model이 Teacher model을 묘사하도록 학습이 진행되는데, 이것이 Knowledge distillation이라는 개념을 BERT에 적용시켜 모델을 경량화시킨 DistillBERT 입니다.

TinyBERT (Findings of EMNLP 2020)

TinyBERT는 DistillBERT와 마찬가지로 Knowledge distillation이라는 개념을 적용해 Teacher model과 Student model이 존재합니다. 하지만 DistillBERT와 달리 embedding layer, 각 self-attention block의 $W^Q,W^K,W^V$ 등 attention metrics, 그 결과로 나오는 hidden state vector들, 중간 결과물까지도 유사해 지도록 학습을 진행합니다.

 

그래서 Teacher model에서 나온 값과 최대한 가까워지도록 MSE loss를 통해 학습을 동시 진행 하지만 Student model의 hidden state vector가 Teacher model의 그것과 차원수보다 작을 수 있기 때문에 차원을 맞춰주도록 Teacher model의 hidden state vector 차원 수를 줄여주는 Fully connected layer도 학습 가능한 파라미터로 두어서 문제를 해결합니다.

6) Fusing Knowledge Graph into Language Model

최근 기존의 pre-trained model과 지식 그래프(Knowledge graph)라고 부르는 외부의 정보를 잘 결합하도록 연구가 진행됩니다. 기존의 BERT와 같은 pre-trained model은 주어진 문장에 포함되어 있지 않은 추가적인 정보가 필요한 경우에는 해당 정보를 효과적으로 활용하지 못합니다.

 

이 경우 주어진 문장에서 담고 있는 정보 뿐만 아니라, 개체를 정의하고 그들간의 관계를 정형화해 만들어 둔 지식 그래프(Knowledge graph)를 잘 결합하여 문제를 해결하게 됩니다.


2. 과제 수행 과정 / 결과물 정리


3. 피어세션 정리

https://www.notion.so/2-6fa3eec6092b4096a264a340a29d6c60


4. 학습 회고

다양한 Self-supervised Pre-training Model에 대한 흐름을 파악하고 각 모델들의 특징을 간략하게나마 알 수 있었습니다.


금일 진행된 오피스아워에서 마무리하지 못한 선택과제에 대한 자세한 해설과 list comprehension이 중요한 이유 등에 대해 들었으며 개발자로써의 마음가짐, 고충과 위기에 대처하는 마인드 등에 대해 설명해 주시는 등 유익한 시간이었습니다.