【OpenAI-O1-Preview 推理缩放定律 亲测】 9.11 和 9.8 哪个大 ? 程序员怎样实现财富自由完整可执行可落地的方案步骤?(文末附国内可用的测试链接)

在这里插入图片描述

OpenAI-O1-Preview 亲测:(文末附国内可用的测试链接)

OpenAI 草莓 (o1) 已出炉!我们终于看到推理时间扩展的范例在生产中得到普及和部署。正如萨顿在《痛苦的教训》中所说,只有两种技术可以随着计算无限扩展:

学习和搜索。

是时候将焦点转移到后者了。

  1. 你不需要一个巨大的模型来进行推理。许多参数专门用于记忆事实,以便在琐事 QA 等基准测试中表现良好。可以从知识中分解出推理,即知道如何调用浏览器和代码验证器等工具的小型“推理核心”。预训练计算量可能会减少。

  2. 大量计算转移到推理服务,而不是训练前/训练后。 LLMs是基于文本的模拟器。通过在模拟器中推出许多可能的策略和场景,模型最终将收敛到良好的解决方案。这个过程是一个经过充分研究的问题,就像 AlphaGo 的蒙特卡罗树搜索(MCTS)一样。

  3. OpenAI 肯定很早之前就已经弄清楚了推理缩放定律,而学术界最近才发现这一定律。上个月,Arxiv 上相隔一周发表了两篇论文:

  • 大型语言猴子:通过重复采样扩展推理计算。布朗等人。发现 DeepSeek-Coder 在 SWE-Bench 上从 1 个样本的 15.9% 提高到 250 个样本的 56%,击败了 Sonnet-3.5。

  • 优化LLM测试时间计算比缩放模型参数更有效。斯内尔等人。发现 PaLM 2-S 通过测试时搜索在数学上击败了 14 倍大的模型。

  • Large Language Monkeys: Scaling Inference Compute with Repeated Sampling. Brown et al. finds that DeepSeek-Coder increases from 15.9% with one sample to 56% with 250 samples on SWE-Bench, beating Sonnet-3.5.

  • Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters. Snell et al. finds that PaLM 2-S beats a 14x larger model on MATH with test-time search.

  1. 将o1产品化比确定学术基准要困难得多。对于野外推理问题,如何决定何时停止搜索?奖励函数是什么?成功的标准?何时在循环中调用代码解释器等工具?如何考虑这些 CPU 进程的计算成本?他们的研究帖子没有太多分享。

  2. 草莓很容易成为数据飞轮。如果答案正确,整个搜索轨迹将成为训练示例的小型数据集,其中包含正面奖励和负面奖励。

这反过来又改进了 GPT 未来版本的推理核心,类似于 AlphaGo 的价值网络(用于评估每个棋盘位置的质量)如何随着 MCTS 生成越来越精细的训练数据而改进。

OpenAI Strawberry (o1) is out! We are finally seeing the paradigm of inference-time scaling popularized and deployed in production. As Sutton said in the Bitter Lesson, there’re only 2 techniques that scale indefinitely with compute: learning & search. It’s time to shift focus to the latter.

  1. You don’t need a huge model to perform reasoning. Lots of parameters are dedicated to memorizing facts, in order to perform well in benchmarks like trivia QA. It is possible to factor out reasoning from knowledge, i.e. a small “reasoning core” that knows how to call tools like browser and code verifier. Pre-training compute may be decreased.

  2. A huge amount of compute is shifted to serving inference instead of pre/post-training. LLMs are text-based simulators. By rolling out many possible strategies and scenarios in the simulator, the model will eventually converge to good solutions. The process is a well-studied problem like AlphaGo’s monte carlo tree search (MCTS).

  3. OpenAI must have figured out the inference scaling law a long time ago, which academia is just recently discovering. Two papers came out on Arxiv a week apart last month:

  • Large Language Monkeys: Scaling Inference Compute with Repeated Sampling. Brown et al. finds that DeepSeek-Coder increases from 15.9% with one sample to 56% with 250 samples on SWE-Bench, beating Sonnet-3.5.
  • Scaling LLM Test-Time Compute Optimally can be More Effective than Scaling Model Parameters. Snell et al. finds that PaLM 2-S beats a 14x larger model on MATH with test-time search.
  1. Productionizing o1 is much harder than nailing the academic benchmarks. For reasoning problems in the wild, how to decide when to stop searching? What’s the reward function? Success criterion? When to call tools like code interpreter in the loop? How to factor in the compute cost of those CPU processes? Their research post didn’t share much.

  2. Strawberry easily becomes a data flywheel. If the answer is correct, the entire search trace becomes a mini dataset of training examples, which contain both positive and negative rewards.

This in turn improves the reasoning core for future versions of GPT, similar to how AlphaGo’s value network — used to evaluate quality of each board position — improves as MCTS generates more and more refined training data.

用 golang 实现一个 DAG 任务调度系统源代码

以下是一个用 Go 语言实现的简单的 DAG(有向无环图)任务调度系统的源代码:

// dag_scheduler.go
package main

import (
    "fmt"
    "errors"
)

// 定义任务结构体
type Task struct {
    ID          string                 // 任务ID
    DependsOn   []string               // 依赖的任务ID列表
    Run         func() error           // 任务执行的函数
}

// 定义DAG结构体
type DAG struct {
    Tasks map[string]*Task             // 任务ID到任务的映射
}

// 添加任务到DAG
func (dag *DAG) AddTask(task *Task) error {
    if dag.Tasks == nil {
        dag.Tasks = make(map[string]*Task)
    }
    if _, exists := dag.Tasks[task.ID]; exists {
        return errors.New("任务已存在: " + task.ID)
    }
    dag.Tasks[task.ID] = task
    return nil
}

// 拓扑排序,用于确定执行顺序
func (dag *DAG) TopologicalSort() ([]*Task, error) {
    var result []*Task
    visited := make(map[string]bool)     // 已访问的任务
    tempMarked := make(map[string]bool)  // 临时标记,用于检测循环依赖

    // 深度优先搜索函数
    var visit func(string) error
    visit = func(id string) error {
        if tempMarked[id] {
            return errors.New("发现循环依赖")
        }
        if !visited[id] {
            tempMarked[id] = true
            task, exists := dag.Tasks[id]
            if !exists {
                return errors.New("未找到任务: " + id)
            }
            for _, depID := range task.DependsOn {
                if err := visit(depID); err != nil {
                    return err
                }
            }
            visited[id] = true
            tempMarked[id] = false
            result = append(result, task)
        }
        return nil
    }

    // 遍历所有任务,执行DFS
    for id := range dag.Tasks {
        if !visited[id] {
            if err := visit(id); err != nil {
                return nil, err
            }
        }
    }

    return result, nil
}

// 按拓扑排序的顺序执行任务
func (dag *DAG) Run() error {
    sortedTasks, err := dag.TopologicalSort()
    if err != nil {
        return err
    }

    // 按顺序执行任务
    for _, task := range sortedTasks {
        fmt.Printf("正在执行任务: %s\n", task.ID)
        if err := task.Run(); err != nil {
            return err
        }
    }
    return nil
}

// 主函数,示例如何使用
func main() {
    dag := &DAG{}

    // 定义任务A
    taskA := &Task{
        ID:        "A",
        DependsOn: []string{},
        Run: func() error {
            fmt.Println("运行任务 A")
            return nil
        },
    }

    // 定义任务B,依赖于任务A
    taskB := &Task{
        ID:        "B",
        DependsOn: []string{"A"},
        Run: func() error {
            fmt.Println("运行任务 B")
            return nil
        },
    }

    // 定义任务C,依赖于任务A
    taskC := &Task{
        ID:        "C",
        DependsOn: []string{"A"},
        Run: func() error {
            fmt.Println("运行任务 C")
            return nil
        },
    }

    // 定义任务D,依赖于任务B和任务C
    taskD := &Task{
        ID:        "D",
        DependsOn: []string{"B", "C"},
        Run: func() error {
            fmt.Println("运行任务 D")
            return nil
        },
    }

    // 将任务添加到DAG
    dag.AddTask(taskA)
    dag.AddTask(taskB)
    dag.AddTask(taskC)
    dag.AddTask(taskD)

    // 运行DAG中的所有任务
    if err := dag.Run(); err != nil {
        fmt.Println("执行出错:", err)
    }
}

代码说明:

  1. Task 结构体:表示单个任务,包含任务的ID、依赖的任务ID列表,以及具体执行的函数。

  2. DAG 结构体:表示整个任务的有向无环图,包含任务ID到任务的映射关系。

  3. AddTask 方法:将任务添加到 DAG 中,如果任务 ID 已存在则返回错误。

  4. TopologicalSort 方法:使用深度优先搜索(DFS)实现的拓扑排序算法,确定任务执行的顺序,检测循环依赖。

  5. Run 方法:按照拓扑排序的结果,依次执行任务。

  6. main 函数:创建任务并定义它们的依赖关系,然后添加到 DAG 中,最后运行所有任务。

运行结果示例:

正在执行任务: A
运行任务 A
正在执行任务: C
运行任务 C
正在执行任务: B
运行任务 B
正在执行任务: D
运行任务 D

注意事项:

  • 如果检测到循环依赖(例如,任务 A 依赖于任务 B,任务 B 又依赖于任务 A),程序将返回错误信息“发现循环依赖”。

  • 确保所有依赖的任务都已添加到 DAG 中,否则在拓扑排序时会返回“未找到任务”的错误。

这个简单的实现可以作为一个基础,根据具体需求可以进一步扩展,例如:

  • 支持并行执行没有依赖关系的任务。

  • 增加任务的状态管理(如等待、进行中、已完成、失败)。

  • 支持任务重试、超时等高级特性。

在这里插入图片描述

9.11 和 9.8 哪个大?

Q:9.11 和 9.8 哪个大
A: 9.11 比 9.8 大。
Q: 比较一下 9.11 和 9.8 哪个大
A: 抱歉,我之前的回答有误。

在比较数字 9.11 和 9.8 时,9.8 比 9.11 大。

这是因为:

  • 9.11 等于 9 + 0.11。
  • 9.8 等于 9 + 0.8。

由于 0.8 > 0.11,所以 9 + 0.8 (即 9.8) 大于 9 + 0.11 (即 9.11)。

因此,9.8 大于 9.11。

综合全面地比较一下 9.11 和 9.8 哪个大

要全面比较 9.11 和 9.8 哪个更大,我们可以从以下几个角度进行分析:


一、数值比较

  • 9.11 和 9.8 都可以看作十进制的小数。

具体比较:

  • 9.11 表示数字 9.11。
  • 9.8 表示数字 9.8。

比较方法:

  1. 整数部分:两者的整数部分都是 9,所以需要比较小数部分。
  2. 小数部分:
  • 9.11 的小数部分是 0.11。
  • 9.8 的小数部分是 0.8。
  1. 比较小数部分:
  • 将小数部分统一位数进行比较:
  • 0.11 相当于 0.110。
  • 0.8 相当于 0.800。
  • 0.800 大于 0.110。

结论:

  • 9.8 在数值上 大于 9.11。

二、日期比较

  • 9.11 和 9.8 也可以表示日期,即9月11日和9月8日。

具体比较:

  • 9月11日 比 9月8日 晚了 3天。

结论:

  • 从日期的先后顺序看,9月11日 大于 9月8日。

三、历史事件影响比较

  • 9.11 通常指代 2001年9月11日发生的美国“九一一”恐怖袭击事件,对全球政治、经济和安全产生了深远影响。
  • 9.8 在一些地区可能指代特定的事件,例如中国的9·8国际投资贸易洽谈会,但其全球影响相对较小。

结论:

  • 从历史事件的影响力来看,9.11事件的影响力 大于 可能与9.8相关的事件。

四、文化和象征意义比较

  • 9.11:在全球范围内被铭记为一个重大的悲剧事件,象征着反恐战争的开始,具有深刻的历史教训和警示意义。
  • 9.8:除特定领域或地区外,通常不具备全球性的文化象征意义。

结论:

  • 从文化和象征意义的角度,9.11 的重量和影响更为显著。

综合结论

  • 数值上:9.8 大于 9.11。
  • 日期上:9.11(9月11日) 晚于 9.8(9月8日),因此时间上9.11更“晚”或“后”。
  • 历史影响:9.11 的全球影响力和象征意义 大于 9.8。

因此,9.11 和 9.8 哪个大,取决于具体的比较维度:

  • 如果关注数值大小,则 9.8 大于 9.11。
  • 如果关注日期先后,则 9.11 晚于 9.8。
  • 如果关注历史事件影响,则 9.11 的影响 大于 9.8。

注意事项:

  • 比较时应明确所关注的角度和上下文,以得出准确的结论。
  • 在不同的领域和文化背景下,数字和日期可能具有不同的含义。

程序员怎样实现财富自由完整可执行可落地的方案步骤

实现财富自由是许多程序员的目标,但这需要长期的规划、坚持和正确的方法。以下是一个完整、可执行、可落地的方案和步骤,帮助程序员迈向财富自由。


一、设定明确的财务目标

  1. 定义“财富自由”对你的具体含义:明确需要多少资产或被动收入才能满足你的生活需求。

  2. 设定短期和长期目标:例如,5年内储蓄XX万元,10年内实现被动收入覆盖日常开支。


二、提升技术能力与职业竞争力

  1. 持续学习新技术:
  • 掌握行业最新的编程语言、框架和工具。
  • 关注技术趋势,如人工智能、区块链、云计算等。
  1. 获得专业认证:
  • 考取与行业相关的认证,提升专业形象。
  1. 参与开源项目:
  • 贡献代码,提升知名度和影响力。
  1. 建立个人品牌:
  • 开设技术博客,分享经验和见解。
  • 在社交媒体和专业平台活跃,建立专业形象。

三、职业发展与收入提升

  1. 优化当前职业路径:
  • 寻求职位晋升,如从初级工程师提升到高级工程师、技术主管等。
  • 定期与上级沟通,了解提升空间和要求。
  1. 薪资谈判:
  • 了解行业薪资水平,及时与公司谈判争取合理的薪资待遇。
  1. 跳槽:
  • 如果当前公司无法满足职业发展需求,考虑到更有前景或薪资更高的公司。
  1. 国际化机会:
  • 考虑海外工作机会,获取更高的薪资和视野。

四、开发副业与被动收入

  1. 自由职业和兼职:
  • 利用业余时间接自由职业项目,增加收入。
  1. 开发和销售产品:
  • 开发应用程序、插件、主题等,放在平台上售卖。
  1. 内容创作:
  • 编写技术书籍、制作在线课程,通过销售获取收入。
  1. 技术顾问:
  • 为初创公司或其他企业提供咨询服务。
  1. 投资股权:
  • 参与技术创业公司的股权投资,分享公司成长带来的收益。

五、创业与建立自己的公司

  1. 发现市场需求:
  • 通过行业研究,找到尚未被满足的市场需求。
  1. 组建团队:
  • 找到志同道合的伙伴,组建核心团队。
  1. 制定商业计划:
  • 明确商业模式、目标市场、营销策略和财务预测。
  1. 获取融资:
  • 寻求天使投资、风险投资或其他融资渠道。
  1. 产品开发与迭代:
  • 快速推出最小可行产品(MVP),根据用户反馈迭代改进。
  1. 市场营销与推广:
  • 利用多种渠道宣传产品,获取用户。

六、财务管理和投资

  1. 制定个人财务预算:
  • 记录收入和支出,控制不必要的开销。
  1. 建立紧急备用金:
  • 预留3-6个月的生活费用应对突发情况。
  1. 合理投资:
  • 学习理财知识,进行稳健的投资,如基金、股票、债券等。
  1. 资产配置:
  • 分散投资,降低风险。
  1. 避免高风险投资:
  • 远离未知的高风险金融产品,谨慎对待高收益诱惑。

七、持续学习财务和投资知识

  1. 阅读财务管理书籍:
  • 如《穷爸爸富爸爸》、《财务自由之路》等。
  1. 参加理财课程:
  • 系统学习投资理财知识。
  1. 关注财经新闻和资讯:
  • 了解宏观经济和金融市场动态。

八、建立专业人脉网络

  1. 参加行业会议和活动:
  • 扩大人脉,获取最新资讯。
  1. 加入专业社区和组织:
  • 与同行交流,寻求合作机会。
  1. 寻找导师或榜样:
  • 从有经验的人士那里获取指导和建议。

九、保持身心健康

  1. 身体健康:
  • 定期锻炼,保证充足的睡眠,保持良好的身体状态。
  1. 心理健康:
  • 学会减压,保持积极的心态,避免职业倦怠。
  1. 平衡工作与生活:
  • 合理安排时间,兼顾事业和家庭。

十、不断调整和坚持

  1. 定期回顾和调整计划:
  • 根据实际情况,对财务目标和计划进行调整。
  1. 保持耐心和毅力:
  • 财富自由是一个长期目标,需要持续的努力和坚持。
  1. 庆祝小的成功:
  • 达到阶段性目标时,给予自己适当的奖励,保持积极性。

结语

实现财富自由并非一朝一夕,需要程序员在专业领域不断深耕,同时注重财务管理和投资理财。通过以上步骤,结合自身情况,制定适合自己的计划,踏实执行,持之以恒,终将有机会实现财富自由的目标。


提示

  • 风险意识:所有投资和创业都有风险,需谨慎评估,避免盲目跟风。
  • 法律合规:在副业、创业和投资过程中,确保遵守相关法律法规。

希望以上方案对你有所帮助,祝你早日实现财富自由!

OpenAI-O1-Preview 国内可用的测试链接:

https://huggingface.co/spaces/yuntian-deng/o1

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光剑书架上的书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值