인코더-디코더 모델을 위한 사전 학습된 언어 모델 체크포인트 활용하기 – Hugging Face 블로그 요약
인코더-디코더 모델을 위한 사전 학습된 체크포인트 활용
2020년 11월 9일자 Hugging Face 블로그 게시물은 BERT, RoBERTa 또는 GPT2와 같은 사전 학습된 encoder-only 또는 decoder-only 체크포인트의 가중치를 사용하여 인코더-디코더(seq2seq) 모델을 초기화하는 방법을 설명합니다. 이 warm-starting 기술은 전체 인코더-디코더 모델을 사전 학습시키는 데 드는 막대한 비용을 피할 수 있게 해주며, 다양한 sequence-to-sequence 작업에서 T5 및 Pegasus와 같은 모델과 경쟁할 만한 결과를 제공합니다.
Warm-starting 이론
인코더-디코더 모델은 인코더 스택과 디코더 스택으로 구성됩니다. Warm-starting은 네 가지 방식으로 수행될 수 있습니다: (1) 인코더와 디코더 모두 encoder-only 체크포인트(예: BERT) 사용, (2) 인코더는 encoder-only 체크포인트, 디코더는 decoder-only 체크포인트(예: BERT + GPT2) 사용, (3) 인코더만 encoder-only 체크포인트 사용, 또는 (4) 디코더만 decoder-only 체크포인트 사용. BERT에서 warm-starting을 할 때, 인코더 레이어는 BERT 레이어와 일대일로 매핑되며 BERT 가중치로 초기화됩니다. 디코더는 BERT로부터 동일한 self-attention 및 LM-Head 가중치를 받지만, BERT에는 cross-attention이 없기 때문에 cross-attention 레이어가 추가되고 무작위로 초기화됩니다. GPT2에서 디코더를 warm-starting할 때는 self-attention과 LM-Head를 직접 복사할 수 있지만, cross-attention 레이어는 다시 무작위로 초기화됩니다.
인코더와 디코더 아키텍처가 동일한 경우(cross-attention 제외), 가중치를 결합(tied)하여 파라미터 수를 절반으로 줄일 수 있습니다. 이러한 weight-tying은 양쪽 모두 동일한 encoder-only 체크포인트에서 warm-started될 때만 의미가 있습니다.
Warm-started 모델 분석
블로그는 Rothe et al. (2020)의 실험을 요약하며, 다양한 warm-started 인코더-디코더 구성을 네 가지 작업 그룹인 문장 융합(sentence fusion), 문장 분리(sentence splitting), 기계 번역(WMT14 EN↔DE), 요약(CNN/Dailymail, BBC XSum, Gigaword)에서 무작위 초기화된 베이스라인과 비교했습니다. 모든 모델은 bert-base-cased, roberta-base 또는 gpt2 체크포인트에 해당하는 12-layer, 768-dim hidden size를 사용했습니다.
모델 변형 테이블은 무작위로 초기화된("random") 파라미터와 활용된("leveraged") 파라미터의 수를 보여줍니다. 예시:
- Rnd2Rnd: 221M random, 0 leveraged
- Rnd2BERT / BERT2Rnd: 112M random, 109M leveraged
- BERT2BERT: 26M random, 195M leveraged
- BERTShare / RoBERTaShare: 26M random, 109M / 126M leveraged (weight tying 때문)
- BERT2GPT2: 26M random, 234M leveraged
- RoBERTa2GPT2: 26M random, 250M leveraged
결과(표 인용)는 다음과 같습니다:
- Sentence Fusion (DiscoFuse, SARI): RoBERTa2GPT2는 100% 데이터에서 89.9, 10% 데이터에서 87.1을 달성했습니다; RoBERTaShare (large)는 90.3 / 87.7에 도달했습니다.
- Sentence Splitting (WikiSplit, SARI): BERTShare는 63.5, RoBERTaShare는 63.4, RoBERTaShare (large)는 63.8을 기록했습니다.
- Machine Translation (WMT14, BLEU-4): BERT2Rnd와 BERT2BERT 모두 30.1 → 32.7 (EN→DE / DE→EN)에 도달했습니다. BERT2Rnd (large, custom)는 31.7 → 34.2로 향상되었습니다. GPT2 기반 모델은 GPT2의 어휘집이 영어 전용이기 때문에 EN→DE에서 저조한 성능을 보였습니다 (예: BERT2GPT2 23.2).
- Summarization (Rouge-2): RoBERTaShare는 CNN/Dailymail에서 18.95, BBC XSum에서 17.50, Gigaword에서 19.70을 달성했습니다. RoBERTaShare (large)는 CNN/Dailymail에서 18.91, BBC XSum에서 18.79, Gigaword에서 19.78에 도달했습니다. BERTShare와 BERT2BERT가 그 뒤를 바짝 쫓았으며, GPT2 기반 모델은 뒤처졌습니다 (예: BERT2GPT2 CNN/Dailymail에서 4.96).
분석 결과, 인코더를 warm-starting하는 것은 작업 전반에 걸쳐 일관된 성능 향상을 제공하는 반면, 디코더를 warm-starting하는 것은 cross-attention 레이어가 무작위로 초기화된 상태로 남기 때문에 이점이 적습니다. 가중치 공유(Weight sharing)는 입력과 출력 분포가 유사할 때(예: BBC XSum) 도움이 되지만, 모델 용량과 상이한 어휘집이 중요한 번역에서는 해가 될 수 있습니다. 체크포인트의 어휘집을 작업 언어와 일치시키는 것이 필수적입니다.
실습: 🤗Transformers를 이용한 Warm-starting
블로그는 BERT2BERT 모델을 warm-start하고 CNN/Dailymail 요약 작업으로 미세 조정(fine-tune)하는 전체 노트북을 제공합니다.
- 라이브러리 설치:
datasets==1.0.2및transformers==4.2.1. - 데이터 로드 및 전처리:
bert-base-uncased(최대 길이 512)와 하이라이트 (최대 길이 128)로 기사를 토큰화하고, 패딩 레이블 토큰을 -100으로 교체합니다. - 모델 Warm-start:
경고 메시지는 예상대로 분류기(from transformers import EncoderDecoderModel bert2bert = EncoderDecoderModel.from_encoder_decoder_pretrained( "bert-base-uncased", "bert-base-uncased" )cls) 가중치가 사용되지 않으며 cross-attention 가중치가 새로 초기화되었음을 보여줍니다. - 생성 파라미터 설정 (bart-large-cnn에서 복사):
bert2bert.config.decoder_start_token_id = tokenizer.cls_token_id bert2bert.config.eos_token_id = tokenizer.sep_token_id bert2bert.config.pad_token_id = tokenizer.pad_token_id bert2bert.config.vocab_size = bert2bert.config.encoder.vocab_size bert2bert.config.max_length = 142 bert2bert.config.min_length = 56 bert2bert.config.no_repeat_ngram_size = 3 bert2bert.config.early_stopping = True bert2bert.config.length_penalty = 2.0 bert2bert.config.num_beams = 4 - Fine-tune:
Seq2SeqTrainer와Seq2SeqTrainingArguments를 사용하며,predict_with_generate=True와 Rouge-2 정밀도, 재현율, f-measure를 반환하는compute_metrics함수를 사용합니다. - Train: 데모를 위해 하위 집합(훈련 예시 32개, 검증 예시 8개)에서 학습합니다. TITAN RTX에서 전체 학습에는 약 8시간이 소요됩니다.
- Evaluate: 테스트 세트에서 평가합니다. 완전히 학습된 BERT2BERT 모델(
patrickvonplaten/bert2bert_cnn_daily_mail)은 전체 CNN/Dailymail 평가에서 18.22의 Rouge-2 f-measure를 달성하여 논문에 보고된 수치와 일치하거나 이를 약간 상회합니다.
또한 노트북은 모델을 저장하고 다시 로드하는 방법과 from_encoder_decoder_pretrained에 tie_encoder_decoder=True를 전달하여 인코더-디코더 가중치를 결합하는 방법을 보여줍니다.
핵심 요약
기존 BERT, RoBERTa 또는 GPT2 체크포인트를 사용하여 인코더-디코더 모델을 warm-start하면, 처음부터 사전 학습시키는 데 드는 엄청난 계산 비용 없이도 강력한 seq2seq 성능을 얻을 수 있습니다. 인코더 초기화가 가장 중요한 요소이며, 디코더 초기화는 미세 조정 중에 cross-attention이 학습되지 않는 한 가치가 적습니다. 가중치 결합은 입력 및 출력 언어 또는 형식이 유사할 때 유익하며, 체크포인트와 작업 언어 간의 어휘집 일치는 성공을 위한 전제 조건입니다.