본문 바로가기

DL

BERT / Transformer / Attention / Transformer Attention is all you need 설명

BERT를 설명하기 위해서는 Attention 과 Transformer에 대한 설명이 선행되어야 하기 때문에 

 

 Attention -> Transformer ->BERT 의 순서로 간단하게 설명해보겠습니다.


 

먼저 Transformer / Attention의 장점은 무엇일까요? 바로 RNN을 사용하지 않았다는 것입니다. 

RNN은 장기의존성 문제뿐 만 아니라 계산 속도가 느리다는 단점을 가지고 있습니다.

 

 

 

그렇다면 장기의존성 문제(long-term dependency problem)이란 무엇일까요?

 

다소 말이 안되는 문장일 수는 있지만,,ㅎㅎ 이 문장을 예로 설명해보자면 밑줄 친 부분에 대한 키워드를 생성하고자 할 때 사진찍기 보다는 딥러닝이라는 단어와의 거리가 더 가깝기 때문에 이미지가 아닌 텍스트 or 오디오라는 단어를 생성할 수도 있게 되는 문제를 말합니다. 은닉층의 과거정보가 마지막까지 전달되지 못했기 때문이죠.

 

Transformer / Attention은 위와 같이 RNN에서 일어나는 장기의존성 문제를 해결했을 뿐만 아니라, 병렬처리가 가능해 계산 속도를 높여주었습니다.

 

 

 

Attention이란 무엇일까요?

 

 

key, query, values가 와닿지 않아 이해하기 쉬운 예제로 말씀드려보자면, 예를 들어 Youtube에서 비디오를 검색하기 위해 쿼리를 입력하면 검색 엔진이 쿼리와 연관된 키 집합(비디오 제목, 설명 등)과 매핑한 다음 가장 일치하는 비디오(값)를 제시합니다.

 

 

 

 

Attention (Self Attention)의 수식을 살펴보면 쿼리 , 키 , 벨류 벡터 형태이며 쿼리*키는 어텐션 스코어로 높을수록 단어 연관성이 크다고 봅니다. 결론적으로 소프트맥스의 결과 값은 키값에 해당하는 단어가 현재 단어와 어느정도 연관성 있는지를 나타냅니다.

 

여기서 scaling을 해주는 이유는 dot-products의 값이 커질수록 softmax 함수에서 기울기의 변화가 거의 없는 부분으로 가기 때문입니다. 그래서 너무 커지지 않게 방지해주기 위함인 것이죠.

 

다음은 이 Attention들을 병렬처리 해 준 Multi-head Attention 입니다. 이것은 후 Transformer 설명에도 등장하게 됩니다.

 

 

 

 

갑자기 이런 궁금증이 생길 수도 있을것 같습니다. 자연어 처리에서는 단어의 순서와 위치가 중요해서 RNN을 사용해왔던 것인데 RNN을 쓰지 않는 Transformer에서는 어떻게 활용하는 것일까요?

 

 

 

 

바로 positional encoding 덕분입니다.  그리고 각 층에 residual connection과 layer nomalization이 적용되었는데 이는 딥러닝모델을 학습하다보면 역전파에 의해서 positional 인코딩이 손실될수 있어서 residual connection으로 입력된 것을 다시 한번 더해주고 layer-normalization으로 학습의 효율을 증진시킨다고 합니다.

 

 

 

decoder에서는 encoder 과는 다른점이 있는데 바로 Masked Multi-Head Attention입니다. Masked Multi-Head Attention이란 아직 출력되지 않은 미래의 단어에 어텐션 하지 않으려는 기법으로 순차적으로 decode 할 수 있게 해줍니다. 

 

 

마지막으로, 이 모든 기법이 포함된 BERT에 대해 설명하겠습니다. 

 

 

 

<BERT 란?> 

 

• Bidirectional Encoder Representations from Transformers의 약자

• 18년 10월 구글에서 논문 공개

• NLP 분야에서 앙상블 모델 보다 더 좋은 성능을 내고 있어 관심을 받고 있다.

• 이전에는 데이터 전처리 임베딩을 Word2Vec, GloVe, Fasttext 방식을 사용, 요즘은 대부분 BERT를 사용

• Transformer 인코더를 잘 쌓아 놓은 훈련된 모델

• BERT는 모델 크기에 따라 base 모델과 large 모델을 제공

BERT_base : L=12, H=768, A=12, Total Parameters = 110M
BERT_large : L=24, H=1024, A=16, Total Parameters = 340M• 
L : transformer block의 layer 수, H : hidden size, A : self-attention heads 수

• 대부분의 NLP Task SOTA (State of the art)는 BERT_large 모델로 이루어냈다.

 

 

 

•cls 토큰  - 문장의 시작

•sep 토큰 - 문장의 나뉨

•Token Embeddings : 단어들의 토큰을 이용한 Embedding

•Segment Embeddings : A라는 문장과 B라는 문장을 구별하기 위한 Embedding

•Position Embeddings  : 단어들의 위치정보를 이용한 Embedding

 

 

 

BERT는 기본적으로, wiki나 book data와 같은 대용랑 unlabeled data로 모델을 미리 학습 시킨 후, 특정 task를 가지고 있는 labeled data로 transfer learning(fine tuning)을 하는 모델입니다. bert를 훈련시켰던 방법으로 MLM, NSP가 있는데

 

 

MLM (Masked Language Model)

•입력 문장에서 임의로 Token을 가리고 그 Token을 맞추는 방식

•단어 중 일부 (15%)를 token으로 변경

15% 중 80% token을 가림 (mask)
15% 중 10% token을 random word로 변경
15% 중 10% token을 원래의 단어 그대로

 

 

NSP (Next Sentence Prediction)

 

•두 문장이 주어졌을 때, 두 문장의 순서를 예측하는 방식

•50대 50 비율로 실제로 이어지는 두 문장과 랜덤하게 추출된 두 문장을 넣어 BERT가 맞추게 함

 

 

아무래도 MLM+NSP 모델이 가장 뛰어난 성능을 보여주게 됩니다. 그렇다면 이 BERT를 어떻게 사용해야 할까요? 

그 전에 BERT의 Fine Tuning에 대해 설명해보겠습니다.

 

Fine Tuning

• 학습된 언어 모델을 전이학습 시켜 실제 NLP Task를 수행하는 과정

• BERT 이전에는 NER (Named-entity recognition) 이나 QA (Question Answer)을 풀고 싶다면 그에 맞는 알고리즘과 언어모델을 따로 만들어야 했다.

• 하지만 BERT의 언어모델을 전이학습 시켜 원하는 Task를 수행하는 것이 성능이 더 좋다는 것이 입증되었다.

 

 

Optimal hyperparameter도 task 마다 달라지긴 하지만 다음 제시하고 있는 파라미터들을 사용하면 대부분 잘 학습이 된다고 합니다. 또한 텐서플로 튜토리얼에 Fine Tuning BERT가 있으니 참고해 보셔도 좋을 것 같습니다.

 

https://www.tensorflow.org/official_models/fine_tuning_bert

 

Fine-tuning a BERT model  |  TensorFlow Core

In this example, we will work through fine-tuning a BERT model using the tensorflow-models PIP package. The pretrained BERT model this tutorial is based on is also available on TensorFlow Hub, to see how to use it refer to the Hub Appendix Setup Install th

www.tensorflow.org

 

BERT는 크게 4가지 방법으로 TASK를 수행해서 11가지의 DATA에서 SOTA를 달성했다고 합니다. 그 4가지 방법은 아래와 같습니다.

 

1. Setence pair classification :  두 가지 문장을 넣고 관계를 표현 ( A 다음 B 문장이 오는게 자연스러운지 아닌지 등등)

2. Single sentence classification : 영화 리뷰 긍정 or 부정

3. Question Answering : 질문 & 답변

4. Single sentence tagging : 각각 토큰에 대한 출력단어의 시작인지 끝인지를 태깅

 

11가지 데이터는 다음과 같습니다. 

 

GLUE Dataset

MLNI : 현재 문장 다음에 이어지는 문장이 문맥상 이어지는 문장인지, 반대되는 문장인지, 상관없는 문장인지분류를 위한 데이터 셋

QQP : 두 질문이 의미상 같은지 다른지 분류를 위한 데이터 셋

QNLI : 질의응답 데이터셋

SST-2 : 영화 리뷰 문장에 관한 감성 분석을 위한 데이터셋

CoLA : 문법적으로 맞는 문장인지 틀린 문장인지 분류를 위한 데이터셋

STS-B : 뉴스 헤드라인과 사람이 만든 paraphrasing 문장이 의미상 같은 문장인지 비교를 위한 데이터셋

MRPC : 뉴스의 내용과 사람이 만든 문장이 의미상 같은 문장인지 비교를 위한 데이터셋

RTE : MNLI 와 유사하나 상대적으로 훨씬 적은 학습 데이터셋

WNLI : 문장 분류 데이터셋

 SQuAD v1.1 :질의 응답 데이터셋

 CoNLL 2003 Named Entity Recognition datasets : 개체명 분류 데이터셋

 SWAG Situations With Adversarial Generations : 현재 문장 다음에 이어질 자연스러운 문장을 선택하기 위한 데이터셋

 

이렇게 만능일 것 만 같은 BERT에도 한계는 있는데요 바로 일반 NLP 모델에서는 잘 작동하지만 다른 특정 분야 (bio, finance …)의 언어 모델에 사용하려면 잘 작동하지 않는다는 것입니다. 특정 분야에 대해 BERT를 적용하려면 언어데이터들을 수집해서 언어모델 학습을 추가적으로 진행해주어야 합니다.

 

 

근데 이미 똑똑한 능력자분들께서 각 분야에 맞는 BERT 모델을 만들어 놓으셨더라구요 SKTBrain에서 만든 KoBERT의 경우 구글에서 제공한 다국어버전 BERT 보다 성능이 더 좋다고 합니다. 

 

 

 BERT 이후에도 XLNET 이 SOTA를 달성했다고 하던데 기술은 나날이 발전하고 따라잡기 힘든것 같습니다 ㅜㅜ 

그럼 이상으로 간단한 BERT의 설명을 마치겠습니다 :)

 

 

 

'DL' 카테고리의 다른 글