language model에서 transformer의 multi-head attention 구조 때문에, inference 시간이 너무 오래 걸린다는 문제가 있었고, 이를 해결하기 위한 방법을 제시하였다. (사실, 전에 등장한 multi-query attention과 multi-head attention 방식의 절충안을 제시한 논문이다.)
최근에는 당연하게 받아들여져, 대규모 AI 모델에는 당연하게 사용된다고 한다.
Abstract
Multi-query attention(MQA)는 하나의 key-value head를 사용하여 decoder의 inference 시간을 줄인다.
하지만, MQA는 model 성능 하락이 일어날 수 있다.
이 논문에서는 기존의 multi-head 언어 모델의 checkpoint들을 MQA 기능을 갖춘 모델로 변경하는 방법을 제안하여, pre-training 과정의 5% 정도의 계산량만 사용하도록 한다.
또한, grouped-query attention(GQA)라는 multi-query attention을 일반화하여 몇 개의 key-value head로 사용할 수 있는 개념을 소개한다.
GQA는 multi-head attention의 성능에 필적하면서도, MQA에 비견될 수 있는 빠른 속도를 가진다.
Introduction
[문제]
Autoregressive decoder의 inference에는 각 decoding step마다, attention key, value와 decoder weights를 memory에 load 해야 하기 때문에 memory bandwidth에 의한 overhead를 겪는다.
→ Decoder의 문장을 생성할 때는 token 하나 하나를 생성하기 때문에, 그때마다 decoder의 weight와 attention 사이의 연산을 위해, memory 상에 올리는 과정을 겪는데, 이것이 문장 생성등에 속도 저하 요인이라는 것이다.
이런 memory bandwidth에 의한 속도 저하는 multi-query attention(MQA)이라는 query를 여러 개 사용하지만, 단일 key와 value head를 사용하는 방법에 의해 개선될 수 있다.
하지만, MQA를 사용하게 되면, 성능 저하와 학습 불안정성이 생기게 된다. 또한, 공개된(그 당시) 언어 모델들은 거의 모두 multi-head attention을 사용하여 학습했기 때문에, MQA를 사용하지 못한다.
[Contribution]
이 논문에서는 2가지 contribution을 주장한다.
multi head attention(MHA)를 통해 학습된 언어 모델의 checkpoins를 최초 학습에 비해 적은 양의 연산만으로 MQA를 사용할 수 있도록 한다. 이로 인해, MHA의 좋은 성능을 유지하면서, 빠르게 inference 할 수 있도록 한다.
grouped-query attention(GQA)라는 multi-head와 multi-query attention을 아우를 수 있도록 query head 당 key value 여러 개를 할당하는 방식을 소개한다. GQS는 multi head attention과 비슷한 성능을 내면서, multi-query attention처럼 빠른 속도를 가진다.
Method
[Uptraining]
multi-head model로 부터 multi-query를 생성하는 것은 2가지 과정을 거친다.
checkpoint를 변경한다.
새로운 구조에 맞게 추가적인 pre-training을 진행한다.
우선, 아래 그림처럼, key, value head들을 mean pooling을 통해, 하나의 vector로 만든다. (단순 여러 개중 하나를 뽑는 당식이나, 처음부터 하나의 key, value를 하는 방식보다 좋은 성능을 가진다고 한다.)
mean pooling을 진행하는 구조를 추가한 뒤, 전체 모델 중, α 비율만큼을 기존 pre-training과 동일한 방법으로 update 한다.
[Grouped-query attention]
Grouped-query attention은 query head들을 G개의 group으로 나눈다.
각 group들을 하나의 key head와 value head를 공유한다.
일반화를 위해서 G개의 group으로 나눈 GQA를 GQA-G로 명명하는데, G=1일 때는 MQA와 동일하고, G=Head 수 일 때는 MHA와 동일하다.
multi-head attention 구조의 checkpoint를 GQA 방식으로 바꾸자 할 때는 group 내의 head들에 mean pooling 방식을 이용하여 Group 화하여 사용한다.
1~Head 개수 사이의 중간 값의 Group을 가지는 GQA는 MQA보다는 좋은 성능을 보이면서, MHA보다 빠르다.
이때, Group의 수를 적절히 설정하면, memory bandwidth를 넘지 않는 값을 선택할 수 있어, 속도도 MQA와 거의 비슷할 정도의 좋은 값을 가진다.
Experiments
[메인 실험]
multi-head 구조인 T5 Large, T5 XXL로 실험하였다. uptraining을 위한 checkpoint는 공개된 T5의 checkpoint들을 사용했다.
α 는 0.05를 사용했다. (parameter의 5%만 재 학습)
아래 그래프에서 볼 수 있듯, GQA를 사용한 모델은 MHA 방식에 비해 성능의 약간 하락이 있었지만, 속도가 매우 빠르고, 좋은 성능을 유지한다.
[Sub 실험]
multi-head 구조에서 group화 방식에 따른 성능 비교 : Mean pooling 방식이 group 내에서 첫 번째 head를 사용하거나, 초기화하여 재학습하는 방식보다 더 좋은 성능을 보인다.
α에 따른 성능 비교 : 전체의 5% 정도만 재학습해도 좋은 성능을 유지한다.
Group 개수에 따른 속도 비교 : group 수를 적게 하면 MQA 정도의 속도가 나온다(다만, 성능은 떨어질 것이다.)
Reference
Ainslie, Joshua, et al. "Gqa: Training generalized multi-query transformer models from multi-head checkpoints."arXiv preprint arXiv:2305.13245(2023).
최근 LLM을 이용해 instruction-following data를 생성하여 instruction 능력을 향상하는 연구들이 많이 이뤄지고 있다. 하지만, multimodal 분야에서는 아직 많이 연구되지 않았다.
이 논문에서는 언어만을 사용하는 GPT-4를 이용하여 multimodal language-image instruction-following 데이터를 만든다.
이를 이용한 instruction tuning을 통해, 이 논문에서는 LLaVa(Large Language and Vision Assistant)라는 vision encoder와 LLM을 연결한 end-to-end model을 소개한다.
초기 실험에서 LLaVa는 multimodal chat 능력에서 multimodal GPT-4에 대한 85.1%의 상대적 score를 보였다.
Science-QA로 finetuning 하였을 때, LLaVA와 GPT-4의 시너지는 새로운 SOTA인 92.53%의 정확도를 보였다.
Introduction
인간은 vision과 language 등 다양한 채널을 통해 세상을 인지한다.
LLM은 최근 다양한 분야에서 좋은 성능을 내고 있지만, text만을 다룬다.
이 논문에서는 "visual instruction-tuning"을 소개한다. 먼저, instruction-tuning을 multimodal space로 확장하여, vision 분야의 general-purpose를 위한 초석을 쌓는다.
논문의 Contribution은 다음과 같다.
Multimodal instruction-following data : 가장 큰 제약은 vision-language instruction-following data가 적다는 것이다. 논문에서는 data 생성 방법을 소개하고, ChatGPT나 GPT-4를 통해 image-text pair들을 적절한 instruction-following format으로 변환하는 파이프라인을 소개한다.
Large multimodal models : open-set visual encoder인 CLIP과 LLaMA를 연결하고, 앞서 만든 데이터를 통해, 이 둘을 end-to-end로 학습한다. 특히, GPT-4로 진행했을 때, Science QA multimodal reasoning dataset에 대해 SOTA 성능을 보였다.
Open_Source : Code와 model checkpoint 등을 모두 공개하였다.
GPT를 이용한 Visual Instruction Data 생성
multimodal instruction following 데이터는 부족한데, 최근 GPT model의 text-annotation task에서 성공에서 영감을 받아, ChatGPT/GPT-4를 이용한 multimodal instruction-following 데이터를 생성하는 방법을 제시한다.
Image와 그에 대한 Caption이 있는 데이터가 있을 때, 가장 간단한 방법은 GPT-4를 통해 Caption을 해석하고, 그에 대한 Question들을 가지고 질문하는 것이다.
→ 쉽게 생각하면, 아래와 같이 이미지 묘사를 넣고 퀴즈를 내는 것이다.
하지만, 이렇게 하면 만들어지는 데이터의 다양성이 떨어지고, 깊이 있는 추론을 포함하는 instruction과 response를 만들지 못한다. 이 현상을 완화하기 위해, GPT에 이미지를 묘사할 수 있는 2개 type의 데이터를 제공한 뒤 질문을 진행한다.
1. Image를 묘사하는 Caption 데이터
2. 이미지 내, 물체들에 대한 Bounding Box 데이터(각 box에는 해당 물체의 종류와 위치 정보를 담고 있다. 즉, GPT가 이미지를 input으로 사용하지는 못하지만, text 형태로 이미지 내 물체들의 위치 정보와 종류를 인식할 수 있는 것이다.)
COCO image를 이용하여 3개 타입의 instruction-following dataㄹ르 생성하였다. 데이터 생성 시에는 인간이 만든 prompt를 이용하여, 데이터를 얻었다. (총 158K)
Coversation : 인간과 GPT간 이미지에 대한 Q&A 대화를 생성했다. GPT가 이미지를 보고 있는 것처럼 질문을 했다. 질문에는 물체 종류, 물체 개수, 물체의 행동, 물체의 위치, 물체 사이의 상대적 위치 등이 포함된다. (58K)
Detailed Description : Image에 대한 자세한 설명을 요청하는 질문들을 만들어 요청하였다.(23K)
Complex Reasoning : 앞선 2개의 데이터들은 이미지 자체에 집중하지만, GPT에 깊은 추론을 요하는 질문들을 진행했다. (77K)
초기에는 ChatGPT와 GPT-4를 모두 활용했으나, GPT-4의 quality가 더 좋아서 GPT-4만 사용했다.
Visual Instruction Tuning
[구조]
Model의 주된 구조적 목표는 visual model과 pre-trained LLM을 효과적으로 결합하는 것이다.
LLM으로는 LLaMA를 사용하였다.
우선 이미지(Xv)를 CLIP visual encoder에 넣어서, Feature(Zv)를 뽑고, training 가능한 Linear Layer를 거쳐, Language model의 embedding space와 동일한 dimension의 language embedding token(Hv)를 만든다.
논문에서는 가볍고 간단한 구조를 생각해서 Linear layer를 사용했다고 하는데, 다른 여러 방식을 사용한 embedding은 future work로 남기겠다고 한다.
[학습]
각 이미지마다 T개의 turn이 있는 conversation data를 생성하였고(첫 번째 Question, 첫 번째 Answer, 두 번째 Question,... 이런 형식으로), 이들을 sequence형태로 연결하였다.
이때, 첫번째 turn의 경우에는 이미지 Feature를 (1) 질문 앞에 두는 경우, (2) 질문 뒤에 두는 경우를 random 하게 결정한다.
학습을 위해서는 기존 LLM의 방식처럼 이전 token들을 통해, 현재 token을 추정하는 방식의 학습을 진행한다. 따라서, 학습을 위한 Loss도 기존 LLM과 비슷하다. 수식에 보면, 현재 token 추정 시, 단순 과거 Q&A 데이터뿐만 아니라 이미지 Feature도 함께 사용한다는 것이 기존 LLLM과의 차이이다.
LLaVa model 학습에는 2가지 stage가 존재한다.
1. Pre-training for Feature Alignment
LLaVa의 구조에서 이미지를 word embedding으로 변환할 때, Linear Layer를 사용하는데, 해당 논문의 관심사가 multi-modal Language Model인 만큼, 이미지를 얼마나 잘 word embedding으로 변환하냐가 매우 중요하다.
이를 위해, CC3M 이미지-텍스트 데이터를 single turn conversation 형식으로 만들어, LLM과 visual encoder의 파라미터를 freeze 한 뒤, Linear layer만 학습을 진행했다.
아마, visual encoder와 LLM은 pre-trained model을 사용했지만, Linear layer는 별도의 학습된 weight를 사용한 게 아니어서 해당 stage가 있는 것으로 생각된다.
2. Fine-tuning End-to-End
visual encoder는 계속 freeze 시켜놓고, LLM과 Linear layer를 같이 학습한다.
학습에는 앞서 위에서 언급했던 3개 type의 데이터 (Conversation, Detailed Description, Complex Reasoning)와 저자들이 추가적으로 고안한 ScienceQA 데이터를 이용하였다. ScienceQA 데이터는 과학적 질문에 대한 multimodal 데이터 셋이다. ScienceQA는 single turn conversation 형식으로 사용했다.
Experiments
[multi modal chatbot]
LLaVa의 이미지 이해력과 conversation 능력을 보기 위해, Chatbot 데모를 고안했다. 우선, GPT-4 논문에 있는 Example들을 사용했다.
비교를 위해, prompt와 response는 multimodal GPT-4 논문에 존재하는 것을 사용하였고, 다른 모델과 결과도 해당 논문에서 인용했다. (multimodal GPT-4, BLIP-2, OpenFlamingo)
놀랍게도, LLaVA는 매우 적은 양의 multimodal 데이터로 학습했음에도 불구하고, 2개의 example에서 multimodal GPT-4와 거의 비슷한 수준의 reasoning 결과를 보임을 확인했다. 이때, 2개의 example들은 LLaVA의 학습에 사용된 이미지의 범위가 아님에도 (학습 시, 데이터를 외운 것이 아니다.) 장면을 이해하고, question에 대한 적절한 대답을 했다.
단순 example 비교 뿐 아니라, LLaVA의 성능을 측정하기 위해, GPT-4를 이용하여, ouput의 quality를 측정했다.
구체적으로 COCO validation에서 30개의 이미지를 무작위로 추출하여, 앞서 언급한 3개 종류의 question을 만들고, LLaVA가 이미지와 해당 question을 기반으로 answer를 내도록 했다. 그리고, question, ground-truth bounding box, captions을 이용하여 GPT-4에게 answer을 내도록 하여, reference를 생성했다. (즉, GPT-4 대비, LLaVA의 성능을 측정하겠다는 뜻)
그러고 나서, GPT-4를 이용하여 helpfulness, relevance, accuracy, detail 정도의 quality를 1~10까지 점수로 나타내게 했다. (점수가 높을수록 좋은 것)
가장 좋은 모델은 GPT-4의 85.1% 수준의 매우 좋은 성능을 보였다.
Reference
Liu, H., Li, C., Wu, Q., & Lee, Y. J. (2023). Visual instruction tuning.arXiv preprint arXiv:2304.08485.
총평
Open source로 모든 것을 공개했다는 점이 우선 제일 놀라웠다.
GPT-4를 이용해서 데이터를 만드는 방식에서 bounding box를 텍스트 형식으로 제공하는 부분에서 어떻게 이런 생각을 할 수 있지라는 생각이 들었다.
multimodal LLM을 Q&A에 적용하였는데, Open source로 소스가 제공된 만큼 objective function이라던지, 데이터의 방식에서 금방 새로운 아이디어가 적용되어, 더 다양한 부분에 사용될 수 있지 않을까 싶다.
GPT 이후의 NLP 분야의 거의 모든 논문이 그랬듯, Model Paramter를 더 크게 늘렸고, GPT-3의 흐름을 따라, task-specific 한 model이 아닌, 다양한 NLP 분야를 cover 하는 모델로 학습된다.
사실 GPT 등장 이후로 LLM 모델에서의 구조 변화는 크게 없다. Model parameter를 계속 늘리고, 이에따라 성능은 계속 좋아진다. 따라서, 기존 LLM과 달라진 부분에 집중하여 논문 리뷰를 시작한다.
Abstract
Language Model은 few-shot 방식을 사용하여, task-specific 학습에 필요한 데이터의 양을 줄이면서, 좋은 성능을 보여줬다.
few-shot에서 scaling의 효과를 확인하기 위해, 540 billions parameter로 구성된 Transformer 기반의 Pathways Language Model(PaLM)을 소개한다.
이 논문에서는 PaLM을 multiple TPU Pods 들을 효율적으로 학습할 수 있는 "Pathway" 방법을 이용하여 학습한다.
여러 language understanding과 generation 분야에서 SOTA를 달성하여, scaling의 장점을 보여준다.
특히, 몇가지 task들에서는 finetuned 방식의 SOTA를 능가하는 좋은 성능을 보여주고, BIC-bench에서 인간의 능력을 뛰어넘는다.
BIC-bench에서 model의 scale에 따라 performance가 discontinuous 한 향상을 보여준다.
또한, PaLM은 multilingual task와 code 생성에서 좋은 성능을 보인다.
Introduction
최근(이 당시) 몇년동안, 언어 이해와 생성 분야에서 large language model을 pre-training과 fine-tuning 방식으로 학습하는 방식으로 큰 성능 향상을 이뤘다.
하지만, 이러한 모델들은 finetuning 과정에서 상당한 양의 task-specific 데이터를 필요로 하고, task에 맞는 학습을 위한 cost가 든다.
GPT-3은 large autoregressive language model들로 few-shot을 진행하는 방식으로 학습하여, 많은 양의 task-specific 데이터와 model parameter updating 과정이 필요 없도록 하였다. (GPT-3 관련 내용은 아래 링크 참조)
그 후로, GPT-3 기반의 후속 모델(GLam, Gopher, Chinchilla, LaMDA 등)들이 등장해 좋은 성능을 보였다.
이러한 모델들의 성능 향상을 위한 주요 접근 방법은 다음과 같다.
model의 depth와 width를 늘린다. (model size를 늘림)
model의 학습을 위한 token의 양을 증가
다양한 dataset을 사용하거나, dataset을 정제
sparsely activated module등으로 학습 cost는 유지하면서 model capacity를 증가
이 논문에서도 위의 방식들을 따라, 780 billion token을 이용하여 540 billion parameter를 가진 Transformer 기반 model을 학습한다.
이를 위해, "Pathways"라는 수천개의 acclerator chip들 사이에 large network 학습을 효율적으로 해주는 방식을 도입한다.
이 논문에서 소개한 모델 PaLM은 natural language , code, mathematical reasoning 등의 task들에서 few-shot 방식의 SOTA를 달성했다.
Model Architecture
PaLM은 몇가지 변경을 제외하고. Transformer의 decoder-only 모델을 그대로 따른다.
기존 Transformer 모델들과 달라진 점은 다음과 같다.
SwiGLU Activation : SwiGLU는 Relu를 대체하기 위해, 구글이 개발한 Swish Activation 함수에 GLU(Gated Linea Unit)을 적용한 함수이다. 사용한 이유는 기존 연구들에서 성능이 좋아서라고 한다.
Parallel Layers : 병렬 처리를 해, 기존의 Transformer block의 식을 바꿨다. Large Scale에서 15% 정도 학습 속도가 빠르지만, 성능 하락은 모델이 커질수록 거의 없다고 한다.
기존 $$ y = x+ MLP(LayerNorm(x+Attention(LayerNorm(x)))) $$
변경 $$ y = x+ MLP(LayerNorm(x))+Attention(LayerNorm(x)) $$
Multi-Query Attention : query, key, value의 feature size가 [k, h]인 기존 transformer 구조와 달리, key와 value를 [1, h] 크기로 사용한다. (query는 [k, h]) 이것이 model 성능에 영향을 미치지 않으면서, 학습 시간 cost 절감에 큰 역할을 한다.
RoPE Embedding : position embedding에 long-sequence 처리에 유리한 RoPE Embedding을 사용하였다.
Shared Input-Output Embeddings
No Biases : Bias를 사용하지 않았다. 이것이 large model 안정성을 높여준다고 한다.
Vocabulary : SentencePiece(256k token)을 사용했다.
Model Scale Hyperparameters
3개의 모델(8B, 62B, 540B)을 사용했다.
Training Dataset
PaLM의 pretraining dataset으로는 high-quality의 780 billion의 token이 사용되었다.
dataset은 webpage, books, Wikipedia, news articles, source code, social media conversation등 다양한 소스에서 가져왔다.
특히, Github에서 Source code를 가져왔는데, Java, HTML, JavaScript, Python, PHP, C# 등등의 196GB의 소스 코드를 포함한다. 또한, Source code 수집 시, 중복을 제거하여 다양한 코드 등을 수집했다.
Training Infrastructure
사실 PaLM이 주목받는 이유가 Pathways를 사용하는 해당 Chapter 때문인것 같다. 아마도, Pathways를 논문으로 굳이 읽는 이유는 점점 늘어나는 LLM의 학습을 위해 엔지니어링의 최강자인 Google은 어떤 방법을 사용했을까? 때문일 것이다.
우선, PaLM의 codebase는 JAX와 T5X이고 TPU v4 Pods를 통해 학습되었다. PaLM 540B는 data center network(DCN)로 연결된 2개의 TPU v4 Pods를 통해 model parallelism과 data parallelism을 사용해서 학습되었다.
각 TPU Pods들은 3072개의 TPU v4 chip들로 구성되어 있고, 768 hosts에 연결되어 있다. (즉, 총 6148개의 chip과 1536개의 host가 존재한다.)
이 논문에서는 pipeline parallelism(layer 등의 단위의 parallelism을 사용)을 사용하지 않은 것을 큰 장점으로 여기는데, pipeline parallelism에는 몇 가지 문제가 있기 때문이다.
pipeline 구조에서는 pipeline이 비어서 쉬게되는 devices들이 생긴다.
각 micro-batch의 weight를 불러오기 위해, 높은 memory bandwidth를 요구한다.
일부 케이스에서는 software complexity가 늘기도 한다.
이 논문에서는 pipeline 없이 PaLM 540B를 6144개의 TPU chip을 사용하여 학습했다는 것을 강조한다.
각 TPU v4 Pod은 model parameter들을 full copy 한다. (3072개 chip에 12개 방법의 model parallelism과 256개의 data parallism을 사용한다. 2가지 parallelism을 동시에 사용하는 것을 2D parallelism이라고 한다.)
[학습 방법]
forward pass에서는 data parallel axis로 weight를 모으고, 각 layer로부터 하나의 fully sharded activation이 저장된다.
backward pass 때, forward pass에 사용되었던, activation을 재사용하는 것이 아니라, activation을 다시 계산해서, 재생성하여 사용한다. 이것은 더 큰 배치에서 학습 처리량을 높이도록 해준다.
[Pathways]
PaLM은 이름대로, TPU v4 Pod들에 Pathways system을 사용한다. PaLM은 Pathways의 client-server 구조를 사용하여 pod level에서의 2가지 방법의 data parallelism을 구현한다.
Python client가 training batch의 절반씩을 각 pod으로 보내고, 각 pod은 forward와 backward computation을 data, model parallelism을 이용해 계산한다.
Pod들은 gadient를 다른 pod에 보내고, 각 pod은 local(자신이 만든 것)과 remtoe(다른 pod으로부터 받은 것) gradient를 모아서, parameter update에 사용한다.
이런 구조는 single Pod을 이용한 학습보다 정확히 2배의 throughput 증가는 일어나지 않고, 약 1.95배 정도의 throughput 증가를 이끄는데, 이것은 network적 이슈와 관련있다. 따라서, network 설계를 열심히 했다고 한다.
Training Efficiency
이전의 많은 language model에서는 accelerator efficiency를 hadware FLOPs utilization(HFU)를 통해 진행하였다. 이것은 이론적 peak FLOP 개수로 관찰되는 FLOP 개수를 나눈 것이다.
하지만, 이 지표는 약간의 문제가 있다.
hardware FLOP의 갯수는 system-depedent와 implementation-dependent, compiler의 design chice에 따라 달라진다.
관찰되는 FLOP 갯수는 count와 track에 사용되는 방법론에 따라 달라진다. 이것은 hardware performance를 통해 측정되는 것이 아닌, analytical accounting을 사용하기 때문이다.
이러한 문제가 있어서, LLM training efficiency를 측정하기에 HFU는 충분치 않다.
이 논문에서는 implementation indepenet 하고 system efficiency에 따라 정확한 비교를 가능하게 해주는 model FLOPs Utilization(MFU)를 제시한다.
MFU는 observed throughput(tokens-per-seconds)를 이론상 최대 system operating peak FLOP으로 나눈 값이다.
특히, 이론상 최대 throughput은 forward와 backward pass를 계산하면 된다.
여하튼, 본인들이 만든 지표로 비교해보았을때, PaLM이 가장 효율적인 연산을 하고 있다고 한다.
Evaluation
역시, parameter를 많이 사용해서, 기존 few-shot 기반의 SOTA들을 모두 갱신하였다.
심지어 SuperGLUE등에서는 fine-tuning 기법들과 맞먹을 정도로 좋은 성능을 보여준다.
Reasoning : GSM8K에서 8-shot evaluation을 진행했을 때, 기존 SOTA인 GPT-3을 이긴다.
Few-shot의 장점인 다양한 분야에 적용성에서, 놀랄만한 부분은 Code를 고치는 것이나 Translation에서도 좋은 성능을 보인다는 것이다.
Conclusion
이 논문에서는 few-shot LM 방향으로의 연장선인 540B parameter로 구성된 PaLM을 소개한다.
PaLM은 NLP 29개 분야 중 28개에서 few-shot SOTA를 기록했다. 또한, BIG-bench에서 5-shot LaLM은 인간의 평균 performance보다 높은 성능을 보였다. source code 이해나 생성에서도 좋은 성능을 보였다.
reasoning에서 chain-of-though prompting을 사용했을 때, 좋은 모습을 보였다.
이에 따른 결론은 다음과 같다.
few-shot NLP에서 scale에 따른 성능 향상은 아직 끝나지 않았다. (log-linear하게 증가했다.) 이 성능 향상은 사실은 discontinuous 하다.
reasoning task들에서 보인 성과들은 중요한 의미를 갖는다. 이것은 model의 결정 과정에서 어떤 과정을 이용하여 최종 결과가 나왔는지를 end user에게 설명할 수 있게 할 것이다. 아직 멀었지만, 잘 만든 prompt가 이것을 가속화할 것이라고 한다.
network architecture와 training schema에 많은 여지를 남겼다. Pathways를 시작으로 많은 구조들이 생겨날 수 있을 것이다.
Reference
Chowdhery, Aakanksha, et al. "Palm: Scaling language modeling with pathways."arXiv preprint arXiv:2204.02311(2022).
총평
읽은 논문 중, 비교적 최근 논문인데, 이쯤때부터, 모델 크기가 커질수록 성능은 무조건 커진다는 가정하에, 어떻게 빠르고 효율적으로 학습할 것인가 하는 문제에 봉착한 것 같다.
GPT-3은 요즘 많이 사용하는 ChatGPT의 근간이 된 논문으로, 2020년 OpenAI에서 NIPS에 발표한 논문이다.
Language Model의 parameter가 꾸준히 늘어가는 추세였는데, GPT-3에서는 기존의 가장 큰 모델보다 거의 10배 정도의 많은 parameter를 넣을 정도로 큰 모델을 사용하였다.
Model scaling-up을 통해 few-shot에서도 Task-Specific 한 기존의 finetuning 모델들의 성능에 필적하는 성능을 보여주었다. (이 시도가 현재 ChatGPT를 만든 것 같다.)
Abstract
최근 NLP task에서 large corpus의 pre-training을 기반으로한 언어모델들이 큰 효과를 내고 있다.
하지만, 대부분의 모델은 task-agnostic의 재학습이 필요하고, 이 과정에서 task에 맞는 수많은 학습 데이터들이 필요하다.
이 논문에서는 언어모델의 사이즈를 키워서, 현재 task-agnostic SOTA 모델들의 성능에 필적할수 있을 정도로 few-shot 모델 성능을 향상했다.
특히, 175 billion parameter로 구성된 GPT-3을 few-shot으로 학습하였는데, 다양한 NLP 분야에서 좋은 성능을 보였다.
추가적으로 GPT-3은 인간이 작성한 기사와 구분하기 어려운 뉴스 샘플등을 생성할 수 있다는 사실을 발견하였고, 이 발견과 사회적 영향에 대해 논의한다.
Introduction
[문제]
최근 NLP 분야에서의 pre-trained language model의 트렌드는 다양하고 많은 분야에서 큰 향상을 일으켰지만, 이러한 모델들은 task-agnostic 한 방식을 채택하고 있어, 원하는 task에 대한 수많은 데이터셋과 fine-tuning 과정을 필요로 한다.
이러한 방식은 아래의 문제가 있다.
실용적 관점에서 모든 새로운 task에 대해서 labeling 된 데이터가 필요하여, 언어모델의 확장성을 제한한다. 각 task 학습을 위한 dataset이 필요한데, 그것을 모으는 것은 매우 어렵고, task를 확장할 때마다 반복해야 한다.
큰 모델에서 좁은 분포의 데이터를 학습시키면, 잘못된 상관관계를 학습할 수 있다. pre-training 단계와 fine-tuning 단계를 사용한 모델들에서 이런 문제가 있는데, 이러한 모델들은 일반화가 잘 안 되는 문제가 있다.
인간은 새로운 lagnuage task를 배우기 위해, 많은 데이터를 필요로 하지 않는다는 점이다. 인간의 언어능력에는 일반화와 적용을 자주 활용하는데, NLP 모델도 이러한 인간의 언어 능력과 동일한 수준이 되어야 한다. (task-agnostic은 그렇지 않다는 뜻인 듯하다.)
이러한 문제를 풀기 위해, meta-learning을 활용한 방법들이 있다. 몇 가지 방법들이 등장했지만(특히, GPT-2), fine-tuning 방법에 비해 성능이 매우 떨어진다.
한편, Language modeling의 최근 트렌드는 model의 capacity를 키우는 것이다. 이러한 트렌드에서 model의 parameter를 키울수록 언어모델의 성능이 향상되는 경향이 있음을 볼 수 있다. (이전까지 17 billion paramter까지 등장)
[모델 소개]
이 논문에서는, 175 billion의 parameter를 사용하는 "GPT-3"이라는 language model을 실험하여, model의 parameter가 커질수록 성능이 향상됨을 확인한다.
또한, GPT-3을 각각 few-shot learning, one-shot learning, zero-shot learning을 통해 학습하고, 비교해 본다.
[실험 결과]
Few-shot에서 단어에서 관계없는 symbol을 지우는 간단한 task를 수행해 보았을 때, task에 대한 설명이 많을수록(zero에서 few shot으로 갈수록), 성능이 향상되었고, model의 parameter가 많을수록 성능이 급격하게 향상되는 것을 보인다.
GPT-3이 약한 분야도 있는데, inference task나 reading comprehension과 같은 분야이다.
GPT-3 Approach
model, data, training을 포함한 pre-training 과정은 model의 크기, dataset의 다양성, 길이, 크기가 커졌다는 것을 빼고는 GPT-2의 방법과 비슷하다.
in-context learning도 GPT-2 논문의 방법과 비슷하지만, context 내에서 구조적으로 조금 다른 몇 가지 setting을 시도해 볼 수 있다. task-specific 데이터를 얼마나 활용하냐에 따라, 4가지 setting으로 분류한다.
Fine-Tuning (FT) : 최근에 가장 일반적인 방법이다. 원하는 task에 맞는 데이터셋을 통해 학습한다. 이 과정에서 수많은 데이터가 필요하다. FT의 장점은 성능이 매우 좋다는 점이다. 가장 큰 단점은 각 task를 학습할 때마다, 수많은 데이터가 필요하다는 점이다. GPT-3도 FT로 학습할 수 있지만, 논문의 목적은 성능이 아니기 때문에, 별도로 학습하지는 않았다.
Few-Shot (FS) : inference 과정에서 conditioning으로 이용할 수 있는 약간의 task에 대한 설명이 주어지지만, 직접 학습에 활용하지는 않는다. FS는 task에 대한 설명과 함께 task에 대한 K개의 example들이 제공된다. (K를 model의 context window라고 하고, 대략 10~100의 값을 갖는다.) FS의 장점은 task-specific 한 데이터를 많이 줄일 수 있다는 것이고, narrow distribution에서 학습할 수 있는 잘못된 상관관계에 대한 가능성이 줄어든다는 것이다. 단점은 FT 방식의 SOTA에 비해 성능이 떨어진다는 점이다. 또한, task specific한 데이터가 여전히 필요하다는 점이 문제이다.
One-Shot (1S) : task에 대한 example이 하나만 주어진다는 것이 Few-shot과 다른 점이다. 굳이 one-shot을 few-shot과 나누는 이유는 one-shot이 인간의 커뮤니케이션과 비슷하기 때문이다.
Zero-Shot (0S) : 어떤 task인지에 대한 설명만 있고, 아무 example이 주어지지 않는다. 이 방법은 편의성과 확장성, 잘못된 상관관계를 피할 수 있는 점등에서 매우 좋지만, 학습이 매우 어렵다.
[Model]
Sparse Transformer 논문의 sparse attention을 사용한 것 외에는 GPT-2와 같은 모델과 아키텍처를 사용하였다.
model size와 성능 간의 상관관계 확인은 ㄹ위해, 8가지 다른 size의 모델을 사용했다. (125 millions ~ 175 billions)
이 중, 제일 큰 모델을 GPT-3이라고 한다.
GPT-3 8개의 다른 parameter size 모델
[Training Dataset]
데이터가 풍부한 Common Crawl Dataset을 사용하였지만, 필터링되지 않은 데이터가 많이 섞여있어서, 데이터셋의 품질을 향상하기 위한 3가지 방법을 추가하였다.
Common Crawl Dataset에서 high-quality reference corpora와 비슷한 데이터들을 다운로드하였다.
문서 수준에서 퍼지 일치 기반 중복 제거를 활용하여, overfitting 등을 방지하였다.
단순히 양에 따라서 가중치를 둔 것이 아닌, 데이터셋에 품질이 높을수록 높은 가중치를 두었다. (아래 weight in training mix에 해당)
GPT-3에서 활용한 데이터셋
[Training Process]
large model일수록 큰 batch size를 사용하지만, 적은 learning rate를 필요로 한다.
학습과정에서 gradient noise scale을 측정하여, batch size 선택에 사용하였다.
Out of memory를 막기 위해, model parallelism을 사용했다.
Results
size가 각기 다른 8개의 GPT-3 모델의 learning curve를 비교하였는데, size가 큰 모델일수록 언어모델의 성능이 향상됨을 보인다.
이 과정에서, traigning compute와 performance는 power-law를 따른다고 알려졌는데, 모델 size가 일정 수준 이상에서는 power-law의 기댓값보다 더 좋은 성능을 보였다.
이것이 training dataset을 cross-entropy를 통해 학습해서(외워버려서) 그런 것 아닐까 하는 의심이 들 수도 있지, cross-entropy가 다양한 NLP 분야의 task에서 일관적으로 성능 향상을 보임을 보인다.
1. Language Modeling
Penn Tree Bank(PTB) dataset에서 zero-shot perplexity를 계산하였다.
training dataset에 포함된 Wikipedia와 관련된 4가지 task들은 제외했다.
새로운 SOTA가 되었다.
[LAMBADA]
LAMBADA dataset은 text 내에서 long-range dependency를 테스트한다. (context를 읽고, sentence의 마지막 word를 추정하는 문제)
Zero-Shot 환경에서 기존 SOTA보다 8%가량 좋은 성능을 보였다.
[HellaSwag]
HellaSwag dataset은 story와 몇 가지 instruction이 주어지면, 가장 best의 ending을 뽑는 문제이다.
StoryCloze dataset은 story에 따른 가장 그럴듯한 ending sentence를 뽑는 문제이다.
둘 다, SOTA보다는 떨어지지만, 좋은 성능을 얻었다.
2. Closed Book Question Answering
Closed Book Question Answering은 다양한 지식에 대한 context가 없는 답변을 생성하는 Task이다.
Model Size가 커졌을 때(GPT-3)에서 SOTA를 넘어서는 결과를 보여주었다. (아마도, task 자체가 광범위함을 포함하고 있어서, task-specific 학습이 크게 힘을 발휘 못하는 것 같다.)
3. Translation
Translation의 학습에서는 93% 텍스트가 영어였고, 7% 만 다른 언어들을 포함하였고, 별도의 목적함수를 사용하지 않았다. (그냥 언어 구분 없이 똑같이 학습하였다.)
Zero-Shot 환경에서는 기존 Zero-Shot들보다 오히려 성능이 낮지만, Few-Shot 환경에서는 특정 task에 한해서는 Supervised SOTA를 넘기도 하였다.
4. Winograd-Style Task
해당 Task는 대명사가 지칭하는 것을 맞추는 문제로, 추론 능력을 확인할 수 있다.
SOTA에 비해서는 낮지만, RoBERTa에 근접할 정도로 좋은 성능을 보인다.
5. Common Sense Reasoning
특정 데이터셋에서는 SOTA를 보였지만, 다른 데이터셋에서는 낮은 성능을 보여주었다.
전체적으로 OpenBookQA를 제외한 데이터셋에서는 Task 설명이 큰 효과를 보지 못했다.
6. Reading Comprehesion
GPT-3이 약한 분야이다. CoQA를 제외하고는 SOTA와 매우 큰 성능 차이가 난다.
7. Super GLUE
BERT와의 비교를 위해 SuperGLUE를 Test 한다.
SOTA에는 못 미치지만, 대부분의 task에서 BERT와 필적하거나, 오히려 더 높은 성능을 보여주기도 한다.
이외, 많은 Task들이 있지만, 대체적으로 비슷한 경향을 보여줘서, Result는 여기까지만 넣도록 하겠다.(힘들다.)
다만, 숫자 연산이나 뉴스 기사 생성, 문법 교정 등 다양한 분야에서 좋은 성능을 보여준다.
Memorization에 대한 검증
GPT-3의 학습 데이터가 매우 방대하고, Web Crawling을 통해 만들어졌기 때문에, Training dataset에 원하는 Benchmark의 데이터가 포함되어 있을 가능성이 있다. (Data Contamination이라고 표현한다.) 즉, memorization으로 위의 좋은 performance를 낼 수 있다는 것이다.
Training Curve를 보았을 때, 학습에 따라 Validation Loss와 Train Loss가 비슷한 추세로 줄어드는 것을 볼 수 있는데, 이것은 memorization이 없다는 증거가 된다. (특정 task를 외웠으면, train loss만 급격히 줄어드는 구간이 있을 것이기 때문에)
이것 말고도, memorization을 증명하기 위해, 데이터셋을 clean 하는 실험이 있는데, 실험 내용이 사실 이해가 잘 안 간다. 여하튼 Data를 Clean해도 성능에 딱히 영향이 없기 때문에, memorization은 아니라는 뜻이다.
Limitations
GPT-3는 좋은 성능을 보여주었지만, 몇 가지 한계가 있다.
성능적 한계 : 몇가지 NLP task에 대해서는 좋지 않은 성능을 보여준다.
구조 & 알고리즘의 한계 : GPT-3은 bidirectional 구조나 denoising 같은 NLP 분야의 성능을 향상하는 방법들은 고려하지 않았다.
본질적 한계 : 본 논문은 LM을 scaling up 하는 것에 집중하였는데, pretraing objective에 근본적 한계가 있다. 현재 obejective는 모든 token을 동일한 가중치를 준다. 즉, 중요한 token을 예측하는 것이 NLP 성능 향상에 더 중요하지만, 모두 동일하게 학습한다. 단순 Scaling을 떠나서(한계가 있기 때문에), NLP의 목적을 위한 objective 등을 학습해야 할 것이다.
pre-training 과정에서 비효율성 : GPT-3은 인간에 비해 너무 많은 텍스트를 학습한다. 학습과정에서 효율성을 향상해야 한다.
Few-Shot learning의 불확실성 : 실제로 GPT-3이 Few-Shot Learning을 통해 학습한 것인지 모호하다.
Expensive Cost : GPT-3의 parameter가 매우 많기 때문에 training & inference cost가 매우 크다.
설명 불가능 : 모든 Deep Learning이 겪는 문제처럼 GPT-3도 결과에 대한 해석이 불가능하다. Training data에 대한 bias가 발생할 수 있다.
Reference
Brown, Tom, et al. "Language models are few-shot learners."Advances in neural information processing systems33 (2020): 1877-1901.
총평
논문이 매우 길고, 저자도 실험도 매우 많다. 그래서 그런지 읽기 매우 힘들었다. (내 착각인지 모르겠지만, GPT-2와 다르게 논문이 약간 문과틱 감성이 난다.)
실험이 매우 많고, 한계와 사회적 파급력 등에 대해서 매우 자세하고 광범위하게 다뤄서, 정말 좋은 논문이다.
다만, Parameter가 매우 크고, Task example이 정교하게 만들어진 것 같아, 재현을 하기는 어려울 것 같다.
자연어 모델에서는 BERT 이후로 Masked Language Modeling을 많이 사용한다.
Masked Language Modeling에서는 model parameter θ를 학습하기 위해, 다음의 objective를 사용한다.
DeBERTa
[disentangled attention]
disentangled attention 식을 만들기 위해, 몇 가지를 설명한다. 논문 내에는 따로 구분 짓지 않았지만, 설명 편의를 위해 임의로 3가지 part로 나눴다.
1. Vector 구성 요소
문장 내 i번째 token은 다음과 같은 두 개의 vector로 구성된다.
i번째 contents vector: \(H_i\)
i번째 token에서 j번째 token과의 상대적 position : \(P_{i|j}\)
i번째 token과 j번째 token 간의 attention score는 다음과 같이 계산된다.
→ 위의 수식은 4개의 component로 분리되는데, 왼쪽부터 각각, "content-to-content", "content-to-position", "position-to-content", "position-to-position"이다.
이 논문이 지적하고 있는 것은 과거 논문들에서는 attention의 4가지 component 중, "content-to-content"와 "content-to_position"만 사용하고 있다는 것이다. (content vecotor에 position을 더해서 만들었기에)
특히, 문장 내에서 두 단어 간의 상관관계를 고려할때, 단순 contents만 보는 것이 아니라, 두 단어간의 상대적 위치도 매우 중요하기 때문에 "position-to-contents"와 "contents-to-position"을 모두 봐야 한다.
수식 내용 중, position vector가 상대적 위치를 기반으로 만들어졌기 때문에, "position-to-position"은 추가적인 정보를 주지 못하므로, 수식에서 삭제한다.
2. Self-attention operation
self-attention은 아래와 같은 수식을 통해 구해진다. Output hidden vector인 \(H_o\)를 구하기 위해, Query(Q)와 Key(K)를 통해 Attention(A)을 구하고, Attention을 Normalize 한 후 Value(V)에 곱한다.
3. 상대적 위치
이 논문에서는 상대적 위치를 아래와 같이 계산한다.
→ k는 maximum relative distance. 위의 거리 식을 생각해 보면, 현재 token의 앞쪽에 위치한 token은 distance가 0으로 주의 깊게 보겠다, 뒤쪽에 위치한 token 중, k 이내는 가까울수록 고려 많이 하겠다, 그 외에는 조금만 고려하겠다는 뜻으로 이해된다.
위의 1,2,3번을 종합하면, disentangled attention은 1.attention은 3개 component로 구성되었고, 2. self-attention 기반, 3. 상대적 거리를 고려하는 attention이다.
최종적으로 output hidden vector는 아래와 같이 구해진다.
→ 주의해야 할 점은, "position-to-content"에 \(\delta(j, i)\)가 사용되었다는 점인데, 이것은 "position-to-content"를 구할 때, 사용되는 content가 j번째 content이기 때문이다.
[enhanced mask decoder]
disentangled attention에서 relative position은 고려되었지만, absolute position은 실제 mask-prediction에 중요함에도 불구하고, 고려되지 않았다.
특히, 뉘앙스 같은 것은 absolute position 정보가 중요하다.
DeBERTa에서는 모든 Transformation layer들의 직후, softmax layer 전단에 absoulte position 정보를 넣어주었다.
이를 통해, Transformer가 elative position을 우선 고려하되, absolute position 정보도 보완 정보로 사용할 수 있게 하였다.
이러한 모델을 Enhanced Mask Decoder(EMD)라고 부른다.
BERT 방식(input 정보에 absolute position 정보를 넣는 것)에 비해 성능이 좋다.
Scale Invariant fine-tuning
Layer Noramlization 기법에 영감을 받아, SIFT 알고리즘을 사용하였다.
SIFT는 word embedding vector를 확률 vector로 normalization 하고, normalize 된 word embedding에 preturbation을 적용한다.
이로 인해, fine-tuend model의 성능이 상당히 향상되었다.
Experiment
Large model : GLUE에서 다른 large model에 비해 좋은 성능을 보였다.
Base model : Base 모델에서도 좋은 성능을 보였다.
ETC
사용한 데이터 셋
model 학습을 위한 paramter
RoBERTa와 attention visualization 비교
→ RoBERTa는 diagonal line이 두드러지지만, DeBERTa는 그렇지 않다. 이것은 EMD의 영향인 것으로 확인된다.(DeBERTa가 다른 단어를 골고루 본다는 뜻인 것 같다.)
→ RoBERTa는 vertical line이 2줄 존재하는데, 하나는 special token(CLS)등 때문이고, 하나는 high frequency token(예시: a, the) 때문이다. DeBERTa는 special token 영역의 1줄만 존재한다.(특정 단어에 무조건 의존하는 현상이 적다는 것을 말하는 것 같다.)
Reference
He, Pengcheng, et al. "Deberta: Decoding-enhanced bert with disentangled attention."arXiv preprint arXiv:2006.03654(2020).
총평
실험이 정말 많아서, 많은 생각을 할 수 있게 만든 논문이다.
BERT 관련 논문들을 계속 읽어오고 있는데, 모델 단의 개선 아이디어는 처음인 것 같아서, 재밌었다.
RoBERTa는 워싱턴 대학과 Facebook에서 2019년에 나온 BERT에 대한 연구 & 개선 논문이다.
BERT의 등장으로 언어 모델의 뼈대가 통일(?)된 상황에서, 그것을 개선할 방법을 제안하였다.
BERT 같은 대용량 언어 모델은 학습과 재현이 힘들 것으로 알았는데, 역시 facebook이어서 가능한가 싶다.
pretrained model을 사용할때, orginal BERT보다는 RoBERT를 많이 사용하는 것 같다.
Abstract
언어모델을 Pretraining 방식으로 학습하는 방법이 큰 성능 향상을 이끌었다.
Training은 매우 계산 cost가 많이 들고, 모델마다 각기 다른 사이즈의 다른 데이터셋을 통해서 수행된다.
모델의 성능에서 Hyperparameter의 선택은 결과에 중요한 영향을 미친다.
이 논문에서는 주요 hyperparameter들과 training 데이터 사이즈를 달리하면서 BERT의 pretraining의 과정을 살펴본다.
또한, 기존 BERT가 학습이 덜되었다는 것을 밝히고, 이것을 개선해서 BERT가 이후의 언어모델에 필적하거나 그보다 높은 성능을 보이도록 하였다.
Introduction
self-training 방법을 사용한 다양한 언어모델들이 나와서 성능 향상을 이끌었지만, 각 언어모델의 어느 측면이 성능 향상에 영향을 미치는지 밝히는 것은 어렵다.
Training에 계산 cost가 크고, 각기 다른 크기의 다른 종류의 학습 데이터가 사용되기 때문에, 모델링 향상을 위한 각 방법들이 어떤 영향을 미치는지 알기 어렵다,
이 논문에서는 hyperparameter tuning과 training set size의 영향을 파악하고, BERT의 학습이 덜 되었다(개선할 여지가 있다는 것)을 밝힌다.
또한, RoBERTa라는 BERT 성능을 향상할 수 있는 학습 방법들을 제안하여, 기존 BERT를 뛰어넘는 성능을 기록했다.
RoBERTa의 개선은 다음과 같다.
학습에 더 길고, 큰 batch를 이용
다음 문장 예측 objective를 삭제
긴 문장으로 학습
training data의 masking pattern을 계속 바꿔줌
추가적으로 RoBERTa는 "CC-NEWS"라는 새로운 대용량 데이터셋으로 학습되었다.
Background
BERT 기반이다보니, BERT에 대한 Background를 설명한다. BERT 설명은 아래 글을 참조
2023.05.16 - [NLP 논문] - BERT(Pre-training of Deep Bidirectional Transformers for Language Understanding) 논문 리뷰
Experimental Setup
[Implementation]
우선, 이 논문은 original BERT를 재현하기 위해 일부 조건을 제외하고는 기존 BERT 논문에 나온 setup을 따랐다.
[Data]
BERT 방식의 pretraining은 대용량 텍스트 데이터에 의존한다.
이전 연구에서 data size가 performance 향상을 일으킬 수 있다고 하여, 많은 연구들이 BERT에 더 많고 다양한 데이터들을 이용해 봤지만, 모든 연구가 학습 모델을 공개하지는 않았다.
이 논문에서는 크기와 domain이 다양한 5가지의 영어 데이터셋(총합 160GB)을 이용하였다.
[Evaluation]
과거 연구들을 따라서, 3개의 benchmark(GLUE, SQuAD, RACE)들을 이용하여 성능을 평가했다.
Training Procedure Analysis
BERT의 pretraining 과정의 각 과정을 연구해본다. 비교를 위해, 모델 아키텍처는 고정하였다.(BERT Base 버전)
[Masking 방식 비교]
BERT의 학습 과정에는 token에 mask를 random하게 넣어, 이를 예측하는 과정이 있다. 이 과정에서 mask의 위치는 미리 후보지가 정해져 있고, 이 중 한 token에만 고정적으로 넣는다. 이를 이 논문에서는 "single static mask"라고 한다. 이러한 방식은 masking 될 위치가 고정되어 있기 때문에, 학습 epoch이 늘수록 중복되는 학습이 많아진다.
이 논문에서는 dynamic masking이라는 방법을 제안하고 "single static mask"와 비교한다. dynamic masking은 model에 sentence를 전달하는 과정에서 masking pattern을 만든다.
결과 : dynamic masking이 기존 방법인 static 방법보다 약간의 성능 향상을 가져온다. 이후 연구에서는 dynamic 방식을 사용한다.
[Model Input Format & 다음 문장 예측]
BERT 학습 과정 중에, 문장 묶음(Segment) 다음에, 실제 연결되는 문장과 아닌 문장을 넣고, 연결성에 대한 Ture/False를 학습하는 내용이 있다. (auxiliary Next Sentence Prediction Loss, 약칭 NSP Loss)
과거 연구들에서 NSP Loss를 지우면, 성능에 큰 악화가 생긴다고 증명했지만, 최근(당시) 연구에서는 NSP Loss의 필요성에 대해서 의문을 제기한다.
이 모순을 해결하기 위해 다양한 Input Format을 사용해보고, 이를 비교해 본다.
Sentence-pair NSP : 각 input이 한 쌍의 natural sentence를 포함한다. 이 두 문장은 같은 documentation에서 왔을 수도 있고, 각기 다른 문서에서 왔을 수도 있다. NSP Loss를 유지한다.
Full-Sentences : 각 input은 여러 문서에서 sampling 된 전체 문장을 포함한다. input은 문서 간의 경계를 넘을 수 있다. (한 문서의 sentences 뒤에 다른 문서의 sentences가 연결될 수 있다.) 다른 NSP Loss가 없다.
DOC-Sentences : Full-Sentences 방법과 비슷하지만, 다른 문서와 연결되는 부분은 없다.(한 문서에서만 샘플링) NSP Loss가 없다.
결과
우선 기존 방법인 Segment -pair와 Sentence-pair를 비교해 보았다. 둘 다 NSP Loss를 사용하지만, 후자의 성능이 더 낮았다. 즉, sentences 단위의 학습은 downstream 학습에서 성능 악화를 이끌 수 있다. 이것은 long-range의 dependency들을 학습할 수 없기 때문으로 보인다.
다음은 DOC-Sentences와 기존 BERT 성능을 비교해 본다. 이때, 전자의 성능이 미세하게 높다. 이는 NSP Loss를 제거하면 downstream 학습에서 기존과 비슷하거나, 약간 높은 성능을 보여준다.
마지막으로, 여러 문서가 포함될 수 있는 FULL-Sentences와 한 문서의 내용만 포함된 DOC-Sentences의 비교이다. 후자가 조금 더 높은 것을 봐서, 한 문서에서 문장을 추출하는 게 좋을 수 있다. 하지만, DOC-Sentences들은 데이터 사이즈가 다양해서(문서 당 문장의 길이와 개수가 다르므로) 논문의 이후 연구에서는 FULL-Sentences 방법을 사용한다.
[Large Batch]
과거 연구에서는 큰 batch들을 이용하는 게 optimization 속도와 성능을 향상한다고 알려졌다.
최근(당시) 연구에서 BERT에서 Large Batch를 사용할 수 있다는 것을 보여주었다.
Batch size를 다양하게 실험해 봤다.
결과 : BERT도 Batch size가 크면 성능이 좋았다. 하지만, 너무 커지면, 오히려 떨어진다.
[Text Encoding]
기존 연구들에서 Byte 단위의 BPE를 이용해서, Unknown token을 줄이는 좋은 방법을 사용했다.
기존 BERT에서는 character-level의 BPE 어휘(30K)를 사용했지만, 이 논문에서는 byte-level의 BPE 어휘(50K)를 사용한다.
앞선 연구들에서 두 encoding 방법이 약간의 차이만 있다고 하지만, 다양한 어휘 처리를 위해 byte-level을 따른다.
RoBERTa
앞선 section에서 BERT의 pretraining의 다양한 부분을 비교 & 연구해 보았다. 이 연구들을 종합해서 RoBERTa라는 방식을 제안한다.
RoBERTa는 1) dynamic masking을 사용하고, 2) NSP Loss를 제거한 Full-sentences를 사용하고, 3) Large mini-batches를 사용한다. 또한, 4) byte-level의 BPE을 사용한다.
추가적으로 이전 연구들에서 중요하다고 인지하지 못했던 1) pretrainind 과정에서 사용되는 데이터, 2) training pass의 개수에 대해 탐구해 봤다.
결과
앞서 분석한 요소를 다 넣은 RoBERTa가 기존에 비해 성능이 좋다. (BERT_large VS RoBERTa)
추가 데이터셋을 넣었을 때, 성능이 더 좋아진다. (additional data)
pretraining 과정이 길수록 성능이 향상된다. (pretrain longer, pretrain even longer)
Reference
RoBERTa: A Robustly Optimized BERT Pretraining Approach, Yinhan Liu and Myle Ott and Naman Goyal and Jingfei Du and Mandar Joshi and Danqi Chen and Omer Levy and Mike Lewis and Luke Zettlemoyer and Veselin Stoyanov (arxiv:1907.11692.)
총평
BERT 등장 이래로, 참신한 모델링을 짜는 것보다 데이터 엔지니어링을 어떻게 할 것인지가 중요해진 흐름을 반영한 논문인 것 같다.
개인적으로 이렇게 다양한 실험을 할 수 있는 환경이 부럽기도 하고, BERT를 재현하고 실험한 저자들이 대단하다는 생각이 든다.
사실 KG에 대해, 전문적인 지식은 없지만, 최근 Language Model에 KG 정보 등을 이용해서 성능을 높이려는 방식이 많이 사용되고 있는 것 같아 흥미가 생긴다.
이 논문은 KG를 단순 LM의 학습을 도와주는 용도가 아니라, 두 modality 간의 정보를 섞는 fusion 개념으로 KG와 LM을 사용하였기에 굉장히 가치가 있는 논문이라고 생각한다.
Abstract
복잡한 텍스트 내러티브 질문에 대답하기 위해서는 Context와 그 안에 숨겨진 지식들 모두에 대한 추론이 필요하다.
현재(그 당시) QA 시스템들에 많이 사용되는 pretrained Language Model(LM)은 concept 들 간의 관계를 robust 하게 표현해주지 못한다.
Knowledge Graph(KG)은 구조화된(관계에 대한) representation들을 가지고 있기 때문에, LM과 함께 사용되곤 한다.
하지만, KG representations들과 language context 정보들을 어떻게 효과적으로 융합할 수 있는지에 대해서는 미지수이다.
이 논문에서는 GreaseLM이라는 LM에서 추출된 representations(laguage context 정보)와 GNN의 정보들(KG 그래프 정보)을 융합해서 사용하는 새로운 모델을 제시한다.
이 모델에서는 각 modal 들이 다른 modal에게 정보들을 전달하는 구조로 정보를 융합한다.
Introduction
[Language Model]
QA task에서는 textual context 정보뿐 아니라, 세상에 대한 지식(박학다식을 이렇게 표현해 놓았다.)이 필요하다.
최근에는 (그 당시) large pretrained LM을 QA 분야에 사용하는 것이 주류가 되었다. pretrained LM의 경우에는 pre-training 과정에서 수많은 text 데이터들을 학습하기 때문에, 그 과정에서 텍스트들에 함축된 knowledge 들을 학습하게 된다.
이러한 pretrained LM 모델들은 좋은 성능을 보이지만, fine-tuning 단계에서 학습한 데이터와 다른 유형의 문제를 풀 때는 어려움을 겪는다.
그것은 이러한 모델들이 Question과 Answer 사이에 pattern에 의존하지, 그 사이의 reasoning에는 많이 의존하지 않기 때문이다. 이러한 reasoning은 context 데이터와 implicit external knowledge가 합쳐진 정보이다.
[Knowledge Graph]
기존의 연구들중 KG를 도입해서 구조화된 reasoning과 query answering에 효과를 본 연구들이 있다.
하지만, text 문장으로 구성된 question & answer와 KG의 knowledge를 어떻게 결합할 것인지에 대해서는 아직 정답이 없다.
좋은 reasoning을 위해, 두 modal 정보를 함께 사용하기 위한 연구들이 있었다. 하지만, 그 연구들은 얕고 non-interactive 한 방식(각 modal의 정보를 각각 encoding 하고 prediction 결과를 섞거나, 한 modal의 정보를 활용하기 위해 다른 modal을 사용하는 방식)을 사용하였다.
결과적으로, 이러한 방법들은 두 modal 간의 유용한 정보들을 어떻게 섞을 것인지에 대한 방법을 고민하게 하였다.
[Grease LM]
이 논문에서는 GreaseLM이라는 LM과 KG가 여러 layer에 거쳐서 정보를 fusion하고 exchange 할 수 있는 새로운 구조를 제안한다.
GreaseLM은 context를 처리하는 LM과 KG를 처리하는 GNN으로 구성된다. 각각 LM와 GNN Layer를 거친 후, 각 modality끼리 정보를 교환할 수 있는 bidirectional interactive schema를 통해, interaction representation을 담게 된다.
이를 위해, LM을 위한 Interaction Token과 GNN을 위한 Interaction Node를 사용한다.
GreaseLM은 다른 LM 구조에 비해 QA에서 좋은 성능을 보인다. (기존에 KG를 같이 사용하던 모델도 포함해서)
특히, GreaseLM은 효과적인 Reasoning이 필요한 질문들에서 매우 좋은 성능을 보인다.
Related Work
KG 정보를 사용하는 것은 QA 분야에서 각광받고 있다.
몇몇 연구들은 text 처리를 위한 LM과 knowledge 처리를 위한 graph를 사용해서 정보를 융합하는 방법을 사용한다.
다른 연구들은 한 KG 정보를 text 데이터를 활용하는데 도움을 주는 용도로 사용한다. (KG를 활용한 QA example Augmentation 등)
반대로 text 데이터를 활용하여 KG를 뽑아내는 데 사용하는 연구들도 있다.
→ 정리하자면, 기존에도 KG와 text 데이터를 같이 사용하는 연구들은 많았으나, 한 modal의 데이터를 다른 modal에 간접적으로 사용하는 등, 효과적으로 두 정보를 결합하지 못했다.
최근에는 두 modality들의 정보의 deeper integration을 위한 방법들이 연구되고 있다.
어떤 연구는 LM이 implicit knowledge(Embedding을 의미하는 것 같다.)을 만드는 것을 학습하기 위해, KG를 사용한다. 하지만, 이 방법은 LM을 학습할 때를 제외하고는 KG 정보를 사용하지 않기 때문에 reasoning을 guide 할 수 있는 중요한 정보를 사용하지 못한다. (실제 KG 정보를 사용하지는 않는다.)
더 최근에는, QA-GNN이라는 모델이 LM과 GNN이 message passing을 통해, 같이 학습하는 방법을 제안하였다. 하지만, 이 논문에서는 LM의 textual component를 표현하는데 single pooled representation을 이용하여, text representation에 대한 update에 한계가 있다.
기존 방법들과 다르게, 이 논문에서는 LM의 각 token representations들과 GNN의 여러 layer들의 정보가 섞일 수 있어, 각 modality에서 다른 modality의 정보를 반영할 수 있다.
동시에 각 modality들의 구조를 유지하여 함께 사용한다.
→ 정리하자면, 그래도 최근에는 LM과 QA의 정보를 효율적으로 사용하는 구조를 제안해 보았지만, 아직은 제한적으로 사용되고 있다. 이 논문에서는 text 내의 token과 실제 KG의 연결 정보가 잘 결합될 수 있는 구조를 제안한다.
어떤 연구들은 KG와 LM을 pretraining 단계에서 같이 활용하기도 한다.
하지만, QA에서와 비슷하게 multiple layer들에서의 interaction을 고려한 것이 아닌, knodwledge를 language에 이용하는 형식으로 사용된다.
GreassLM
이 논문에서는 lareg-scale LM을 KG를 이용한 grpah reasoning 모듈로 augment 하였다.
GreaseLM은 2개의 component들로 구성되어 있다. 1) unimodal LM layers: input token(text 데이터)으로만 학습함 2) upper cross-modal GreaseLM layers: lanugage sequence들과 linked KG로 학습되어, 두 modality의 정보를 함께 사용할 수 있음. 논문에서는 LM layer들을 N개, GreaseLM layer를 M개 사용해서, 총 N+M개로 이뤄진다고 말하고 있다.
Notation : multiple choice question answering에서 context paragraph는 c, question은 q, candidate answer set은 A이고, 모두 text로 구성되어 있다. 이 논문에서는 external knowledge graph(KG)를 G로 정의하여 content에 대한 background knowledge를 제공하는 데 사용한다. QA 문제는 c, q, A, G가 있을 때, A에 속하는 a를 찾는 것이 목표이다. 일반성을 위해, 본 논문에서는 정답을 a로, natural language의 sequence의 각 token을 w로 1부터 T까지 나타낸다. KG의 각 노드는 e로 1부터 J까지 나타낸다.
Input Representation
우선 context와 question, answer를 separator token 등을 이용해서 concatenate 한다.(BERT에서 사용하던 방법이다.) 이 token을 tokenize 해서 combined sequence를 구성한다. {w1,..., wT}
Input sequence를 KG에서 subgraph(현재 Question과 관련 있는 정보를 제공)를 뽑는 데 사용한다. subgraph는 {ㄷe1,..., eJ}
KG Retrieval : QA context가 있을 때, subgraph를 뽑기 위해 기존 다른 논문(QA-GNN: 나중에 읽어봐야겠다.)의 방법을 사용한다. subgraph의 각 Node는 context, question, answer와 연결되어 있는지 또는 해당 Node의 이웃으로 연결되었는지에 따라 유형이 할당된다.
Interaction Bottlenecks : cross-modal GreaseLM layers에서 두 modality들 간의 정보가 섞인다. 이를 위해 special interaction token을 사용하는데, 이것을 w_int로, special interaction node를 e_int로 정의한다.
Language Pre-Encoding
unimodal encoding component에는 token과 segment와 positional embeddins들을 합해서 input으로 사용하여, LM layer에 통과시킨다. l번째 layer를 거친 pretrained representations들은 아래와 같이 정의된다. LM-Layer들의 parameter들은 pretrained model을 사용하여 이미 학습되어 있는 상태이다.
앞서 언급한 대로, LM-layer의 총개수는 N개이다.
GreaseLM
GreaseLM은 cross-modal fusion component를 사용한다.
GreaseLM layer는 각 정보를 독립적으로 encode 하고, 그 정보들을 spectial token과 node의 bottleneck을 통해서 fuse 한다.
3가지 component로 구성되어 있다.
transformer LM encoder block : language context를 encoding 함.
GNN layer : KG entitie들과 relation들의 정보를 담음
modality interaction layer : interaction token과 interaction node 간 정보를 교환함.
[Language Representation]
l번째 GreaseLM layer의 feature는 Language Pre-Encoding 된 representations에 추가적으로 l번의 transformer LM encoder를 거친 정보이다.
GreaseLM Layer의 l번째 embeddings는 다음과 같이 나타난다.
뒤에서 추가적으로 언급하겠지만, h_int는 KG의 representation을 encode 하는 역할을 한다.
[Graph Representation]
GreaseLm layer는 QA example과 관련된 local KG 정보도 함께 encoding 한다.
Graph를 뽑기 위해, 처음으로 initial node embeddings를 pretraned KG embeddings를 통해 뽑는다. 이때, iteraction node, e_int의 initial embedding은 random 하게 초기화된다.
그러고 나서, GNN의 각 layer는 현재 node embeddings들을 입력으로 받아, information propagation을 수행하고, 이를 통해 fuse 된 node embedding을 생성한다.
이때, 사용되는 GNN은 QA-GNN에서 사용된 방법을 따른다.
N: e_j의 neighborhood, m_sj:e_s가 e_j에게 보내는 message, a_sj:message에 대한 attention, f_n: 2 layer MLP
Entity들 간 message는 relation과 node type을 이용해 다음과 같이 정의된다.
→ 해석하자면, GreaseLM의 node representation은 전 단계 layer의 node들과 attention을 적용한 neigbor node들이 보낸 message들의 합으로 나타난다. 이때, message는 1) enitity들의 node type embedding과 relation embedding을 이용한 MLP output과, 2) neiborhood의 node type embedding에 두 entity 간 relation representations, 3) neighborhood의 l-1번째 LM embedding representation을 linear transformation 한 값으로 구해지고, message는 query(neighborhood의 l-1번째 LM embedding representation과 그의 node type embedding의 linear transformations)와 key(현 entity의 l-1번째 LM embedding representation과 그의 node type embedding과 neighborhood 간의 relation을 linear transformation)한 값으로 구해진다. 이때, 두 사이의 relation 값의 비중은 q와 k의 곱으로 구해지고(consine similarity 같은 개념인가 보다.) 이것을 neighborhood 간 normalization을 통해 0~1 사이의 가중치를 구한다. (자세한 내용은 QA-GNN을 참고하는 편이 좋아 보인다. 그래도 천천히 읽다 보면 어떤 걸 의도하는 이해가 간다.)
[Modality Interaction]
LM과 GNN이 각각 정볼르 embedding 한 이후에, modality interaction layer(MInt)를 통해 두 modality들의 정보가 interaction token과 interaction node 간의 bottleneck을 통해 섞이길 바란다.
이때, l번째 MInt에서는 interaction node의 embedding과 interaction token의 embedding을 concate 한 값을 Input으로 받아서 처리하고, output은 그 결과를 split 해서 각각 가져간다.
MInt로는 2 layer MLP를 사용한다. interaction token과 interaction node를 제외한 다른 token 및 node들은 이 단계에서 사용되지 않는다. 하지만, 직접적으로 MInt의 Input으로 사용되지는 않더라도, interaction node와 interatction token에는 각각 다른 token 및 node의 정보가 담겨있다. (interaction node는 relation을 통해, 다른 entitiy들의 영향을 포함하고, interaction token은 transformer의 encoding 단계 중, 다른 token 정보를 포함하기 때문에 그런 것이다. 이 부분에서 아이디어가 매우 좋다는 생각이 들었다.)
Experiments
CommonsenseQA와 OpenBook QA에서 기존 모델들 (LM only or LM + KG) 보다 좋은 성능을 보여준다.
Conclusion
이 논문에서는 GreaseLM이라는 knowledge graph와 language model 간의 정보를 교환할 수 있는 새로운 구조를 제안했다.
실험결과는 기존의 KG+LM의 구조나 LM 단독으로 사용된 것들에 비해 좋은 성능을 보여준다.
특히, 뉘앙스 등의 reasoning이 포함된 문제에서 더욱 효과적이다.
출처
Greaselm: Graph reasoning enhanced language modelsX Zhang, A Bosselut, M Yasunaga, H Ren, P Liang, CD Manning, ...International conference on learning representations, 2022
총평
평소 word embedding을 보면서, 저절로 만들어지는 KG 아니야? 하는 생각을 가지고 있었다. 그만큼 KG와 LM은 비슷한 구조이면서, 서로를 보완해 줄 수 있는 데이터인 것 같다. 사실 두 정보를 함께 사용하는 논문이 이미 많이 나왔을 줄 알았는데, 그만큼 매우 어려운 것 같기도 하고, 역시 transformer의 위대함이 아닌가 싶다.