본문 바로가기
NLP

[NLP] BERT : Pre-training of Deep Bidirectional Transformers forLanguage Understanding 논문 리뷰 1

by Tiabet 2025. 3. 8.

이번 포스팅에선 BERT를 리뷰해보려고 한다. 워낙 유명한 모델이고 또 전세계적으로 많은 분들이 잘 정리해주신 게 많기 때문에, 나는 내가 잘 몰랐던 부분을 중점적으로 정리해보려고 한다.

 

 

https://arxiv.org/abs/1810.04805

 

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

We introduce a new language representation model called BERT, which stands for Bidirectional Encoder Representations from Transformers. Unlike recent language representation models, BERT is designed to pre-train deep bidirectional representations from unla

arxiv.org

 

BERT (Bidirectional Encoder Representations from Transformers) 논문은 인용수 무려 12만회로 transformer가 16만회가 정도인 것을 감안하면 그야말로 엄청난 영향을 끼쳤다고 볼 수 있다.

BERT는  왜 나왔는가 : Related Work

모든 논문이 다 그렇듯 BERT도 갑자기 뚝 떨어진 건 아니고 기존 연구들의 아이디어 몇 개에서 모티브를 얻어 탄생했다.

 

Related Work를 읽어보면 저자들은 크게 3가지 방향의 모티브를 말한다.

 

1. Unsupervised Feature-based Approaches

이 부분은 Word Embedding을 의미한다.

ELMo and its predecessor (Peters et al., 2017, 2018a) generalize traditional word embedding research along a different dimension. They extract context-sensitive features from a left-to-right and a right-to-left language model.

 

특히 ELMo, 즉 Neural Network을 이용한 임베딩 벡터 생성론에 대해 강조한다. 즉, 토큰, 단어, 더 나아가 문장을 어떻게 표현할 것이냐에 대한 고민이 굉장히 많았음을 시사한다. 후술하겠지만 BERT의 저자들은 ELMo가 사용한 Bidirectional한 방법론에 큰 모티브를 얻어 Bidirectional Encoder를 설계하게 된 것 같고, BERT에서 BER을 설명하는 부분이 이 부분이다.

2. Unsupervised Fine-tuning Approaches

기존 연구들은 이 Feature-based Approach, 즉 임베딩 벡터만 갖고 여러 테스트를 수행하는 데에 다소 초점이 맞추어져 있었다. 특히 ELMo가 그렇다. ELMo는 표현 방법론이 특이한 것이었고, 이 표현 벡터를 가지고 여러 레이어와 결합하여 태스크를 풀어나갔다. 하지만 GPT1이 기존의 방법을 버리고 Unsupervised Fine-tuning / Supervised Fine-tuning 이라는 학습 방법으로 SOTA를 달성해내는 데에 성공했다.

More recently, sentence or document encoders which produce contextual token representations have been pre-trained from unlabeled text and fine-tuned for a supervised downstream task

 

Unsupervised Fine-tuning은 사실 Pre-training인데, 당시에는 이 용어가 확립되지 않아서 Unsupervised Fine-tuning Approach라고 표현한 것 같다. BERT 저자들도 후술할 때 이 개념을 Pre-training이라고 설명한다. 이 방법론에서 모티브를 얻어 그대로 사용하게 됐다. 즉, BER은 Bidirectional Encoder Representation으로 1번에서 많은 모티브를 얻었으나, 학습 방법은 다른 곳(특히 GPT1)에서 모티브를 얻어 1번과 결합했다.

3.  Transfer Learning from Supervised Data

2번이 Pre-training의 모티브를 말했다면 3번은 Fine-tuning을 설명하는 부분이다.

There has also been work showing effective transfer from supervised tasks with large datasets, such as natural language inference (Conneau et al., 2017) and machine translation (McCann et al., 2017).

 

정리하자면, Bidirectional한 Encoder(from Transformer)를 사용해 Representation을 생성하되, 선 Pre-train 후 Fine-tuning으로 Task를 수행한 것이 BERT라고 할 수 있다.

 

그럼 이제 BERT가 정확히 어떻게 설계되었고, 어떻게 학습되었는지 확인하면 될 것 같다.

 

 

BERT 구조

BERT의 구조 또한 그 이름에서 유추 가능하듯이 Transformer의 인코더 아키텍처만을 사용한다.

 

1. BERT Architecture (출처 : https://kambale.dev/fine-tuning-bert) 2. Transformer Architecture

 

 Transformer의 오리지널 페이퍼가 Machine translation을 목적으로 나왔기 때문에 Output Layer가 Linear, Softmax로 제한적이지만 이후 나온 유명 모델들은 대부분 Sequence classification, Token classification 등등 더욱 다양한 Task에 사용된다. (우수한 벤치마크인 SQUAD, GLUE 등도 이에 기여한 걸로 보임) 그리고 이런 다양한 Task를 풀기 위해 BERT가 생성한 Representation을 갖고 각 Task에 맞는 추가 레이어들로 수행하기 때문에 엄연히 따지면 왼쪽의 그림이 BERT의 구조라고 할 수 있다.

 

조금 더 자세히 살펴보면 다음과 같다.

We primarily report results on two model sizes: BERTBASE (L=12, H=768, A=12, Total Parameters=110M) and BERTLARGE (L=24, H=1024, A=16, Total Parameters=340M). In all cases we set the feed-forward/filter size to be 4H, i.e., 3072 for the H = 768 and 4096 for the H = 1024.

 

이 당시에도 모델의 규모에 따라서 성능이 좌우된다는 것이 밝혀져가고 있었기 때문에, Transformer와 비슷한 사이즈의 Base와 더 좋은 성능을 타겟으로 한 Large 두 버전을 만든 것으로 보인다. 

 

BERT Representation

BERT는 인코더 모델이다 보니 텍스트를 어떻게 표현할 것( Representation )이냐에 대해 설명이 나온다. 실제로 이는 당시까지 아주 주요한 목표였고, Word2Vec부터 시작되어서 ELMo 등등 많은 모델들이 이 Representation 방법론에 대해 연구했다. BERT 또한 이런 임베딩 모델이라고 해석해도 무리는 없어보인다. 아무튼 주요 특징을 정리하면 다음과 같다.

 

1. Wordpiece

문장을 어떻게 단어 단위로 쪼갤 것인가에 대한 논의는 아주 중요한 Research Question이었다. 단순히 공백으로 띄우기엔 한국어도 마찬가지지만 영어도 그 의미가 혼잡해지는 경우가 많기 때문이다. (예시 : 때문이다, 때문에, 때문엔 등) 따라서 Tokenizer의 역할이 아주 중요한데, BERT는 Wordpiece라는 토크나이저를 사용했다. 

https://arxiv.org/abs/1609.08144

 

Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation

Neural Machine Translation (NMT) is an end-to-end learning approach for automated translation, with the potential to overcome many of the weaknesses of conventional phrase-based translation systems. Unfortunately, NMT systems are known to be computationall

arxiv.org

BERT와 동일하게 Google에서 만든 토크나이저고, BPE 방식으로 토큰화를 하는데 병합 방식에서 우선순위가 단순 빈도수가 아닌 별도의 Scoring 함수로 이루어진다. 다만 오픈 소스가 아니어서 정확히 어떻게 구현됐는지는 알 수가 없고, 전문가분들이 만들어놓아서 통용되는 공식은 존재한다. 하지만 이 포스팅에선 옮겨적진 않겠다.

 

https://tiabet0929.tistory.com/53

 

[NLP] BPETokenizer 이해하기

최근에 캐글에서 열린 LLM 대회의 최적 솔루션은 아주 인상적이었다. https://www.kaggle.com/code/datafan07/train-your-own-tokenizer Train your own Tokenizer Explore and run machine learning code with Kaggle Notebooks | Using data from

tiabet0929.tistory.com

https://wikidocs.net/166826

 

6. WordPiece 토큰화

WordPiece는 Google이 BERT를 사전 학습하기 위해 개발한 토큰화 알고리즘입니다. 그 이후로 DitilBERT, MobileBERT, Funnel Transforme…

wikidocs.net

BPE 토크나이저와 Wordpiece에 대한 내용은 이전에 쓴 글과 허깅페이스 공식문서 번역본을 참고.

 

2. Pair of Sentences to Input

BERT는 Pre-train과정에서 학습 방식을 특이하게 선택했다. 바로 한 문장이 아닌 두 문장을 Input으로 넣는 것. 다만 그냥 넣지 않고 중간에 특별 토큰인 [SEP]을 활용, 두 문장을 구분했다. 이는 당시의 주요 Task 중 하나인 GLUE의 MNLI Task, 즉 Text Entailment 를 저격한 것으로 보인다. Text Entailment는 한국어로 하면 글자 함유 정도로 해석되는데, 두 쌍의 문장이 어떤 관계에 있는지 맞추는 Task다. Fine-tuning과 Pre-train의 데이터 괴리성을 줄이기 위해 선택한 방법으로 여겨진다. 하지만 특별히 [SEP] 토큰이 어디에 사용되거나 하진 않고 말그대로 구분을 위해 있는 것 같다. 또 하나 사용한 특별 토큰은 [CLS]이다. 이는 문장 맨 앞에 들어가는 특별 토큰으로, 역시 Text Classification, Text Entailment 등 BERT에서 다양한 Task를 위해 사용되는 특별 토큰이다. 즉 [SEP] 토큰과는 달리 [CLS] 토큰이 실제적인 역할을 한다.

 

3. Embedding

BERT는 Transformer의 Sinusoid Positional Embeding을 사용하지 하고 Learnable한 Positional Embedding을 사용한다. 즉 Positional Embedding에도 파라미터가 있는 것이다. (D * D 크기일 것이다.) 또 하나 사용하는 Embedding이 있는데 바로 Segment Embedding이다. 앞서 BERT는 두 문장을 한 Sequence로 구성하여 Input으로 넣는다고 했다. 이 두 문장 중 앞의 문장과 뒤의 문장을 다른 수치를 넣어주되, 한 문장은 모두 같은 임베딩이 더해지게 된다. 그리고 특별 토큰은 모두 앞의 문장과 같은 Segment Embedding을 받는다. 여기까지 하면 저자들이 친절하게? 그려준 그림이 다 설명된 것 같다.

 

 

 

 


쓰다 보니 포스팅이 너무 길어져서 Pre-train과 Fine-tuning 쪽은 다음 포스팅에서 다루겠다.