메뉴 닫기

Transformer 기반의 다양한 모델과 아키텍쳐

LLM 기반의 Application 을 개발하기 시작했다면 가장 많이 방문하는 페이지는 아마 Hugging Face 일것 같습니다.

 

Transformer 의 등장과 이후 GPT / BERT 의 성공으로 정말 다양한 아키텍쳐를 가진 transformers 모델이 등장했고, Huggingface 덕분에 쉽게 NLP Task 에 접근할 수 있게 되었는데요.

오늘은 Huggingface에 올라온 다양한 Transformers 모델들에 대해 이야기해보려고 합니다.

 

image.png

1. Transfomer 모델

Attention Is All You Need 논문에서 소개된 Transformer는 이전의 많은 Seq2Seq Model들 처럼 Encoder-Decoder 구조를 가지고 있습니다.

( Transfomer의 자세한 설명은 tensorflow의 Transform 튜토리얼 페이지를 참고 부탁드립니다. )

 

이후 Transformer는 왼쪽의 Encoder 부분을 활용한 Encoder-Only 아키텍쳐와 오른쪽의 Decoder를 활용한 GPT 계열의 Decoder-only 아키텍쳐 그리고, Encoder와 Decoder 모두를 활용하는 Encoder-decoder 아키텍쳐로 나눠 발전하고 있습니다.

image.png

2. Encoder-Only

Encoder-Only 아키텍쳐의 대표주자는 2018년 구글에서 발표한 BERT(논문) 입니다. BERT는 Bidirectional Encoder Representations from Transformers 의 약자로 모델명에 표현된것처럼 Transformer의 Encoder를 활용한 모델입니다.

BERT는 텍스트에서 마스킹된 토큰을 예측(Masked Language Modeling, MLM) 과 다음 문장을 예측(Next Sentence Prediction, NSP) 를 목표로 학습된 모델인데요.

Input 정보를 인코딩된 표현으로 만드는 Transformer Encoder의 특성을 이용하여 Task의 목적에 따라 적용 방식입니다.

image.png

( 출처 : https://huggingface.co/blog/bert-101 )

 

이제, Huggingface의 transfomrer 라이브러리를 활용하여 BERT 모델을 살펴 보겠습니다.

Huggingface 의 모델들은 AutoModel 이라는 기본 모델을 바탕으로 AutoModelFor{XX} ( Ex. AutoModelForSequenceClassification ) 처럼 NLP Task에 맞는 모델을 불러 올 수 있습니다.

오늘은 BERT의 기본 구조를 살펴 보기 위해 AutoModel 을 사용해서 pretrain된 BERT 모델을 먼저 불러오겠습니다.

image.png

 

입력된 시퀀스를 Token Embeding + Positional Embeding 하는 Embeddings Layer 를 지나 12개의 Multi-Head Attention Layer 그리고 Linear Layer( Feed Forward ) 를 가진 모델 구조가 출력됩니다.

이제, 마스킹된 Token을 예측하는 Task를 수행하기 위해 transformers library의 AutoModelForMaskedLM 를 사용하여 AutoModel 뒤에 어떤 Layer가 추가로 붙는지 확인해보겠습니다.

image.png

 

AutoModel에서 출력한 Model 구조와 다르게 Encoder 에서 나온 값을 BertOnlyMLMHead 라는 Layer에 통과시키는 구조가 출력됩니다.

이처럼, 입력된 문장을 잘 표현하는 Embedding vectors(Hidden State)를 만든 뒤 그 값을 마스킹된 Token을 예측하는 Task(Masked Language Modeling, MLM) 에서 활용하는 구조가 나오게 됩니다.

GPT 모델과 다르게 BERT 같은 아키텍쳐의 경우 문장의 좌/우(앞/뒤) 에서bidirectional self-attention 을 계산하기 때문에 오른쪽에 위치한 문맥을 같이 이해해야 풀 수 있는 MLM 같은 Task 를 잘 수행하는것으로 알려져있습니다.

( BERT 가 처음 등장했을때, 감정 분석/문장 예측/문장 요약 등 11개 이상의 NLP Task 에서 압도적인 성능을 보여주었습니다. 꼭 MLM 만 잘 한다는 의미는 아닙니다. )

 

현재 Huggingface에서 사용가능한 Encoder-only 아키텍쳐 모델은 BERT 이후 등장한 DistilBERT, RoBERTa , XML, ALBERT 같은 모델들이 있습니다.

 

3. Decoder-Only

GPT 모델은 Decoder-Only 아키텍쳐의 대표 모델로 ChatGPT의 성공을 이끌며 어떤 관점에서는 LLM 모델 중 가장 유명한 모델이 되었습니다.

GPT는 Generative Pre-trained Transformer 의 약자로 2018년 Open AI 에서 발표한 Improving Language Understanding by Generative Pre-Training 논문에서 처음 소개되었습니다.

지난 출력과 현재 토큰만 사용해 다음 토큰을 생성하는 Transformer Decoder 의 특징을 활용한 Decoder-Only 아키텍쳐는 다음 단어를 예측하는데 뛰어나다고 알려져 있습니다.

특히, GPT 는 transformer Decoder 아키텍쳐와 전이학습을 효율적으로 결합하여 단순 다음 단어를 예측하는것이 아닌 Text 분류 같은 다양한 NLP Task에서도 뛰어난 성과를 보여주었습니다.

 

image.png

 

( 출처 : https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf )

 

Transformer의 Decoder layer 와 비교해서 Masked Multi-Head Attention Layer 이후 바로 Feed Forward 로 들어가는 구조입니다.

Encoder에서 넘어오는 입력이 없기 때문에 해당 layer는 생략된채 Transformer의 Decoder 가 구성된 걸로 볼 수 있습니다.

 

Huggingface에서는 GPT 모델도 제공하고 있습니다.

동일하게 AutoModel 로 GPT의 구조를 먼저 살펴 봅니다.

image.png

 

BERT 모델과 동일하게 입력 값을 Token Embedding + Positional Embedding 하는 Embedding layer들을 지나 Masked Multi-Head Attention 을 계산하는 12개의 Attention layer가 있습니다.

하지만 BERT와 다르게 Feed Forward netword를 구성하기 위해 Fully Connected( pytorch 기준 Linear Layer ) 가 아닌 Conv1D Layer를 사용 했는데요.

FC(Fully Connected) Layer와 Conv1D Layer는 유사한 결과를 얻을 수 있다고 알려져 있습니다.

다만, GPT 처럼 대규모 학습 데이터를 사용할때는 Conv1D 가 모델의 성능을 높이는데 도움을 준다고 알려져 있습니다.

 

이제 Decoder 기반의 GPT 모델이 잘 수행한다고 알려져 있는 텍스트 생성 Task를 위해 AutoModelForCausalLM 를 사용해보겠습니다.

흔히, 시작 프롬프트가 주어 질 때 텍스트에 등장하는 토큰 시퀀스를 추정하는 조건부 확률 모델을 자기 회귀 모델(Autoregressive model) 혹은 인과 언어 모델(Causal Language Model) 이라고 부르고 Huggingface에서는 {xx}ForCausalLM 의 형태로 문장 생성 모델을 제공합니다.

image.pngGPT 논문에서 제시한 Task 별 layer 처럼 마지막 Layer에 Linear Layer가 추가 되었습니다.

추가된 Linear Layer의 out_features 값은 단어 사전의 크기 (vocab size) 가 될 것 입니다.

 

Huggingfafce 에서는 GPT-2, CTRL, GPT-Neo 같은 Decoer-only 모델을 제공하고 있습니다.

 

4. Encoder-Decoder

BERT와 GPT 의 성공 이후 Transformer의 Encoder나 Decoder 스택을 사용해 모델을 만드는것이 일반적인 일이 되었지만, 번역 같은 전통적인 Seq2Seq Task 를 해결하기 위해 Encoder-Decoder 아키텍쳐는 여전히 유효합니다.

Encoder-Decoder 모델의 가장 대표적인 모델은 2019년에 구글에서 발표한 T5(논문) 입니다.

T5는 Text-to-Text Transfer Transformer 의 약자인데 NLP Task 들을 모두 Text to Text Task 로 접근하는 모델입니다.

아래 이미지처럼 번역/판정/감정유사도/요약 같은 NLP Task 들을 prefix를 포함한 Text 형태로 입력하고 text 를 출력하는 형태인데요.

BERT나 GPT 와 가장 큰 차이점은 Transformer 원본 아키텍쳐를 사용한다는 점입니다.

image.png

( 출처 : https://arxiv.org/pdf/1910.10683.pdf )

 

BERT/GPT 와 동일하게 Huggingface 의 AutoModel를 사용하여 모델 구조를 살펴보겠습니다.

image.png

image.png

 

Encoder/Decoder를 가진 Transformer 원본 아키텍쳐를 사용하기 때문에 BERT/GPT 에 비해 모델 구조가 길게 출력 됩니다.

특이한 점은 Multi-Head Attention layer을 바로 12번 반복하는게 아니라 최초 1회는 FeedForward layer를 통과하고 나머지 11번을 반복하는 구조가 Encoder/Decoder에 나타나고 있습니다.

 

T5 모델의 경우 AutoModelFor{xx} 같은 Task 별 모델을 사용하는게 아닌 T5ForConditionalGeneration 라는 모델을 호출하여 prefix에 따른 seq2seq Task를 수행할 수 있습니다.

 

Encoder-Decoder 유형으로 BART, M2M-100, BigBird 같은 모델을 huggingface 에서 사용할 수 있습니다.

 

 

5. 마무리

Hugging Face 에서 제공하는 transformers 라이브러리를 사용하여 Transformer 기반의 다양한 모델들을 살펴 봤습니다.

Encoer-Only, Decoder-Only 그리고 Encoder/Dedocer 아키텍쳐의 대표 모델들을 살펴봤는데, 아키텍쳐에 따라 Task 별 성능이 차이가 있는걸로 알려져 있습니다.

 

현재까지는 chatGPT의 성공으로 GPT 계열의 Decoder-Only 아키텍쳐가 가장 성과를 내고 있습니다.

Encoder, Encoder/Decoder 아키텍쳐들이 분발해서 LLM 영역에서 새로운 성과를 만들어 낼 수 있을지, 혹은 역사 속 모델들 중 하나가 될지 앞으로 지켜보는것도 좋을것 같습니다.


출처 :

https://github.com/nlp-with-transformers/notebooks,

Natural Language Processing with Transformers, O’Reilly Media,

https://blog.tensorflow.org/2019/05/transformer-chatbot-tutorial-with-tensorflow-2.html

https://huggingface.co/blog/bert-101

https://openai.com/research/language-unsupervised

https://huggingface.co/docs/transformers/en/model_doc/openai-gpt

https://arxiv.org/pdf/1910.10683.pdf

 

 

이 글은 SK 그룹의 개발자 모임 Devocean 에 동일하게 작성된 글입니다.