딥러닝(DL)/논문 리뷰

T5 : Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer [arXiv 2019]

Song 컴퓨터공학 2024. 1. 29. 15:10

 

 

논문의 제목보다 이름으로 유명한 T5 모델의 제안 논문입니다. T5 라는 이름은 Text-to-Text Transfer Transformer 에 T가 5개 있어서 저 이름을 요약한 이름입니다. 즉, Text-to-text 전이학습 트랜스포머 라는 이름이죠. 

 

T5는 구글이 개발한 자연어 처리 모델입니다. 이름에서도 유추할 수 있겠지만 Transfer learning을 한다는 것은 다양한 task에 접목시킬 수 있다는 것을 의미하죠. 기계 번역, 질의 응답, 요약, 문장 생성 등 다양한 NLP Task에서 좋은 성능을 보입니다. Transformer 아키텍처를 기반으로 입출력이 text인 일반적인 프레임워크를 가집니다.

 

이 논문은 여러 방법들에 대한 비교를 보여주는 논문이라 양이 많기 때문에 전체적으로 정리 하지 않고, 논문 원문에서 필요한 부분이나 읽으면서 중요하다 생각했던 부분 위주로 짧게 요약하는 포스팅입니다.


Purpose of the paper

 

$$ \text{The motivation for this paper was the flurry of recent work on transfer learning for NLP.} $$

 

원문의 4-2절, Outlook 에 본 논문의 목적이 한 문장으로 나와 있습니다. 최근의 NLP 연구들은 대량의 unsupervised dataset에 대한 pre-trained 모델을 원하는 downstream task에 대해 supervised fine-tuning 하는 transfer learning 방식이 보편화된 상태입니다. BERT나 다른 LLM도 비슷하게 사용하죠. 이러한 방식이 task-specific model을 만드는 것보다 더 좋은 성능을 나타냄은 여러 방면에서 이미 입증되었습니다. 또한 이전의 연구들에 의해 더 큰 모델을 사용할수록, 더 많은 데이터셋을 사용할 수록 더 좋은 성능이 나타난다는 것도 입증되었습니다.

 

이에 따라 다양한 방식의 pre-training objective, unlabeled dataset, fine-tuning method 등이 등장했고 모델의 크기도 그에 맞춰 증가했으나 각각의 서로 다른 기법들의 효과에 대한 연구는 제대로 되지 않은 상황입니다. 따라서 본 논문에서는 이 논문을 통해 이전까지 인기있고 좋은 성능을 나타낸 방법들(BERT, GPT 등등)에 사용된 각각의 기법에 대한 비교 실험을 진행하고자 합니다.

 

 

Features of T5

 

T5는 모든 NLP task는 Text-to-text 문제로 취급할 수 있다는 아이디어에서 출발합니다. 원래 Text-to-text는 generation에서 일반적으로 사용하는 구조인데, T5는 생성 뿐만 아니라 classification, regression 등의 문제도 Text-to-text로 해결하려 합니다. 이렇게 모든 task들을 하나의 접근 방식으로 접근하게 된다면 다양한 downstream task에 동일한 모델, 학습 기법, 디코딩 프로세스 등을 적용할 수 있습니다.

 

T5는 획일화된 방식을 통해 다양한 Transfer learning objective와 unlabeled dataset 같은 다양한 모델링 요소들에 대해 효과적으로 비교 분석할 수 있게 합니다.

 

Original Encoder-Decoder Transformer

T5의 모델 아키텍처는 기본 Transformer 구조를 크게 벗어나지 않습니다. BERT가 Transformer 구조의 인코더를 사용하고, GPT가 디코더를 사용하는 것처럼 따로 떼어내서 사용하는 것이 아니라 원래 Transformer의 Encoder-Decoder 구조를 그대로 가져와 사용합니다. 당연히 약간의 변경점은 있습니다.

  • Layer Normalization에 사용되는 bias 제거, rescale 만 수행
  • Absolute positional embedding 대신 Relative positional embedding 사용
  • 모델 레이어 전체에서 position embedding parameter sharing

자세한 내용은 원문의 번역을 참고하시면 됩니다.

 

2.1 Models(원문 번역)

이전의 NLP 전이 학습 결과는 RNN을 효과적으로 활용했으나, 현재는 “Transformer” 구조(Vaswani et al., 2017) 기반 모델을 쓰는 것이 일반적이다. 트랜스포머는 초기에 기계 번역 분야에서 효과가 입증되었는데, 점차적으로 다양한 NLP 환경에서 사용되어 왔다. 트랜스포머 모델의 편재성(ubiquity)이 증가함에 따라, 본 논문에서 연구되는 모든 모델은 트랜스포머 구조를 기반으로 한다. 그리고 일부 특정 상황(아래 언급된 세부사항이나 섹션 3.2에서 언급될 변형 모델)을 제외하면, 이러한 트랜스포머의 원본 구조에서 크게 벗어나지 않는다.

 

트랜스포머의 블록은 주로 셀프 어텐션(self-attention)으로 구성되어 있다. 셀프 어텐션은 어텐션의 한 변형으로, 각 요소를 나머지 시퀀스의 가중 평균(weighted average)으로 대체하는 방식으로 시퀀스를 처리한다. original Transformer는 encoder-decoder 구조로 구성되어 있고, sequence-to-sequence task를 위해 의도되었다. 현재는 단일 Transformer layer stack으로 구성된 모델과 언어 모델링(Language Modeling), 분류, 또는 span prediction tasks에 적절한 구조를 생성하는 데 사용되는 셀프 어텐션의 다양한 형태를 같이 사용하는 방법 또한 일반적인 방법 중 하나가 되었다. 본 논문의 섹션 3.2에서는 이러한 구조적 변형들에 대해서 다룬다.

 

 전반적으로, 본 논문에서 인코더-디코더 트랜스포머의 시행은 original Transformer를 면밀히 따른다. 먼저, 토큰의 입력 시퀀스는 임베딩의 시퀀스로 사상되고, 그 다음 인코더로 넘어간다. 인코더는 “블록(blocks)”을 쌓은 형태(stack)로 구성되는데, 각 블록은 셀프 어텐션 레이어(self-attention layer)와 작은 피드 포워드 신경망(FFN) 2개의 서브 컴포넌트로 구성된다. 

 

각 서브 컴포넌트의 입력에 레이어 정규화(LN)가 적용된다. 본 논문에서는 간소화된 레이어 정규화를 사용하는데, 간소화된 레이어 정규화는 활성화 함수 값만 재조정하며 추가적인 편향(bias)을 적용하지 않는다. 레이어 정규화를 거치고 난 후, residual skip connection(잔차 연결)은 각 서브 컴포넌트의 입력을 출력 값에 추가한다. 

 

피드포워드 신경망, skip connection, attention weights, 그리고 전체 stack의 입력과 출력에서 드롭아웃(Dropout)이 적용된다. 디코더는 인코더와 구조적으로 유사한데, 한 가지 차이점은 디코더는 각 셀프 어텐션 레이어 이후 표준 어텐션 매커니즘을 추가한다는 것이다. 디코더의 셀프 어텐션 메커니즘은 자기회귀(autoagressive) 또는 캐쥬얼 셀프 어텐션의 형태를 사용하는데, 이러한 형태는 모델이 지난 출력을 활용할 수 있도록 한다. 최종 디코더 블록의 출력은 dense layer로 전달되어 소프트맥스 출력(softmax output)값을 생성하고, 이 dense layer의 가중치는 입력 임베딩 행렬과 공유된다. 트랜스포머에서 모든 어텐션 매커니즘은 독립적인 “헤드(heads)”로 분리되는데, 이러한 헤드의 출력은 전방으로 진행하기 앞서 연결(concatenate)된다. 

 

셀프 어텐션(self-attention)은 순서에 의존하지 않기(order-independent) 때문에, (즉, 셀프 어텐션은 집합 연산이기 때문에) 트랜스포머에 명확한 위치 신호를 제공할 수 있다. 원본 트랜스포머 모델은 사인파(sinusoidal) 위치 신호를 사용하거나 학습된 위치 임베딩(position embeddings)을 사용했는데, 최근에는 상대적 위치 임베딩(relative position embeddings)을 사용하는 것이 보편화되었다. 상대적 위치 임베딩은 각 포지션에 고정된 임베딩을 사용하지 않고, “키(key)”와 “쿼리(query)” 간의 오프셋에 따라 다른 학습된 임베딩을 사용한다.

 

또한, 모델은 각 “임베딩”이 단순하게 어텐션 가중치를 연산하는 데 사용되는 로짓(logit)에 부여된 스칼라 값일 경우, 위치 임베딩의 형식을 단순화하여 사용한다. 효율성을 위해 모든 레이어의 위치 임베딩 파라미터를 공유하는데, 다만 주어진 레이어 내의 각 어텐션 헤드(attention head)는 상이한 위치 임베딩을 사용한다. 

 

일반적으로, 키-쿼리(key-query) 오프셋의 범위에 상응하는 고정된 수의 임베딩이 학습된다. 본 논문의 연구에서는 모든 모델에서 32개의 임베딩을 사용하고, 임베딩 범위의 크기는 동일한 임베딩이 할당되는 모든 relative positions를 넘어서는 오프셋인 128까지 로그적으로 증가한다. 주어진 레이어는 128 토큰을 초과하는 relative position에는 민감하게 반응하지 않으나, 후속 레이어의 경우 이전 레이어의 국소 정보(local information)을 결합함으로써 더 큰 오프셋에 민감해질 수 있다.

 

 

 

Denoising Corrupted Span

 

T5의 pre-triaining objective는 SpanBERT 논문에서 제안된 기법을 사용합니다. 원래 BERT의 경우 입력되는 original text 내의 일부 토큰들을 [MAST] token으로 교체하는 방식을 택했으나, SpanBERT에서는 각 토큰을 마스킹 하는 것이 아니라 Span을 하나의 [MASK] 토큰으로 사용합니다. 이 방식을 사용했을 때 성능 향상이 있었고, 계산 효율도 상승했기 때문에 T5의 사전학습에서는 이 아이디어를 채택합니다.

 

 

T5 Fine-tuning

대체로 논문에서는 Pre-training 기법에 대해 말해줍니다. 당연히 연구에 있어서 pre-training에 대한 내용과 기법을 익히는건 정말 중요하지만, 저는 지금 당장 이를 Fine-tuning 하여 사용해야 하는 상황이기 때문에, 그 내용들은 논문 링크에 제쳐두고, 저는 hugging face 코드를 잠시 공유하며 마치도록 하겠습니다.

https://huggingface.co/docs/transformers/model_doc/t5

 

T5

Although the recipe for forward pass needs to be defined within this function, one should call the Module instance afterwards instead of this since the former takes care of running the pre and post processing steps while the latter silently ignores them.

huggingface.co

 

pre-trained 된 t5 모델은 여러 가지 버전으로 huggingface에서 제공됩니다. 

이렇게 다양한 버전이 있고, 이에 대한 개선 모델도 위 사이트에 모두 나와있습니다. 실제로 사용할 때는?

from transformers import T5Tokenizer, T5ForConditionalGeneration

# Pre-Trained T5 Tokenizer
tokenizer=T5Tokenizer.from_pretrained('t5-base')

# Pre-Trained T5 Model
model=T5ForConditionalGeneration.from_pretrained('t5-base').to(device)

 

이렇게 아주 쉽게 불러올 수 있습니다. 

 

 

 

 

Reference:

https://arxiv.org/abs/1910.10683

 

Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

Transfer learning, where a model is first pre-trained on a data-rich task before being fine-tuned on a downstream task, has emerged as a powerful technique in natural language processing (NLP). The effectiveness of transfer learning has given rise to a div

arxiv.org