尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

第 1 篇:推理引擎到底在干什么(零门槛入门系列)

第 1 篇:推理引擎到底在干什么(零门槛入门系列) 上一篇《零门槛推理引擎入门》系列 · 总纲 下一篇第 2 篇《数字在内存里怎么排队》一句话导读把大模型会说话这件事拆开看它只是一个读数字 → 算 → 挑一个词 → 接回去再来一遍的循环后面 29 篇都在给这个循环里的某一个动作补细节。关键词推理引擎、生成循环、提示词、词表、采样把大模型会说话这件事拆到最底层剩下的就是一个循环读数字、算一遍、挑一个词、接回去然后再来一遍。本篇先不看它内部有多复杂只把这个循环的四步摆清楚——后面 29 篇要做的都是给这四步里的某一步补细节。① 一句话概念推理引擎就是读数字 → 算 → 挑一个词 → 接回去的循环。② 起点一个只会照规矩办事的抄写员有个抄写员桌上放着一本很怪的字典和一张写满数字的长纸。他不懂你在说什么也不会写文章只照规矩办四件事。第一件你说一个词他去字典里查出这个词对应的编号。第二件拿着这串编号再算一遍——每算一次长纸上的内容都会变所以下一次他还得从头再来一遍其实有省事的办法——第 9 篇讲。第三件算完之后他在心里排出几个接下来最顺的候选词挑一个写下来。第四件把刚写下来的词查成编号接到那串编号的最后面然后回到第一件。他从不回头看这段话有没有道理只保证每一步都接得顺口没有灵感也没有理解只有查一查、算一算、挑一个、接上去这四步一遍一遍地转。③ 伪代码把四步写成一个循环函数 生成(提示词, 权重) - 文字: 词表 权重.词表 编号串 词表.查(提示词) # 文字 - 一串编号 当 没有遇到结束符: 候选 前向(编号串, 权重) # 算一遍得到下一个词的可能性 下一个 从候选里挑一个(候选) # 按可能性挑不是固定答案 输出(词表.反查(下一个)) 编号串.追加(下一个) # 接回去再来一遍 → 已输出的所有词上面这段循环跑起来的样子就是如图 1 所示的一圈。图 1一次生成的最小闭环整张图自上而下排着五个方框依次是提示词文字→ 查表文字 → 一串数字 id → 前向算一次思考 → 从概率里挑一个词 → 输出这个词右边有一条向上弯回去的箭头把最后一步输出这个词接回第三步前向旁边的注写着接回去把新词追加到输入再来一遍底部一个灰框写着循环的停止条件遇到结束符或达到长度上限。逐行要点词表.查(提示词)机器不认识文字只认识编号所以第一步是把文字换成编号串。这个动作在进阶系列里叫分词本篇只要记住文字要先变成编号。前向(...)这是前向计算forward pass的简写全部计算都在这一步里——把输入和权重weight模型里那一大堆数字算成下一个词有多可能的一串分数。它一次只往前推一个词。从候选里挑一个是挑不是算。模型给的是每个候选词的可能性引擎默认按可能性抽签这个动作叫采样sampling所以同一句话问两遍输出可能不一样把温度设成 0 就退化成总挑最大自检门用的就是这条。编号串.追加(下一个)把刚挑出来的词接回输入末尾作为下一轮的输入——这就是接得顺口的全部秘密。当 没有遇到结束符循环的出口不是一个计数器而是模型自己写出来的一个特殊编号。它写出来循环才停。④ 纸笔实验必做设定某一轮里引擎只给了三个候选词可能性分别是 甲 0.6、乙 0.3、丙 0.1。请用两种挑法各走 5 步看看差别有多大。挑法 A总挑最大的那个。每一步都选可能性最高的词。挑法 B按可能性抽签。把 0 到 1 分成三段[0, 0.6)出甲、[0.6, 0.9)出乙、[0.9, 1]出丙。为了不掷骰子用固定的一串随机数模拟抽签0.42、0.87、0.13、0.66、0.05。每个数落在哪一段这一步就出哪个词。预期结果步数12345挑法 A甲甲甲甲甲挑法 B甲乙甲乙甲挑法 A 五步全是甲输出完全可预测挑法 B 因为抽签结果不同走出甲乙甲乙甲。再算一下两种挑法的期望值挑法 B 里甲出现的期望次数是0.6 × 5 3次正好是 5 步里的 3 步。结论模型给的永远是可能性不是答案同一个模型、同一份权重可以走出不同的句子而走路的方向由抽签决定。这也是为什么工程上要专门讨论贪心还是采样——后面第 13 篇的一次猜几个词、第 28 篇的测量纪律都是从这个岔路口分出来的。可选 REPL 版任意语言直接跑候选, 可能 [甲, 乙, 丙], [0.6, 0.3, 0.1] 随机数 [0.42, 0.87, 0.13, 0.66, 0.05] def 抽签(r): 累计 0 对每个 i 于 范围(3): 累计 累计 可能[i] 若 r 累计: 返回 候选[i] 打印(总挑最大:, 候选[0] * 5) 打印(按可能性抽签:, .join([抽签(r) 对每个 r 于 随机数]))⑤ 进阶锚点进阶锚点本篇概念在《30 天手搓推理引擎》Day 1里被真正实现——1-1 为什么有人要手搓一个推理引擎30 天系列开篇/1-2 ARM 工具链第一课原生编译 vs 交叉编译以及一个真实的 -march 翻车现场/1-3 自检门没有模型的确定性测试第一次读懂 PASS/FAIL。入门版到这里就够了进阶版会多出真实的参数分发与入口代码src/main.c如何把一次请求变成这个循环、--test-l3确定性自检门的具体判据、以及为什么同输入必须同输出在工程里是一条硬纪律。想动手 → 仓库https://gitee.com/pei-xiaoguang/kestrel-llm从 Day 1 开始。本篇里那个可能性 抽签的岔路口在进阶 Day 1 的第 3 篇里就变成了一个可执行的 PASS/FAIL 判据。下篇预告循环里的前向计算到底在算什么它的原料是表格而表格在机器里并不是一张表——第 2 篇讲数字在内存里怎么排队。
返回列表