DeepLearing/NLP(Reasoning)
[OpenSourceModel] (25.01) SkyThought Preview블로그 리뷰
notdecidedyet
2025. 1. 26. 10:12
추론 및 코딩 벤치마크에서 o1-preview와 동등한 성능을 보인다. 이 모델을 만드는데 450달러 정도 쓰임.
Overview :
o1, Gemini2.0과 같은 모델들은 복잡한 과제를 해결하기 위해 긴 추론 과정을 생성하는 능력등으로 우수한 성능을 보임. 그러나 공개되지 않아 발전에 장벽이 되었음.
허나, STILL-2, Journey와 같이 추론 모델을 오픈 소스화 한것들이 있었으며 가시적이 성과과 있었다. SkyThought에서는 수학 뿐만 아니라 코딩에서도 경쟁력있는 추론 성능을 달성하였다.
자 그럼 어떤 방식으로 진행했는지 살펴보자.
단계 1) DataGeneration
- 훈련 데이터를 생성하기 위해 QwQ-32B-Preview라는 오픈소스 모델을 사용함. 이 모델은 o1-preview와 같이 유사한 추론능력을 갖춘 추론 모델이다.
- 다양한 도메인의 지식이 필요한 추론능력을 갖기위해 데이터를 섞어서 큐레이션했고, 데이터 품질을 향상시키기 위해 리젝트 샘플링 절차를 사용함.
- QwQ로 생성된 데이터를 GPT-4o-mini로 다시 작성하여 정돈된 형식으로 변환하다.( 이는 STILL-2에서 영감을 받아 데이터 품질을 향상 시키고, 파싱을 용이하게 하는 것임)
- 파싱은 매우 중요한데, 추론모델들은 파싱이 매우 어려운 편에 속한다. 예를들어 코딩 문제의 경우 가장 마지막에 작성된 코드가 정답이라고 가정하고 evaluation을 했을 경우 QwQ에서는 25%의 정확도를 달성하였으나, 정돈된 형식으로 전환할 경우 정확도가 90%이상으로 향상 되었다.
- Rejection Sampling : 데이터셋 내에서 품질이 낮은 샘플을 걸러내고 최종 데이터 품질을 향상시키기 위해 사용하는 과정, QwQ에서 생성된 답변들이 정답 또는 유닛 테스트를 만족하지 못하는 경우 해당 샘플을 폐기한다.
- 코딩 문제의 경우 유닛테스트를 진행한다.
- 최종적인 데이터는
- APPs와 TACO : 5000개 코딩 데이터
- AIME, MATH, NuminaMATH데이터에서 : 10000개의 데이터
- STILL-2 : 1천개의 과학 및 퍼즐 데이터
단계 2) Training
- 모델 : Qwen2.5-32B-Instruct라는 오픈소스 모델을 파인튜닝
- 이 모델은 추론 능력이 없는 상태에서 시작한다.
- 훈련 :
- epoch : 3
- learning rate : 1e-5
- batch size : 96
- DeepSpeed Zero-3 오프로드 사용
- 환경 : 8개의 H100 GPU, 19시간 약 450달러
단계 3) Evaluation
발견한 것들...
모델의 크기는 매우 중요하다.
- 처음 실험을 진행할 때, 작은 모델로 진행하였다(7, 14B). 그러나 개선 효과는 크지 않았다.
- Qwen2.5-14B-Coder-Instruct를 APPs 데이터셋으로 훈련한 결과, 성능이 42.6%에서 46.3%로 약간 향상
- 32B보다 작은 모델에서 출력된 결과를 사람이 눈으로 검사한 결과, 이 모델들은 반복적인 콘텐츠를 자주 생성한다는 것을 발견했고, 이 부분이 모델의 성능에 안좋은 영향을 끼치는 것을 알았음.
데이터 혼합의 중요성
- 처음에 STILL-2가 제공한 Numina 데이터셋에서 3~4천 개의 수학 문제를 사용하여 32B 모델을 훈련했다.
- 이 훈련으로 AIME24에서의 정확도가 16.7%에서 43.3%로 크게 향상되었다.
- 그러나 APPs 데이터셋에서 생성된 코딩 데이터를 훈련 과정에 포함시키자, AIME24 정확도가 36.7%로 떨어졌다.
이 하락은 수학 문제와 코딩 과제가 요구하는 서로 다른 추론 접근법 때문이라고 생각한다.( 수학 문제를 풀어가는 과정(reasoning)은 어느정도 구조화가 되어 있다. 즉 추론과정도 일반화가 필요하다고 생각한다. 따라서 더욱 복잡한 문제들을 훈련 데이터에 넣으면 일반화된 추론 과정을 배우지 않을까 싶었던 것으로 추측한다.)- 추론방식의 차이점
- 코딩 문제:
코딩에서의 추론은 테스트 입력을 시뮬레이션하거나 생성된 코드를 내부적으로 실행하는 추가적인 논리 단계를 포함하는 경우가 많다. 동적인 추론과정을 요구하며, 여러 단계를 거쳐야만 결과를 검증할 수 있다. - 수학 문제:
수학 문제의 추론은 더 직접적이고 구조적인 경향이 있다. 정답이 명확하며, 해결방법도 고정적인 경우가 많다.
- 코딩 문제:
- 추론방식의 차이점
- 이러한 차이를 해결하기 위해, 우리는 NuminaMath 데이터셋에서 복잡한 수학 문제를, 그리고 TACO 데이터셋에서 복잡한 코딩 작업을 훈련 데이터에 추가하였음.
- 균형 잡힌 데이터 혼합은 모델이 두 도메인에서 모두 뛰어난 성능을 발휘할 수 있게 해주었으며, AIME24 정확도를 다시 43.3%로 복구하고 코딩 능력도 향상시켰다.
Reference :
https://novasky-ai.github.io/posts/sky-t1/