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

李宏毅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.dtcms.com/a/268154.html

相关文章:

  • Maven引入第三方JAR包实战指南
  • 支持向量机(SVM)在肝脏CT/MRI图像分类(肝癌检测)中的应用及实现
  • Python11中创建虚拟环境、安装 TensorFlow
  • AI编程:打造炫酷多语倒计时器
  • 【Elasticsearch】自定义评分检索
  • 评论区实现 前端Vue
  • 【openp2p】 学习4: 纳秒级别的时间同步算法及demo
  • 数学建模的一般步骤
  • FastAPI+React19开发ERP系统实战第04期
  • Hadoop YARN 命令行工具完全指南
  • ProCCD复古相机:捕捉复古瞬间
  • uniapp的光标跟随和打字机效果
  • LangChain有中文网可以访问,还有教程可以学
  • 手机FunASR识别SIM卡通话占用内存和运行性能分析
  • Jailer:一款免费的数据库子集化和数据浏览工具
  • ragflow本地部署教程linux Ubuntu系统
  • Android studio在点击运行按钮时执行过程中输出的compileDebugKotlin 这个任务是由gradle执行的吗
  • 《前端路由重构:解锁多语言交互的底层逻辑》
  • 【Linux笔记】Linux的常见命令(部署Java程序)
  • 基于大数据的高效并行推荐系统
  • VSCode+arm-none-eabi-gcc交叉编译+CMake构建+OpenOCD(基于Raspberry Pico RP2040)
  • C 语言指针与作用域详解
  • 百度文心大模型 4.5 开源深度测评:技术架构、部署实战与生态协同全解析
  • Gitee DevOps:全流程自动化的效率革命
  • DeepSORT算法流程详解
  • 基于Flask+Jinja2的快捷教务系统(后端链接到新版正方教务系统)
  • k8s-服务发布基础
  • 数据结构实验习题
  • 定时器和守护线程
  • 【Guava】1.0.设计虚拟机的方向