논문: https://arxiv.org/pdf/1810.04805
이번 포스팅에서는 BERT에 대한 논문리뷰를 진행하겠습니다.
해당 글을 참조했습니다.
https://misconstructed.tistory.com/43
[논문 리뷰] BERT: Pre-training of Deep Bidirectional Transformers forLanguage Understanding (NAACL 2019)
2019년 구글에서 발표한 BERT에 대한 논문이다. 논문의 원본은 여기서 볼 수 있다. # Introduction Pre-trained Language Model은 자연어 처리 task의 성능을 향상시킬 수 있다. PLM(pre-trained language model)을 적용하
misconstructed.tistory.com
https://kikaben.com/bert-bidirectional-encoder-representation-from-transformers/
KiKaBeN - BERT — Bidirectional Encoder Representation from Transformers
Pioneering Wonderful Large-Scale Pre-Trained Language Model Boom
kikaben.com
Abstract
BERT는 unlabeled 데이터에 대해서 deep bidirectional representations pre-training이 가능하다고 설명합니다.
즉, unlabeled 데이터에 대해 pre-training을 하고 특정 downstream task(최종적으로 만들고자 하는 모델)에 fine-tuning 할 수 있습니다.
논문에서는 deep bidirectional, deep을 강조하며 다른 모델과의 차별점을 둡니다.
하나의 output layer를 pre-trained 모델에 추가함으로서 11개의 NLP 주요 task에 SOTA를 달성했다고 합니다.
Introduction
PLM(pre-trained language model)을 적용하는 방법은 현재 크게 2가지로 구분됩니다.
1) feature based
2) fine tuning
1) feature based approach

대표적으로 ELMo 모델이 있습니다.
Pretrained Representation특성과 Embedding vector의 특성을 이용해
다양한 NLP Task에 이용합니다.
2) fine-tuning approach

대표적으로 GPT가 있습니다.
모든 pre-trained task의 파라미터를 최소화하고 사전학습된 파라미터를 fine-tuning 합니다.
위 그림에서 보면 Trm(트랜스포머)를 통과한 특징이 반영된 토큰은
다양한 NLP에 들어가 이용됩니다.
하지만 해당 방식들은 unbidirection한 방식이고, 왼쪽에서 오른쪽으로 이동하게 되어있는데
현재 토큰이 이전 나타난 토큰들에 대해서만 비교할 수 있는 단점이 있습니다.
문맥을 양쪽에서 모두 이해하는 것이 중요한 question - answering task에서 이러한 단점은
모델의 효율을 떨어뜨리게 됩니다.
BERT는 해당 fine-tuning을 진행하며, bidirection한 방식을 적용하며 단점을 보완했습니다.
Related Work
Pre-training language representation 에는 긴 역사가 있고
가장 널리 사용되는 몇 가지를 소개한다고 논문에서는 말합니다.
1) Unsupervised Feature-based Approaches
단어의 representation을 학습하는 것은 크게
non-neural(신경망을 사용하지 않는)방식과 neural(신경망을 사용하는)방식으로 나뉘어집니다.
neural 방식에는 word2vec, GloVe 방식이 있습니다.
neural 방식에 속하는 Pre-trained word embedding은 NLP시스템의 성능 향상을
이끌어냈습니다.
이 중 ELMo는 2개의 biLM(left-to-right LM, right-to-left LM)을 이용해서 문맥을 고려한 단어 임베딩을 제공하면서
뒤의 representation과 앞의 representation을 구한한 뒤 합쳐서 사용하는 방식의 left-to-right representation과 right-to-left representation을
연결해서 제공하며 몇 가지 NLP에서 SOTA를 달성합니다.
2)Unsupervised Fine-tuning Approaches
논문이 나온 2019년 당시 GPT-1 같이 unlabeled 데이터셋을 이용해 pre-trained된 representation을 생성하고,
supervised downstream(최종적으로 만들고자 하는 모델) task에서 fine-tuning하는 방식이 제안되었습니다.
언어의 일반적인 특징을 pre-train한 모델을 사용하기 때문에 적은 수의 파라미터로 학습이 가능합니다.
3)Transfer Learning from Supervised Data
전이 학습 방식을 설명합니다. 큰 데이터셋을 이용하는 NLI(자연어 추론)이나 MT(기계번역)에는
pre-training 모델을 이용해 적은 데이터로도 fine-tuning이 가능하게 합니다.
BERT

BERT는 pre-training, fine-tuning 두 단계로 나눠집니다.
GPT와 동일하게 pre-training은 unlabel 데이터셋을 이용해 pre-traing 한 후
labeling된 데이터셋을 이용해 fine-tuning을 합니다.
1) 모델 아키텍처
Bert는 multi-layer bidirectional Transformer encoder를 사용합니다.
구조 자체는 Transformer의 encoder 구조와 동일합니다.

L: Transformer 블록 수
H: hidden layer size(Feed Forward)
A: Multi head attension의 head 수
로 나타냅니다.
논문에서는 두가지 모델을 설명합니다.
BERT base 모델 : L= 12, H= 768, A= 12, total_parameter = 110M
BERT large모델: L=24, H=1024, A=16, total_parameter = 240M
BERT base모델은 GPT와 동일한 크기로 제작되었는데
비교를 위해서라고 합니다.
Transformer의 encoder 구조를 사용하므로서 좌,우를 모두 참조할 수 있는 bidirectional self-attention을 수행이 가능합니다.
(GPT는 decoder 구조를 사용하므로서 masked attention을 거치면서 bidirect 수행을 하지 않음)
2) Input/Output Representations

BERT에서 sequence는 "단일 sentence또는 쌍으로 이루어진 문장"을 칭합니다.
또한 BERT에선 sentence는 온전한 문장이 아닌 중간에 잘려있는 문장이거나 문장보다 더 긴 것일수도 있습니다. 단어의 나열을 sentence로 봅니다. 이는 모델의 입력을 유연하게 할 수있습니다. 문장의 일부분이나 문맥 자체도 입력데이터로 넣을 수 있습니다.
단어 임베딩으로 WordPiece embedding을 사용합니다.
해당 방식은 unneural(statistical) 방식입니다. 서브워드(subword)로 분해하여 처리하는데
위의 이미지에서 ##ing는 Wordpiece embedding으로 playing을 play와 ##ing로 나눠준 것을 보여줍니다.
Sequence는 하나의 sentence를 가질수도 있고 두개의 sentence를 포함할 수도 있습니다.
Sequence의 첫 토큰으로 [CLS]을 사용합니다.
두 sentence를 하나의 sequence로 표현하기 위해 두 sentence 사이 [SEP] 토큰을 넣어줍니다.
이후에 각 sentence를 구성하는 단어들을 임베딩해줍니다.
임베딩 한 단어는 E로 표현됩니다.
Positional Embedding은 단어의 위치 정보, Token Embedding은 단어 자체를 벡터로 변경합니다.
Segment Embedding에서는 단어가 어느 Sentence에 속하는지 정보를 나타내줍니다.
세 정보들을 더해서(summation) input값으로 넣어줍니다.
Pre-training BERT
BERT는 기존 전통적인 left-to-right/right-to-left LM(언어모델)과는 다른 방식의
pre-train을 진행합니다.
2개의 unsupervised task 방식를 사용합니다.
1) Masked LM
기존의 ELMo 나 GPT 모델이 left-to-right/right-to-left 방식을 사용했던 이유는
Bidirectional한 처리 방식은 간접적으로 다음 단어를 예측에 실제 값이 참조되기 때문에 해당 오류를 피하고자 였습니다.
BERT는 Bidirectional 하게 처리하는 방식을 택했고 해당 문제를 해결하기 위해
전체 토큰의 15% token을 [MASK] 토큰으로 masking 해줍니다.
하지만 fine-tuning 과정에서는 [MASK] 이 없기 때문에
추론에서도 잘 동작할 수 있도록
이 [MASK] 토큰 중 80%만 치환하고 10%는 랜덤한 토큰으로 치환, 나머지 10%는 기존 토큰을 사용해서
기존 토큰을 잘 예측하도록 학습합니다.
2) Next Sentence Prediction(NSP)
Question-answeing, Natural Language Interference 등 두 문장 사이의 관계를 학습할때
단방향 문맥을 이용한 LM을 통한 학습은 쉽지 않습니다.
그래서 NSP라는 task에 대해서도 학습을 진행합니다.
모델은 두 sequence(문장) A문장과 B문장을 입력받습니다.
1. 50퍼센트 확률로 A문장 다음 B문장으로 구성하며,
2. 50퍼센트 확률로 A문장 다음에 관계가 없는 임의의 문장으로 구성합니다.
'1. ' 경우는 IsNext로 레이블링하며
'2. '의 경우는 NotNext로 레이블링합니다.
Pre-training Data
BERT는 Pre-train에
BooksCorpus 데이터셋과
English Wikipedia 데이터셋을 사용했습니다.
Wikipedia 데이터셋은 text passage(텍스트 조각)만 사용하고 목록,표는 제외한 데이터를 사용했고
긴 문맥을 학습하기 위해 Billion Word Benchmark와 같이 여러 불규칙적인 문맥이 섞인 데이터를 사용하지 않았다고 합니다.
Fine-Tuning
입력과 출력 형식을 조정하여 다양한 Downstream task에 적용할 수 있습니다.
하나의 문장이 입력되면 이 문장을 입력 데이터로서 사용하며,
두개의 문장이 입력되면 이 두 문장을 하나의 sequence로 결합해서 입력 데이터로 사용합니다.
예시) 하나의 문장 입력 : "[CLS] The cat sat on the mat. [SEP]"
두개의 문장 입력 : "[CLS] The cat sat on the mat. [SEP] It was looking at the door. [SEP]"
이렇게 task에 맞는 입력 데이터를 받으면 NLP의 Downstream의 task에 알맞게 fine-tuning할 수 있게 됩니다.
Pre-traing을 해주고 fine-tuning을 하므로서 훈련시간을 단축할 수 있습니다.
Experiments
1)Pre-Train 방식 적용 대한 성능 비교
NSP등 적용한 방식을 모두 적용한 BERT base의 성능이 가장 좋았음

2)모델 사이즈에 대한 성능 비교
L과 H, A의 수치가 커질수록 정확도가 늘어났음
(LM(ppl) - Language Model Perplexity이 줄어들 수록
텍스트를 잘 예측)

3)Feature-based Approach 방식을 BERT에 적용시킨 방식과 성능 비교
Fine-tuning approach 방식을 적용한 성능이 더 좋았음

'인공지능 개발하기 > 기술 & 논문 리뷰' 카테고리의 다른 글
[논문 리뷰] ViT(An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale) (0) | 2024.06.16 |
---|---|
[논문 리뷰] SegmentAnything (2) | 2024.06.08 |
[논문 리뷰] GPT-1 (Improving Language Understanding by Generative Pre-Training) (1) | 2024.05.29 |
[논문 리뷰] YOLOv3(YOLOv3: An Incremental Improvement) (0) | 2024.05.20 |
[논문 리뷰] YOLOv2(YOLO9000:Better, Faster, Stronger) (0) | 2024.05.19 |