23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
추론 모델(Reasoning models)은 Inference-time scaling이라고도 불리는, 생성 시간에 더 많은 자원을 투자하여 고품질의 답변을 만들어내는 원리를 적극 활용하는 모델들로,
OpenAI의 o1, o3, o4 모델들, Gemini-2.5 pro, DeepSeek-R1처럼 think trace를 거쳐 유저에게 전달할 답변을 생성하는 것이 특징입니다.
그런 추론 모델을 잘 만들기 위한 방법들 중 오늘 소개드릴 내용은 어떻게 추론 모델을 학습시킬 데이터를 잘 만들 수 있을까에 대한 논문으로,
Qwen2.5-7B-Instruct model의 수학/코드/과학 성능을 비약적으로 상승시킨 결과롤 소개하고 있습니다.
Open Thoughts에는 Stanford, University of California Berkeley, University of Washington, Bespoke Labs, UT Austin 등 다양한 소속의 연구자들과 엔지니어들이 소속되어있으며,
저에게는 Alpaca 시리즈로 유명한 Tatsunori Hashimoto 교수님과, 최근에 Allen Institute of AI/UW 에서 각각 NVIDIA/Stanford 로 소속을 옮기신 최예진 교수님이 익숙한 저자입니다.
Open Thoughts에서는 추론 모델 학습 데이터를 만드는 과정에서 엔지니어링이 필요한 변수들을 다양하게 탐색해보기 위해,
파이프라인의 한 단계씩에서 평가를 통해 수학/코드/과학 벤치마크에서 전반적으로 가장 우수한 성능을 낸 방식을 채택하여 다음 단계를 진행하는 식으로 실험이 진행되었습니다.
이 글에서는 Open Thoughts 논문에 소개된 다양한 실험들을 정리해보면서, 저의 생각도 함께 정리를 해볼까 합니다.
Latest dataset: OpenThoughts3-1.2M
Latest model: OpenThinker3-7B
Training framework: LLaMA-Factory
Evaluation toolkit: evalchemy
문제별로 Teacher model 답변을 여러개 생성하는건 효과적이고, 성능상의 이점도 크다.
꼭 teacher 성능이 좋은 teacher를 보장하는건 아니고, QwQ-32B가 DeepSeek-R1보다 좋은 teacher일 수 있다.
답변 verification이나 filtering이 성능 향상에 크게 영향을 주지는 않는다.
데이터 소스들 중 질문난이도 평균 점수 기준 top8 뽑는거보다 top 1, top 2 뽑는게 나았다.
질문의 난이도나 답변길이 필터링이, embeddings나 fastText filtering보다 나았다.
Main table
프로젝트 진행과 성능 향상 과정
Bespoke-Stratos 17K로 시작
OpenThoughts 114K: 기존 데이터들 합치고 오답 filtering
OpenThoughts2 1M: 소스 추가
OpenThoughts3 1.2M: 본문에서 자세히 소개
별다른 얘기가 없으면 각 단계 실험용으론 31600개 sample로 구성하고, DeepSeek-R1으로 답변 생성한 dataset으로 실험했다고 합니다.
질문 Sources 평가 단계
분야별 Top3 질문 data sources
질문 Sources Mixing 단계
Top N 개 data sources 중 31600/N개씩 random sample 해서 데이터를 구성해본 실험 결과
여러개 데이터 고르지 말고, 분야별 top1~2에서만 고르자는 결론을 낼 수 있었다고 합니다.
최종 선택된 5개 Sources는 다음과 같습니다.
Code: CodeGolf, OpenCodeReasoning
Math: OpenMath-2-Math (이 데이터의 크기가 커서 1개만 선택)
Science: StackExchangePhysics and OrganicChemistry-PDF
질문 filtering 단계
5개 소스로부터 이번엔 random sample하지 말고, 필터링 방법을 다양하게 해보면
Math나 science는 GPT 답변 길이로, Code는 질문 난이도 GPT 평가로 filtering한게 가장 좋았다고 합니다.
질문의 중복 제거 여러개 답변 샘플링 단계
답변당 답변 개수 여러개로 만들고, 중복 제거(deduplication)도 다양한 방법으로 해보니
16개 answers 좋았고, Math나 science는 exact dedup, code는 no dedup이 좋았다고 저자들은 적어두었습니다.
16개 answers 로 고정하면, code는 fuzzy, math는 exact dedup, science는 no dedup이 좋았다고도 해석할 수 있을 것 같습니다.
제가 이 표의 결과를 정리한다면
Code는 문법이 좀 더 strict하기때문에 variability가 낮아서 4개 답변정도, Math/science는 16개 답변정도가 좋고
대부분의 deduplication 방법들은 숫자를 무시하기 때문에, 숫자가 많이 들어간 Math는 dedup의 의미가 크지 않거나, 숫자가 바뀜으로써 결과가 달라지는 것도 배워야 한다고 생각하면 수학은 dedup하지 않는 것이 괜찮고,
code는 문제를 deduplication 하는 것이 나았다고 할 것 같습니다.
답변 filtering 단계
답변 filtering 다양한 방법들을 비교해보니
일반적으로 상상하기에는 답이 맞았는지/틀렸는지가 추론 능력 향상에 굉장히 중요한 요소일거라 생각하지만, 의외로 그런 검증 방법이 성능 향상에 도움이 되지 않는다고 합니다.
심지어 최종 실험을 진행한 공개된 학습 데이터의 62% 정도는 추론 trace도 끝나지 않은 데이터인데, 이를 제거하여 학습하면 성능의 저하가 심해서, 모두 포함하여 학습했다고 합니다.
Embedding model을 사용한 필터링이 추론능력 향상에는 큰 도움이 되지 않았다는 점도 주목해볼만 합니다.
참고로, 답변이 맞았는지 틀렸는지를 verification한 방법에 대한 detail은 appendix에 있으니 궁금하신 분들은 확인해보셔도 좋겠습니다.
Teacher model 선택
답변을 어떤 모델로 생성한게 나았나 보니
의외로 R1에 비해 benchmark 성능은 낮지만, QwQ-32B로 distillation 하는 것이 낫다는 것이 밝혀져, 이 이후로는 QwQ-32B 를 teacher model로 사용했다고 합니다.
LIMO 등에서 주장된것과 달리 31.6k까지 데이터 늘려보면서 실험해보니 데이터 많아질수록 좋아지는 추세가 아직 있어서, 데이터 더 추가하기로 했다고 합니다.
최종 1.2M 만든 pipeline은 다음과 같습니다.
1.2M 까지 증가시키며 Scaling experiments를 더 해본 결과
1.2M 까지 데이터가 늘어날수록 성능이 계속 증가되었다고 합니다. 아마도 LIMA의 결과는 확보할 수 있는 '어려운 문제'의 수가 적을 때 수행된 실험이라 그런 결론이 나왔을 수도 있겠다고 추측 해 볼 수 있겠습니다.
유사한 시기에 발표된 NVIDIA의 Nemotron Nano 와 비교해본 결과에서도, Open Thoughts3 데이터가 우수함을 확인해볼 수 있습니다.
실험 결과에 따르면, 좋은 질문을 뽑는 것이 중요하며, 다양한 질문보다 적은 수의 어려운 질문을 뽑는게 더 중요해보입니다.
의외로, 꼭 맞는 정답 하나보다도, 하나의 질문으로부터 여러 개의 답변을 뽑는게 성능 향상에 긍정적 영향을 제법 많이 주며,
심지어 중단된 것이어도 다양한 reasoning trace를 일부만 넣는 것 만으로도 성능 향상에 긍정적 영향을 준다고 합니다.
Open Thoughts3 데이터와, 논문에 소개된 방법들을 활용하여 추가적으로 좋은 데이터를 만들면,
다양한 task에 대해 A.X의 추론 능력 향상에 도움을 줄 수 있을 것 같습니다.
Training framework로는 LlamaFactory 사용했음
Training dataset 크기에 따라 다음과 같이 LR, batch size, epoch 다르게 했음
Packing 여부는 성능에는 영향을 거의 미치지 않았음
chat template의 reasoning부분은 <think></think>
System prompt에 think 하라고 하기 vs 하지 말라고 하기 라면 하라고 하는게 훨씬 좋았음
System prompt에 think 하라고 하기 vs No system prompt에는 차이가 크진 않았는데, AIME24에선 No system prompt가 나았음
Temperature 0.7, top_p=1.0, max_new_tokens=32768
Decontamination
Indel similarity, N-gram-based similarity metric 활용
Evaluation data 3092, uncontaminated 3000 samples 로 평가해봤는데 99.6% true negative 달성, 자신있다는듯
Base model은 Llama-3.1-8B-Instruct 보다 Qwen-2.5-7B-Instruct가 나았음
Verification 방법
Proof-based 질문 제거
Extraction-based math verification (정답 확실히 가려진거만 남기기)
LLM-generated unit test verification
Verification 효과
32B에는 긍정적, 7B에는 부정적 효과
Compressing reasoning traces
"wait", "but wait", "but the question" 등 제거해봤더니 성능 하락 심각
너무 긴 reasoning trace제거해도 성능 하락
Reasoning trace 함부로 자르지 말라는 교훈
AIW 로 reasoning generalization performance 측정
Distilled model은 generalization performance가 많이 떨어질 수 있음
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.