인코더-디코더 모델을 위한 사전 학습된 언어 모델 체크포인트 활용하기 – 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)하는 전체 노트북을 제공합니다.

  1. 라이브러리 설치: datasets==1.0.2transformers==4.2.1.
  2. 데이터 로드 및 전처리: bert-base-uncased (최대 길이 512)와 하이라이트 (최대 길이 128)로 기사를 토큰화하고, 패딩 레이블 토큰을 -100으로 교체합니다.
  3. 모델 Warm-start:
    from transformers import EncoderDecoderModel
    bert2bert = EncoderDecoderModel.from_encoder_decoder_pretrained(
        "bert-base-uncased", "bert-base-uncased"
    )
    
    경고 메시지는 예상대로 분류기(cls) 가중치가 사용되지 않으며 cross-attention 가중치가 새로 초기화되었음을 보여줍니다.
  4. 생성 파라미터 설정 (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
    
  5. Fine-tune: Seq2SeqTrainerSeq2SeqTrainingArguments를 사용하며, predict_with_generate=True와 Rouge-2 정밀도, 재현율, f-measure를 반환하는 compute_metrics 함수를 사용합니다.
  6. Train: 데모를 위해 하위 집합(훈련 예시 32개, 검증 예시 8개)에서 학습합니다. TITAN RTX에서 전체 학습에는 약 8시간이 소요됩니다.
  7. Evaluate: 테스트 세트에서 평가합니다. 완전히 학습된 BERT2BERT 모델(patrickvonplaten/bert2bert_cnn_daily_mail)은 전체 CNN/Dailymail 평가에서 18.22의 Rouge-2 f-measure를 달성하여 논문에 보고된 수치와 일치하거나 이를 약간 상회합니다.

또한 노트북은 모델을 저장하고 다시 로드하는 방법과 from_encoder_decoder_pretrainedtie_encoder_decoder=True를 전달하여 인코더-디코더 가중치를 결합하는 방법을 보여줍니다.

핵심 요약

기존 BERT, RoBERTa 또는 GPT2 체크포인트를 사용하여 인코더-디코더 모델을 warm-start하면, 처음부터 사전 학습시키는 데 드는 엄청난 계산 비용 없이도 강력한 seq2seq 성능을 얻을 수 있습니다. 인코더 초기화가 가장 중요한 요소이며, 디코더 초기화는 미세 조정 중에 cross-attention이 학습되지 않는 한 가치가 적습니다. 가중치 결합은 입력 및 출력 언어 또는 형식이 유사할 때 유익하며, 체크포인트와 작업 언어 간의 어휘집 일치는 성공을 위한 전제 조건입니다.

Sources