참고자료: https://baekyeongmin.github.io/paper-review/roberta-review/
아이디어(연구 동기)
BERT는 아직 undertrain, Pre-training과정에서 다음 Hyper-parameter의 튜닝으로 더 좋은 결과를 얻는다.
- train data: BERT에 비해 더 많은 데이터 + 더 오랜 시간 + 더 큰 batch size로 학습을 진행
- Pre-training objective: NSP(Next Sentence Prediction) task를 제거
- Sequence Length: BERT는 짧은 입력 문장들을 이용하는 downstream task를 대비해 pretraining시 0.1의 확률로 최대 길이보다 더 짧은 길이의 데이터를 이용. 이러한 로직을 제거하고 최대 길이의 데이터로만 학습을 진행
- Masking strategy: Masking을 진행할 때, BERT의 static masking이 아닌, 입력을 만들 때마다 masking을 다시 하는 'Dynamic masking'전략을 이용
Background(BERT)
- BERT는 self-supervised learning 학습법을 이용. 따라서
- 많은 양의 unlabeled corpus를 이용해 언어 자체에 대해 배워나가는 pre-train 단계
- 특정 domain의 task(downstream task)를 학습하는 fine-tuning단계로 구성
- 이 두개의 단계를 차례로 거쳐 학습 된다.
많은 NLP task들에서 대량의 corpus에서 unsupervised objective를 통해 학습된 word embedding으로 모델 parameter를 초기화하는 방법은 향상된 결과를 보여줬다. BERT는 이와 유사하게, 많은 양의 data와 이를 이용할 수 있는 unsupervised objective(MLM, NSP)를 통해 학습된 모델로 fine-tuning 모델을 초기화 함으로써 더 좋은 결과를 얻을 수 있었다.
Input data
BERT는 두 개의 segment와 special token으로 구성된 입력을 이용. special token은 classification task의 repesentation으로 이용하기 위한 [CLS] 토큰과 두 segment를 분리하기 위한 [SEP] 토큰으로 구성된다. 따라서 최종 입력은
[CLS] + segment1 + [SEP] + segment2 + [SEP]
의 형태를 띤다.
pre-training data는 wikipedia + Book coupus를 이용. 약 16GB 정도의 크기를 갖는다.
Architecture
https://arxiv.org/abs/1706.03762 에서 소개된 transformer 구조의 encoder를 이용. transformer는 L개의 transformer block으로 구성되고, block에서는 multi-head attention, FFN 연산을 진행. 각 block은 A개의 multi-head와 hidden dimension H에 의해 결정된다.
Training Objective
Pre-training은 두 개의 objective(Masked Language Modeling, Next sentence prediction)를 optimize하도록 진행
Masked Language Modeling(MLM)
입력 문장 중 특정 확률에 따라 랜덤으로 토큰이 선택. 선택된 N%의 토큰 중 80은 마스킹, 10은 다른 토큰, 10만 그대로. MLM은 이 선택된 토큰들을 원래의 토큰으로 예측하는 문제를 푸는 것.(사람도 어려울 것 같은데)
- 입력 문장에서 특정 확률(15%)에 따라 랜덤으로 몇 개의 토큰이 선택. 선택된 15%의 토큰들 중 80%는 [MASK]로, 10%는 랜덤한 다른 토큰으로, 나머지 10%는 그대로 유지. MLM은 이 선택된 토큰들을 원래의 토큰으로 예측하는 문제를 푼다.
- MLM을 위한 데이터는 같은 문장이라도 서로 다른 여러 Masking 순서를 가질 수 있다. BERT 구현체에서는 pre-training 데이터를 미리 만들고 해당 데이터를 용해 학습을 진행한다. 따라서 학습시작 시 데이터는 고정된다. 이를 조금이라도 해결하기 위해 원래의 코드에서는 데이터를 만들 땨ㅐ 도잉ㄹ한 입력 문장에 대해서 서로 다른 mask를 생성할 수 있는 duplication_factor라는 인자를 추가했다. 이 인자의 default 값은 10인데 BERT가 40epoch를 학습했기 때문에 결과적으로 모델은 같은 데이터를 40번 본다.
Next Sentence Prediction
입력 데이터에서 두 개의 segment의 연결이 자연스러운지(원래의 코퍼스에 존재하는 페어인지)를 예측하는 문제를 푸는 것.
positive sample은 코퍼스에서 연속적인 segment를 선택함으로써 얻을 수 있고, negative sample은 설 ㅗ다른 문서의 ㄴegment들을 연결함으로써 얻을 수 있다. 이 task는 pair 단위의 downstreawm task들(NLI, text similarity)을 고려하여 디자인 됨.
Optimization
BERT는 Adam Optimizer(β1=0.9β1=0.9, β2=0.999β2=0.999, ϵ=1e−6ϵ=1e−6, L2 weight decay = 0.01)을 이용. LN은 1e-4를 이용. 첫 10,000 step에서 linear-warmup하여 최대치(1e-4)를 찍고 다시 linear하게 감소하는 scheduling을 이용. GELU activation과 모든 layer에서 0.1확률의 dropout을 이용. pre-training 단곋에서 batch size 256으로 약 1,000,000 step을 학습
Experiment
Reimplementation
실험을 위해 BERT의 학습 코드를 재구현, 대부분의 설정은 동일하고, 차이점은 다음과 같다.
- Peak Learning rate / warm up step: Batch Size에 따라 각각 tuning. ( BERT에서는 1e-4 / 256)
- Adam Optimizer: Large batch size에서 조금 더 안정적이도록 β2=0.98)로 설정
- Sequence Length: 짧은 문장은 사용하지 않는다. BERT에서 pre-training의 처음 90%는 짧은 길이(128, 256)로 학습하고 남은 10%에서 full length(512)를 이용하도록 권장, 처음부터 512(full length)로 학습을 진행
Dynamic Masking
참고 사항
cf) linear-warmup: LN을 낮은 비율에서 일정한 비율로 선형적으로 증가시키는 LN scheduling
https://paperswithcode.com/method/linear-warmup
cf) scheduling(LN scheduler): epoch가 흐름에 따라 LN을 조정해주는 기능
https://sanghyu.tistory.com/113
cf) batch & epoch https://m.blog.naver.com/qbxlvnf11/221449297033
- iterative한 알고리즘: gradient descent와 같이 결과를 내기 위해서 여러 번의 최적화 과정을 거쳐야 되는 알고리즘
- epoch: 1epoch란 전체 데이터 셋이 한번 neural network를 forward and backward로 거쳐감을 뜻한다. 전체 데이터셋에 대해서 한 번 학습을 완료한 상태
- iteration: epoch 한번 돌릴 때 batch를 pass 시키는 횟수.
- batch size: 한 번의 iteration에서 들어가는 데이터 샘플의 사이즈
cf) dropout: 딥러닝에서 Overfitting을 해소하기 위한 방법. hidden layer의 일부 유닛이 동작하지 않게 함으로써 overfitting을 막는다.
- overfitting을 막는 방법: 1) 데이터의 수를 늘려준다. 2) regularization을 사용한다.
- https://mongxmongx2.tistory.com/26
cf) encoding, BPE
- encoding: 사람의 언어를 컴퓨터가 알아볼 수 있게 만드는 과정. e.g. one-hot encoding, embedding
- 쪼까 어려운듯
cf) SOTA(=state-of-the-art): 현재 기준 최고 수준
'정리 > Machine Learning' 카테고리의 다른 글
Gradient Descent Methods (0) | 2023.02.18 |
---|---|
[경사하강법] gradient descent (0) | 2023.02.11 |
Transformer (0) | 2022.07.07 |
[FastCampus The RED 추천시스템] CBF (0) | 2021.11.11 |
[FastCampus The RED 추천시스템] 추천 시스템을 돌릴 때 고려사항 (0) | 2021.11.10 |