当前位置: 首页 > article >正文

技术上,如何复现 o1?

图片

知乎:周舒畅
链接:https://zhuanlan.zhihu.com/p/720127190

基础模型

搞 o1 首先需要一个基模,这个基模必须是:

  1. 能进行“长”生成。注意这和“长 context”不是一回事。模型生成的结果,经常会有自激的噪声存在,或分布逐渐变得非常 sharp,从而导致模型生成内容的后半段质量下降。比如写小说时会“烂尾”,用大团圆草草收场。在多模生成模型上也很容易观察到这一现象,表现为生成的音频和视频在结尾处要么糊掉要么变成静音静止。

  2. 有较强的抗噪能力。目前看来,这一点刚需大模型,比如万亿的 step2 就是比千亿的 step1 好。小模型容易被 context 里的一点点错误带偏。考虑到 CoT 就是个 trial-and-error 的过程,要能从鱼龙混杂的 context 里筛出有用信息往下走,需要一个充分训练的大模型。

数据

数据上,如果起手式是模仿学习(SFT),需要至少是起动量的规划数据:

  • 比如一个看起来能分解成步骤的题,可以由人类演示如何拆成哪几步。

  • 或者由模型按类似 ReAct / Reflection / RePlan 的方式 CoT,然后人类给过程打分。一个可能的捷径是构造 CoT 的 DPO 数据。

这里说是起动量,是因为这些数据生产困难,后面还是要靠 Self-Play 来起量。(现在有了 O1,有 GPT 帐号的厂又可以用 O1 来生成这个“起动量”的数据了)。

接下来 RL 部分需要大量的 Reward Model 数据(评论区说可能 O1 只用 RL)。考虑到 CoT 数据非常长,很难一上来就全对,所以大概率是个 PRM,相当于人类标出 CoT (可能是树型)的第一个出错点。

这里能从自动定理证明器(ATP)如 LEAN/Coq 借鉴的一招是“tactics”。比如 O1 会有意识地做简化(simpl)操作,也会设变量(intros)。如果实锤 O1 会数学归纳法(induction),那就真的很可能有一个把 ATP 产生的证明,按自然语言翻译成 CoT 数据的造数据路径。

算法

算法上,需要一个有数据效率(Data Efficient)的算法。应该是某种 MCTS(因为 o1 解得好的都是 verifier 容易的题)。这个在去年以来的各种 Q*-clone 探索中都有覆盖。这里麻烦的应该是系统和算法的配合,因为大规模推理造数据看来少不了。

o1-mini 的存在值得玩味。据说 o1-mini 数学甚至更强,但是推理会更“无理”。顺序上,是先有 o1-mini 还是先有 o1-preview?如果先有 o1-mini,那么可以用 o1-mini 大量的 roll 数据;如果先有 o1-preview,那么可以从 o1-preview 造大量数据去喂饱 o1-mini。或者是两者交替成为共轭师徒。

还有个简单的可能是 o1 训得慢,而 o1-mini 模型小训得快,先过完了数据放出来。。。

FAQ

Q:目前 o1 似乎主要展示了在解题时的强大能力。那么在其他方面,比如在多模态理解生成一体中,有什么应用?

A:o1 非常深刻地改变了 LLM,所有目前的 LLM 应用,只要存在一个基于或不基于 LLM 的 verifier,或者有约束要满足,都会受到断代式的影响。比如以前多模生成里,指令跟随一直是困难的问题,具体例子有生成 3D 资产需要的高一致性的多视角图,之前只能靠后挑生成。o1 则打开了模型反复修改“sketch”,来达到约束生成的可能。可以想象 o1 自言自语,然后在画布上这里一笔那里一笔涂涂抹抹的场面。

Q:对 AI 搜索和角色扮演有什么影响呢?

A:AI 搜索中,复杂的二次搜索(如读一篇论文时还参考参考文献)等,都是需要均衡每个动作成本收益,以及顾及当前时间预算的行为。o1 展现了这个潜力,并且箭在弦上(“o1-preview doesn't use tools yet, but support for function calling, code interpreter, and browsing is planned”)。

对于角色扮演来说,o1 提供了一个框架,让不烂尾,不无聊的生成成为可能。这几天多个测试表明,o1 是诗歌之类“戴着镣铐跳舞”式创作的大师。那么 AI 角色扮演需要的“乐而不淫”、“文似看山不喜平”、“草蛇灰线”对于 o1 来说,无非是一条条约束而已。“两句三年得,一吟双泪流。” 以后流的是电费的心痛的泪。


http://www.kler.cn/a/308466.html

相关文章:

  • 继承和多态(上)
  • vue2+ element ui 集成pdfjs-dist
  • 丹摩征文活动|丹摩智算平台使用指南
  • stringUtils详细解释
  • idea的mapper.xml文件里写sql语句出现Tag name expected错误提示
  • dapp获取钱包地址,及签名
  • 易于理解和实现的Python代码示例
  • 数据中心服务器与存储运维的深度实践与挑战
  • 部署自己的对话大模型,使用Ollama + Qwen2 +FastGPT 实现
  • ThinkCMF框架任意内容包含漏洞的讲解
  • 简化登录流程,助力应用建立用户体系
  • 《程序猿之设计模式实战 · 池化思想》
  • MySql批量迁移数据库
  • macOS使用brew安装并配置python环境
  • visual studio2015安装番茄助手
  • Spring Boot-日志相关问题
  • android13隐藏桌面底部白线
  • STM32巡回研讨会总结(2024)
  • Kafka日志索引详解与常见问题分析
  • 【LLM】为什么要PPO
  • 二.Unity中使用虚拟摇杆来控制角色移动
  • 解码 OpenAI 的 o1 系列大型语言模型
  • flash_attention简要笔记
  • QT程序的安装包制作教程
  • 第二十三章 加密安全标头元素
  • go-zero的快速实战(完整)