이전 강의 요약 - XCS224U: NLU I Intro & Evolution of Natural Language Understanding, Part. 1 I Spring 2023
이전 강의 요약 - XCS224U: NLU I Course Overview, Part. 2 I Spring 2023
이전 강의 요약 - XCS224U: NLU I Contextual Word Representations, Part. 1: Guiding ideas I Spring 2023
이전 강의 요약 - XCS224U: NLU I Contextual Word Representations, Part. 2: The Transformer I Spring 2023
이전 강의 요약 - XCS224U: NLU I Contextual Word Representations, Part. 3: Positional Encoding I Spring 2023
이전 강의 요약 - XCS224U: NLU I Contextual Word Representations, Part. 4: GPT I Spring 2023
강의영상1 : https://www.youtube.com/watch?v=yqV_YfBBtK0&list=PLoROMvodv4rOwvldxftJTmoR3kRcWkJBp&index=8
강의영상2 : https://www.youtube.com/watch?v=yqV_YfBBtK0&list=PLoROMvodv4rOwvldxftJTmoR3kRcWkJBp&index=9
강의영상3 : https://www.youtube.com/watch?v=yqV_YfBBtK0&list=PLoROMvodv4rOwvldxftJTmoR3kRcWkJBp&index=10
강의자료 : https://web.stanford.edu/class/cs224u/slides/cs224u-contextualreps-2023-handout.pdf - BERT 부분
이번시간에는 2018년 그 당시 GPT보다 더 유명했던 BERT에 대해 소개하려고 한다. 나는 vision 분야에 더 관심이 많아서 NLP분야는 잘 모르지만, vision 분야의 MAE, CLIP 과 같은 논문을 공부하면서 딱 이 BERT까지만 관심있게 봤었다. 현재는 chatGPT 때문에 GPT가 더 유명할진몰라도, 그 당시 BERT 논문의 성능을 보면 GPT가 왜 묻혔는지 알 수 있다.
아무튼 이 BERT 때문에, chatGPT를 뛰어넘는 대화형 AI챗봇이 나올 것이라고 기대했지만, Bard는 흠.. 현재까지 임팩트가 그렇게 크지 못한 것 같다.
그리고 그 뒤의 RoBERTa, ELECTRA까지 한번에 요약하려고 한다.
- BERT 또한 Transformer 구조를 바탕으로 만들어졌기에, 앞에서 설명한 내용들을 바탕으로 BERT의 구조가 구성이 되어있다. 차이점이 있다면 [CLS], [SEP] 토큰이 있다는 점과, Hierarchical Positional encoding이 있다는 것이다.
- CLS토큰은 문장의 시작을 알리는 Start token이라 생각하면 편하고, SEP 토큰은 문장의 끝을 알림과 동시에, BERT는 2개의 문장을 입력으로 넣기에, 이 둘을 구별하는 역할을 한다.
- Hierarchical Positional encoding은 앞서 말한 것과 유사하게, 2개의 문장중 어디에 속하는지에 대한 정보를 넣은 토큰.
앞서서 설명한 것과 같이 premise/hypothesis 를 입력 문장으로 넣는 것과 유사하다고 보면 된다.
- 그리고 GPT와 마찬가지로 10여개의 Transformer block을 거친다.
- BERT의 Output, 즉 training 방식은 GPT와 조금 다른데, BERT는 왼쪽 masking x, 중간 [mask] 토큰을 활용해서 masking 오른쪽은 무작위 단어를 활용해서 원래의 단어인 rules를 바꾸고 다시 제대로 돌아오는지 확인하는 것이다.
- 즉, Reconstruction task를 수행한다고 볼 수 있으며, 입력 토큰의 15퍼가 위와같이 3개중 하나의 작업이 수행되며 각각 비율을 1:8:1 이다. 즉 15%x80%확률로 [mask] 토큰으로 바뀌게 된다.
BERT: MLM loss function
- GPT에서 본 Conditional Language Modeling 방식과 유사한 Loss fuction을 가지고 있지만, 차이가 존재한다.
- 첫번째는 mt이다. 이 부분은 즉, masking 된 부분의 정확도만 고려하겠다는 것이다.
- 두번째는 xt이다. 여기서는 T부분에 대한 masking 된 부분을 복원할 때, 기존에는 1부터 t-1만 고려했다면, 여기서는 T빼고 모든 위치의 context를 고려해서 T부분을 예측한다. 이것이 가능한 이유는 Bidirectional Encoder형태이기 때문이다.
Binary next sentence prediction pretraining
- 앞서서 premise/hypothese 와 유사하게 2개의 문장을 넣는다고 말했는데, 실제로는 다음문장이 이어지는지, 안이어지는지에 대한 2가지 정보를 IsNext/NotNext로 넣는다.
- 이 부분은 추후에 다음에 어떤 문장이 올 것 같은지에 대한 문제를 예측하는 task에서 좋은 성능을 거둘 것이다.
- BERT의 경우는 CLS 토큰만 가지고 classification과 같은 downstream task에서 동작을 하는데, CLS 토큰은 입력 문장에 대해서 잘 요약이 된 정보를 가지고 있으므로, 잘 요약된 정보를 바탕으로 downstream task에 적용한다고 보면 된다
- 우측은 GPT에서의 fine-tuning task 과정인데, GPT는 max-pooling이던, mean-pooling이던 많은 정보를 요약을 해서 처리한다. 이 부분에서는 GPT가 더 많은 정보를 가지고 있다고 할 수 있다.
- 그리고 전에 말했었는데 BERT는 Wordpiecetokenizer를 사용해서 아주 작은 크기의 embedding space를 가진 다.
- 우측은 모델 사이즈 및 파라미터 수 이다.
BERT: Known Limitations
- 위의 4개는 모두, BERT가 가지고 있는 문제점이다.
1. 최적화가 안되어있다. Ablation study를 통해 더 나은 모델을 만들 수 있다.
2. Pre-train에서는 [MASK] 토큰을 사용하지만, fine-tuning에서는 사용하지 않음으로서, Pre-train과 fine-tuning에서의 연관성이 떨어질 수 있다.
3. 15%만 사용한다는 점은 학습을 효과적으로 가져가지 못한다. Vision 분야에서는 BEiT (40%), MAE (75%)로 매우 높게 가져간다. 언어라는 특성상 더 높게 비율을 가져가도 좋지 않을까 생각한다.
4. XLNet에서 제시한 문제로, unmasked 토큰이 서로 독립적이라고 가정하는 하에 이루어진다. New york이라는 단어가 있을 때, 우리는 이 둘을 매우 연관이 있는 단어로 생각하고 의존성이 있다고 생각하지만, 모델은 이 둘을 따로 생각한다는 단점이 존재한다는 것이다. 따라서 oversimplified 하다는 이야기를 한다. 그리고 이 단어들간의 의존성은 Natural language 분야에서 매우 흔하기에, 이러한 접근법은 문제가 있다고 이야기한다.
Robustly optimized BERT approach (RoBERTa)는 앞서서 소개한 BERT의 첫번째 한계점인 최적화가 덜 되어있다는 점을 개선한 모델이다.
- 우선 왼쪽의 표가 BERT와 RoBERTa의 차이점을 기술한 슬라이드이다. 차례대로 보자
1. Static masking/substituion을 Dynamic masking/substitution하게 바꿨다. 이게 무슨 소리냐 하면, BERT는 A라는 문장에 대해서 masking 되는 위치가 항상 동일하다. A라는 문장이 I love cat 이고 [Mask] 토큰이 I love [Mask] 처럼 적용된 다면, 항상 이 I love [Mask]라는 문장을 BERT가 학습하는 것이다. 이 방법은 진짜 비효율적이다. 따라서 손쉽게 각각의 Batch마다 새로운 masking방법을 적용하는 Dynamic masking/substitution 방법론을 적용한다.
2, 3. BERT의 입력은 IsNext/NotNext로 나누어서 Next sentence prediction (NSP) 작업을 하기 위해 2개의 문장을 집어넣었는데, RoBERTa에서는 document boundaries라고 하여 문서, 문장, 문단 단위로 입력을 넣었다. 또한 NSP 작업을 제외하고 문서 단위로 넣으면서 조금 더 효율적인 입력을 가져갔다
4. BERT의 배치사이즈는 256인데, RoBERTa는 2048개, 즉, 2k개의 배치 사이즈를 가져갔다.
5. BERT는 Word-piece tokenization, RoBERTa는 Character-level byte-pair encoding을 가져갔다.
6. BERT보다 RoBERTa가 더욱 더 많고 다양한 데이터 셋으로 학습을 가져갔다
7. Training epoch은 BERT가 더 크지만, RoBERTa가 더 많은 Batch size를 가진다는 것을 기억하자.
8. BERT는 Short sequence를 먼저, RoBERTa는 only full-length sequences에 대해 학습한다. BERT는 corrupted된 토큰을 복구하는 것이 목표이기 때문에 근처에 있는 Token을 우선적으로 반영하기에 짧은 길이로 보게 되며, RoBERTa는 문서 단위로 입력을 넣기에 긴 길이의 sequence를 본다.
++자세한건 RoBERTa의 3.1 section을 참고하자.
- 위의 3개의 그림은 실험의 결과를 보여주는데, 왼쪽은 Full-sentences vs doc-sentences의 차이이다. full sentences는 입력 sequence의 길이가 512면 512개만큼 잘라서 입력을 넣는 것이며, doc는 512개를 넘지 않는 선에서의 문장 여러개를 연결하여 입력으로 넣는 것이다. 정확도는 doc-sentences가 더 높지만 512개를 맞춰서 넣는 것이 입력에 편하기에 정확도가 살짝 낮더라도 full sentences를 넣었다.
- 그리고 두번째는 batch size의 차이인데 2k에서 가장 좋은 것을 볼 수 있다.
- 마지막으로는, pre-train step을 500k번으로 가져가는게 좋다는 것이다. 기존의 BERT의 1m보단 낮지만, Batch size가 훨씬 더 크기에, 이정도도 많다. 또한 입력 데이터의 크기도 13GB vs 160GB로 차이가 크다.
- 마지막으로 RoBERTa의 파라미터이다.
- 이번에는 BERT의 한계점으로 지목된 2,3번째 문제를 해결한 ELECTRA모델이다.
- 각각 2번째: [MASK] 토큰을 fine-tuning task에서 사용하지 않음으로써 pre-train과 fine-tuning이 동떨어진다는 것, 15%의masking token만 사용하는 것은 비효율적이라고 언급했다.
- 그렇다면 우리의 ELECTRA모델은 어떤 방법을 사용했을까? ELECTRA는 BERT에다가 GAN(Generative Adversarial Network)의 아이디어를 넣었다고 볼 수 있다.
- Generator는 small-BERT와 같은 역할이라고 볼 수 있고, 이 Generator의 출력 값을 바탕으로 Discriminator를 넣어서 original 인지 re-placed로 잘못된 예측을 하였는지 알아내는 역할을 수행한다
- 두번째 그림은 이 Generator의 사이즈가 적당할수록, Discrimator는 클수록 더 좋은 성능을 낸다는 것을 보여준다. (남색-768 sequence length, 주황색-512 seq_len, 초록색-256 seq len of Discriminator ) 이 말은 Discrimator가 중요한 역할을 한다는 것을 의미한다.
- 오른쪽 그림은, 기존의 BERT와 ELECTRA의 Efficiency를 비교한 그림인데, FLOPS 즉 모든 training을 하는데 소요되는 총 연산량의 수 및 정확도 부분에서 ELECTRA가 훨씬 더 뛰어난 것을 볼 수 있다. (왼쪽 위로 갈 수록 더 좋다)
- 그리고 Full-Electra를 사용하는 것이 15%의 ELECTRA를 사용하는 것 보다 더 효율적이라는 것을 보여준다. Full electra란, 기존의BERT 처럼 Masking된 부분만 비교하는 것이 아닌, 모든 부분에 대해서 비교를 하는 것이다. 성능 테이블은 아래에서 이미지를 참고하기 바란다.
- 그리고 왼쪽의 All-tokens MLM은 BERT와 매우 유사한 것을 볼 수 있다. Discrminator를 제거하고 Only Generator를 사용했을 때 이다.
- 그리고 중간의 표는 아주 간단한 방법만으로도 BERT의 성능을 향상시킬 수 있다는 것을 보여주며, 마지막 우측의 표는 모델의 여러가지 변형을 보여준다.