(ICLR 2024) NEFTune: Noisy Embeddings Improve Instruction Finetuning
arXiv : https://arxiv.org/abs/2310.05914
code : https://github.com/neelsjain/NEFTune/tree/main
세 줄 요약
- NEFTune은 학습 과정에서 임베딩 벡터에 Uniform Random Noise를 더해주는 행위를 말한다.
- NEFTune을 통해 모델은 학습 데이터셋에 대한 오버피팅이 감소한다. (모델이 일반성을 갖게 됨)
- 오버피팅 감소의 부작용으로, NEFTune을 사용하면 결과의 verbosity가 증가하게 된다.
1. Introduction
- 논문이 다루는 task
- LLM Instruction fine-tuning 기법
- 해당 task에서 기존 연구 한계점
- Insturction fine-tuning을 통해 LLM을 길들이기 어렵다.
- 대부분의 작은 instruction datasets를 통해 LLM의 성능이 결정된다.
2. Related Work
- Instruction fine-tuning의 초기 형태들은 (ex> FLAN. T0)은 cross-task generalization(*)에 초점을 두었다.
- (*) cross-task generalization : 일반화된 성능을 통해 학습 데이터셋에 없는 task에 대해서도 좋은 성능을 내는 것
- 정말 다양하고 많은 NLP tasks에 대해 fine-tuning하는 연구가 있었고, 심지어 1000개의 tasks로 실험한 연구도 있었다.
- 이러한 연구들을 통해 LLM은 (simple) NLP tasks에 대해 쉽게 적응될 수 있다는 것을 알 수 있다.
- 그러나 현실의 문제는 simple NLP tasks와는 다르다.
- real-world scenarios는 복잡한 open-ended queries에 대해 서술형 답변을 제시할 필요가 있음.
- (*) open-ended query : Yes/No로 대답할 수 없는 질문
- real-world scenarios는 복잡한 open-ended queries에 대해 서술형 답변을 제시할 필요가 있음.
- open-ended query를 처리한 다양한 연구들이 있음.
- 초기 : InsturctGPT, GPT-3 (using RLHF), ChatGPT
- 응용 : Self-Instruct, Alpaca, WizardLM, ShareGPT, Platypus, AlpaGasus
- noisy inputs가 모델을 향상시키는 여러 방면의 연구가 있음
- Adversarial Scheme를 사용하여 MLM 모델이나 Graph 모델의 성능을 향상시킨 사례
- image captioning system이나 알고리즘에서 사용된 사례
3. 제안 방법론
Main Idea
Fine-tuning의 forward-pass 동안 학습 데이터의 embedding vectors에 random noise를 더하면
모델의 일반화 (generaliztion) 성능이 증가한다.
- 장점
- 추가적인 계산이나 데이터 없이 성능을 향상시킬 수 있음
- NEFTune을 사용한 LLaMA-2-7B 모델로 실험을 했을 때, AlpacaEval 데이터셋에서의 성능이 29.8%에서 64.7%로 약 35%p 상승하였음
- 저자는 LLM fine-tuning에서 이 기술이 개꿀이라고 함 (This techniques seems to be a free lunch for LLM fine-tuning.)
- 추가적인 계산이나 데이터 없이 성능을 향상시킬 수 있음
- NEFTune 방법
- 학습 시, embeddings에 random noise vector를 더한다.
- noise는 iid uniform entries sampling을 통해 생성함 (range : [-1. 1])
- scaling factor ($\alpha / \sqrt{Ld}$)를 전체 noise vector에 곱함으로써 scaling함
- $L$ : sequence length, $d$ : embedding dim, $\alpha$ : tunable parameter
- scaling rule은 adversarial scheme를 사용한 이전 연구들에서 따왔음
- random vector의 결과는 $\alpha / \sqrt{3}$으로 expect
- 학습 시, embeddings에 random noise vector를 더한다.
언뜻 보면 복잡해보이지만, 이해하면 1) 노이즈를 생성하고, 2) scaling factor를 곱해서, 3) 기존의 embedding vector에 더하는 게 전부다.
4. 실험
Baseline
아래의 모델들에 대해, NEFTune의 적용 유무를 비교
- 7B parameters LLMs
- LLaMA-1-7B
- LLaMA-2-7B
- OPT-6.7B
- RLHF model
- LLaMA-2-Chat (7B)
- Etc.
- LLaMA-2-13B
- LLaMA-2-70B
Instruction Fine-tuning Dataset
- 저자 측의 하드웨어 문제로 single-turn datasets 만을 사용하여 실험하였음
- Alpaca
- Evol-Instruct
- Open-Platypus
- ShareGPT
- ShareGPT는 Vicuna system prompt를 사용하였고, 나머지 데이터셋에 대해서는 Alpaca system prompt를 사용하였음
- LLaMA-1-7B 모델을 Alpaca 데이터셋으로 학습시키며 coarse sweep 방식으로 탐색한 하이퍼파라미터들 중, 기존 모델 대비 6% 성능 향상을 보인 하이퍼파라미터를 사용하였음
- 해당 하이퍼파라미터를 나머지 다른 모델들에도 동일하게 적용
Evaluation Dataset
- AlpacaEval (*)
- 모델의 대화 능력 및 전반적인 답변의 quality를 확인하기 위해 사용
- (*) AlpacaEval은 AI 모델 기반 자동화 평가 시스템임
- 타겟 모델을 Text-Davinci-003과 대결하는 방식으로 평가가 진행되며, Win Rate를 측정함
- Evaluator model (평가자 모델)은 보통 ChatGPT나 GPT-4를 사용함
- AI 모델이 평가하기에 신뢰도가 떨어진다고 느낄 수 있으나, 기존 연구에서 2만 명의 human annotators들로부터 평가 방식을 검증 받았음
- Hugging Face Open LLM Leaderboard (ARC, HellaSwag, MMLU, TruthfulQA)
- NEFTune이 모델의 능력에 부정적인 영향을 끼치지 않는 것을 확인하기 위해 사용
5. 결과
Results
- NEFTune improves Text Quality & NEFTune can improve Chat models
위 Table 1을 보면, NEFT를 적용했을 때 모든 dataset에 대해 상당한 성능 향상이 있다는 것을 확인할 수 있다. (평균 15.1%p 향상)
Figure 2를 확인했을 때에도, 모든 모델들이 모든 데이터셋에서 성능 향상을 보였다. 다만, ShareGPT 데이터셋의 경우에는 향상폭이 적은데, 이것은 Evalutor가 ChatGPT일 때만 나타난다. (GPT-4를 evalutor로 사용한 Table 1에서는 성능 향상이 뚜렷함)
파라미터 크기에 상관없이 NEFT는 빛을 발한다. 심지어, 이미 RLHF로 튜닝된 Chat 모델에 대해서도 효과가 있다.
- Effect on Capabilities
NEFTune은 모델의 capabilities를 보존한다.
- NEFTune works with QLoRA
NEFTune은 QLoRA를 적용했을 때에도 성능 향상이 있다. QLoRA의 파라미터인 $\alpha$ 값에 따라 성능 향상의 정도는 달라진다.
Table 3에서의 성능 향상은 full scale fine-tuning 보다는 덜 극명하다. 저자는 이 이유가 fine-tuning에서의 epochs 수 같은 하이퍼파라미터가 최적화되지 않았거나, 4-비트로 많이 양자화되었기 때문일 것이라 추측한다.
- 정성적 사례
NEFTune을 사용했을 때, 답변 길이가 더 길어지고, superposition과 quantum entanglement에 대한 더 명확한 설명과 잠재적인 응용에 대한 언급을 포함하여 설명한다.
Analysis
- 저자들은 '학습 시 임베딩에 노이즈를 더하는 것이, 모델이 instruction-tuning dataset의 세부 사항(*)에 대한 과적합이 감소할 것이라 가정'한다.
- (*) : formatting details, exact wording, text length
- NEFTune의 눈에 띄는 부작용은 모델의 결과가 더 일관성을 가지게 되고, 더 길어진다는 것이다.
- 대부분의 dataset에서 인간과 기계 평가자 모두 더 길고 장황한 답변을 선호하지만
- 저자는 "verbosity의 증가는 단지 과적합 감소로 인한 부작용일 뿐, 이것만으로는 성능 향상을 설명할 수 없다"고 설명함
Overfitting
NEFTune을 적용한 모델은 그렇지 않은 모델에 비해 Training Loss가 크지만, Test Loss에서는 작은 것을 확인할 수 있다.
이것은 NEFTune을 적용한 모델이 less overfitting & better generalization 된다는 것을 의미한다.
Conclusion
- LLM training 시, 알고리즘과 regularizers의 중요성에 대해 종종 무시하곤 하는데, 저자는 이 점을 NEFTune의 성공 요인으로 꼽음
- 컴퓨터 비전 분야에서는 regularization과 overfitting에 대한 연구가 수년 동안 연구되어 왔지만, LLM 분야에서는 optimizer stability 및 standardized training loops 만 연구되었을 뿐 generalization에 대한 연구는 거의 이뤄지지 않았음
Limitations
- AlpacaEval이 Evaluator LLM의 한 번의 판단으로 인해 biases를 가질 수 있음
- Compute resources 때문에 70B 이상의 모델에 대한 실험을 수행하지 못함
- 경험적인 연구일 뿐, 왜 NEPTune이 잘 되는지 이해하지 못함
After Reading
- 결과 설명이 명확하지 않은 것 같다.
- ChatGPT나 GPT-4가 모델을 평가하는 방식인 AlpacaEval의 신뢰성이 부족한 것 같다.
- 비록 기존 연구에서 AlpacaEval이 2만명의 annotators에 의해 검증되었다 하더라도, Table 1과 Figure 2에서 제시하는 ShareGPT의 Win Rate 결과가 Evaluator에 따라 비일관적이라는 점은 AlpacaEval의 신뢰성에 다시 한 번 물음표를 던지게 한다.
- -> 추후, AlpacaEval의 Evaluator 선정에 따른 결과 비교 연구도 해볼만 하겠다.
- 비록 기존 연구에서 AlpacaEval이 2만명의 annotators에 의해 검증되었다 하더라도, Table 1과 Figure 2에서 제시하는 ShareGPT의 Win Rate 결과가 Evaluator에 따라 비일관적이라는 점은 AlpacaEval의 신뢰성에 다시 한 번 물음표를 던지게 한다.
- OpenLLM Leaderboard를 가지고 실험하는 이유를 "NEFT가 모델의 능력에 부정적인 영향을 끼치지 않는 것을 확인하기 위해"라고 설명하는데, 너무 결과에 끼워 맞춘 서술인 것 같다 ㅋㅋㅋ
- 어쨌든 제시한 Figure 3을 보았을 때, 성능의 변화가 없다는 점은 주목할 만하다.
- 그러나, 왜 AlpacaEval의 성능은 올라갔지만 왜 OpenLLM Leaderboard는 변하지 않았는지에 대한 토론이 있다면 좋을 듯 하다.
- 모델 실험이 너무 많았던걸까. Figure 3과 Table 3에서 누락된 ShareGPT 기반 모델의 결과가 있었다면 더 좋을 것 같다.
- 특히, ShareGPT 기반의 결과는 앞서 말했던 것처럼 비일관적이었기 때문에, ShareGPT의 결과를 반드시 확인할 필요가 있다고 생각한다.
- 개인적인 추측으로는 성능 하락이 있어서, 일부러 Figure 3 및 Table 3에서 제외시킨 것이 아닌가 하는 생각이 든다.
- ChatGPT나 GPT-4가 모델을 평가하는 방식인 AlpacaEval의 신뢰성이 부족한 것 같다.
- Noisy Embeddings를 다른 연구에 적용해볼 수 있을 것 같다.