[논문리뷰]BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
카테고리: NR
BERT(Bidirectional Encoder Representations from Transformer)는 이름 그대로 Transformer의 Encoder를 활용한 Language model이다. BERT는 ELMo, GPT-1과 비슷한 시기 발표된 논문으로, 동일하게 양질의 pre-trained language representation를 얻는 것 과 down-stream task로의 손쉬운 fine-tuning에 중점을 두고 있다.
Related Work
1. Pre-Training (Feature-Based VS Fine-Tuning)
Pre-Training에는 두 가지 방식이 있다. 1) feature-based와 2)fine-tuning 방식이다.
1) Feature-based 방식
Feature-Base의 핵심은 어떠한 특정 task를 해결하기 위한 아키텍쳐를 task specific하게 구성하고 거기에 pre-trained representaions(= Embedding layers)를 부가적인 feature로 사용한다. 대표적인 아키텍쳐로 ELMo가 있다.
2) Fine-Tuning 방식
Fine-Tuning approch를 채택한 가장 대표적인 모델들이 GPT와 BERT로, 어떤 특정 Task에 대한 파라미터를 최소화하여 범용적인 Pre-Trained 모델을 사용한다. 그리고 특정 Task를 수행할 경우 그에 맞게 fine-tuning을 적용한다.
GPT와 ELMo는 모두 pre-training 모델이지만 앞서 말했듯 각각 fine-tuning 방식과 feature-based 방식을 사용한다. 하지만 두 모델의 공통점이 있는데 이는 pre-training의 목적함수로 단방향 언어모델(Unidirctional Language Model)을 채택한다는 것이다. GPT는 Transformer의 디코더를 사용한 구조이다. 또한 Transformer의 디코더와 GPT모두 Masked Self-Attention을 사용하기 때문에 이전 토큰만을 고려하여 언어모델을 구성한다.
ELMo는 biLSTM을 사용하지만 forward, backward와 같은 일련의 방향이 존재하는 언어모델이다. 또한 Shallow Concatenate를 통해 언어 모델을 구성한다. 따라서 깊은 양방향 특징을 학습하기에는 최선의 방법이 아닌다.
이러한 이유로 단방향의 언어모델은 pre-trained representation의 성능을 저해하는 요소가 된다. 특히 fine-tuning approach의 경우, 사전 학습 과정에서 단방향의 언어모델이 다양한 언어 구조의 선택 가능성을 제한할 수 있다. 예를 들면, 이전의 토큰만을 사용하는 GPT의 Transformer를 QA task의 fine-tuning에 사용한다고 할 때, 질문과 답변 사이의 유기적인 관계를 고려하는 능력이 떨어질 것이다.
Method
1. Overview
BERT(Bidirectional Encoder Representations from Transformer)의 기본적인 구조는 Transformer의 Encoder를 multi-layer로 쌓아 올린 것이다.(본 눈문에서 L = 12). 더하여 BERT는 기존의 pre-trained language model이 가진 문제점을 보완하기 위한 두가지 구조적인 특징 Masked language model(MLM), next sentence prediction(NSP)이 존재한다. BERT가 높은 성능을 얻을 수 있었던 것은, 레이블이 없는 방대한 데이터로 사전 훈련된 모델을 만든 후, 레이블이 있는 다른 작업(Task)에서 추가 훈련과 함께 하이퍼파라미터를 재조정하여 이 모델을 사용하기 때문이다. 기존 사례에서도 해당 기법을 사용하면 상당히 좋은 성능이 발휘되는 것이 입증되었다.
실제 task에서 사용하는 모델은 초기에 동일한 파라미터로 시작하지만, 최종적으로는 서로 다른 fine-tuned 된 모델을 보유하게 된다. BERT 는 pre-trained 된 모델과 fine-tuned 된 모델 사이의 구조적 차이가 거의 없게 된다. 그러나 미세하게 차이가 생기는 모델 여러 개를 생성하게 된다. BERT의 구별된 특징은 다양한 작업에 걸친 통일된(unified) 구조라는 것이다. pre-training 구조와 마지막 down-stream 구조 사이의 최소한의 차이만 있다.
BERT의 모델 구조는 트랜스포머의 인코더만을 다중으로 쌓은 다중 레이어 양방향 트랜스포머 인코더이다. 즉, 기존의 Transformer와 달리 앞과 뒤 양방향에서 Attention을 사용하는 모델이라는 뜻이다.
- BERT-Base: L=12, H=768, A=12, Total Parameters=110M
- BERT-Large: L=24, H=1024, A=16, Total Parameters=340M
2. Input/Output Representation
Down Stream 과제 중에 단일 문장이 아닌 문장의 쌍(ex: QA = Question Answering <질문, 답변>)에 대한 학습이 필요한 경우가 있다. 이러한 경우 문장 쌍을 토큰을 통해 순서와 쌍을 만들어줄 수 있다. 주의할 것은 본 논문에서 문장에 대한 정의는 우리가 알 고 있는 문장과는 다르다. 실제 언어의 문장 대신에 유사한 텍스트의 임위 범위가 될 수 있다.
- Sentence(문장)
- An aritrary span of contiguous text, rather than an actual linguistic sentence
- 문장 대신에 유사한 텍스트의 임의 범위
- Sequence(시퀀스)
- The input toke sequences to BERT, which may be a single sentence or two sentences packed together
- BERT에 대한 입력 토큰 시퀀스, 한 개의 문장 또는 두 개의 문장을 합친(Packing)것
문장의 쌍은 하나의 시퀀스로 함께 묶인다. 그리고 이 쌍을 두 가지 방법으로 문장을 구별한다. 먼저, 토큰 ([SEP], [SEP])을 통해 기존의 문장들을 분리를 보여준다. 두 번째로 우리는 모든 토큰에 이것이 문장 A인지 B인지 표시하는 학습된 임베딩을 추가한다. BERT에서 사용하는 tokenizer는 WordPiece 임베딩 방식이다.
아래 사진을 보면, 각각의 임베딩 layer를 통해 나타나는 embedding을 E로 표시하고 각 단어의 tokenizer embedding, Segment Embedding(문장 쌍이라면 어디 속하는지), 그리고 Position Embedding을 해준다.
- WordPiece Embedding : 실질적인 입력이 되는 워드 임베딩. 임베딩 벡터의 종류는 단어 집합의 크기로 30,522개.
- Position Embedding : 위치 정보를 학습하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 길이인 512개.
- Segment Embedding : 두 개의 문장을 구분하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 개수인 2개.
이러한 임베딩 과정을 거쳐서 BERT 구조에 넣어주고 연산이 되는 것이다.
3. Model Architecture
1) Pre-Training BERT
Masked Language Modeling(MLM)
BERT의 기본적인 구조는 Multi Layer Bidirectional Transformer(Encoder)로서, deep bidirectional model이다. deep bidirectional model은 GPT와 같은 단방향 구조보다 강력하며, ELMo등의 shallow bidirectional concatenate 구조보다 깊게 학습이 가능하다. 하지만, 조건부 확률로 구성되는 기본적인 언어모델은 left-to-right, right-to-left로 학습될 수 밖에 없다. Bidirectional 한 조건부 확률을 사용하여 언어모델을 계산하면 각각의 단어가 스스로를 간접적으로 볼 수 있어 너무 쉬운 예측이 되기 때문이다.
다시 말해, Bidirectional하게 학습을 하게 되면 간접적으로 예측하려는 단어를 참고하게 되므로, 제대로 된 학습이 어려우진다.
따라서 논문에서는 Deep Bidirectional Representation을 학습하기 위해, 일정 비율의 단어를 Masking하는 Masked Langauge Modeling(MLM)을 사용한다. MLM은 다음 단어가 무엇이 오는지 예측하는 학습이 아닌 문장 내에서 무작위로 입력 토큰의 일정 비율을 마스킹하고, 그 다음 마스킹된 토큰들을 예측한다. 즉, 문장 전체를 reconstruction하지 않고, 일정 비율로 Masking된 임의의 토큰들만을 예측하며 학습한다. 마스크 토큰에 해당하는 마지막 hidden vector는 표준 Language model에서와 같이 어휘를 통해 출력 소프트맥스로 주어지고 단어를 예측하게 된다.
이 방법은 방향을 갖는 조건부확률로서 언어모델을 구성하지 않는다. 따라서 보다 원할한 bidirectional pre-training을 가능하게 해준다. 논문에서는 WordPiece 토큰의 15%를 무작위로 각 시퀀스에서 마스킹한다.(시퀀스는 앞서 말했듯 하나 혹은 두 문장의 토큰을 패킹한 전체를 말한다.)
그러나 MLM은 한 가지 단점이 있다. 양방향으로의 학습이 가능해지지만, fine-tuning중에 [MASK] 토큰이 나타나지 않기 때문에(빈칸 단어 예측은 그냥 빈칸 단어로 주어지기 때문) pre-training과 fine-tuning사이의 불일치(mismatch)를 만들어낸다. 따라서 논문에서는 Masking과정에서 Generalization을 위한 트릭을 사용한다. Masking하도록 정해진 토큰에 대하여 확률적인 variation을 주는 것이다. 먼저 훈련 데이터를 생성할 때 예측을 위해 무작위로 토큰 포지션의 15%를 선택한다. i번째 토큰에 대해 다음과 같은 방법을 적용한다.
- \(i\) 번째 토큰
- 80%는 [MASK] 토큰으로 교체
- 10%는 다른 토큰(단어)으로 교체
- 10%는 변경되지 않은 i 번째 토큰을 사용
즉, i번째 토큰에 대해서 셋 중에 하날르 선택하는 방법이 확률적인 variation을 주는 것이다. MLM은 softmax 함수를 통과한 i번째 토큰이 원래의 토큰이 되도록 cross-entropy loss를 사용하여 Pre-training을 진행합니다.
Next Sentence Prediction(NSP)
위의 학습과 동시에 BERT는 Qeustion Answerin에서도 사용되기 위해 두개의 문장을 제공하고 문장들이 이어지는 문장인지 분류하는 task에 대해서도 pre-training을 진행한다. 다시 말해 어떤 두 문장이 연결된 문장인지 아닌지 문장 사이의 관계를 포착하는 문제가 Next Sentence Prediction(NSP) 이다. 이어지는 문장이 맞으면 1, 아니면 0을 출력하는 Binary Classification으로 입력 토큰 중 [CLS]을 활용하여 출력 시퀀스의 제일 첫 번째 토큰으로 출력된다. 두 개의 문장을 구분하는데는 입력 시퀀스에서 [SEP] 토큰으로 구분된다. [SEP]은 문장과 문장 사이, 맨 마지막 토큰에 위치한다.
따라서 BERT는 MLM에 더하여, pre-training 단계에서부터 문장사이의 관계를 포착하도록 하는 next sentence prediction(NSP)를 진행한다. 두개의 Token sequence를 Concatenate 한 input으로 BERT를 학습하며, MLM과 더불어 주어진 두개의 문장이 이어지는 문장인지([IsNext]) 아닌지([NotNext])를 판단하는 Binary classification 작업을 추가하는 것이다. 이 과정에서는 첫번째 토큰인 [CLS] 토큰을 활용하여 output layer에서 [IsNext], [NotNext]를 예측하도록 학습한다.
2) Fine-Tuning
최종적으로 Pre-trained BERT를 우리가 풀고자 하는 downstream task을 위해 추가적인 학습을 해주는 것이 fin-tuning이다. BERT 모델은 자체가 Transformer의 인코더를 활용해 만든 모델이고 Attention Encoding을 하게 되므로 이 모델을 사용해서 fine-tuning을 하는데 큰 조작을 가하지 않는다. 즉, fine-tuning에서는 ‘미세 파라미터 조정’을 하는 것이다.
Down-stream Task가 하나 혹은 두개의 문장을 사용할때에 관계 없이 자유롭게 input을 구성할 수 있으며, 보통의 경우 하나의 output layer만을 추가하여 End-to-End로 fine-tuning이 가능하다.(end-to-end는 하나의 pipeline을 사용하는 것을 말한다.)
- Down stream Task
- Sentence Pair Classification
- Single Sentence Classification
- Question Answering
- Single Sentence Tagging
Question Answering과 Single Sentence Tagging은 토큰 단위의 down stream task는 토큰의 representation을 출력 레이어로 전달해주는 형태로 학습이 가능하다. 또한 Single Sentence Classification(감성분석), Sentence Pair Classification(entailment)와 같은 task는 NSP 방법 그대러 [CLS] 토큰의 representation을 그대로 출력 레이어로 넘겨주어 학습하면 된다.
Experiment & Result
논문애서는 언어모델 BERT의 검증을 위해 11개의 NLP task에서 fine-tuning을 진행하였다. 직전에 나온 모델이 GPT-1과 ELMo로 이 두 모델과의 비교를 많이하며 매우 다양한 NLP task에서 실험했다는 특징이 있다.
1. GLUE(Genenral Language Understanding Evaluation)
32개의 batch size를 사용했고 3Epoch수만큼 학습을 진행했다. learning rate(lr) 5e-5, 4e-5, 3e-5, and 2e-5로 설정했다. 실험 결과 BRT Large가 모두 기존의 방법보다 성능이 좋을 것을 알 수 있다.
2. SQuAD 1.1
SQuAD의 경우, Question, Answer로 이루어져 있는 데이터셋 Pair가 학습을 진행하게 된다. 위의 pre-train처럼 각 문장쌍을 하나의 Sequence로 넣게 되었고 answer가 시작할 때 S token과 마지막에 E token을 넣어주었다. 그리고 [SEP] token을 주지 않게 되는데 모델은 어디서부터 어디까지가 answer의 영역인지 구한다. 마지막의 hidden state에서 특정 단어 토큰 \(T_i\)가 시작 토큰이 될 score는 S와 \(T_i\)의 dot product 결과로 나타나게 된다. 마지막 토큰 역시 E와 \(T_i\)의 dot product 연산을 진행한다. 그리고 Softmax를 구해주어 가장 높은 갚을 찾는다.
시작 토큰 S로부터 마지막 토큰인 E까지가 answer 일 score는 다음과 같다.
그리고 j ≥ i 인 후보 중에서, 가장 값이 큰 <i, j> 쌍을 answer 의 영역으로 predict 한다. 결과적으로 Object Function은 다음과 같다.
Loss는 올바른 시작과 끝 지점에 대한 sum of log-likelihood를 사용한다. 3Epoch과 learning rate는 5e-5, batch size는 32로 하여 실험을 진행했다.
3. SQuAD 2.0
세번째 실험은 SQuAD 2.0 dataset을 통해 진행했다. SQuAD 2.0은 답이 지문에 없는 즉, 대답할 수 없는 경우를 포함하고 있어 SQuAD보다는 조금 까다로운 Dataset이다. 그리고 그런 경우에는 CLS token에 결과가 나타나게 된다.
인간의 능력에는 미치지 못하였지만, 기존의 baseline에 비해서는 매우 우수한 성능을 확인할 수 있다. 이것을 예측하는 수식은 답변이 있는 문장이라면, 기존 수식과 동일하게 진행한다. 대답 불가능한 경우에는 \(s_{ij}\)가 \(s_{null}\)보다 작게 되는데 이를 통해 예측하게 된다.
성능은 인간의 능력에는 조금 부족하지만 전문가에 필적하는 성능을 보여준다.
4. SWAG
The Situations With Adversarial Generations(SWAG) 라고 불리는 task는 앞 문장이 주어지고, 보기로 주어진 네 개의 문장중 가장 잘 어울리는 문장을 찾는 sentence pair inference task이다. Fine tuning 하기 위해, 앞 뒤 문장중 가능한 경우의 수의 문장들을 묶어 하나의 데이터로 만든다. 이때 앞 문장을 embedding A, 뒤 문장을 embedding B로 두고 그 이후 GLUE 를 학습할때와 동일하게 [CLS] token 에 대응하는 token [C] 와 A 문장 이후에 나타나는 문장의 token의 dot product 한다. 이를 score 로 삼고, softmax 로 normalize 한다. 결과적으로 softmax 가 만든 확률로 classification을 진행해 가장 어울리는 문장을 찾게 된다.
5. Ablation Study
Ablation이란 학습이 사용되는데 AI 시스템의 일부를 제거한 것이다. 이를 통해 제거한 부분이 전체적인 시스템의 성능에 기여하는 바를 연구하는 것이다. 좀 더 직관적으로 말하면 **제안한 요소가 모델에 어떠한 영향을 미치는지 확인하고 싶을 때, 이 요소를 포함한 모델과 포함하지 않은 모델을 비교하는 것을 말한다. 이는 딥러닝 연구에서 매우 중요한 의미를 지니는데, 시스템의 인과관계(causality)를 간단히 알아볼 수 있기 때문이다.
여기서는 NSP(Next Sentence Prediction), model size, feature-based Approach with Bert 이렇게 세가지로 나눠서 Ablation Study를 진행했다. 눈여겨 볼 점은 fine-tuning이 아닌 feature-based BERT 모델에 대한 것이다. Feature-based로 진행했을 때는 아래와 같은 실험으로 진행되었다. Feature-based approach는 아래의 경우를 모두 고려하여 실험을 진행했다.
1)Embedding만 사용
2)두번째 부터 마지막 Hidden을 사용
3)마지막 Hidden 만을 사용
4)마지막 4개의 Hidden을 가중합
5)마지막 4개의 Hidden을 concat
6)모든 12개의 층의 값을 가중합
결과를 살펴보면, 전체 layer를 가중합 하는 것 보다 마지막 4개만을 layer를 concatenate하는 방법이 가장 성능이 좋았다.(미세한 차이이기는 하지만) 또한 fine-tuning의 성능과도 거의 차이가 없었다는 점이 인상깊다. 하지만 최근의 트렌드가 점점 fine-tuning으로 변화하는 이유는 그것이 성능이 더 좋기 때문도 있지만 학습에 대한 cost가 낮기 때문이다. feature-based는 위처럼 모델 자체를 task에 맞게 변형시켜주고 학습시켜야 하기 때문에 부담이 크다.
댓글 남기기