Seq2Seq Learning & Pre-trained Models - (2)
BERT - Bidirectional Encoder Representation from Transformer
- BERT Summary
이름과 같이 transformer의 인코더 부분만을 사용. 좋은 Pre-trained Language Representation & downstream task에 대한 쉬운 fine tuning. 사전학습 시, 두 입력문장에 대하여 random masking된 토큰을 예측하는 분류(MLM) 문제와, 두 문장이 이어지는 문장인지에 대한 분류문제(Next Sentence)를 함께 학습.
(https://github.com/google-research/bert/blob/master/run_pretraining.py#L148)
- Related Works
언어 모델을 사전 학습하는 것은 많은 자연어 처리 task의 개선에 효과적이다. 사전 학습한 언어 표현을 downstream task에 적용하기 위한 전략은 크게 2가지가 있다.
- Feature based approach - ELMo
ELMo는 양방향 LSTM에 기반한 언어모델을 학습한 뒤, 양방향 LSTM의 표현과 token 표현을 기반으로 downstream task를 학습한다.
- Fine-tuning based approach - GPT
GPT는 transformer의 디코더에 기반한 언어모델을 학습한 뒤, linear layer를 추가해 downstream task를 fine-tuning을 통해 학습. 단방향이라는 제약이 있다.
- Feature based approach - ELMo
- Pre-training on BERT
- Input / Output Representations
입력 문장이 들어오면 토큰화하여, 토큰 임베딩과 세그멘트 임베딩, 포지셔널 임베딩을 적용해 각 임베딩 값을 더한다.
사전학습 데이터셋으로는, 800M단어인 bookcorpus 데이터 셋과 2,500M 단어인 Wikipedia 데이터셋을 학습(https://github.com/soskek/bookcorpus, https://github.com/attardi/wikiextractor)
- Token embedding: WordPiece로 토큰화한 것에 대해, 임베딩 레이어를 적용한다.
cf. WordPiece: https://wikidocs.net/22592
- Segment embedding:
첫 문장의 시작을 알리는 [CLS] 토큰 부터 두 문장의 구분을 알리는 [SEP]토큰 까지 0으로 첫 번째 문장(세그멘트)이며, 나머지는 두 번째 문장(세그멘트)이다. 이 후, 임베딩 레이어를 적용한다.
- Positional embedding
Transformer와 다르게 시퀀스의 위치별로, 학습하는 임베딩을 적용한다. 예를 들어, “Hello world”입력과 “Hi there”의 입력에 대해서 “wolrd”와 “there”은 같은 포지션 임베딩 값을 가진다. “I know, I can.”입력에서 두 “I”는 다른 임베딩 값을 가진다.
https://github.com/google-research/bert/blob/master/modeling.py#L489
https://github.com/dhlee347/pytorchic-bert/blob/master/pretrain.py
- Token embedding: WordPiece로 토큰화한 것에 대해, 임베딩 레이어를 적용한다.
- Masked Language Model
입력이 들어오면, 문장에서 15%는 [MASK]토큰으로 바꿔 이를 예측하는 문제이다.
하지만, downstream task를 fine-tuning할 때에는 [MASK]토큰이 나타나지 않아 사전학습과 미세조정학습이 매칭되지 않는 문제가 있다. 이를 해결하기 위해, 미세조정 학습할 때에는 i 번째 토큰이 [MASK]가 선택이 된다면, 80%의 확률로 실제로 마스킹을 하고, 10%의 확률로 임의의 토큰으로 바꾸고, 10%의 확률로 마스킹일 진행하지 않는다.
이를 통해, 사전학습과의 mismatch를 완화할 수 있다. masking, same, random의 비율의 성능 변화는 아래와 같다.
- Next Sentence Prediction
QA나 NLI(두 문장이 서로 수반하는지 위배되는지 분류하는 작업)는 문장들의 관계를 바탕으로 이루어진다. 기존 GPT나 ELMo에서는 입력단위가 한 문장이었기 때문에, 문장들간의 관계를 학습하지 않는다.
이를 해결하기 위해, BERT에서는 두 문장을 입력받아 두 문장이 이어지는 관계인지 아닌지를 학습한다. courpus에서 이어지는 문장 50%, 이어지지 않는 문장 50%를 샘플링해 학습하며, 이러한 단순한 사전학습을 추가하는 것만으로도, QA나 NLI 문제에서 좋은 성능을 내게 한다.
BERT Base와 NSP를 뺀 것의 성능은 QNLI, SQuAD에서의 차이를 확인할 수 있다.
LTR(Left to Right)은 MLM이 아닌 LM과 같이, GPT와 같이 학습한 것이다.
+ BiLSTM은 위 모델에서 BiLSTM을 fine-tuning할 때 추가한 것이다.
SQuAD의 경우, LTR 기반학습의 성능이 낮은 것을 확인할 수 있으며, BiLSTM만 추가하더라도 굉장히 성능이 올라간다. 하지만 MLM기반 학습보다 여전히 낮으며, BiLSTM은 다른 GLUE task의 성능을 낮춘다.
BERT를 ELMo처럼 구성할 수는 있지만, 비용이 크고, 비직관적인 task들이 있으며, BERT처럼 양방향의 context를 모든 층에서 학습할 수 있지않아 덜 강력하다.
- Input / Output Representations
- Fine-tuning BERT
Fine-tuning에서의 배치크기, learning rate, epoch당 학습 횟수를 제외하고는 대부분의 하이퍼파라미터는 사전학습과 같다. 100K이상의 큰 학습데이터에 대해서는 작은 데이터셋에 비해 하이퍼파라미터에 덜 민감하다. Fine-tuning은 사전학습에 비해 굉장히 빠르기 때문에, 많은 HPO를 할 수 있다.
task별로 위 그림과 같이 입력과 출력이 나오게 구성하며, BERT 위에 output layer 하나를 추가하여, 최소한의 파라미터들만이 처음부터 학습되게 한다. (a)와 (b)는 시퀀스 레벨의 작업이고, (c)와 (d)는 토큰 레벨의 작업임을 확인할 수 있다.
- ELMo, GPT, BERT 이 후 사전학습 모델의 크기는 지수적으로 커지며, 학습하는 데이터도 커진다.
https://towardsdatascience.com/the-rise-of-cognitive-ai-a29d2b724ccc
XLNet to T5


(SOTA, 2020.06월 기준)
1) XLNet
- Generalized Autoregressive Pretraining for Language Understanding
- 기존 사전학습 모델들의 AE(DAE)-BERT와 AR-GPT의 2가지 관점
- pros & cons
- Independence Assumption:
AE: 식(2)의 부분과 같이 조건부 확률 은 모든 masked token 들이 서로 분리되어 생성되었다는 (조건부) 독립의 가정으로 인수분해된다.
AR: 반대로 를 product rule을 이용해, 독립성 가정없이 모든 시퀀스에게 적용된다.
- Input noise:
AE: [MASK]토큰은 downstream task에 나오지않아, 사전학습과 미세조정의 불일치를 만든다. BERT에서와 같이 [MASK]를 기존 토큰으로 대체하는 것은 아주 적은 확률로만 대체하기 때문에 해당 문제를 해결하지 못한다.
AR: 해당 문제와 무관하다.
- Context Dependency:
AR: 한방향에서만의 정보를 학습해 표현할 수 있다.
AE: 양방향에서의 정보를 학습해 표현할 수 있다.
- Independence Assumption:
- pros & cons
- XLNet의 제안
- Permutation Language Modeling
: T 시퀀스의 순열(permutation)
입력 시퀀스에 대한 순열을 구한 뒤, AR로 학습하자. → 양방향 context 학습
순열의 순서가 정해지면, 실제로 토큰의 순서를 변경하는 것이 아니라, 이전 시퀀스에 있는 정보만 활용하도록 모델링한다.
- Two-Stream Self-Attention for Target Position-Aware Representation
일반적인 언어 모델과 같이 permutation의 순서로 나타내 예측하는 경우, target 위치가 position에 관계없이 같은 값을 가지는 문제가 있다. 예를 들어, [1,2,3,4]라는 순서와 [1,2,4,3]의 순서가 정해졌을 때는 동일한 representation으로 다른 target을 맞춰야하는 문제가 있다.
이러한 문제를 해결하고자, target position-aware representation을 제안한다.
그리고 이러한, target position-aware representation을 구현하기 위해,
Two-Stream Self Attention 구조를 사용하며, 이는 아래와 같은 2가지 표현을 고려한 transformer 구조를 제안한다.
이 때, 현재 시점의 위치 정보를 위한 w는 학습가능한 random variable로 초기화한다. Query Representation을 통해 아래를 학습할 수 있다.
- [3, 2, 4, 1] : 여태까지 학교, 어제라는 단어를 봤는데 말이야. 이번에 맞춰야 할 단어는 원래 문장에서 네번째에 있었어. 이 단어는 뭘까?
- [3, 2, 1, 4] : 여태까지 학교, 어제라는 단어를 봤는데 말이야. 이번에 맞춰야 할 단어는 원래 문장에서 첫번째에 있었어. 이 단어는 뭘까?
- Transformer-XL
긴 문장에 대한 처리를 위해 Transformer-XL의 2가지 테크닉(Relative Positional Encoding, Segment Recurrence Mechanism)을 사용하며, XLNet에서는 이 2 테크닉을 차용한다. 두 테크닉에 대한 설명은 논문과 블로그를 참고하자.
- Transformer-XL: https://arxiv.org/pdf/1901.02860.pdf
https://ratsgo.github.io/natural language processing/2019/09/11/xlnet/
- Permutation Language Modeling
2) RoBERTa
- A Robustly Optimized BERT Pretraining Approach
- BERT가 Underfit되었다고 가정하고 추가학습. 모델 구조는 BERT와 동일.
- 변화
- 모델 학습시간 증가, 배치 크기 증가, 학습데이터 증가
- 학습데이터: BookCorpus, CC-News, OpenWebText, Stories
- NSP제거: 너무 쉬워 언어를 깊게 이해하는 것에 방해가 될 수 있음
- 긴 시퀀스 추가
- Masking을 미리 수행 → dynamic masking
- 모델 학습시간 증가, 배치 크기 증가, 학습데이터 증가
3) MASS
- Masked Sequence to Sequence Pre-training for Language Generation
- Seq2Seq 모델에서 masking 방법을 추가
Masking은 sentence의 부분(fragment)에 적용
디코더에서는 마스킹된 부분을 autoregressive하게 넣어주며, 인코더에서 마스킹이되지 않은 부분은 디코더에서 마스킹을 해줌.
인코더와 디코더의 입력을 다르게 하여, 서로 의존적으로 학습이 가능
4) BART
- Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
- 인코더 마스킹 방안
이 때, 5가지의 masking방안을 모두 수행하지는 않고, masking방안 별로 각각 모델을 만듬. → 3번 masking 방안이 가장 좋은 masking방안임을 확인.
5) MT-DNN
- Multi-Task Deep Neural Networks for Natural Language Understanding
- Multi-task learning
MTL은 이전 task에서의 학습된 지식이, 새로운 task를 학습하는데 도움을 줄 것이라는 사람의 학습활동에서 영감을 받았다.
MTL은 여러 연관된 지도학습 데이터를 사용하여, 보다 많은 양의 라벨링된 데이터를 사용하는 이점이 있다.
또한 하나의 모델로 여러 task를 사전학습하기 때문에, regularization 효과를 볼 수 있다.
6) T5
- Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
- Text-to-text format
(데이터 셋과 task정리: https://post.naver.com/viewer/postView.naver?volumeNo=32628500&memberNo=32660208)
(https://arxiv.org/pdf/1910.10683.pdf, Appendix D. Preprocessed Examples)
- T5에 적용된 방법
Quantization, Pruning, Knowledge Distillation, Parameter Sharing on Transformer & BERT
Transformer를 가볍고 빠르게 만드는 기법들을 살펴보자.
1) Transformer.zip
- Quantization: 가중치나 활성함수를 표현하는데 필요한 비트 수를 줄여 모델을 압축하는 것
- 실험
- Quantizaition
- K-means Quantization
Deep Compression 논문과 같이, weight의 최소 최대값 이내의 값들로 초기 군집중심으로 설정 후, weight를 K-means 군집화를 통해 중심값으로 대체한다. 이 후에, fine-tuning을 통해 군집중심값을 조정한다. 역전파할 때 군집중심의 gradient는 각 weight의 gradient의 합으로 정의한다.
- K-means Quantization
- Pruning
Iterative Magnitude Pruning는 특정 크기보다 작은 weight을 마스킹하고 나머지 가중치를 학습하는 작업이다. 크기가 작은 가중치는 직관적으로 덜 중요하기 때문에, 모델 압축에 매우 효과적이다. 이러한 가중치를 0으로 설정해 제거하면, 성능에 큰 영향을 미치지 않는다.
- Quantizaition
- 결과
1-bit att-quantization은 transformer의 self-attention부분만 양자화 한 것이다.
pruning은 X% 비율에서 시작해 Y%의 비율이 pruning되게 한 것이다. (https://arxiv.org/pdf/1902.09574.pdf 를 참고하면, 90%를 가지치기 하더라도 90%의 성능을 유지한다.)
→ Mitchell et al. 은 NeurIPS에서 발표한 Are Sixteen Heads Really Better than One? 에서 각 Attention block의 head가 얼마나 실제 성능에 기여하는지를 분석
분석 결과: 실제로 작업에 기여하는 Attention Head는 전체 Head에 비해 일부분
2) DistilBERT
- Knowledge Distillation
where:
: 입력 , : student model의 파라미터 , : 라벨 , : 교차엔트로피손실함수
: T로 매개화된 소프트맥스 함수 , : Temperature, 얼마나 soften할 것인지
: teacher 모델의 로짓, student 모델의 로짓
# ref: https://github.com/peterliht/knowledge-distillation-pytorch/blob/master/model/net.py#L100 def loss_fn_kd(outputs, labels, teacher_outputs, params): """ Compute the knowledge-distillation (KD) loss given outputs, labels. "Hyperparameters": temperature and alpha NOTE: the KL Divergence for PyTorch comparing the softmaxs of teacher and student expects the input tensor to be log probabilities! See Issue #2 """ alpha = params.alpha T = params.temperature # T를 통해 기존 teacher와 student의 output을 더 soft하게 해준다. # alpah를 통해 Distillation loss와 student loss의 비율을 정한다. KD_loss = nn.KLDivLoss()(F.log_softmax(outputs/T, dim=1), F.softmax(teacher_outputs/T, dim=1)) \ * (alpha * T * T) + \ F.cross_entropy(outputs, labels) * (1. - alpha) return KD_loss
- DistilBERT
BERT에서 knowledge distillation을 적용해, 기존 BERT에서 레이어 수가 절반인 student모델을 학습.
그 결과, 파라미터의 수가 절반정도임에도 불구하고 대등한 성능을 보임.
3) ALBERT: A Lite BERT
- 기존 Pre-trained LM들 좋은 성능에는 Large model 필요 → 이에 따른 문제점
- Memory Limitations
- Longer training times
- ALBERT
- Distillation없이 성능이 좋은 작은 모델 구축을 위 2가지 테크닉 적용 & 새로운 task 추가
- Factorized Embedding parameterization
- Cross-Layer Parameter Sharing
- Sentence-order prediction
- Factorized Embedding Parameterization
기존 BERT에서는 입력토큰의 임베딩 크기(E)와 은닉층의 임베딩 크기(H)가 동일하도록 구성했다. 하지만, 토큰 임베딩은 context independent한 표현이고, 은닉층의 표현은 context dependent한 표현이다. 따라서, 토큰 임베딩의 크기를 은닉층 임베딩 크기보다 작게한다.
이 때, 줄여진 임베딩 크기를 은닉층의 크기로 다시 맞춰주기 위해, 크기의 은닉층을 추가한다.
파라미터의 개수는 에서 가 되며, V: 30,000 , E: 256, H: 786인 경우 약 23,000,00 → 약 7,800,000 으로 줄어든다.
- Cross-Layer Parameter Sharing
Universal Transformer(Dehghani et al, 2019)에서 transformer의 파라미터를 공유하면, 더 나은 성능을 보이는 것을 주장했다. 파라미터 수를 줄이기 위해, ALBERT에서도 하나의 인코더 블락에 layer 수 만큼 12번 또는 24번 넣어 학습한다. 이를 통해 하나의 인코더 블럭이 여러 기능을 모두 학습할 것을 기대한다.
이를 전체 공유, FFN 부분만 공유, Attention 부분만 공유, 공유하지 않음을 변화해가며 실험한 결과는 아래와 같다.
- Distillation없이 성능이 좋은 작은 모델 구축을 위 2가지 테크닉 적용 & 새로운 task 추가
References
- Lectures: https://www.youtube.com/watch?v=0lgWzluKq1k&list=PLetSlH8YjIfVzHuSXtG4jAC2zbEAErXWm&index=16
- BPE, Wordpiece:
- BERT
- explanation: https://supkoon.tistory.com/24
- XLNet
- Transformer-XL: https://arxiv.org/pdf/1901.02860.pdf
- T5
- Faster, Lighter Transformer
- Transformer.zip
- paper: https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/reports/custom/15763707.pdf
코드: https://github.com/robeld/ERNIE
[7] “Deep Compression: Compressing Deep Neural Network with Pruning, Trained Quantization and Huffman Coding”
[8] “Learning both Weights and Connections for Efficient Neural Networks”.
[27] “The State of Sparsity in Deep Neural Networks“ https://arxiv.org/pdf/1902.09574.pdf
- paper: https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1194/reports/custom/15763707.pdf
- DistilBERT
- ALBERT
- explanation:
- Transformer.zip