
1. BERT
BERT 논문과 여러 자료를 종합하여 정리

1.1. BERT 란?
BERT : Bidirectional Encoder Representations from Transformers
- 사전 훈련 언어모델
- 트랜스포머를 이용하여 구현되고, 위키피디아(25억 단어)와 BooksCorpus(8억 단어)와 같은 대용량의 레이블 없는 텍스트 데이터로 사전 훈련된 언어 모델
- 이를 토대로 문서 분류, 질의 응답, 번역, 감성 분석 등의 작업이 가능하다
GPT와 차이?
- undirectional vs bidirectional
- GPT 모델은 원본 Transformer의 decorder layer를 사용하여 각 토큰이 텍스트의 이전 단어에서 생성되는 autoregressive task 수행
- BERT 모델은 GPT와 같은 접근 방식을 사용
- 대신, BERT는 bidirectional transformer(mask가 없는 원본 Tansformer의 encoder layer)를 사용하여 모델이 관심 단어 전후의 context를 가질 수 있도록 함
- GPT와는 달리 새로운 네트워크를 붙이지 않고 fine-tunning 만을 진행함
- Masked Language Model(MLM) & Next sentence prediction
- Next sentence prediction
- 문장간 관계를 알아내기 위한 task, 두 문장이 실제 corpus에서 이어져 있는지 아닌지 확인
- 50%는 실제 이어져 있는 문장
- Next sentence prediction

인코더 블록은 BERT에서 사용, 디코더 블록은 GPT에서 사용. fine-tuning approach
ELMo는 독립적으로 훈련된 LSTM의 연결을 사용하여 downstream 작업을 위한 기능을 생성. feature-based approach
- GPT-1은 트랜스포머의 디코더를 이전 단어들로부터 다음 단어를 예측하는 방식으로 단방향 언어 모델
- input text의 다음 단어와 이전 단어와의 연결이 없음
- BERT는 양방향인 encoder-transformer architecture를 사용하기 때문에 input text에서 다음 모델을 예측하도록 모델을 훈련
- ELMo는 정방향 LSTM과 역방향 LSTM을 각각 훈련시키는 방식으로 양방향 언어 모델
1.2. BERT 구조
- BERT-Base : L=12, H=768, A=12 : 110M개의 파라미터
- BERT-Large : L=24, H=1024, A=16 : 340M개의 파라미터
(L : layer 수, H : 은닉층 차원 수, A : self-attention head 수)
1.2.1. BERT의 input representation

BERT Input : Token Embedding + Segment Embedding + Position Embedding
1.2.2. Token Embedding
- 실질적인 입력이 되는 워드 임베딩. 임베딩 벡터의 종류는 단어 집합의 크기로 30,522개
- WordPiece embdding 방식 사용
WordPiece embedding
BERT의 서브워드 토크나이저
- WordPiece 토크나이저 = BPE(Byte Pair Encoding)의 유사 알고리즘
- Embedding
- 신경망이 이해할 수 있는 벡터로 변환하는 것
- 단어를 기준으로 => 워드 임베딩
- 글자를 기준으로 => 캐릭터 임베딩
- 서브워드 토크나이저
- 자주 등장하는 단어는 그대로 단어 집합에 추가하지만, 자주 등장하지 않는 단어는 더 작은 단위인 서브워드로 분리되어 서브워드들이 단어 집합에 추가
- 단어 집합이 만들어지고 나면 이 단어 집합을 기반으로 토큰화 수행
- 입력 임베딩으로 [CLS] 토큰을 받음
- BERT-Base의 경우 12 Layer를 거쳐 768차원 벡터를 출력하게 됨 (출력 임베딩)
1.2.3. Segment Embedding
- 두 개의 문장을 구분하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 개수인 2개
- Sentence Embedding
- 토큰화 시킨 단어들을 다시 하나의 문장으로 만드는 작업
- [CLS] 토큰은 classification task할 때 token sequence 결합의 의미를 갖게 되고,
- 문장 구분을 위해 문장의 끝에 [SEP] 토큰을 붙여 분리를 하게 됨
- 해당 토큰이 문장 A 또는 문장 B에 속하는지 여부를 나타내는 학습된 embedding을 갖게 됨
- 두번째 문장에는 텍스트를 입력받을 수도 있고 문서를 입력받을 수도 있음
- 분류 작업이 아니라면 이 토큰 무시
1.2.4. Position Embedding
- 위치 정보를 학습하기 위한 임베딩. 임베딩 벡터의 종류는 문장의 최대 길이인 512개
- Self-Attention을 이용해 토큰의 순서를 인코딩
- Transformer의 encoder와 decoder 중 encoder부분만 사용
- Positional Embedding
- 사인 함수와 코사인 함수를 사용하여 위치에 따라 다른 값을 가지는 행렬을 만들어 이를 단어 벡터들과 더하는 방법
- BERT에서는 Positional Embedding과 유사하지만 위치정보를 사인 함수와 코사인 함수가 아닌 학습을 통해서 얻는 Position Embedding 사용
- BERT는 한 segment를 512 sub-word 길이로 제한
Position Embedding
WordPiece Embedding을 수행 한 후 위치 정보를 위한 임베딩 층을 하나 더 추가함

1.3. BERT의 Pre-training
- 마스크드 언어 모델 (Masked Language Model, MLM)
- 다음 문장 예측 (Next sentence prediction, NSP)
1.3.1. task #1. Masked Language Model (MLM)
사전 훈련을 위해서 인공 신경망의 입력으로 들어가는 입력 텍스트의 15%의 단어를 랜덤으로 마스킹(Masking) ([MASK] 토큰 생성됨)
이를 Transformer 구조에 넣어 주변 단어 맥락을 학습하고 마스킹된 토큰을 예측
이를 통해 양방향 pre-train 모델을 얻을 수 있지만 미세 조정 중에는 [MASK] 토큰이 나타나지 않아 사전 학습 단계와 파인 튜닝 단계 사이에 mismatch가 발생할 수 있음
이를 완화하기 위해 랜덤으로 15%단어들을 선택하는 과정에서
- 80%는 [MASK] 토큰으로 변경
- 10%는 랜덤으로 단어가 변경됨
- 10%는 단어들을 동일하게 둔다

최종 은닉 벡터 마스크 토큰은 출력 softmax에 공급
1.3.2. task #2. Next Sentence Prediction (NSP)
QA(질문 응답), NLI(자연어 추론) task에서 두 문장이 주어졌을 때, 두 문장의 순서를 예측하는 방식
사전 학습에서 문장 A와 B를 선택할 때 B의 반(50%)은 실제 이어지는 두 개의 문장으로, 나머지 반은 랜덤으로 이어붙인 두 개의 문장을 주고 훈련시킴
[SEP] 토큰으로 구분된 문장을 [CLS] 토큰의 위치의 출력층에서 이어지는 문장인지 아닌지 이진 분류 문제를 풀도록 함
masked lanuage model과 next sentence prediction은 따로 학습하는 것이 아닌 loss를 합하여 학습이 동시에 이루어짐

1.4. BERT의 Fine-tunning

a. 텍스트 쌍에 대한 분류 혹은 회귀 문제
- 텍스트 쌍을 입력받아 자연어 추론(Natural lanuage inference)
- 두 문장이 주어졌을 때, 하나의 문장이 다른 문장과 논리적으로 어떤 관계에 있는지 분류하는 것
- 모순 관계(contradiction), 함의 관계(entailment), 중립 관계(neutral)
b. 하나의 텍스트에 대한 텍스트 분류 유형
- 영화 리뷰 감성 분류, 뉴스 분류 등과 같은 Classification Task
- 문서 시작에 [CLS] 토큰을 입력하고 그 위치의 출력층에서 Dense Layer(밀집층) 또는 fully-connected Layer를 추가해서 분류에 대한 예측을 진행
c. 질의 응답 (Question Answering)
- 질문 텍스트와 본문 텍스트라는 두 개의 텍스트의 쌍을 입력
- 대표적인 데이터셋 : SQuAD
- 질문과 본문을 입력 받고 -> 본문의 일부분을 추출해서 질문에 답변
d. 하나의 텍스트에 대한 태깅 작업
- 품사 태깅 작업과 개체명 인식 작업
- 출력층에서 입력 테스트의 각 토큰의 위치에 Dense Layer를 사용해 분류에 대한 예측을 함
1.5. etc
- 훈련 데이터는 위키피디아(25억 단어)와 BooksCorpus(8억 단어) ≈ 33억 단어
- WordPiece 토크나이저로 토큰화를 수행 후 15% 비율에 대해서 마스크드 언어 모델 학습
- 두 문장 Sentence A와 B의 합한 길이. 즉, 최대 입력의 길이는 512로 제한
- 100만 step 훈련 ≈ (총 합 33억 단어 코퍼스에 대해 40 에포크 학습)
- 옵티마이저 : 아담(Adam)
- 학습률(learning rate) : 10−4
- 가중치 감소(Weight Decay) : L2 정규화로 0.01 적용
- 드롭 아웃 : 모든 레이어에 대해서 0.1 적용
- 활성화 함수 : relu 함수가 아닌 gelu 함수
- 배치 크기(Batch size) : 256
참고
02) 버트(Bidirectional Encoder Representations from Transformers, BERT)
* 트랜스포머 챕터에 대한 사전 이해가 필요합니다.  BERT(Bidire…
wikidocs.net
https://medium.com/@shauryagoel/bert-f6d23b06069f
BERT
We will discuss BERT in this article.
medium.com