예산 강제 s1-32B: 기다리기만 하면 충분할까?
우리는 테스트 시점 개입의 한 형태인 budget forcing이 s1-32B의 추론 정확도를 유의미하게 끌어올려, OpenAI의 o1-preview와 같은 클로즈드 소스 대형 모델에 소형 모델이 맞설 수 있게 하는지 검증한다. 이 글은 AI 번역본이다. 오역이 의심되면 댓글로 알려주시기 바란다.
Created on September 12|Last edited on September 12
Comment
그 s1-32B 모델는 Qwen2.5-32B-Instruct를 기반으로 구축되었으며, 추론 효율성에서 돌파구로 소개되고 있다. 달성했다고 주장한다 OpenAI o1 수준의 성능 단 1,000개의 학습 예시와 budget forcing이라 불리는 간단한 디코딩 트릭만을 사용한다. 반면 o1은 이를 의존하는 방식과 달리 강화 학습 막대한 연산 자원 대신, s1-32B는 다음 방식으로 구축되었다 파인튜닝 작고 신중하게 선별된 데이터셋으로 기존 모델을 파인튜닝하는 방식이다. 이 미니멀한 접근이 경쟁적인 추론 과제에서 폐쇄형 모델과 견줄 뿐 아니라, 추론 시 연산을 늘리면 정확도가 직접적으로 향상되는 진정한 테스트타임 스케일링까지 입증한다는 주장이다.
더 많은 학습 데이터나 복잡한 모델 아키텍처에 의존하는 대신, s1-32B는 테스트 시점에 스스로의 추론 과정을 제어한다. 모델이 너무 이르게 사고를 멈추려 하면 출력 끝에 “Wait”를 덧붙여 계속 생각하도록 강제하여, 더 깊은 추론을 유도한다. 이 요령은 성능이 포화되기 시작할 때까지 약 6회 정도의 “Wait”까지 반복할 수 있다. 저자들에 따르면 이 방법은 모델이 스스로 오류를 수정하고 추론을 동적으로 스케일링하도록 돕는다.

목차
“Wait” 전략은 얼마나 효과적일까?
AIME24 같은 벤치마크에서 저자들은 s1-32B가 OpenAI’s o1-preview를 능가해 정확도 56.7%에 도달한다고 주장한다. 훨씬 더 큰 데이터셋으로 학습된 모델들보다 낫다는 것이다. 하지만 이 주장이 실제로도 성립할까? 이제 그것을 확인해 보려 한다.
s1-32B의 접근법은 놀라울 만큼 단순하다. 방대한 데이터셋으로 학습하거나 OpenAI의 o1처럼 강화 학습을 사용하는 대신, 저자들은 기존 모델을 파인튜닝한다 (Qwen2.5-32B-Instruct) 단 1,000개의 신중하게 선별된 추론 문제로. 이 데이터셋 s1K는 난이도, 다양성, 품질을 극대화하도록 설계되었다. 이들은 수학 경시대회와 박사급 과학 시험 같은 출처에서 모은 59,000개의 훨씬 더 큰 추론 문제 집합으로부터 출발한다.
그런 다음 세 단계에 걸쳐 걸러낸다:
- 저품질 샘플 제거
- 모델이 어려워하는 난도 높은 문제만 남기고, 그리고
- 다양한 주제를 폭넓게 포괄하도록.
이 작은 데이터셋으로 모델을 학습한 뒤, 테스트 시점에는 답을 내기 전에 모델이 얼마나 “생각”할지 제어하기 위해 budget forcing을 도입한다.
아이디어는 간단하다:
- 모델이 너무 일찍 추론을 멈추려 하면 출력에 “Wait”라는 단어를 덧붙여 계속 진행하도록 강제하고, 그 결과 더 많은 추론 단계를 생성하게 한다.
- 모델이 지나치게 오래 계속하면 end-of-thinking 토큰으로 중단시켜, 답변을 마무리하도록 강제한다.
이 방법은 모델이 최종 답변을 확정하기 전에 자신의 작업을 다시 점검하고 추론을 다듬도록 유도한다.
핵심 주장은 budget forcing이 테스트 시점 스케일링으로 이어진다는 것이다. 즉, 모델이 더 오래 생각하도록 허용하기만 해도 정확도가 향상된다는 의미다. 보고된 결과에 따르면, s1-32B는 AIME24 수학 문제에서 단지 추론 시간을 늘렸을 뿐인데도 성능이 50%에서 57%로 개선되었다. 논문에서 보고한 결과는 다음과 같다:

테스트 방법론
budget forcing과 test-time scaling에 대한 이러한 주장을 엄밀하게 검증하기 위해, 이 기법의 실제 영향을 파악하는 데 도움이 될 세 가지 핵심 비교 실험을 설계했다.
첫 번째 점검 항목은 데이터셋 오염 여부다. 즉, AIME 테스트 세트와 s1K 학습 세트 사이에 직접적인 중복이 있어 s1-32B의 성능이 부풀려졌는지를 확인한다. 만약 AIME 문제가 s1K에 포함되어 있었다면, 모델의 정확도는 오해의 소지가 있어 실제로는 답안을 암기했음에도 일반화한 것처럼 보일 수 있다. budget forcing을 평가하기 전에, 모델이 테스트 세트로 학습되지 않았음을 확인하기 위해 AIME과 s1K를 대조할 것이다.
다음으로 기반 모델인 Qwen2.5-32B-Instruct를 검토하여, s1-32B의 성능 중 얼마나가 fine-tuning의 효과이고 얼마나가 원래 모델의 기존 능력에서 비롯되는지 파악하겠다. 만약 Qwen이 수리적 추론에서 이미 강했거나, 사전 학습 중 유사한 문제를 접했다면, s1-32B의 향상은 budget forcing이 아니라 강력한 출발점 덕분일 수 있다. 우리는 Qwen의 기준 성능을 s1-32B와 비교해, fine-tuning만의 효과를 정량화할 것이다.
Qwen의 AIME24 정확도가 50%로 문서화되어 있으므로, 이를 기준선으로 삼고 중복 평가를 피한다.
💡
데이터셋이 깨끗하다는 점과 기반 모델의 능력이 반영되었다는 점을 확인한 뒤, budget forcing 자체를 시험한다. 우리는 s1-32B를 두 가지 모드로 비교한다. 하나는 완전한 budget forcing을 적용한 경우(최대 여섯 번의 “Wait” 반복 허용)이고, 다른 하나는 Wait 반복을 전혀 사용하지 않는 경우다. 두 조건 모두 동일한 fine-tuning 모델을 사용하므로, 이렇게 하면 budget forcing의 효과를 분리해 평가할 수 있다.. budget forcing이 핵심 요인이라면, 이를 제거했을 때 성능이 크게 하락해야 한다. 정확도가 비슷하게 유지된다면, 향상의 주된 요인은 s1K에 대한 fine-tuning이었다는 뜻이다.
마지막으로 s1-32B의 성능을 OpenAI의 o1-preview와 비교하겠다. o3, 그리고 DeepSeek-R1 실제로 이러한 폐쇄형 모델들과 성능이 맞먹거나 능가하는지 확인하기 위해서다. s1-32B가 견고한 성능을 보인다면, budget forcing이 추론을 개선한다는 주장에 힘이 실린다. 그렇지 않다면, 이 방법의 효과가 과장되었을 수 있다. 이 테스트들은 단순히 보고된 수치를 재현하는 데 그치지 않고, 결과가 실제로 budget forcing에 기인하는지 검증하기 위한 것이다.
데이터셋 오염 여부 점검
본 평가를 실행하기 전에 먼저 데이터셋 오염 여부를 점검한다. 구체적으로, AIME 테스트 세트의 문제가 s1K 학습 세트에 포함되어 있는지 확인한다. 만약 중복이 있다면, 보고된 성능은 실제 추론 향상이 아니라 암기에 의해 부풀려졌을 수 있다. 이를 체계적으로 검증하기 위해 우리는 다음을 사용한다 Weave 우리의 추론 함수에 입력과 출력을 로깅하기 위해서이며, 이 함수는 두 질문이 동일하면 True를 반환한다.
Weave의 필터링 기능을 활용하면 AIME 문제와 s1K의 문제가 일치하는 사례를 신속하게 시각화할 수 있다. 오염이 존재한다면, 중복 또는 거의 동일한 문제가 표시되어 학습 세트와 테스트 세트 간의 직접적인 겹침을 보여줄 것이다. 일치 항목이 없다면, 모델이 테스트 세트로 학습되지 않았음을 확인하고 안심하고 다음 단계로 진행할 수 있다.
코드는 다음과 같다:
import osfrom litellm import completionfrom datasets import load_datasetimport asyncioimport weave; weave.init("dataset_comparison")import time# Set OpenAI API keyos.environ["OPENAI_API_KEY"] = ""def load_datasets():print("Loading datasets...")aime_dataset = load_dataset("Maxwell-Jia/AIME_2024")["train"]s1k_dataset = load_dataset("simplescaling/s1K")["train"]return aime_dataset, s1k_dataset@weave.opasync def compare_questions(q1: str, q2: str) -> str:prompt = f"""Compare these two math problems and respond with ONLY the word 'same' if they are the same question (ignoring formatting differences or slight numerical differences/wording differences) or 'different' if they are different questions.Question 1: {q1}Question 2: {q2}"""response = completion(model="openai/gpt-4o-mini",messages=[{"content": prompt, "role": "user"}],max_tokens=10,temperature=0.1)return 'same' in response.choices[0].message.content.strip().lower()async def run_comparison():aime_dataset, s1k_dataset = load_datasets()print("Starting comparisons...")for aime_q in aime_dataset:for s1k_q in s1k_dataset:result = await compare_questions(aime_q["Problem"], s1k_q["question"])if result:print(f"\nFound matching question!")print(f"AIME: {aime_q['Problem'][:100]}...")print(f"S1K: {s1k_q['question'][:100]}...")print("---")if __name__ == "__main__":asyncio.run(run_comparison())
다행히도 우리 스크립트는 AIME 테스트 세트와 Budget Forcing 공식 학습 세트 사이에서 어떤 중복도 발견하지 않았다. Weave 내부에서 추론 함수의 출력으로 손쉽게 필터링해 본 결과, true를 반환한 호출이 하나도 없었다!

budget forcing 테스트
이제 s1-32B의 성능을 평가하고, budget forcing의 효과를 분리하며, OpenAI의 o1-preview와 비교하기 위한 평가 스크립트를 작성하겠다. 이 스크립트는 여러 모델을 구조화된 평가 파이프라인으로 실행하고, 예측을 로깅하며, 일관된 방식으로 정확도를 산출한다.
먼저 AIME 데이터셋을 불러와 평가에 적합한 형태로 준비한다. 기준선을 설정하기 위해, s1-32B가 파인튜닝된 기반 모델인 Qwen2.5-32B-Instruct를 먼저 실행한다. 이를 통해 s1-32B의 성능 중 어느 정도가 파인튜닝에서 비롯되었는지, 원래 모델의 능력은 어느 정도인지를 판별할 수 있다.
다음으로 s1-32B를 두 가지 조건에서 평가하겠다:
- 완전한 budget forcing을 적용한 조건(“Wait”를 최대 여섯 번까지 허용)과
- 하나는 적용하지 않은 조건.
두 설정 모두 동일한 파인튜닝된 모델을 사용하므로, budget forcing의 영향을 직접적으로 분리해 확인할 수 있다. 성능 향상이 budget forcing 때문이라면, 이를 제거했을 때 정확도가 눈에 띄게 떨어져야 한다.
OpenAI의 o1-preview도 외부 벤치마크로 실행하겠다. 이를 통해 s1-32B의 성능을 방대한 연산 자원과 강화학습으로 훈련된 폐쇄형 모델과 직접 비교할 수 있다. s1-32B가 o1-preview에 필적하거나 앞선다면, budget forcing이 더 작은 파인튜닝된 모델로도 더 많은 자원을 요구하는 접근법과 경쟁하게 만든다는 주장을 뒷받침한다.
평가 프로세스는 Weave를 사용해 관리되며, 모델의 입력, 출력, 정답 여부 점수를 기록한다. 채점 함수는 GPT-4를 사용해 각 모델의 출력을 정답과 비교하여 평가의 일관성을 보장한다. 이러한 체계적인 접근으로 모델 간을 효율적으로 비교하고, 성능 차이를 추적하며, 보고된 성능 향상이 실제로 budget forcing에 기인하는지 검증할 수 있다.
평가에 사용한 코드는 다음과 같다:
import osimport asyncioimport jsonfrom datasets import load_datasetfrom vllm import LLM, SamplingParamsfrom transformers import AutoTokenizerfrom openai import OpenAIimport timeimport weave; weave.init("aime_evaluation")# Initialize OpenAI clientopenai_client = OpenAI(api_key="your api key")# Model constantsMAX_TOKENS_THINKING = 132000NUM_IGNORE = 6MODEL_NAME = "simplescaling/s1-32B"JUDGE_MODEL = "gpt-4o-2024-08-06"# Initialize model and tokenizer globallymodel = LLM("Qwen/Qwen2.5-32B-Instruct",tensor_parallel_size=2,)tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-32B-Instruct")class QwenBaseModel(weave.Model):@weave.opasync def predict(self, text: str) -> str:"""Run inference using base Qwen model without Wait iterations"""try:# Prepare the promptprompt = f"<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n<|im_start|>user\n{text}<|im_end|>\n<|im_start|>assistant\n"# Single thinking phasestop_token_ids = tokenizer("<|im_start|><|im_end|>")["input_ids"]sampling_params = SamplingParams(max_tokens=MAX_TOKENS_THINKING,min_tokens=0,stop_token_ids=stop_token_ids,skip_special_tokens=False,temperature=0.0,)prompt += "<|im_start|>"output = model.generate(prompt, sampling_params=sampling_params)# Final answer phaseprompt += output[0].outputs[0].textstop_token_ids = tokenizer("<|im_end|>")["input_ids"]sampling_params = SamplingParams(max_tokens=32768,min_tokens=0,stop_token_ids=stop_token_ids,skip_special_tokens=False,temperature=0.0,)final_output = model.generate(prompt, sampling_params=sampling_params)return final_output[0].outputs[0].textexcept Exception as e:print(f"Failed to get Qwen response: {e}")return Noneclass S1ModelWithWait(weave.Model):@weave.opasync def predict(self, text: str) -> str:"""Run inference using S1 model with Wait iterations"""try:# Prepare the promptprompt = f"<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n<|im_start|>user\n{text}<|im_end|>\n<|im_start|>assistant\n"# First thinking phasestop_token_ids = tokenizer("<|im_start|><|im_end|>")["input_ids"]sampling_params = SamplingParams(max_tokens=MAX_TOKENS_THINKING,min_tokens=0,stop_token_ids=stop_token_ids,skip_special_tokens=False,temperature=0.0,)prompt += "<|im_start|>think"output = model.generate(prompt, sampling_params=sampling_params)# Handle multiple thinking iterationsignore_str = "Wait"max_tokens_thinking_tmp = MAX_TOKENS_THINKINGfor i in range(NUM_IGNORE):tokens_used = len(output[0].outputs[0].token_ids)max_tokens_thinking_tmp -= tokens_usedif max_tokens_thinking_tmp < 1000: # Safe bufferbreakprompt += output[0].outputs[0].text + ignore_strsampling_params = SamplingParams(max_tokens=max_tokens_thinking_tmp,min_tokens=1,stop_token_ids=stop_token_ids,skip_special_tokens=False,temperature=0.0,)output = model.generate(prompt, sampling_params=sampling_params)if i > 0 and output[0].outputs[0].text in prompt:break# Final answer phaseprompt += output[0].outputs[0].textstop_token_ids = tokenizer("<|im_end|>")["input_ids"]sampling_params = SamplingParams(max_tokens=32768,min_tokens=0,stop_token_ids=stop_token_ids,skip_special_tokens=False,temperature=0.0,)final_output = model.generate(prompt, sampling_params=sampling_params)return final_output[0].outputs[0].textexcept Exception as e:print(f"Failed to get S1 response: {e}")return Noneclass S1ModelNoWait(weave.Model):@weave.opasync def predict(self, text: str) -> str:"""Run inference using S1 model without any Wait iterations"""try:# Prepare the promptprompt = f"<|im_start|>system\nYou are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>\n<|im_start|>user\n{text}<|im_end|>\n<|im_start|>assistant\n"# Single thinking phasestop_token_ids = tokenizer("<|im_start|><|im_end|>")["input_ids"]sampling_params = SamplingParams(max_tokens=MAX_TOKENS_THINKING,min_tokens=0,stop_token_ids=stop_token_ids,skip_special_tokens=False,temperature=0.0,)prompt += "<|im_start|>think"output = model.generate(prompt, sampling_params=sampling_params)# Final answer phaseprompt += output[0].outputs[0].textstop_token_ids = tokenizer("<|im_end|>")["input_ids"]sampling_params = SamplingParams(max_tokens=32768,min_tokens=0,stop_token_ids=stop_token_ids,skip_special_tokens=False,temperature=0.0,)final_output = model.generate(prompt, sampling_params=sampling_params)return final_output[0].outputs[0].textexcept Exception as e:print(f"Failed to get S1 response: {e}")return Nonedef run_o1_inference(prompt: str) -> str:"""Run inference using OpenAI o1-preview"""try:response = openai_client.chat.completions.create(model="o1-preview",messages=[{"role": "user", "content": f"Solve the following problem. put your final answer within \\boxed{{}}:\n{prompt}"}])return response.choices[0].message.contentexcept Exception as e:print(f"Failed to get o1-preview response: {e}")return Noneclass O1PreviewModel(weave.Model):@weave.opasync def predict(self, text: str) -> str:print("running o1-preview inference")return run_o1_inference(text)@weave.opasync def gpt4o_scorer(label: str, model_output: str) -> dict:"""Score the model's output by comparing it with the ground truth."""query = f"""YOU ARE A LLM JUDGE DETERMINING IF THE FOLLOWING MODEL GENERATED ANSWER IS THE SAME AS THE CORRECT ANSWERI WILL GIVE YOU THE LAST 100 CHARS OF THE MODEL'S REASONING PATH, WHICH WILL CONTAIN THE FINAL ANSWER ->Model's Answer (last 100 chars): {str(model_output)[-100:]}Correct Answer: {label}Your task:1. State the model's predicted answer (answer only).2. State the ground truth (answer only).3. Determine if the model's final answer is correct (ignore formatting differences, etc.). RESPOND with the predicted and ground truth answer, followed with a JSON object containing the correctness encapsulated within the following delimiters:```json{{ "correctness": true/false }}```"""try:response = openai_client.chat.completions.create(model=JUDGE_MODEL,messages=[{"role": "user", "content": query}])response_text = response.choices[0].message.contentjson_start = response_text.index("```json") + 7json_end = response_text.index("```", json_start)correctness = json.loads(response_text[json_start:json_end].strip()).get("correctness", False)return {"correctness": correctness, "reasoning": response_text}except Exception as e:print(f"Scoring failed: {e}")return {"correctness": False, "reasoning": str(e)}def load_ds():print("Loading AIME dataset...")dataset = load_dataset("Maxwell-Jia/AIME_2024")["train"]return [{"text": row["Problem"], "label": row["Answer"]} for row in dataset]async def run_evaluations():global model, tokenizerprint("Loading dataset...")dataset = load_ds()print("Preparing dataset for evaluation...")dataset_prepared = [{"text": row["text"], "label": row["label"]} for row in dataset]# First evaluate base Qwenprint("Starting Qwen evaluation...")scorers = [gpt4o_scorer]evaluation = weave.Evaluation(dataset=dataset_prepared,scorers=scorers,name="qwen-base Evaluation")results = await evaluation.evaluate(QwenBaseModel())print(f"Results for base Qwen: {results}")# Switch to S1 modelprint("\nSwitching to S1-32B model...")model = LLM("simplescaling/s1-32B",tensor_parallel_size=4,)tokenizer = AutoTokenizer.from_pretrained("simplescaling/s1-32B")# Now evaluate S1 variations and o1test_models = {"s1-32b-wait": S1ModelWithWait(),"s1-32b-nowait": S1ModelNoWait(),"o1-preview": O1PreviewModel()}for model_name, model_instance in test_models.items():print(f"\nEvaluating {model_name}...")evaluation = weave.Evaluation(dataset=dataset_prepared,scorers=scorers,name=f"{model_name} Evaluation")results = await evaluation.evaluate(model_instance)print(f"Results for {model_name}: {results}")if __name__ == "__main__":asyncio.run(run_evaluations())
평가는 모델 비교와 벤치마크를 체계적으로 실행할 수 있는 Weave 라이브러리를 기반으로 구성되어 있다. Weave는 모델 예측과 채점을 병렬로 처리하므로, 동일한 데이터셋에서 여러 모델을 효율적으로 평가할 수 있다. 우리의 구현에서는 각 모델을 Weave Model 클래스에 감싸고 async predict 메서드를 제공한다. S1-32B의 경우 이 메서드는 Wait 반복의 유무에 따라 복잡한 사고 과정을 관리하며, o1-preview의 경우 OpenAI로의 API 호출을 처리한다.
채점 과정에서는 gpt4o_scorer각 모델의 출력과 정답을 받아 GPT-4o로 정오를 판정��다. 이 방식은 동일한 답이라도 표현이 달라질 수 있는 수학 문제에서 특히 중요하다. 채점기는 모델 출력의 마지막 100자를 확인해 최종 답을 추출하므로, 추론 형식의 변형에도 견고하게 동작한다.
우리의 평가 파이프라인은 먼저 AIME 데이터셋을 로드하는 것으로 시작하며 허깅 페이스 datasets 라이브러리를 사용해 로드한 뒤, 병렬 평가에 맞게 전처리한다. Weave 평가 이 클래스는 모델 예측과 채점의 조정을 담당하며, 효율성을 위해 여러 평가를 동시에 실행한다. 동일한 채점 기준을 적용하면서도 각 모델에 대해 별도의 평가 스트림을 유지하여 공정한 비교를 보장한다.
결과는 다음과 같습니다:

결과는 다음과 같습니다.
- “high” 추론 매개변수를 설정한 O3 Mini가 0.867로 가장 높은 정확도를 기록했으며, 이는 광범위한 추론 노력의 반영이다.
- DeepSeek-R1가 0.767로 뒤를 이었고,
- S1의 점수는 0.667이었다.
- 대기 기법을 생략하고 한 번만 추론을 수행한 S1 “No-Wait”의 점수는 0.533이었다.
- O1 Preview는 0.500으로 뒤처졌다.
이전에 O3 Mini와 DeepSeek-R1를 벤치마크했기 때문에, Weave Evaluations를 사용해 이번 새 결과를 과거 테스트와 빠르게 비교하기에 매우 편리했다. Qwen은 이 벤치마크에서 베이스 모델이 정확도 50%를 기록했다고 보고했다. 흥미롭게도, 이번 평가에서 S1의 성능은 그들이 논문에서 보고한 수치보다 10% 높다.
Weave 비교 뷰
평가가 완료되면 Weave가 결과를 대화형 대시보드로 정리합니다. 이 강력한 도구를 통해 다음을 수행할 수 있습니다:
- 모델 결과를 나란히 비교하고,
- 특정 매개변수로 결과를 필터링하고,
- 모든 함수 호출의 입력과 출력을 추적하세요.
S1이 다루는 유형의 추론 중심 작업에서는, 비교 뷰가 단계별 추적 각 모델의 의사 결정 과정을 파악할 수 있습니다. 이 기능을 통해 논리적 오류, 프롬프트 해석상의 실수, 또는 O1-Mini처럼 특정 모델이 다른 모델보다 뛰어난 영역을 쉽게 식별할 수 있습니다.
이렇게 세밀한 출력들을 분석하면 모델이 특정 작업에서 성공하거나 실패하는 이유를 더 잘 이해할 수 있습니다. 이러한 인사이트는 문제를 진단하고 모델을 개선하며, 복잡한 추론 시나리오에 맞춰 능력을 조정하는 데 매우 유용합니다. 이번 평가에서는 S1이 budget forcing을 사용해 성공하고, 베이스 모델은 실패한 사례들을 확인하는 것이 정말 흥미로웠습니다!
비교 뷰가 어떻게 보이는지 보여주는 스크린샷입니다.

결론
추론 시점에 간단히 개입하는 budget forcing만으로 정확도가 13% 상승한 것은 의미가 큽니다. 특히 추가 학습 데이터나 모델 구조 변경이 전혀 필요하지 않다는 점에서 더욱 그렇습니다. S1-32B가 거의 베이스라인 수준의 성능에서 OpenAI의 o1-preview를 큰 폭으로 앞선 사실은, 구조화된 반복 추론을 이전에 생각했던 것보다 훨씬 더 효과적으로 활용할 수 있음을 시사합니다.
이러한 결과를 고려하면, 클로즈드 소스 모델들도 유사한 기법을 도입하고 자사 최적화로 더욱 정교화할 가능성이 큽니다. 이 접근이 이미 86.7%를 달성한 O3 Mini 같은 모델로 확장된다면, 가까운 미래에 AIME에서 만점을 달성할 가능성도 충분히 현실적입니다.
이론적으로 budget forcing을 O3 Mini의 추론 과정에 적용할 수 있다면 정확도를 100%까지 끌어올릴 수 있으며, 추론 시점에서의 확장만으로도 최상위 수준의 추론 벤치마크 격차를 메울 수 있음을 보여줄 수 있습니다.
DeepSeek-R1 vs OpenAI o1: A guide to reasoning model setup and evaluation
Discover the capabilities of DeepSeek-R1 and OpenAI o1 models for reasoning and decision-making. Includes setup guides, API usage, local deployment, and Weave-powered comparisons.
DeepSeek-V3: Training 671 billion parameters with a $6 million dollar budget
o3-mini vs. DeepSeek-R1: API setup, performance testing & model evaluation
Learn how to set up and run OpenAI o3-mini via the API, explore its flexible reasoning effort settings, and compare its performance against DeepSeek-R1 using W&B Weave Evaluations.
How to fine-tune a large language model (LLM)
Discover the process of fine-tuning large language models (LLMs) to enhance their performance for specific tasks or domains. Learn about methods, best practices, and challenges associated with LLM fine-tuning.
Add a comment