
大模型连数数都会数错这说明了什么有一天我突发奇想给 AI 一串 0 和 1让它数出里面有多少个 1。结果它数错了。一个能写代码、能翻译、能做数学题的 AI居然数不清一串数字里有几个 1这件事让我对大模型的聪明产生了深刻的怀疑也让我真正理解了它的能力边界。第一章实验现场我给 AI 出了一道幼儿园级别的题我请数一下 10110010110101 中有多少个 1 AI这串数字中有 8 个 1。我自己数了一下1-0-1-1-0-0-1-0-1-1-0-1-0-1应该是8 个。嗯这次对了。那加长一点呢我请数一下 101100101101010011010110 中有多少个 1 AI这串数字中有 13 个 1。我写了段代码验证s101100101101010011010110print(s.count(1))# 输出14错了。少数了一个。再来一次换一串更长的我请数一下 1011001011010100110101101011001011010 中有多少个 1 AI这串数字中有 20 个 1。s1011001011010100110101101011001011010print(s.count(1))# 输出21又错了。一个能写出完美快速排序的 AI数不清一串数字里有几个 1。这到底是怎么回事第二章它根本没在数我们数数时脑子里是这样的1 → 计数器 1 0 → 跳过 1 → 计数器 2 1 → 计数器 3 0 → 跳过 0 → 跳过 1 → 计数器 4 ... 从左到右逐个扫描遇到 1 就加 1最后报出计数器的值。你以为 AI 也是这样做的它不是。它根本没有逐个扫描的能力。大模型的 Transformer 架构是并行的——它一次性看到所有内容做一次矩阵运算然后直接输出答案。它没有循环没有计数器没有一个一个来的机制。这就像让你扫一眼一把撒在桌上的豆子然后报数量——7 颗以下你能扫一眼就说对再多你就必须一颗颗数了。大模型永远停留在扫一眼的阶段。第三章它看到的甚至不是一个个字符问题比不会数更深——大模型看到的东西和你看到的就不一样。你看到的是 14 个独立的字符1 0 1 1 0 0 1 0 1 1 0 1 0 1大模型看到的是经过分词器Tokenizer切割后的几个token你看到的 1 0 1 1 0 0 1 0 1 1 0 1 0 1 分词器可能切成 101 | 100 | 101 | 101 或者 10 | 110 | 010 | 1101 | 01分词器不是按单个字符切的而是按训练语料中的统计频率来切的。“101” 如果在训练数据里频繁出现就会被当成一个整体。这意味着什么模型拿到的不是 14 个字符而是 4~5 个 token 块。它要从这些块里数出 “1” 的个数就好比让你从这堆东西里数出字母 “a” 的个数你看到的不是b a n a n a 而是 ban ana 你还能一眼看出有 3 个 a 吗困难多了。AI 面对的是一个被切碎重组的输入还要在没有计数器的情况下给出精确答案。它能猜对短序列已经很不容易了。第四章它的数数实际上是在估算既然不能逐个扫描那短序列它是怎么答对的大概率靠的是这些策略策略 1模式记忆111 → 训练数据里见过无数次 → 答案是 3 1010 → 训练数据里见过无数次 → 答案是 2 11001 → 训练数据里见过 → 答案是 3短的序列直接背答案就行了。策略 2估算看到一串很长的 01 序列 大概感觉 1 占了一半多一点 36 个字符 → 估计 20 个 不是数的是猜的这解释了为什么它的错误总是差一两个而不是差十个——估算虽然不精确但大方向是对的。策略 3碰运气对于中等长度的序列10~20 个字符 有时候估对了有时候估错了 看起来像是有时候数对有时候数错 其实根本就不是在数第五章一个有趣的补救——让它自言自语如果你换一种问法准确率会大幅提升我请逐个检查 10110010110101 中每一位标记是 0 还是 1最后数出 1 的总数。 AI 第 1 位1 → 计数1 第 2 位0 → 计数1 第 3 位1 → 计数2 第 4 位1 → 计数3 第 5 位0 → 计数3 第 6 位0 → 计数3 第 7 位1 → 计数4 第 8 位0 → 计数4 第 9 位1 → 计数5 第 10 位1 → 计数6 第 11 位0 → 计数6 第 12 位1 → 计数7 第 13 位0 → 计数7 第 14 位1 → 计数8 共有 8 个 1。 ✓这就是所谓的Chain-of-Thought思维链。为什么自言自语就能数对了因为 Transformer没有工作内存——没有地方暂存当前数到了几。但当你让它把中间过程写出来时输出文本本身就变成了工作内存没有思维链 输入 → [一次矩阵运算] → 直接输出答案 没有地方存数到第 7 个了当前计数是 4 有思维链 输入 → 生成第 1 位1 → 计数1 → 把这段话作为上下文继续生成第 2 位0 → 计数1 → 把前两段话作为上下文继续生成... 每一步的输出都被存在了文本里 后续的预测可以读到前面的中间结果 文本充当了草稿纸模型用说出来代替了记在脑子里。这也是为什么 OpenAI 的 o1 模型要生成那么长的思考过程——不是在深度思考而是需要大量的中间文本来当草稿纸。但即便用了思维链如果序列足够长它仍然会数错——因为分词器的问题依然存在它可能把 “10” 看成一个 token读不出里面有 1 个 1 和 1 个 0。第六章这件事告诉我们什么1. 大模型不是通用计算机通用计算机图灵机 ✓ 有内存可以存中间结果 ✓ 有循环可以一个个处理 ✓ 有计数器可以精确计数 大模型Transformer ✗ 没有可读写的内存 ✗ 没有循环 ✗ 没有计数器 ✓ 有一次性的并行矩阵运算 → 大模型在计算能力上是弱于图灵机的 → 它能做到的事情都是一次前向传播能解决的 → 需要多步精确操作的任务天然就是它的盲区2. 擅长的和不擅长的界限清晰擅长模式匹配、关系判断 ✓ 这两句话是不是一个意思 ✓ 这段代码大概率下一行是什么 ✓ 这篇文章的情感是正面还是负面 ✓ 把这段中文翻译成英文 不擅长精确计数、精确操作 ✗ 数一串数字里有几个 1 ✗ 数一段话里有几个字 ✗ 精确反转一个字符串 ✗ 多位数精确乘法有一个规律如果一个任务你需要一步一步做、中间需要记住东西大模型就大概率会出错。如果一个任务你能凭感觉一下子给出答案大模型就大概率能做对。3. 聪明和精确是两回事大模型很聪明 能写诗、能辩论、能写代码、能总结文章 这些都是大方向对就行的任务 大模型不精确 数不清数字、算不准乘法、记不住长文本的具体细节 这些都是差一个就错的任务这就像一个极有文学天赋但算术不好的人——让他写一篇散文信手拈来让他算 37×89抓耳挠腮。不是他不聪明是他的聪明不是用来算术的。4. 最好的试金石如果你想真正测试一个 AI 模型的能力边界不要给它难题——给它简单但需要精确执行的题❌ 不太好的测试 请推导量子力学的薛定谔方程 → 训练数据里有大量推导过程它可以背出来 → 答对了也不能证明它理解了 ✓ 好的测试 10110010110101001101011010110010110100110 中有多少个 1 → 训练数据里不可能有这个具体的答案 → 必须靠真正的计算才能答对 → 答错了就暴露了本质大模型最好的试金石不是难题而是简单题。写在最后“数数会数错这件事看起来是一个小 bug实际上揭示了大模型的根本架构局限——它是一个并行的模式匹配引擎不是一个顺序的计算机器。它擅长大致理解”不擅长精确操作。这不是通过增加参数、增加训练数据就能解决的问题——你给一台没有循环指令的硬件再多的数据它也学不会 for 循环。这是架构层面的天花板。所以下次当你惊叹于 AI 写出了一段完美的代码时不妨让它数一数那段代码有多少行。也许它会告诉你 42 行但实际上是 45 行。这就是 AI它能写出代码但数不清自己写了几行。这是AI 原理探索系列的第四篇。从向量化原理到微调实战再到 LoRA再到本篇的能力边界——一步步从AI 能做什么走到了AI 做不到什么。理解边界也许比理解能力更重要。