社区供稿|阿里国际AI团队最新开源!探索面向开放性问题的推理模型 Marco-o1

我们发布了最新的Marco-o1模型,Marco-o1不仅关注具有标准答案的学科(例如代码、数学等)领域,而且更加强调开放式问题的解决方案。我们的目标是解决:“o1这类模型能否有效的推广到难以量化且缺乏明确奖励的其他领域上”这一问题。

Arxiv:https://arxiv.org/abs/2411.14405

Github:https://github.com/AIDC-AI/Marco-o1

Hugging Face:https://huggingface.co/AIDC-AI/Marco-o1

我们的特色有:

**1. 使用了超长CoT数据进行微调。**我们通过self-play+MCTS构建了一批具备反思、改正能力的超长CoT数据。结合其他开源数据一同训练了Marco-o1-CoT。

**2. 使用MCTS扩展解空间。**在推理阶段,通过使用MCTS+reward引导我们的模型(Marco-o1-MCTS)扩大解空间,输出更优秀的结果。

**3. 细粒度解****空间扩展。**考虑到step级别依然具备较大的搜索细粒度,我们进一步的定义了mini-Step来进一步的扩大整个模型的解空间,引导并扩大我们的模型(Marco-o1-MCTS mini-Step)具备输出更优秀答案的可能性。

**4. 在翻译任务中应用。**此外,我们创新地使用大型推理模型(LRM)到翻译任务中,这对于一些长难句翻译具有良好的效果。也是第一次将Inference time scaling应用到机器翻译任务中。

**5. 开源。**我们开源了部分CoT数据与目前最好的模型,稍晚些我们还会开源更多的数据与模型。

模型会对response做更深入的思考,比如下图中,对于单词‘strawberry’中有多少个r,模型在输出中逐步拆解单词中的每一个字母并且比较,在输出最终结果之前对之前的所有步骤进行确认,最终正确的输出了‘The answer is 3’。

另一个翻译的case。在机器翻译领域,如何处理例如‘踩屎感’、‘光腿神器’等这种国内特色表达方式一直是一个难点。通过这样一条推理链路,模型正确的识别了踩屎感这个难点,逐词翻译,解决了整体的翻译准确性,也在一定程度上防止了漏翻的出现。

此外,我们还在其他领域进行了尝试,证明了该模型具备一定的解决其他通用现实问题的能力。

整体方法

Marco-o1的整体结构如下,我们通过self-play+MCTS构建了一批具备反思、改正能力的超长CoT数据,结合其他开源数据一同训练了Marco-o1-CoT。考虑到模型整体的指令遵循能力十分重要,我们还融入了MarcoPolo家族的一些指令遵循数据集,整体模型指令遵循能力得到了显著的提升。

数据构造

我们使用self-play的形式,引导模型进行例如计划、执行、反思、纠错、输出答案等行为(Action as a Action),并使用MCTS进行搜索,当模型输出答案时,给予答案一个reward来更新这条MCTS搜索树上的V和N,也就是rollout。

具体来说,我们尝试了使用在初始prompt中引导模型执行例如计划、反思、纠错等行为。我们发现这对于一些较大模型(例如GPT4o、Qwen72B等)由于整体出色的模型能力和指令遵循能力,模型可以很好地完成既定指令。同时,我们还尝试了7B甚至1.5B模型的输出。模型也基本能够遵循我们设计好的PATTERN进行输出,经过MCTS的选择后,整体的输出基本满足了要求。

这里我们给出了我们的一个早期版本的prompt供大家参考:

Begin by split the task into serval sub-tasks within <sub-task> tags,` `then enclosing all thoughts within <thinking> tags, exploring multiple angles and``Continuously adjust your reasoning based on intermediate results and reflections, adapting your strategy as you progress.``The hypothesis is presented within <hypothesis>.``Regularly evaluate progress using <reflection> tags.``Be critical and honest about your reasoning process.``If unsure, backtrack and try a different approach, explaining your decision within <thinking> tags.``Output should be markdown format and tags can not nested.   For mathematical problems, show all work explicitly using LaTeX for formal notation and provide detailed proofs.``Explore multiple solutions individually if possible, comparing approaches in reflections.``Use thoughts as a scratchpad, writing out all calculations and reasoning explicitly.``Synthesize the final answer within <answer> tags, providing a clear, concise summary.``Conclude with a final reflection on the overall solution, discussing effectiveness, challenges, and solutions.``\n\nNow the Question is:\n4只小鸭子在一个大的圆形水池中,分别随机的出现在圆圈中的任意一点。4只鸭子出现在 同一半圆的概率是多少?

同时,我们还在MCTS搜索的中间引入了一些关键句进一步引导模型动作。比如在某个具体行为的搜索后主动拼接一些特征词,例如Wait! Maybe这类句子或者短语,强化模型对于例如标签的理解以及约束后续行为。

另外,我们认为模型的指令遵循能力对于o1来说依然重要(比如告诉模型你的计算预算,你需要在多少个token内输出答案,这对于简单问题的快速输出具有现实意义),因此我们还添加了指令遵循数据集强化指令遵循能力,还添加了少量常规sft数据作为playback使用。这部分数据直接使用我们MarcoPolo系列的数据集。

除此之外,MCTS进行数据搜索整体上的效率较低,成本较大,因此我们还对开源数据(例如Open O1)进行了清洗过滤。这些过滤包括启发式和llm as judge等,过滤掉一些低质量以及我们认为对我们的模型没有帮助的数据。

这三组数据的混合构成了第一版Marco-o1的训练数据。由于时间关系,我们并没有进行特别细致的消融实验。不过我们人工对MCTS输出的数据进行了细致筛查,整体质量较高,我们相信会显著提升模型相关性能的。

最后,我们观察到实际上OpenAI o1的行为不止这几个,如何找到并设计这些行为是一个很大的挑战,并且为这些行为的行为树设计也是一个挑战(比如不可以直接)。有一些信息表明OpenAI为o1设计了数千个规则来引导模型进行搜索,这也会是我们后续的一个方向。

逻辑推理

推理阶段,我们设计了一个基于模型prob的reward来引导MCTS的搜索。但是我们观察到使用Action作为MCTS搜索细粒度是较粗的,往往导致较难搜索出正确答案——这一步在数据构造阶段影响有限,因为数据构造阶段是有ground truth信号作为引导的,但是推理阶段使用经过特殊设计的porb影响是显著的。因此我们进一步拆解了MCTS的搜索粒度,我们设计了3种粒度。

一种是类似于Verify Step by Step的以Step为单位进行搜索,每一个MCTS节点内为一句话(或者一个Action标签),此外,我们还特别的对Step也进行了拆分,我们称之为mini-Step,也就是固定每64/32个token为一个”step“,进一步扩大模型的搜索空间。

我们也发现,我们设计的基于prob的reward设计具备较多局限性,我们观察到Llama-o1的基于prob的reward设计似乎是一个更优秀的方案。后续我们将持续探索其他reward设计以及Reward Model的训练与开源。

对于reward设计的更详细的说明欢迎移步我们的Github。

结果展示

我们的Marco-o1-CoT模型相比baseline有了一定的提升。其中mgsm-zh的性能下降是由于我们使用了中文CoT进行推理——我们认为推理路径遵循源语言是更容易被使用者所理解的。但是训练数据中中文CoT数据极少,这可能导致了性能下降。不过这部分性能下降在之后的MCTS搜索中得到了恢复。

在使用mini-Step进一步扩大解空间后,观察到了性能有一些波动。经过观察整个搜索树的结果,我们发现这主要是由于我们使用的reward计算方案导致的搜索路径选择错误。正如之前我们所说的,我们认为使用mini-Step继续扩大模型的解空间是有实际意义的,因此我们后续将使用更优秀的reward或者Reward Model来引导MCTS的搜索。

左侧为step level的MCTS,结果错误。右侧为mini-Step 32的MCTS,可以看到在value increase 150%后出现了错误。step level较难避免这类错误,而mini-Step的可以通过下一次搜索在一定程度上规避这一问题。

使用方法

目前模型已经上传到huggingface,只需要简单代码即可使用。考虑到模型输出较长,因此我们还提供了一个vllm版本供大家使用。

import torch``from typing import List, Dict, Tuple``from transformers import AutoModelForCausalLM, AutoTokenizer``   ``   ``def load_model_and_tokenizer(path):`    `tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True)`    `model = AutoModelForCausalLM.from_pretrained(path, trust_remote_code=True).to('cuda:0')`    `model.eval()`    `return tokenizer, model``   ``   ``def generate_response(model, tokenizer,`                      `input_ids, attention_mask,`                      `max_new_tokens=4096):`    `generated_ids = input_ids`    `with torch.inference_mode():`        `for _ in range(max_new_tokens):`            `outputs = model(input_ids=generated_ids, attention_mask=attention_mask)`            `next_token_id = torch.argmax(outputs.logits[:, -1, :], dim=-1).unsqueeze(-1)`            `generated_ids = torch.cat([generated_ids, next_token_id], dim=-1)`            `attention_mask = torch.cat([attention_mask, torch.ones_like(next_token_id)], dim=-1)`            `new_token = tokenizer.decode(next_token_id.squeeze(), skip_special_tokens=True)`            `print(new_token, end='', flush=True)`            `if next_token_id.item() == tokenizer.eos_token_id:`                `break`    `return tokenizer.decode(generated_ids[0][input_ids.shape[-1]:], skip_special_tokens=True)``   ``   ``def chat(model, tokenizer):`    `history: List[Dict[str, str]] = []`    `print("Enter 'q' to quit, 'c' to clear chat history.")`    `while True:`        `user_input = input("User: ").strip().lower()`        `if user_input == 'q':`            `print("Exiting chat.")`            `break`        `if user_input == 'c':`            `print("Clearing chat history.")`            `history.clear()`            `continue`        `if not user_input:`            `print("Input cannot be empty.")`            `continue``   `        `history.append({"role": "user", "content": user_input})`        `text = tokenizer.apply_chat_template(history, tokenize=False, add_generation_prompt=True)`        `model_inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=4096).to('cuda:0')``   `        `print('Assistant:', end=' ', flush=True)`        `response = generate_response(model, tokenizer, model_inputs.input_ids, model_inputs.attention_mask)`        `print()`        `history.append({"role": "assistant", "content": response})``   ``   ``def main():`    `path = "AIDC-AI/Marco-o1"`    `tokenizer, model = load_model_and_tokenizer(path)`    `print('Starting chat.')`    `chat(model, tokenizer)``   ``   ``if __name__ == "__main__":`    `main()

如何学习AI大模型 ?

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓

CSDN粉丝独家福利

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

👉1.大模型入门学习思维导图👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
在这里插入图片描述

👉2.AGI大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。

在这里插入图片描述
在这里插入图片描述

👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

在这里插入图片描述

👉4.大模型落地应用案例PPT👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(全套教程文末领取哈)

在这里插入图片描述

👉5.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
img

在这里插入图片描述

👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)

在这里插入图片描述
👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习

CSDN粉丝独家福利

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值