[논문 리뷰] ELECTRA : Efficiently Learning an Encoder that Classifies Token Replacements Accurately
ELECTRA : PRE-TRAINING TEXT ENCODERS AS DISCRIMINATORS RATHER THAN GENERATORS
Reference : Paper (https://openreview.net/pdf?id=r1xMH1BtvB)
0. Abstract
1) Replaced Token Detection : 기존에 masking을 가한 일부(15%) input token을 small generator network로부터 나온plausible token으로 대체
2) 그래서 discriminator network이 각 token이 generator에 의해 대체되었는지 예측한다.
3) 결론적으로 기존 MLM보다(BERT, XLNet) 동일한 model size, data, compute 조건에서 우수한 성능을 보입니다.
1. Introduction
1) 현재 SOTA representation learning
Denoising Autoencoder(input에 noise를 추가하고 noise가 없는 original input을 다시 재구성하도록 학습
1> unlabeled input sequence를 전체에서 15%가량 고르고
2> 그 token들을 masking or
noise가 없는
original input 재구성
attention => train
3> 그래서 original input을 복원한다.
=> 효과적이지만 15%만 학습하기 때문에 computing cost가 크다.
2) Replaced Token Detection
일부 token을 small masked language model(generator)의 output에서 얻은 sample로 대체해서 input을 변형시킨다.
discriminator를 pre-train (각 token에서 교체되었는지 predict하도록)
small MLM(generator)을 train (변형된 token의 원래 형태를 predict하도록)
=> 모든 input token으로부터 학습할 수 있다. (기존에는 masked token만 학습하니 data의 15%밖에 이용하지 못함.)
3) GAN과의 비교
1> discriminator와 generator로 이루어져 있다는 점에서 유사합니다.
2> (text는 GAN을 적용하기 어려워서) generator(MLM)가 likelihood가 높은 쪽(문맥적으로 말이 되게)으로 learn
(generator로부터 sampling 과정이 있어서 backpropagation이 어려워서 GAN과 같이 train이 어렵다.)
3> generator에 noise vector를 input으로 주지 않는다.
4> generator가 real token을 생성하면 discriminator에게 token의 label은 'real'이다.
4) ELECTRA
Efficiently Learning an Encoder that Classifies Token Replacements Accurately
1> 말 그대로 encoder부분인 ELECTRA가 token의 대체 여부를 효율적으로 판단한다.
2> 기존에 주로 사용되던 모델들과 비교해도 동일한 성능을 보일 때 FLOPs이 압도적으로 낮음을 알 수 있다.
(특히, ELECTRA-small의 경우 GPU 하나로 4일 안에 train이 가능합니다.)
(ELECTRA-small은 parameter가 BERT-Large의 1/20이며, pre-train하는데 BERT-Large의 1/135배의 시간이 걸린다.)
2. Method
1) Generator
1> uniform distribution에서 k개 sampling (n개의 input token 중에서 k개 masking) (15% masking)
2> generator : x라는 token이 주어졌을 때 특정 x_t에 위치할 확률
generator에 들어간 이후 softmax로 가장 확률이 높은 값으로 출력
(3> discriminative 모델이 분류할 것)
2) Discriminative
1> Generator에서 받은 corrupted input
2> 이를 discriminator에 넣는다. 마지막이 sigmoid여서 replace 여부를 binary classfication
3) Loss function
1> generator에 대한 loss mlm
log likelihood
2> discriminator에 대한 loss Disc
binary classification이니까 Binary cross entropy loss
3. Experiments
0) Experimental setup
1> GLUE와 SQuAD에 대해서 실험 진행
2> Base 모델은 BERT와 비슷한 데이터로 pre-train 진행
(3.3Billion tokens from Wikipedia and BooksCorpus)
3> Large 모델은 XLNet 데이터 사용
(33Bilion tokens : Base + ClueWeb, CC, Gigaword)
4> 모델 아키텍쳐 및 대부분의 hyperparameter들은 BERT와 비슷하게 했음
(in fact, our pre-trained weights are drop-in replacements for BERT’s)
5> GLUE fine-tuning시에 simple linear classifier를 ELECTRA의 상단에 추가함
6> SQuAD 를 위해서 XLNet에서 사용된 QA 모듈을 ELECTRA 상단에 추가함
(정답의 SP와 EP를 독립적으로 찾지 않고, 정답이 있는지 없는지를 분류함 : 2.0을 위해서)
7> GLUE의 일부 평가 데이터 셋이 매우 작아서, fine-tuning된 모델의 정확도는 랜덤 시드에 따라 크게 변화할 수 있음 : 10개의 fine-tuning 모델의 평균값을 사용함.
1) Model Extenstion
(특별한 언급이 없으면 BERT-Base와 모델 크기와 training data는 동일)
1> Weight Sharing
Transformer 때부터 사용
여러 구조가 존재할수록 parameter가 많아지고 그에 따라 연산량이 많아집니다.
이를 줄이기 위해서 다른 구조의 parameter를 share해서 효율성을 높이고자 함
ELECTRA는 generator와 discriminator의 크기가 달라야 해서 shaing이 불가능
embedding을 sharing
=> ELECTRA는 MLM이 생성한 편향적인 단어만 받는다. 그래서 embedding도 편향적일 수 있어서 이를 막고자 embedding sharing
2> Smaller Generators
- generator의 size가 512를 넘어가면 score가 급감
- generator이 discriminator의 1/4~1/2일 때, 가장 좋은 성능을 보여준다.
(discriminator가 generator의 pattern을 학습해야 하는데 모델 복잡도가 generator가 크면 discriminator는 학습을 어려워할 수 있다.)
3> training algorithm
- ELECTRA (joint training) : loss를 더해서 한 번에 2개 구조를 train (가장 성능이 좋다.)
- Adversarial ELECTRA : reinforce learning을 이용해서 adversarial training
- Two-Stage ELECTRA : 2개 구조를 하나씩 train
2) Small Mode
(저희가 주로 참고할만한 부분)
1> 해당 논문의 목표는 pre-train의 효율성을 높이는 것이므로 single GPU에서 빠르게 학습할 수 있는 모델들을 실험
2> Hyperparameter (ELECTRA-Small/Base는 BERT-Small/Base와 hyperparameter를 동일하게 설정)
- sequence length : 512 -> 128
- batch size : 256 -> 128
- hidden size : 768 -> 256
- token embedding : 768 -> 128
3> 결과 분석
- 각 비교 대상인 BERT-Small/Base와 train 완료 시점은 유사하지만 성능에서 큰 차이를 보입니다.
- 참고로 규모가 더 큰 BERT-Large(84)와 GPT보다도 더 높은 성능을 기록
3) Large Models
더 큰 Scale에서 실험 (SOTA 확인)
0> Hyperparameter
- ELECTRA-400K : 400k step train (BERT-Large도 이에 맞춰서 train) (RoBERTa의 1/4 수준)
- ELECTRA-1.75M : 1.75M step train (RoBERTa와 유사한 수준)
- Batch size : 2048
1> GLUE dev set
- ELECTRA-400K/1.75M 모두 비교 대상인 BERT, RoBERTa-100K/RoBERTa-500K보다 높은 성능을 보인다.
2> GLUE test set
- ELECTRA-1.75M 비교 대상인 RoBERTa-500K보다 높은 성능을 보인다.
3> SQuAD
- ELECTRA-Base/400K/1.75M 모두 비교대상보다 더 높은 성능을 보입니다.
- 추가적으로 dataset이 2.0으로 업데이트 됨에 따라 더 높은 성능을 보이고 있습니다.
4) Efficiency analysis
하지만 MLM이 비효율적이고 ELECTRA가 효율적이라는 것은 결과론적인 것이고 실제로 어떤 점 때문에 ELECTRA의 효율성이 생기는지 증명이 필요하다.
1> ELECTRA 15% : discriminator loss는 masking 되었던 15% token에서만 계산한다.
(전체 data를 다 사용하는 것이 효과가 있는가?)
2> Replace MLM : masking된 token을 input으로 받는 대신에 generator가 만든 token을 받아서 MLM 진행
(pre-train에서 [MASK] token을 받는 것이 효과가 있는가?)
3> All-Token MLM : generator가 만든 token을 input으로 받으며 discriminator는 변형된 token뿐 아니라 모든 token에 대해 원래 token이 맞는지
(BERT와 ELECTRA를 혼합하여 사용한 것이 효과가 있는가?)
4> 결과
- 모든 token에 대해 loss를 계산하는 것은 확실히 효과적이다. (ELECTRA vs ELCTRA 15%)
- BERT의 성능은 [MASK] token이 있어서 성능 하락이 약간 있다. (BERT vs Replaced MLM)
- BERT와 ELECTRA의 중간에 있는 모델이 ELECTRA 성능에 근사한다.
4. Conclusion
1) Replaced Token Detection이라는 새로운 Self-supervise learning의 등장
2) Text encoder는 small generator가 만든 negative sample을 이용해 input token과 corrupt token을 구분하도록 학습
3) 기존 MLM들과 비교해서 train 시간이 적고 성능도 소폭 상승