李宏毅genai笔记:推理

0 思考越多效果越好

  • 可以把算力投入在training的时候,也可以投入在testing上面
    • 连起来的线表示表现是差不多的,越高分(越右上方)越好
  • 同样-1000分,可以训练时候用力较少,test的时候多用点算力
    • 但是training的数量级比testing大多了

1  Chain of thought

  • reasoning先列出解题过程再给答案
    • 这件事和CoT是非常相似的
    • 只不过reasoning的更长,可以看作“long CoT"
  • CoT最早是few shot CoT,需要给CoT范例
  • 后来直接给一句let's think step by step即可

  • 过去需要给LLM更精确的prmopt,让他思考
  •  把思考的方式的流程完整给他
    • 如果只让模型think step by step,模型可能不会
    • 需要用人类的知识和语言告诉模型怎么think step by step

2 给模型推理工作流程

  • 强迫语言模型回答一个问题回答几千几万次

  • 让语言模不断解同一问题
  • 横轴是解题次数
  • 纵轴是只要有正确答案就当作对的
  • 强的语言模型,在尝试比较少的情况下就能得到正确答案

Self-Consistency Improves Chain of Thought Reasoning in Language Models

Chain-of-Thought Reasoning Without Prompting

  • 怎么知道哪一次是正确的呢?
    • 第一种:看哪一种答案生成的次数最多
    • 第二种,让模型计算产生答案的信息
  • 当然,需要在prompt里说明, 把答案写在<answer></answer>里面

2.1 Best of N

Training Verifiers to Solve Math Word Problems

  • 训练一个verifier模型
    • 给答案和输入问题,判断答案是否正确
    • 也可以直接用一个语言模型当作verifier

  • 更好的方法给verifier其加以训练
  • 问题丢给语言模型,知道什么时候答对什么时候输出错误,训练一个专门验证的模型

另外一种方法是串行:先解第一次,根据第一次的解法解第二次。。。

  • 两种可以结合先并行解三次,然后根据第一次的解法分别再解一次

2.2 中间步骤进行验证

之前都是得到正确答案以后再验证

现在往往不是正确答案再验证,因为如果要到最后一步,模型需要花很多时间计算到最后一步才发现自己错了

现在的方法在进行到某一阶段的时候就开始验证,防止一步错步步错

先不接完,先只生成第一步

process verifier不需要看到完整的计算过程和答案才来验证是不是对的

根据一整个回答的一部分来验证,就可以验证这一步是不是对的,对的继续

给定prompt的方式,让模型分不同步骤,每个步骤以</step?结尾

就知道产生</step>的时候就是一步

  • 把剩下的步骤完成
  • 多次sample,同时从第一步开始解,每次都得到答案
  • 得到正确答案的几率,这个就是step1的分数
  • step2也是开始多次解题,得到正确答案的几率作为其分数

Self-Evaluation Guided Beam Search for Reasoning

得到数值,阈值应该怎么定义呢?

  • 每一次保留最好的n条路经,比较差的不再考虑

3 模仿学习 imitation learning

训练资料:问题+推论过程+和答案

输入问题,后面的都是要学的

让语言模型自己推理+给出答案,如果有答对的,那么过程+答案是traning data

用树状搜寻的方法一步一步验证,对的步骤继续,直到得到答案

答案正确的作为训练样本


第三类的方法可以是RL——鼓励对的步骤,惩罚错的步骤

  • 真应该这么教模型嘛?需要每一步推理都是对的么
  • 就算中间过程有错也没事,只要语言模型自己找到错误并改正,最终答案正确也行
  • 如果每一步都是对的,那么他自始至终都只看过对的,没看过错的步骤

    • 以为每一步推理都是对的,不知道从自己的推论过程中找有可能犯错的推理,并改正之

  • 制造一些错误的step,让语言模型有知错能改的能力
  • 从树状结构里找到包括错误答案的推理过程
    • 深搜,把错误的搜寻过程也加到答案里面
    • 橙色的step 2错了,接下来产生蓝色的step 2
    • 直接从橙色step2切到蓝色step2过去可能前言不对后语——>可以加上verifer的回馈(也即这个橙色step 2是错误的这些对应的文字)

——>语言模型就会学到一开始学到歪路,但是能更正回来

O1 Replication Journey: A Strategic Progress Report -- Part 1

shortcut learning就是只看过对的推理过程;journey learning就是先看到错误的推理过程再转到正确的推理过程

可以看到,后者train完后准确率高很多

3.1 对已有推理模型直接知识蒸馏

让这些有推理能力的模型产生reasoning的过程和答案,直接学习

DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning

数值越高越好
后面是post training 的源模型,前面是蒸馏的部分(也即从谁哪里拿到的训练数据)

4 基于强化学习

有训练资料和结果

要求模型做reasoning 
这里中间推理过程不重要,只在意答案
看起来和第三类(模仿学习)类似,但是这一类不管推理的过程,只要最终答案好就行

Deepseek-R1-Zero就是纯RL训练出来的

DeepSeek-R1强调了一个Aha Moment——RL学着学着 开始自己学会改错了

  • R1-zero的推理过程的内容非常难懂,他是多语言复杂的
    • 因为训练过程只在意答案对不对,不在意结果怎么样
  • 真正的r1还有以下几步
    • R1-zero产生训练资料
      • 耗费人力改reasoning process当作训练资料,再一次训练depseek v3-base
      • 此时得到的模型A可以产生人比较看得懂的推理过程
    • 从A到B,还需要再进行一次RL,要求回答问题的准确度+需要说同一种语言进行推理

  • 之前R1-zero生成的训练材料主要是数学和程序的问题
  • 模型B生成的训练资料就是各式各样的问题了
    • 生成问题的推理过程和答案后,用deepseek v3-base作为verifier判断得到的是不是好的答案&推理过程,去掉一些不好的
    • 重新训练deepseek v3-base得到模型C
  • 模型C进行safety和helpfulness的RL微调,得到最终的deepseek R1

4.1Foundation Model 很重要

强化正确答案的几率的前提是能够产生正确答案,如果模型本身就不够强,那就无法激发他的能力

deepseek v3 base 本身就会aha和自我check,RL只是强化了他的能力

5 推理长度和正确率的关系

Revisiting the Test-Time Scaling of o1-like Models: Do they Truly Possess Test-Time Scaling Capabilities?

同样的问题问5次,根据长度分类

实验结果:每次推理长度有很大的区别

gorup1到gorup5 越来越长(最短的也已经很长了)

越长并没有越好
而长的推理过程代价是额外的计算资源

5.1 CoT避免想太多的方法

5.1.1 Chain of Draft

  • think step by step的时候reasoning的部分似乎太长了
  • 这里改写了think step by step的 prompt
  • 每一个都是一个草稿(draft),每个草稿最多五个token
  • CoD的reasoning 长度 短了很多,性能区别不大,有时候甚至结果更好

5.2 给模型推理流程& imitatin learning的解决办法

Towards Thinking-Optimal Scaling of Test-Time Compute for LLM Reasoning

推理的模型作为老师,根据输入产生推理过程和答案

学习过程并没有考虑长度

问一个问题问很多次,选一个最短的推理过程作为训练资料

5.3 RL如何避免长推理过程

  • 对LLM来说,可以反复验证推理过程,只要最后答案是对的就行
  • 第一种解法是把长度的限制加到reward里面
    • 但多数没有采用这个方法
    • 因为不适用于所有问题,不同问题思考的长度是不一样的

Kimi k1.5: Scaling Reinforcement Learning with LLMs

  • 不要定义硬标准,定义相对标准
  • 同一个问题丢给语言模型很多次
    • 答对的收集起来,看平均需要多长的推理长度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/87880.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用SSH隧道连接远程主机

概述 SSH(Secure Shell 的缩写)是一种网络协议,通过使用身份验证机制,是两台计算机进行加密通信。 SSH 主要用途是登录服务器,还可以作为加密通信的中介,充当两台服务器之间的通信加密跳板,这个功能称为端口转发(port forwarding),又称 SSH 隧道(tunnel)。 端口…

数据结构---链表理解(二)

文章目录 二、链表2.1 链表初始化2.2 单链表2.2.1 单链表---头插法2.2.2 单链表---单链表遍历2.2.3 单链表---尾插法2.2.4 单链表---在指定位置插入数据2.2.5 单链表---删除指定位置节点2.2.6 单链表---获取链表长度2.2.7 单链表---释放链表 二、链表 暂时到这一步你就理解为&a…

Playnite使用指北 —— 一个优秀的本地化游戏管理工具

为何我们使用 Playnite&#xff1f; 首先我们需要知道 Playnite 是什么&#xff0c;如果你有过用 emby 等管理过电影影视的经验&#xff0c;你可能会对这种工具感到熟悉&#xff1a; Playnite 是一个开源的本地化的游戏管理软件&#xff0c;可以实现多平台的管理&#xff08;S…

时间与空间复杂度详解:算法效率的度量衡

一、为什么需要复杂度分析&#xff1f; 想象你正在开发一个手机通讯录应用&#xff0c;需要实现联系人搜索功能。你有两种算法可以选择&#xff1a; // 算法A&#xff1a;线性搜索 public Contact linearSearch(List<Contact> contacts, String name) {for (Contact c …

408第三季part2 - 计算机网络 - 交换机

理解 题目 如果你这么做 那你完了&#xff0c;因为这种叫存储转发 直通只转目的地址 b 再次理解 A发数据到交换机里想给B 然后交换表会记录A的MAC地址和端口 然后因为交换表找不到B&#xff0c;所以A会把BCD全部肘一遍&#xff08;广播&#xff09;&#xff0c;最终只有B会…

从零开始开发纯血鸿蒙应用之探析仓颉语言与ArkTS的差异

探析仓颉语言与ArkTS的差异 〇、前言一、IDE 的支持程度不同二、内置组件的使用方式不同三、页面路由实现方式的不同四、总结 〇、前言 截止到本文发布的日期为止&#xff0c;鸿蒙官方所推荐的开发原生鸿蒙应用的语言&#xff0c;有两种&#xff0c;分别是扩展自 Typescript 的…

Cursor/VScode ,点击运行按钮,就打开新的终端,如何设置为在当前终端运行文件而不是重新打开终端----一招搞定篇

我发现就是&#xff0c;我运行.py&#xff0c;点击完运行按钮&#xff0c;就给我重新打开一个终端&#xff0c;然后新的终端是在base环境中的&#xff0c;就跟麻烦 还得在当前终端输入python3 test.py 来运行文件。能不能修改。1、打开cursor或者vscode 。 同时按下 ctrlshiftp…

【STM32实践篇】:I2C驱动编写

文章目录I2C 物理层I2C 协议层1. 数据有效性2. 起始和停止信号3. 应答响应4. 总线的寻址方式5. 数据传输5.1 主机向从机发送数据5.2 主机由从机中读数据5.3 I2C通信复合格式I2C 驱动编写1. 配置 SCL 和 SDA2. I2C起始信号和停止信号3. 等待从设备应答4. 主机发送ACK和NACK信号5…

ragflow本地部署教程linux Ubuntu系统

以下是一份在 Ubuntu 系统上本地部署 RAGFlow 的详细教程。 一、基础环境准备 1.硬件要求 –CPU ≥ 4核 –RAM ≥ 16 GB –磁盘空间 ≥ 50 GB&#xff08;建议 SSD&#xff09; 2.系统配置 更新系统 sudo apt update && sudo apt upgrade -y 设置内核参数&#xff…

[netty5: WebSocketClientHandshaker WebSocketClientHandshakerFactory]-源码分析

在阅读这篇文章前&#xff0c;推荐先阅读以下内容&#xff1a; [netty5: WebSocketFrame]-源码分析[netty5: WebSocketFrameEncoder & WebSocketFrameDecoder]-源码解析 WebSocketClientHandshakerFactory WebSocketClientHandshakerFactory 是用于根据 URI 和协议版本创…

4.2 如何训练⼀个 LLM

⼀般⽽⾔&#xff0c;训练⼀个完整的 LLM 需要经过图1中的三个阶段——Pretrain、SFT 和 RLHF。 4.2.1 Pretrain 预训练任务与架构 任务类型&#xff1a;采用因果语言模型&#xff08;CLM&#xff09;&#xff0c;通过预测下一个 token 进行训练&#xff0c;与传统预训练模型…

Qt中的QObject::moveToThread方法详解

一、QObject::moveToThread方法QObject::moveToThread()是Qt框架中一个非常重要的功能&#xff0c;它允许改变QObject及其子对象的线程关联性。这个功能在多线程编程中特别有用&#xff0c;可以将耗时操作移到工作线程执行&#xff0c;避免阻塞主线程/GUI线程。基本用法void QO…

【9】用户接入与认证配置

本文旨在帮助网络管理员在 SD-WAN 环境中实现安全、稳定的用户接入与认证策略,涵盖本地/远程认证、权限管理、密码策略、SSH、会话控制等关键配置要素。 1.密码策略与账户安全 从 IOS XE SD-WAN 17.3.1 起,Cisco 引入密码强化功能,用于统一用户密码的复杂度与有效性要求。密…

第十六节:第三部分:多线程:线程安全问题、取钱问题的模拟

线程安全问题介绍&#xff1a;取钱的线程安全问题 取钱的线程安全问题 取钱案例需求分析 线程安全问题出现的原因 代码&#xff1a;模拟线程安全问题&#xff08;上述取钱案例&#xff09; Account类&#xff08;账户类&#xff09; package com.itheima.day3_thread_safe;pu…

APE:大语言模型具有人类水平的提示工程能力

摘要 通过以自然语言指令作为条件输入&#xff0c;大型语言模型&#xff08;LLMs&#xff09;展现出令人印象深刻的通用计算能力。然而&#xff0c;任务表现严重依赖于用于引导模型的提示&#xff08;prompt&#xff09;质量&#xff0c;而最有效的提示通常是由人类手工设计的…

X86 CPU 工作模式

1.概述 1.实模式 实模式又称实地址模式&#xff0c;实&#xff0c;即真实&#xff0c;这个真实分为两个方面&#xff0c;一个方面是运行真实的指令&#xff0c;对指令的动作不作区分&#xff0c;直接执行指令的真实功能&#xff0c;另一方面是发往内存的地址是真实的&#xff…

Java设计模式之行为型模式(策略模式)介绍与说明

一、策略模式简介 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每个算法封装起来&#xff0c;使它们可以相互替换&#xff0c;且算法的变化不会影响使用算法的客户。策略模式让算法独立于使用它的客…

【BIOS+MBR 微内核手写实现】

本文基于BIOS+MBR的架构,从四部分讲解微内核是如何实现的: 1)搭建微内核编译调试环境 2)梳理微内核的代码结构:伪指令讲解 3)手写实现微内核框架,输出简单的字符串 4)讲解微内核启动阶段的具体运行过程 先完成内核工程创建,如下图 我们这里使用nasm风格的汇编编写,…

从C/C++迁移到Go:内存管理思维转变

一、引言 在当今高速发展的软件开发世界中&#xff0c;语言迁移已成为技术进化的常态。作为一名曾经的C/C开发者&#xff0c;我经历了向Go语言转变的全过程&#xff0c;其中最大的认知挑战来自内存管理模式的根本性差异。 我记得第一次接触Go项目时的困惑&#xff1a;没有析构函…

正确设置 FreeRTOS 与 STM32 的中断优先级

在裸机开发&#xff08;非 RTOS&#xff09;时&#xff0c;大多数 STM32 外设的中断优先级通常不需要手动配置&#xff0c;原因如下&#xff1a; ✅ 裸机开发中默认中断优先级行为 特点说明默认中断优先级为 0如果你不设置&#xff0c;STM32 HAL 默认设置所有外设中断为 0&…