1. BERT의 기본 개념
- NLP 분야에서 좋은 성능을 내는 LM.
- Transformer 구조를 기반함.
- BERT가 성공한 주된 기능은 문맥(context)을 고려하지 않은 word2vec과 같은 임베딩 모델과는 달리, 문맥을 고려한 동적 임베딩 모델이기 때문.
* 문맥 기반(context-based) 임베딩 모델과 문맥 독립(context-free)임베딩 모델의 차이
A : He got bit by Python --> 파이썬(뱀)이 그를 물었다.
B : Python is my favorite programming language --> 내가 가장 좋아하는 프로그래밍 언어는 파이썬이다.
- 두 문장에서 'Python'이라는 단어의 의미가 서로 다르다는 것을 알 수 있다. (A : 뱀을 의미 , B : 프로그래밍 언어를 의미)
- word2vec과 같은 '문맥 독립 임베딩 모델(context-free model)'의 경우 두 문장에서 'Python'이라는 동일한 단어가 쓰였으므로 동일하게 표현하게 된다. 즉, 동일한 임베딩을 제공한다.
- 반면 BERT와 같은 '문맥 기반 임베딩 모델(context-based model)'의 경우 문장의 문맥을 이해한 다음 문맥에 따라 단어 임베딩을 생성한다. 따라서 앞의 두 문장의 문맥을 기반으로 'Python'이라는 단어에 대해 서로 다른 임베딩을 제공한다.
- BERT는 Bidirectional Encoder Representation from Transformer의 약자이다.
- 이름 그대로 BERT는 Unidirection하지 않고, Bidirectional한 방향으로 문맥을 이해하여 단어의 표현을 출력하는 딥러닝 모델이다.
*BERT가 양방향 인코더 형태를 취한 이유?
- Transformer는 Bidirectional한 인코더와 Unidirectional(Left to Right direction)한 디코더로 구성되어져 있음.
- 즉, Transformer의 인코더는 양방향으로 문맥을 이해하고, 디코더는 왼쪽에서 오른쪽 방향으로 문맥을 이해한다.
- BERT가 Bidirectional한 형태를 취한 이유는 GPT-1의 등장에서 시작된다.
GPT-1이란?
GPT-1
- GPT1은 Transformer의 Decoder구조를 사용해 만든 LM이다.
- 문장을 입력 데이터로 사용하며, 단어를 하나씩 읽어가며 다음 단어를 예측하는 방법으로 모델을 학습시킴.
- 왼쪽에서 오른쪽 방향으로 문장을 읽어가며 모델을 학습 시켰으므로 (Unidirectional한 형태를 취했다고 볼 수 있음.)
- 이러한 학습 방식은 별로의 labeling 작업이 필요가 없기에 '비지도 학습'이라 할 수 있다.

- 따라서 GPT-1 학습 시 필요한 것은 엄청난 양의 질 좋은 데이터일 것이다.
- 모델이 발전하는 동시에 질적으로도 좋은 데이터를 선별하는 기술 역시 발전할 것이므로 GPT는 앞으로도 각광 받을 모델일 것이다.(GPT-3 폼 미쳤다)
- BERT는 GPT-1의 발표이후 얼마 지나지 않고 발표하게 됨.
- BERT는 GPT-1과 같이 문장을 단방향으로만 이해하는 것은 그 문맥을 이해하는데 한계가 있다고 판단하여, 예측해야 하는 단어의 왼쪽 뿐만 아니라 미래에 나올 오른쪽 단어에 대해서도 양방향으로 한꺼번에 학습할 수 있으면 더 좋은 성능을 낼것이라고 주장하였다.
- 그래서 BERT는 분석에 초점을 맞추기 위해 GPT와는 반대로 Transformer의 인코더 부분에만 집중하게 됨.
- GPT-1과 같은 기존의 Unidirectional L.M은 현재까지 읽은 단어를 통해 다음 단어를 예측할 수 있도록 학습이 된다.
- 반면 BERT는 동일한 문장 그대로를 학습하되, 가려진 단어(<mask> 토큰)를 예측하도록 학습한다.
- BERT도 GPT-1과 마찬가지로 사람이 직접 데이터를 labeling할 필요가 없다.
- 단순히 랜덤하게 문장 속 단어만 가려주고, 가려진 단어를 맞추도록 학습하면 되는것.
결론 : GPT-1은 Unidirectional한 형태, 지금까지 나온 단어를 통해 다음 나올 단어를 예측하는 것을 학습시키는 모델, 반면 BERT는 Directional한 형태로 문장 내 단어들을 통해 mask된 단어를 예측하는 것을 학습시키는 모델.
2. BERT의 구조
- 이름에서 알 수 있듯이 BERT는 Transformer의 encoder를 기반으로 하여 인코더만 쌓아 올린 구조이다.
Bert 동작 방식
Step1) 인코더에 문장을 입력
Step2) Multi-head attention mechanism을 통해 각 단어의 문맥을 이해
Step3) 문장에 있는 각 단어의 문맥 표현을 출력으로 반환
-BERT 논문의 저자는 두가지 구성의 모델을 제안했다.
(L: 인코더 층의 수, D: 인코더의 피드포워드 네트워크의 차원 수, A: 셀프 어텐션 헤드의 수)
- BERT-Base : L=12, D=768, A=12, Total Parameters=110M
- BERT-Large : L=24, D=1024, A=16, Total Parameters=340M
- 여기서 BERT-Base는 GPT-1과 하이퍼파라미터가 동일한데, 이는 BERT 연구진이 직접적으로 GPT-1과 성능을 비교하기 위함.
- BERT-Large는 BERT의 최대 성능을 보여주기 위해 만들어진 모델. (Bert가 세운 기록들은 이 구조로 이루어졌음.)
3. BERT의 학습방식
- BERT가 높은 성능을 얻을 수 있었던 것은, label이 없은 방대한 데이터로 모델을 사전 학습 시키고(Pre-Trained Model)
- 사전학습된 모델을 기반으로 label이 있는 다른 Task에 대해 파라미터를 파인 튜닝(Fine-Tuning)하는 방식을 채택했기 때문이다.
- 먼저 BERT에서 입력 데이터를 구조화하는 방식부터 살펴보자.
3.1 BERT의 입력 표현
- BERT 모델에 데이터를 입력하기 전에 다음 세 가지 임베딩 레이어를 기반으로 입력 데이터를 임베딩으로 변환해야 한다.
- 토큰 임베딩(Token Embedding)
- 세그먼트 임베딩(Segment Embedding)
- 위치 임베딩(Position Embedding)
- 즉, Bert의 input representation은 그림과 같이 세 가지 임베딩 값의 합으로 구성된다.
- Bert의 입력값으로는 한 문장뿐 아니라 두 문장도 받을 수 있다.
한 문장을 입력으로 받아 자연어 처리하는 Task로는 스팸, 긍정부정 분류 모델.
두 문장을 입력으로 받아 자연어 처리하는 Task로는 질의 및 응답이 있다.
- Bert는 한 문장 또는 두 문장의 학습 데이터를 통해서 토큰(단어) 간 상관관계 뿐 아니라 문장 간 상관관계도 학습하게 된다.
1) 토큰 임베딩 ( Token Embedding )
- 토큰 임베딩은 말 그대로 문장들을 모두 토큰화해 토큰들을 추출한다.
- 위 그림을 보면 다음 두 문장을 토큰화 한 것을 볼 수 있다.
- A: My dog is cute.
- B: He likes playing.
- 첫번째 문장의 시작 부분에는 [CLS] 토큰을 사용하며 이는 분류 작업에 사용된다.
- 두 문장이 입력값으로 받아들여진 경우 [SEP] 토큰을 통해 두 문장을 구분한다. 즉, [SEP]는 문장의 끝을 나타내는데 사용된다.
- Token Embedding은 Word Piece 임베딩 방식을 하용한다.
- 다음 그림과 같이 Word Piece 임베딩은 단순히 띄어쓰기로 토큰을 나누는것 보다 효과적으로 토큰을 구분한다.
- 위 그림을 보면 playing이라는 단어가 play와 ##ing이라는 하위 단어(sub-word)로 분할되는 것을 볼 수 있다.
- BERT는 Word Piece Embedding을 사용하여 다음과 같이 토큰화 한다.
- 단어가 어휘 사전에 있다 -> 그 단어를 토큰으로 사용.
- 단어가 어휘 사전에 없다 -> 그 단어를 하위 토큰으로 분할하여 하위 단위가 어휘 사전에 있는지 확인.
- 만약 하위 단어가 어휘 사전에 없다면 다시 하위단어로 분할한다.
- 이런식으로 개별 문자에 도달할 때까지 어휘 사전을 기반으로 하위단어를 계속 분할하고 확인한다.
- 위와 같은 방식으로 토큰화 하면 두가지 장점이 존재한다.
- 위 그림을 보면 play라는 단어는 놀다라는 뜻이 있고, -ing라는 단어는 현재 무엇을 하고 있다는 의미가 명확히 있기 때문에 딥러닝 모델에 이 두가지 단어의 의미를 명확히 전달 할 수 있다.
- 이렇게 쪼개서 입력하게 될 경우, Googling, Texting과 같은 사전에 없는 신조어같은 단어들도 Google과 ing, Text와 ing처럼 모델이 학습단계에서 봤을만한 단어들로 쪼개서 입력되기 때문에 흔치 않은 단어들에 대한 예측이 향상됨
- 즉 이전에 자주 등장하지 않은 단어를 전부 Out-of-vocabulary(OOV)로 처리하여 모델링의 성능을 저하했던 문제를 해결할 수 있다.
* 하위 단어 토큰화 알고리즘
하위 단어 토큰화 알고리즘
- 하위 단어 토큰화 알고리즘은 OOV 단어 처리에 매우 효과적이기 때문에 BERT, GPT-3을 포함한 많은 자연어 모델에서 널리 사용됨.
- 먼저 기존의 단어 토큰화 알고리즘의 문제점에 대해 살펴보자.
기존의 단어 토큰화 알고리즘의 문제점
- 모델은 어휘 사전을 구축하기 위해 데이터셋에 있는 텍스트를 공백으로 분할하고, 모든 고유 단어를 어휘 사전에 추가한다.
- 일반적으로 어휘 사전은 많은 단어로 구성되지만 여기서는 다음 단어로만 구성되었다고 가정해보자.
vocabulary = [game, the, I, played, walked, enjoy]
- 이제 'I play the game'이라는 입력 문장에서 토큰을 생성해 본다. 공백을 기준으로 분할하여 문장의 모든 단어를 얻는다.
- 즉, [I, play, the, game]을 얻게 된다.
- 이제 어휘 사전에 위 단어가 있는지 확인한다. 모든 단어가 어휘 사전에 있기 때문에 주어진 문장에 대한 최종 토큰은 다음과 같다.
tokens = [I, played, the, game]
- 이번에는 'I enjoyed the game'이라는 입력 문장에서 토큰을 생성해 보자.
- [I, enjoyed, the, game]을 얻게 된다.
- 어휘 사전에 위 단어들이 있는지 확인해 보면 enjoyed를 제외하고 어휘사전에 모든 단어가 있다.
- 하지만 enjoyed라는 단어는 어휘 사전에 존재하지 않기 때문에, <UNK>(unknown) 토큰으로 대체한다.
tokens = [I, <UNK>, the, game]
- 어휘 사전에 enjoy라는 단어가 있지만, 단어 enjoyed는 없기 때문에 이 토큰은 <UNK>와 같이 '알 수 없는 단어'로 표시된다.
- 이러한 문제점을 해결하기 위해 어휘사전을 더 크게 할 수 있으나, 이는 모델의 메모리 부족 문제와 성능 문제를 일으킬 수 있다.
- 이러한 이슈를 하위 단어 토큰화 알고리즘이 해결할 수 있다.
- 하위 토큰화 알고리즘은 공백을 기준으로 나눈 단어들을 어휘사전에 검색해보고, 없는 단어가 있는 경우 하위 단어로 쪼갠 후 검색한다.
tokens = [I, enjoy, ##ed, the, game]
- ed라는 단어 앞 ## 기호는 ed가 하위 단어이고 앞에 다른 단어가 있음을 나타낸다.
- 단어의 시작 부분에 해당하는 하위 단어 enjoy에는 ##기호를 추가하지 않는다.
- 그렇다면 분할할 단어와 분할하지 않은 단어를 어떻게 결정할까? 이 질문에 대한 답변은 하위 단어 토큰화 알고리즘에 있다.
- 하위 단어 토큰화 알고리즘들 중 세가지에 대해 설명해보겠다.
1) Byte Pair Encoding(BPE)
- BPE 알고리즘의 단계는 다음과 같다.
- 빈도수와 함께 주어진 데이터셋에서 단어 추출
- 어휘 사전의 크기 설정
- 단어를 문자 시퀀스로 분할
- 문자 시퀀스의 모든 고유 문자를 어휘 사전에 추가
- 빈도가 높은 기호 쌍을 선택하고 병합 및 어휘 사전에 추가
- 어휘 사전 크기에 도달할 때까지 앞 다섯 단계 반복

- 이렇게 만들어진 다음과 같은 어휘 사전을 생성했다고 가정해 보자.
vocabulary = [a,b,c,e,l,m,n,o,s,t,u,st,me,men,be]
- 이제 입력 단어 'mean'을 토큰화 해보자.
1. mean 이라는 단어를 어휘사전에 존재하는지 검색
2. 없으므로 하위 단어 [me,an]으로 분할.
3. 'me'는 어휘 사전에 있지만, 'an'은 없으므로 하위 단어 'an'을 분할
4. tokens = [me, a, n]
- 이제 입력단어 'bear'를 토큰화 해보자.
1. bear 이라는 단어를 어휘사전에 존재하는지 검색
2. 없으므로 하위 단어 [be,ar]으로 분할.
3. 'be'는 어휘 사전에 있지만, 'ar'은 없으므로 하위 단어 'ar'을 분할하여 확인
4. 'a'는 있지만, 'r'은 없는 상황.
5. 'r'은 개별 문자이므로 분할을 수행할 수 없는 상황. 'r'은 <UNK>토큰으로 교체.
tokens = [be, a, <UNK>]
- 입력 단어가 'men'일 경우
1. 어휘 사전에 'men'이라는 단어가 있으므로 해당 토큰이 반환된다.
tokens = [men]
2) Byte-level Byte Pair Encoding(BBPE)
- BPE와 매우 유사하게 작동하지만, 문자 수준 시퀀스를 사용하는 대신 바이트 수준 시퀀스를 사용.
- 단어 'best'를 문자 시퀀스로 변환해보자.
tokens = [b,e,s,t]
-단어 'best'를 바이트 시퀀스로 변환해보자.
tokens = [62,65,73,74]
- 이러한 바이트 수준 BPE는 다국어 설정 및 OOV 단어 처리에 효과적이라 여러 언어로 어휘 사전을 공유하기 좋다.
3) Wordpeice Encoding
- BPE와 유사하게 동작하지만
- 단, 고빈도 기호쌍을 식별하고 추가할 때 빈도가 아닌 가능도를 확인한다.
- 다음과 같이 기호 쌍 s 및 t의 가능도를 계산한다. $$\frac{p(st)}{p(s)p(t)}$$
2) 세그먼트 임베딩 ( Segment Embedding )
- Segment Embeddings는 주어진 두 문장을 구분하는데 사용된다.
- 아래 두 문장을 토큰화하면 다음과 같은 결과를 얻는다.
- A: My dog is cute.
- B: He likes playing.
- [SEP] 토큰과 별도로 두 문장을 구분하기 위해 모델에 일종의 지표를 제공해야 한다.
- 이를 위해 세그먼트 임베딩 레이어에서 입력 토큰을 제공한다.
- 위 그림은 입력 토큰이 A에 속하면 $E_A$를, B에 속하면 $E_B$에 매핑된다.
- 문장이 하나있는 경우, 문장의 모든 토큰이 $E_A$에 매핑된다.
3) 위치 임베딩 ( Position Embedding )
- Position Embedding은 토큰의 순서를 인코딩한다.
- 그 이유는 BERT는 Transformer의 encoder를 사용하는데, Transformer는 Self-Attention 모델을 사용한다.
- Self-Attention은 입력의 위치에 대해 고려하지 못하므로 토큰의 위치 정보를 주어야 한다.
- Transformer에서 위치 인코딩에 sin, cos 함수를 사용한 것 같이 BERT에서도 sin cos함수를 사용한 위치 인코딩을 제공하고 있다.
결론: 입력 문장을 토큰으로 변환하고, 토큰을 토큰 임베딩, 세그먼트 임베딩, 위치 임베이 레이어에 공급하고 임베딩들을 얻는다.
그 다음으로 모든 임베딩을 합산해 BERT에 입력으로 제공된다.
3.1 BERT의 사전 학습 전략
- BERT는 사전학습(Pre-Training)과 파인 튜닝(Fine-Tuning) 의 두 단계로 나뉘게 된다.
* 사전학습에서의 BERT와 GPT의 차이점
BERT와 GPT 차이점

- GPT는 선행학습된 모델 그 자체로 여러가지 Task를 수행 가능, 다만 그 모델 크기가 상당히 큼.
- BERT는 모델이 상대적으로 작으며, 각각의 Task를 수행하기 위해 Fine-Tuning이라는 과정이 필요.

- GPT는 모델을 학습시키기 위해 엄청난 시간과 돈이 든다.
- 하지만 BERT는 GPT에 비해 적은 시간과 돈이 들지만, Fine-Tuning이라는 과정이 필요함.
- BERT는 다음 두가지 Task에 대해 사전학습된다.
- 마스크 언어 모델링(Masked Language Model) MLM
- 다음 문장 예측(Next Sentence Prediction) NSP
* 언어 모델링(Language Modeling)이란..?
- 보통 언어 모델링(Language Modeling)은 일반적으로 임의의 문장이 주어지고, 단어를 순서대로 보면서 다음 단어를 예측하도록 모델을 학습시킨다.
- 언어 모델링은 다음 두 가지로 분류할 수 있다.
1. 자동 회귀 언어 모델링(auto-regressive language modeling)
- 자동 회귀 언어 모델링은 전방(left-right)혹은 후방(right-left)예측 두가지 방식으로 구분된다.
- 한 방향으로만 문자를 읽으므로 '단방향 언어 모델'이라고 할 수 있다.
2.자동 인코딩 언어 모델링(auto-encoding language modeling)
- 자동 인코딩 언어 모델링은 전방, 후방 예측을 모두 활용한다.
- 즉 예측을 하면서 양방향으로 문장을 읽는다.
- BERT는 자동 인코딩 언어 모델로, MLM을 사용한다.
3.1.2 마스크 언어 모델링(Masked Language Modeling) MLM
- MLM은 일련의 단어가 주어지면, 그 단어를 예측하는 작업.
- 주어진 입력 문장에서 전체 단어의 15%를 무작위로 마스킹하고, 마스크된 단어를 예측하도록 모델을 학습시키는 것.
- 마스크된 단어를 예측하기 위해 모델은 양방향으로 문장을 읽고 마스크된 단어를 예측한다.
- 하지만 여기에 문제가 발생하게 된다.
- Fine-Tuning단계에서는 입력에 [MASK] 토큰이 들어가지 않는다.
- 그렇기 때문에 BERT가 사전 학습되는 방식과 파인 튜닝에 사용되는 방식간에 불일치가 발생한다.
ex) Downstream Task가 감정 분석인 경우 굳이 [mask]토큰을 넣어 예측할 필요는 없어 사전훈련된 모델과 불일치가 발생.
- 이를 극복하기 위해 본 논문에서는 80-10-10%규칙을 이용한다.
- 주어진 토큰에서 마스킹된 15%의 단어들 중
- 80%를 [mask] 토큰으로 대체
- 10%를 임의의 토큰(임의의 단어)으로 대체
- 10%는 어떠한 변경도 하지 않고 그대로 둔다.
* ##가 포함된 하위 단어가 마스크된 경우, 해당 하위 단어와 관련된 모든 단어를 마스킹한다.
또한 만약에 하위 단어와 관련된 모든 단어를 마스킹 하는 동안 비율이 15%를 초과하면 다른 단어의 마스킹을 풀어준다.
- 이렇게 토큰화 및 마스킹 후 입력 토큰을 토큰, 세그먼트, 위치 임베딩 레이어에 입력후 모두 합해 입력 임베딩을 얻는다.
- 이 입력 임베딩을 BERT에 넣으면 각 토큰의 표현 벡터를 출력으로 반환한다.
- 모델은 마스크된 토큰을 예측하기 위해 BERT에서 반환된 표현 벡터 R을 활성화 함수가 소프트맥스인 피드포워드 네트워크에 입력하여 마스크된 입력 단어를 예측한다.
- 물론 학습 초기에는 BERT의 피드포워드 네트워크 및 인코더 계측의 가중치가 최적이 아니므로 모델이 올바른 예측값을 반환하지는 않는다.
- 하지만 역전파를 통한 반복학습을 거치며 최적의 가중치를 학습하게 된다.
- MLM은 빈칸 채우기 태스크(cloze task)라고도 한다.
3.1.3 다음 문장 예측(Next Sentence Prediction) NSP
- NSP Task에서는 BERT에 두 문장을 입력하고, 두 번째 문장이 첫 번째 문장의 다음 문장인지 예측하는 이진 분류 문제이다.
- 두 문장 A와 B가 주어졌다고 가정해 보자
- B문장이 A문장의 후속 문장일 경우 문장 쌍을 isNext로 표시해 B 문장이 A 다음 문장임을 알 수 있게 한다.
- B문장이 A문장의 후속 문장이 아닐 경우 문장 쌍을 notNext로 표시해 B 문장이 A 다음 문장이 아님을 알 수 있게 한다.
- NSP Task에서 모델의 목표는 문장 쌍이 isNext 범주에 속하는지 여부를 예측하는 것이다.
* 모델은 B가 A다음으로 이어지면 isNext를 반환, 아니면 notNext를 반환한다 따라서 NSP는 본질적으로 이진 분류 태스크다.
- NSP Task를 수행함으로써 모델은 두 문장 사이의 관계를 파악할 수 있다.
- 두 문장 사이의 관계를 이해하는 것은 질문-응답 및 유사 문장 탐지와 같은 Downstream Task에 유용하다.
그럼 NSP Task를 위한 데이터셋을 어떻게 얻을 수 있을까?
- 어떠한 말뭉치에서 데이터셋을 획득할 수 있다.
- 2개의 문서가 있다고 가정했을때
> isNext 클래스의 경우 한 문서에서 연속된 두 문장을 가져와 isNext로 표시
> notNext 클래스의 경우 한 문서에서 한문장, 임의의 문서에서 다른 문장을 가져와 notNext로 표시.
- isNext와 notNext 클래스를 각각 50%씩 유지해 클래스가 균형을 이룰 수 있도록 한다.
- NSP는 [CLS] 토큰의 표현 $R_CLS$ 토큰의 표현을 가져와 Softmax함수를 사용해 feedforward network에 입력한다.
- 그렇게 되면 문장 쌍이 isNext/notNext 에 대한 확률값을 반환한다.
- 다른 표현값은 모두 무시한채 [CLS] 토큰만 넣는 이유는 [CLS] 토큰은 기본적으로 모든 토큰의 집계 표현을 보유하고 있어 문장의 전체적인 의미를 담고 있는 토큰이기 때문이다.
- 피드포워드 네트워크 및 인코더 계층의 가중치는 반복학습을 통해 최적의 가중치를 학습하게 될것이다.
3.2 BERT의 사전 학습 절차
- BERT의 사전학습에는 토론토 책 말뭉치(Toronto BookCorups) 및 위키피디아 데이터셋을 사용한다.
1) 말뭉치에서 두 문장을 샘플링한다.
- 두 문장의 총 토큰 수의 합은 512보다 작거나 같아야 한다.
- 두 문장을 샘플링할 때 전체의 50%는 B문장이 A문장의 후속문장이 되도록, 나머지 50%는 B문장이 A문장의 후속문장이 아닌 것으로 샘플링한다.
2) Word Peice Embedding 방식을 사용하여 문장을 토큰화 한다.
3) 80-10-10% 에 따라 주어진 토큰의 15%를 무작위로 마스킹한다.
4) 토큰을 BERT에 입력하고, [MASK] 토큰을 예측함과 동시에 B문장이 A문장의 후속 문장인지 여부를 분류하게 한다.
- 즉, MLM과 NSP 작업을 동시에 사용하여 BERT를 학습시킨다.
- BERT는 총 100만 스텝을 학습시키고, 각 스텝당 batch size = 256이다.
- 학습률은 $lr = 1e-4, β_1 = 0.9 , β_2 = 0.999$로 설정하고 optimizer는 adam이다.
- 웜업 스텝은 1만 스텝으로 학습을 진행한다.
*웜업 스텝이란..?
학습률 스케쥴링
- 학습이 진행되면, 높은 학습률을 설정해 학습 초기에 모델의 큼 변화를 유도(학습 초기에는 수렴과 거리가 멀기 때문에 모델에 과감한 변화를 줌)
- 학습 후반에는 낮은 학습률을 설정해 모델에 작은 변화를 주어 최적화 한다(후반에는 수렴에 가까워지기 때문에 모델에 작은 변화를 줌)
- 즉, 학습 초기에 학습률 값을 높게 설정한 다음 학습이 진행되면서 학습률을 감소시키는 것을 학습률 스케쥴링이라고 함.
- 웜업 스텝도 학습률 스케쥴링의 일부.
- 학습률이 $1e-4$이고, 웜업 스텝이 총 1만 스텝이라고 가정하면, 초기 1만 스텝은 학습률이 0에서 $1e-4$만큼 선형적으로 증가한다는 것을 의미한다.
- 1만 스텝 후에는 학습률을 선형적으로 감소시키게 된다.
- 또한 드롭 아웃확률이 0.1인 모든 레이어에 드롭아웃을 적용한다.
- BERT에서는 GELU라는 활성화 함수를 사용하는데, 이는 가우시안 오차 선형 유닛(Gaussian Error Linear Unit)을 의미한다.
*GELU
GELU
- 최근 BERT, Wave2Vec 2.0 같은 최신 논문에서 많이 사용하는 성능이 뛰어난 함수.
- Dropout, zoneout, ReLU 함수의 특성을 조합하여 유도하였으며, ReLU의 smoothing 버젼이라 할 수 있다.
- ReLU의 경우 입력이 0보다 작아지는 순간 기울기가 0이 되기 때문에 파라미터들의 업데이터가 멈춘다. (dying ReLU)
- 반면 GELU는 죽이기 애매한 값들은 매우 완만한 기울기 0.0000001정도의 그레디언트를 곱해 살려는 주는 중용을 가짐.


'책 정리 > 구글 Bert의 정석' 카테고리의 다른 글
5장. 지식 증류 기반 BERT 파생 모델 (0) | 2023.02.08 |
---|---|
4.4장-Span BERT (0) | 2023.02.01 |
4-3장. ELECTRA (1) | 2023.02.01 |
3장. BERT 활용하기 (2) | 2023.01.31 |
1 . 트랜스 포머 (1) | 2023.01.02 |