- ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accuratley)
- BERT의 파생 모델 중 하나로 MLM 태스크를 사전 학습에 사용하는 대신 교체한 토큰 탐지(replaced token detection)라는 태스크를 사용해 학습을 진행함.
1. Abstract
- 기존 BERT를 비롯한 많은 language model들은 입력을 마스크 토큰으로 치환하고 이를 치환 전의 원본 토큰으로 복원하는 MLM 태스크를 통해 pre-training을 한다.
- 이는 bidirectional으로 효과적이지만 example당 15%만 학습하기 때문에 상당한 계산 비용이 발생한다.
- 하지만 이러한 모델들은 학습 시 상당히 많은 계산량을 필요로 하기 때문에 충분한 컴퓨팅 리소스가 필요하다는 단점이 있다.
- 본 논문은 이러한 문제점의 대안으로 replaced token detection task를 제안한다.
- 이 태스크는 마스킹 대상인 토큰을 다른 토큰으로 변경한 후 이 토큰이 실제 토큰인지 아니면 교체한 토큰인지를 판별하는 이진 분류 문제로 학습을 진행한다.
- ELECTRA는 이 RTD 태스크만 사용해 Pre-Training을 진행한다.
- RTD를 사용함으로써
1. 사전학습과 파인튜닝 사이에 토큰에 대한 불일치 문제를 해결할 수 있다.
2. 모델이 마스크된 범위 내에서만 학습을 하는것이 아니라 입력 토큰 전체에서 학습할 수 있어 계산 효율성이 향상된다.
2. Method
- 위 사진에서 볼 수 있듯이 RTD 태스크를 통해 학습하기 위해서 generator G와 discriminator D, 두개의 네트워크가 필요하다.
- 두 네트워크는 공통적으로 Transformer 인코더 구조이다.
- 또한 공통적으로 토큰 임베딩을 입력으로 받아서 문맥 정보를 반영한 표현 임베딩으로 반환한다.
Generator
- 생성자는 MLM 태스크를 수행한다.
1. 먼저 전체 토큰의 15% 비율로 MASK할 Random Positiond의 집합 $m = [m_1, m_2, ..., m_k]$을 결정한다. 2. 결정한 위치에 있는 입력 토큰을 [MASK]로 치환한다. 3. 마스킹된 입력값을 encoder로 이루어진 생성자에 입력해 각 토큰에 대한 표현 임베딩을 생성하게 된다. 4. 이제 마스킹한 토큰에 대한 표현을 소프트맥스 함수를 가지고 있는 피드포워드 네트워크 분류기에 입력하여 토큰에 대한 확률 분포 결과를 얻게 된다. - 즉 분류기는 마스킹한 토큰이 사전 안에 있는 단어 중 어느 것에 속할지에 대한 확률 분포 결과를 출력한다. 위 과정을 수학적으로 표현하면 다음과 같다. 5. 마스킹된 입력에 대해서 generator는 다음과 같이 원래 토큰이 무엇인지 예측하여 토큰을 변경한다.
Discriminator
- 판별자의 목표는 주어진 토큰이 생성자에 의해 만들어진 토큰인지 아니면 원래 토큰인지를 판별하는 것이다.
1. 생성자에 의해 만들어진 토큰을 인코더로 이루어진 판별자에 입력하여 각 토큰에 대한 표현 임베딩을 얻는다. 2. 표현 임베딩을 시그모이드 함수(이진분류이기 때문)를 가지고 있는 FFNN 형태의 분류기에 입력해 주어진 토큰이 원래 토큰인지 아니면 교체된 토큰인지를 판별하는 값을 얻는다.
- 여기서 위치 t의 토큰을 $x_i$라고 한다면, 판별자가 시그모이드 함수를 사용해 해당 토큰이 원래 토큰인지 아닌지 여부를 다음과 같은 식을 통해 계산한다.
- Generator와 Discriminator는 다음과 같은 loss로 학습한다.
- 최종적으로 ELECTRA는 대규모 텍스트 말뭉치 X에 대하여 generator loss와 discriminator loss의 합을 최소화하도록 학습한다.
- 위의 구조로 Pre-Training을 마친 뒤에 generator는 더 이상 사용하지 않고 discriminator만 취해서 downstream task로 fine-tuning을 진행한다.
RTD는 엄청 그럴싸해 보이는 토큰을 생성해 바꿔치기하고, 이를 판별한다는 구조에서 GaN과 유사하다.
하지만 본 논문에서는 GAN과 다르다는 점을 다음과 같은 이유로 설명한다.
1. ELECTRA의 Generator와 Discriminator의 목표는 서로 관련이 없다.
- Generator는 문장의 [Mask]를 채울 뿐이고, Discriminator는 문장이 어떤 단어가 바뀐 단어인지 구별할 뿐이다.
- 서로 속이고 이겨먹으려는 목표를 가진 GAN과는 관련이 없다.
2. ELECTRA의 입력은 noise가 아니다. 데이터 셋의 문장이지만 일부가 마스킹되어있을 뿐. GAN의 입력은 완전한 noise이다
3. ELECTRA의 Generator는 maximum-likehood를 사용하여 훈련된다. 즉, 토큰을 바꾸더라도 문맥적으로 말이 되게 바꾼다.
- 즉, Generator는 Discriminator가 틀리게 하기 위해 모든 수단을 사용하는 것이 아닌, 인간적으로 문맥적으로 말이 되게 토큰 을 생성함.
3. Experiments
- ELECTRA의 성능을 항상시키는 몇가지 기법을 제안한다.
Weight Sharing
- Generator, Discriminator 둘다 Transformer 인코더 구조이기 때문에 두 네트워크의 가중치를 공유하여 학습하는 weight sharing 기법을 사용해 볼 수 있다.
- 이로써 pre-training의 효율 향상을 기대할 수 있었지만, 두 네트워크가 동일한 크기일때 모든 가중치를 공유할 수 있다.
- 하지만 Generator, Discriminator의 크기를 같게 하면 학습 시간이 늘어난다.
- 그리고 Generator의 크기를 작게 하는것이 더 효율적이었기 때문에 임베딩의 가중치만 공유하고 그 외의 가중치는 따로 학습시키는 방식을 택했다.
Smaller Generators
- Generator, Discriminator의 크기를 동일하게 가져간다면 ElECTRA를 학습하기 위해서는 BERT와 같은 일반 MLM 모델에 비해 단순 계산으로 겨의 두배의 계산량이 필요하다.
- 이 문제를 완화하기 위해서 generator의 크기를 줄여보는 실험을 진행한다.
- 결과적으로 generator가 discriminator의 1/4~1/2 크기였을때 가장 좋은 성능을 보인다.
- 이러한 실험 결과를 논문은 다음과 같이 해석했다.
Generator가 너무 강하면 discriminator의 태스크가 너무 어려워진다. 게다가 discriminator의 파라미터를 실제 데이터 분포가 아닌 generator를 모델링하는데 사용할 수도 있다.
Training Algorithms
- 본 논문에서는 Generator의 loss와 Discriminator의 loss의 합이 최소가 되도록 학습이 되는 방식이외에 두가지 알고리즘을 추가로 제시함.
1. Two-Stage - Generator만 n스텝 훈련시킨 후, Discriminator의 weight를 Generator의 것으로 초기화하여 n스텝동안 학습시키는 방식 (Generator는 고정) - 그래프를 보면 Discriminator의 weight를 Generator 것으로 초기화 이후 성능이 향상한 것을 볼 수 있음. 2. Adversarial ELECTRA - GAN처럼 adverarial training을 모사해서 학습시키는 방식
ELECTRA 결과
- 기존 최신 NLP 모델과 동일한 컴퓨트 예산을 고려하여 학습을 진행했을때, 계산의 25%미만을 사용하면서 RorBERTa 및 XLNET에 필적하는 성능을 제공한 것을 볼 수 있다.