카테고리 없음

BERT (Bidirectional Encoder Representations from Transformer)

송희1020 2021. 11. 8. 08:53

BERT의 개념

BERT(Bidirectional Encoder Representations from Transformer)는 Google에서 Transformer를 기반으로 하여 구현한 모델이다. BERT는 Transformer의 Encoder 부분을 쌓아올린 구조이다. 이는 레이블이 없는 (정해진 형식 없는) 데이터들을 attention을 이용하여 Pre-training 시킨다. 또한 Fine-tuning 이라는 추가 훈련 과정을 추가하여 성능을 높였다.

 

 

Pre-training

Pre-training은 사전에 모델을 학습시키는 것을 의미하는데 이는 hidden layer를 효과적으로 학습시킬 수 있다는 점에서 의미가 있다. BERT의 경우 크게 2가지의 Pre-training을 볼 수 있는데 각각을 Masked Language Model, Next Sentence Prediction이라 한다.

 

Masked Language Model은 입력의 15%가량을 무작위로 masking하는 것이다. 그리고는 masking된 단어가 무엇인지 예측하도록 한다. 예를 들어 입력이 "나는 어제 빵에 잼을 발라 먹었다." 라는 문장이고, 랜덤으로 masking된 단어가 "빵" 라면 인공 신경망으로 하여금 "나는 어제 O에 잼을 발라 먹었다." 라는 문장에서 O에 들어갈 단어를 찾아내도록 하는 것이다. 

 

Next Sentence Prediction은 두 개의 문장이 이어지는 문장인지 아닌지를 맞추게 하여 훈련시키는 방법이다. 두 문장의 연속성을 확인함으로써 모델이 문장을 잘 이해하고 있는지 없는지를 확인할 수 있다.

 

 

Encoder, Embeddings, Pooler

BERT는 Transformer의 Encoder 부분을 거의 그대로 사용한다. 다른 점이 있다면 입력 및 출력을 변형하여 사용한다는 것이다. 이 때, 입력 부분을 Embeddings, 출력 부분을 Pooler라 한다. 또, BERT는 GELU를 activation으로서 사용하는데 GELU는 ReLU와 달리 입력이 음수더라도 기울기가 0이 되지 않아 파라미터들이 업데이트되지 않는 현상이 발생하지 않는다는 장점이 있다.

 

BERT의 Embeddings는 Token Embedding이라는 과정을 거치는데 이는 입력인 Embeddings를 3가지 방법으로 embedding 하는 것이다. 3가지는 token embeddings, segmentation embeddings, position embeddings이다. token embeddings는 문자와 토큰 별로 토큰화시키는 것, segmentation embeddings는 2개의 문장을 입력으로 받았을 경우 2개의 문장을 구분하기 위한 것, position embeddings는 문자의 위치에 대한 정보를 알기 위한 것이다.

 

BERT의 Pooler는 2가지를 출력하는데 하나는 [batch size, hidden size] 형태, 하나는 [batch size, sequence length, hidden size]의 형태이다. 전자의 경우 2개의 문장이 이어지는 문장인지 아닌지를 입력에 대해 판단하고, 후자의 경우 masking된 단어를 예측하는 데에 사용된다.

 

 

 

https://wikidocs.net/115055

http://machinelearningkorea.com/2019/07/09/%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8F%AC%EB%A8%B8-transformer%EC%99%80-%EC%96%B4%ED%85%90%EC%85%98-attention%EC%9D%84-%ED%86%B5%ED%95%B4%EC%84%9C-bert%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/

https://blog.pingpong.us/transformer-review/

BERT & GPT - ratsgo's NLPBOOK