23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
2022년 OpenAI의 ChatGPT가 시작한 LLM 모멘트는 2023년에도 여전히 쭉 이어지고 있는 것 같습니다.
며칠전 OpenAI의 DevDay 소식만 봐도 피드가 도배면서 관심이 뜨거웠던것 같네요.
덕분에 정말 다양하면서도 성능이 좋은 LLM 모델들이 꾸준히 등장하고 있는데요. (Meta의 LLaMA, Google의 Bard, 그리고 SKT가 투자한 Anthropic의 Claude등등)
오픈소스 진영에서는 그 중에서도 특히 Meta가 공개한 LLaMA를 필두로 다양한 데이터셋으로 튜닝된 모델이 하루가 다르게 등장하고 있는 것 같습니다😄
오늘의 주제는 튜닝🪄과 관련이 있는데요. LLM에서 튜닝은 정말 중요한 요소라고 할 수 있습니다.
어떤 데이터로 어떻게 튜닝하냐에 따라 같은 LLM을 사용했더라도 답변의 스타일이나 답변의 평균길이등이 달라지게 되기 때문인데요.
본 포스팅에서 소개해드릴 내용은 이러한 튜닝을 도와주는 방법으로써 LLM의 말솜씨를 성능저하 없이 유창하게 해주는 간단한 튜닝 트릭이라고 보시면 되겠습니다.
간단하게 개념 위주로 살펴보도록 하겠습니다😊
ChatGPT 같이 LLM이 사용자의 의도를 이해하고 이에 맞는 답변을 생성하도록 만드는 과정을 Alignment라고 부르는데요.
대표적인 방법이 바로 Instruction tuning입니다. (이전 글 참고: ChatGPT, LLaMA 그리고 이젠 Alpaca?)
NEFTune (NEFTune: Noisy Embeddings Improve Instruction Finetuning)는 이러한 Instruction tuning을 할 때 도움을 주는 간단하면서도 파워풀한 기법입니다.
NEFTune을 적용하면 LLM의 말솜씨가 유창해지면서 성능평가에도 영향을 주게 되는데요.
평가 결과를 한번 보실까요?
아래의 Figure 1를 보시면 AlpacaEval로 평가시 NEFTune을 적용 후 win rate 수치가 꽤 많이 증가한 것을 확인할 수 있습니다.
Alpaca 데이터셋(다소 답변시퀀스의 길이가 짧은)에 대해서는 무려 29.8% -> 64.7%로 win rate이 개선되었습니다.
NEFTune은 논문의 제목에서도 알 수 있듯이 Noisy Embedding을 사용하는 것인데요.
현재는
Huggingface🤗와trl에 통합되어서 아래와 같이 사용하실 수 있습니다 (neftune_noise_alpha값은 5~15정도로 셋팅하면 됩니다)
NEFTune 개념 및 적용 방법을 간단하게 설명드리자면,
임베딩 레이어에 노이즈 임베딩을 더해줌으로써 Instruction tuning 할때 generalization 효과를 가져오게 하는 것! 이라고 할 수 있겠습니다.
적용 방법은 다음과 같습니다.
적용 순서 | 알고리즘 |
|---|---|
[1] iid (independent and identically distributed) uniform 분포로부터 랜덤한 노이즈를 생성 [2] 시퀀스의 길이와 임베딩 차원의 크기로 나눠서 정규화하면서 동시에 tunable parameter Alpha를 곱해주어 스케일링을 함 (Scaling rule의 경우엔 Adversarial ML Literature (Freelb: Enhanced adversarial training for natural language understanding) 연구를 참고) [3] 임베딩 레이어에 더해줌 |
LLM은 7B 크기의 모델을 주로 사용했으며,
LLaMA-1, LLaMA-2, OPT 모델을 사용했고 평가를 위해 다음의 4개의 데이터셋을 사용했습니다.
Alpaca: self-instruct 기반으로 생성한 데이터셋
Evol-Instruct: 7만개 정도되는 싱글턴 데이터셋이며 Alpaca보다는 조금 더 복잡한 내용을 다루고 있음
Open-Platypus: 2.5만개 정도 되며 11개의 오픈소스 데이터셋을 큐레이션해서 만듦. STEM 및 Logical domain의 개선을 목표로함
ShareGPT: 7만개정도 되는 ChatGPT와의 멀티턴 대화를 공유한것. 본 연구에서는 싱글턴만 사용함
평가는 크게 아래의 두가지로 진행했습니다.
[1] AlpacaEval (GPT-4를 evaluator로 쓰며 본 연구에서는 ChatGPT도 병행함)
[2] Open LLM Leaderboard (lm-evaluation-harness 기반)
AlpacaEval | Open LLM Leaderboard |
|---|---|
AlpacaEval은 Text-Davinci-003과 805개의 Instructions(Vicuna, koala, Antropic's hh-rlhf, ...)에 대한 답변 생성 품질 두고 한판 붙는(?) 평가 방식입니다.
자동화된 평가를 위해 평가자는 사람이 아닌 GPT-4가 사용되며 어떤 답변이 더 우수한지를 평가하는 win rate이 지표입니다.
OpenLLM Leaderboard는 ARC, HellaSwag, MMLU, TrurhfulQA 등 다양한 태스크에 대해서 평가하며 주로 정답과 오답에 대한 log-likelihood를 측정하거나
MRC처럼 Exact match를 측정하는등 다양한 지표를 사용해서 평가하게됩니다.
NEFTune은 다양한 모델에 대해서도 동일한 경향을 보이며 AlpacaEval win rate이 개선됨을 보여주었습니다.
이미 RLHF가 적용된 LLaMA-2-Chat모델과 70B나 되는 LLaMA-2 (70B)에서도 성능 개선을 보여주었습니다.
모델 간 성능비교 | RLHF, 70B 실험 |
|---|---|
AlpacaEval에서 뚜렷하게 성능이 개선되었다는건 GPT-4 혹은 ChatGPT가 보기에 답변 품질이 좋았다는 뜻이겠죠.
하지만 OpenLLM Leaderboard에서는 각 태스크에서 비슷한 성능을 보여주게 됩니다😱😭
표현력이 좋아졌다고해서 갖고 있는 지식이 더 많아졌다는 건 아니라는 뜻일까요?🤔
NEFTune의 방법론은 Instruction tuning할때 overfit 현상을 방지한다는게 핵심입니다.
상대적으로 적은 수의 Instruction 데이터셋을 학습하다보면 데이터셋 안에 있는 단어폭에 갇히게 되거나 데이터셋의 답변 길이와 비슷한 수의 토큰을 생성하게 되거나 특정 포멧을 학습하게 될텐데요.
이런 부분에 있어서 overfit을 방지하는 방법론이기 때문에 지식자체는 비슷하지만 생성되는 텍스트의 품질은 좀 더 일반화가 되서 답변 품질이 정성적으로 그리고 GPT-4가 볼때 좋게 보이는게 아닐까 싶습니다.
생성된 예시를 한번 보겠습니다.
조금 더 부연설명이 많아진게 보이시나요? 간단한 방법으로 더 풍성한 답변을 얻을 수 있게 되었습니다👏
이미 huggingface에서 사용할 수 있게 된 만큼 앞으로도 많이 쓰이는 테크닉이 되지 않을까 싶네요.
저자는 추가로 코멘트하기를 사용시에는 Greedy decoding 셋팅에 repetition penalty를 1.2로 셋팅 할 것을 제안합니다.
이 부분은 실제 써보면서 테스트 해보시는 것이 좋을 것 같습니다.
오늘은 LLM의 말문을 틔워줄 간단하지만 강력한 방법인 NEFTune에 대해서 알아보았습니다.
LLM을 튜닝하시는 많은 분들에게 작게나마 도움이 되셨기를 바라며, 끝으로 Bing Image Creator가 그려준 LLaMA + NEFTune그림으로 인사드리겠습니다👋
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.