上一篇 《结绳记事》 里,我们说数学的起点是抽象——用一个符号代表一个事物。

但那时候,人类只能描述"有"的东西:一只羊、三块石头、十根手指。

那么——“没有”,怎么表示?

系列导航

▸ 第二篇(本文):零的发明——最伟大的"无"

第一章:一个"缺席"的符号

公元 628 年,印度数学家婆罗摩笈多(Brahmagupta)在他的著作《婆罗摩修正体系》中,第一次把零当作一个真正的数字来对待。

他写下了一系列关于零的规则:

婆罗摩笈多的零法则(公元 628 年)
任何数加零,等于它自己      a + 0 = a
任何数减去它自己,等于零    a - a = 0
任何数乘以零,等于零        a × 0 = 0

今天看来这些很"显然"。但在一千四百年前,这是一个惊天动地的想法。

因为在此之前,人类所有的数都用来回答一个问题:“有多少?”

一只羊、两块石头、三个人——数字总是在描述存在的东西

而零说的是:“什么都没有。”

但"什么都没有"也是一个量。它也值得一个符号。

你可能觉得这很自然。但大多数古代文明都没有走出这一步


第二章:没有零的世界

让我们看看,没有零的世界是什么样的。

罗马帝国的噩梦

罗马人有一套非常精致的数字系统——I, V, X, L, C, D, M。他们用这套系统管理了一个横跨三大洲的帝国。

但他们没有零

这意味着什么?

没有零的困境
问题一:"十"怎么写?

有零的世界:  10  (一个"1"在十位,一个"0"表示个位没有)
罗马世界:    X   (一个专门的符号)

问题二:"一百"怎么写?

有零的世界:  100  ("1"在百位,后面两个"0")
罗马世界:    C    (又一个专门的符号)

问题三:"一千零八"怎么写?

有零的世界:  1008  ("0"帮你占住了百位和十位)
罗马世界:    MVIII  (完全不同的组合逻辑)

发现了吗?

零的本质角色之一:占位符。

在 1008 里,零不是说"这里什么都没有就跳过吧"。零是说:“百位和十位我替你守着,虽然这里是空的,但位置不能乱。”

没有零,你就需要为每一个量级发明一个新符号(X, C, M……)。有了零,你只需要 0-9 这十个符号 + 位置,就能表达无限大的数。

一句话记住: 零是数字世界的"占位符"——它让位置(十位、百位、千位……)有了意义。这就是位值制的灵魂。


第三章:零的"性格"

零不只是占位符。当它作为一个参与运算时,它展现出独一无二的性格。

零的四种"性格"
运算结果零的性格
5 + 0 = 5加零不变透明人——加了等于没加
5 - 0 = 5减零不变同上,安安静静
5 × 0 = 0乘零归零黑洞——任何东西碰到它都消失
5 ÷ 0 = 无法计算禁区——数学在这里画了一条红线

前两条很温和:零是个"透明人",加上去或减掉,什么都不变。

第三条就霸道了:任何数乘以零,都变成零。 一百万乘以零?零。一万亿乘以零?还是零。零就像数学世界的黑洞——什么碰到它都被吞噬。

第四条更有意思:不能除以零。 这不是人为规定的"考试规则"。你想想看——

10 ÷ 2 = 5,意思是"把 10 平均分成 2 份,每份 5"

10 ÷ 0 = ?,意思是"把 10 平均分成 0 份"

分成零份?这在逻辑上就是不可能的。

除以零不是"难算",是没有意义。这是数学告诉你的:不是每个问题都有答案。 有些问题本身就是荒谬的。

想一想: 零是唯一一个既不是正数也不是负数的数。它是分界线,是原点,是"无"。但这个"无",比任何"有"都重要——因为没有它,整个数字系统就会崩塌。


第四章:数轴的诞生——零打开的门

有了零,一件更惊人的事情成为可能:负数。

想象一个温度计:

                        零度
  -30  -20  -10    0    10   20   30   (°C)
◄──┼────┼────┼────┼────┼────┼────┼──►
         寒冷        ↑        温暖
                   分界线

零把世界分成了两半:正和负,多和少,有和欠。

在零出现之前,数只能往一个方向走——1, 2, 3, 4, 5……越来越多。数轴是一条射线,从某个起点出发,只能往右。

有了零,数轴变成了一条直线——从负无穷到正无穷,零是中间的原点。

零打开的那扇门
没有零的世界:
  → 1, 2, 3, 4, 5, ......
  只能描述"有多少"

有了零:
  ......, -3, -2, -1, 0, 1, 2, 3, ......
  可以描述"有多少"和"欠多少"
  可以描述"升温"和"降温"
  可以描述"盈利"和"亏损"
  可以描述"前进"和"后退"

负数在今天看来再自然不过了:

  • 银行账户:余额 -200 元(欠了 200)
  • 温度:-15°C(零下 15 度)
  • 海拔:死海 -430 米(低于海平面 430 米)
  • 时间线:公元前 500 年 = -500 年

但在历史上,负数被人类抵触了上千年

负数:人类为什么不愿接受它?

古希腊人拒绝负数——“比没有还少的东西怎么可能存在?”

直到 16-17 世纪的欧洲,很多数学家还在叫负数"荒谬的数"(numeri absurdi)。笛卡尔——就是发明坐标系的那位天才——也管方程的负数解叫"虚假的根"(false roots)。

为什么这么难接受?

因为人类的直觉是建立在实物上的。你能拿起 3 个苹果,但你怎么拿起 “-3 个苹果”?

这就是数学思维的关键飞跃

数学不只是"数现实中有的东西"。

数学可以描述"不存在的东西"——这正是它的威力。

你不能拿起 -3 个苹果。但你可以别人 3 个苹果。“欠"这个概念,完美地对应了 -3。

数学家做的事情是:扩大规则的适用范围。 即使你摸不到、看不见,只要逻辑自洽,它就是"存在"的。

一句话记住: 负数不是"虚假"的。它只是描述了一种新的关系——“反方向”。温度可以低于零,海拔可以低于海平面,账户可以低于零余额。敢于接受"看不见的东西也可以存在”,这就是数学思维。


第五章:零和负数——数的全景

让我们把数的故事到目前为止做一个全景梳理。人类的数,是一步一步"扩张"出来的:

数的扩张史
第一步:自然数(结绳记事)
  1, 2, 3, 4, 5, ......
  能描述:"我有几只羊"

        ↓ 加入零

第二步:全体自然数
  0, 1, 2, 3, 4, 5, ......
  能描述:"我有几只羊"+"一只都没有"

        ↓ 加入负数

第三步:整数
  ......, -3, -2, -1, 0, 1, 2, 3, ......
  能描述:"有多少"+"欠多少"

        ↓ 加入分数/小数

第四步:有理数
  ......, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, ......
  能描述:"半个苹果"、"三分之二"

        ↓ 加入 √2、π 等

第五步:实数
  数轴上的每一个点
  能描述一切可以测量的量

        ↓ 加入 √(-1) ?

第六步:复数(这个以后再聊)
  能描述......连方向和旋转都行

每一次扩张,都是因为人类遇到了老数字系统无法回答的问题

  • “一只都没有”→ 需要零
  • “温度低于零”→ 需要负数
  • “把蛋糕分三份”→ 需要分数
  • “正方形对角线多长”→ 需要无理数(√2)

数学不是一次性发明的。它是被一个又一个"回答不了的问题"逼着长大的。

一句话记住: 每一种新数的发明,都是因为旧的数不够用了。数学的进步,就是不断扩大"什么算数"的边界。


第六章:连接 AI——零是神经网络的"开关"

故事讲到这里,我们来看看零在 AI 世界里扮演什么角色。

答案是:零是神经网络最重要的"开关"。

ReLU:最简单也最重要的函数

神经网络里有一个用得最多的函数,叫 ReLU(Rectified Linear Unit)。它的规则简单到不能再简单:

ReLU:一行代码的威力
规则:
  如果输入 ≥ 0 → 原样输出
  如果输入 < 0 → 输出 0

用一行代码写:
  ReLU(x) = max(0, x)

举例:
  ReLU(5)   = 5    ✓ 正数,通过
  ReLU(0.3) = 0.3  ✓ 正数,通过
  ReLU(-2)  = 0    ✗ 负数,归零!
  ReLU(-100)= 0    ✗ 负数,归零!
  输出
   │         ╱
   │        ╱
   │       ╱
   │      ╱
   │     ╱
───┼────╱──────→ 输入
   │   0
 ( 负数区域全部变为 0 )

ReLU 的本质就是一个门卫

  • 正数?放行。
  • 负数?归零。不许通过。

就这么简单的一个操作,为什么如此重要?

零作为"沉默"

在神经网络里,每个神经元计算出一个数值。这个数值可正可负:

  • 正数 = 这个神经元"被激活了"——它有话要说
  • (被 ReLU 置零) = 这个神经元"沉默了"——它选择不参与
零 = 沉默 = 选择
想象一个简单的图像识别网络:

输入:一张猫的照片

神经元 A(检测竖线):    0.8  → 有竖线,激活!
神经元 B(检测横线):    0.2  → 有点横线,微弱激活
神经元 C(检测蓝色):   -0.5  → 没有蓝色 → ReLU → 0(沉默)
神经元 D(检测毛发纹理): 0.9  → 有毛发,强烈激活!
神经元 E(检测车轮):   -1.2  → 没有车轮 → ReLU → 0(沉默)

零不是"什么都没探测到"
零是"我看过了,这个特征确实不在"

零不是虚无。零是一个明确的信号:“没有。”

就像一个侦探调查五条线索,排除了其中两条。被排除的线索不是"无用功"——知道什么不是答案,和知道什么是答案一样重要。

这正好呼应了我们前面讲的:零不是"没有"。零是一种存在——它表达的是"此处为空"这个信息。

稀疏性:大部分参数都是零

还有一个有趣的事实:训练好的神经网络里,大量的参数值是零或接近零。

这叫稀疏性(sparsity)。

为什么?因为不是每个连接都重要。网络在训练过程中"学会了"哪些连接是有用的、哪些是多余的。多余的连接,权重被调到零——关掉了

一个训练好的小模型的参数分布:

                    ▓▓▓▓
                   ▓▓▓▓▓▓
                  ▓▓▓▓▓▓▓▓
                 ▓▓▓▓▓▓▓▓▓▓
            ░░░░▓▓▓▓▓▓▓▓▓▓▓▓░░░░
       ░░░░░░░░▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░░░░
  ─────────────────┼─────────────────
                   0
  大量参数集中在 0 附近
  网络自动"关掉"了不需要的连接

记得上一篇的核心概念"压缩"吗?零就是压缩的工具。 把不重要的信号归零,就是在做信息压缩——保留关键,丢弃噪声。

一句话记住: 在 AI 的世界里,零 = 沉默 = 选择性忽略 = 压缩。ReLU 函数用一行代码 max(0, x) 决定了哪些信号该通过、哪些该被"关掉"。零不是空白,零是决策。


第七章:零的哲学——“无"的力量

走到这里,让我们把视角拉高一点。

零的故事告诉我们一个深刻的道理:数学的进步,往往来自于敢想"不存在"的东西。

数学中"不存在"的发明
概念“不存在"在哪里?打开了什么门?
没有任何东西位值制、负数、整个数轴
负数比没有还少温度、债务、方向
无理数 (√2)不能写成分数精确的几何测量
虚数 (√-1)没有哪个实数的平方是负数电路分析、量子力学
无穷 (∞)数不到头微积分、极限理论

看到了吗?数学史上最重要的突破,几乎都来自于人类接受了某种"不存在"的东西。

这需要勇气。

古希腊人因为发现 √2 不能写成分数而恐慌——据说发现者被扔进了大海。笛卡尔嘲笑负数是"虚假”。整个欧洲数学界花了几百年才接受"虚数”。

但最终,每一次"接受不可能",都让数学变得更强大、更完整。

数学思维的核心:

不要问"这个东西存在吗",而要问"如果它存在,会怎样"。

如果零存在——我们得到了位值制。

如果负数存在——我们得到了完整的数轴。

如果 √-1 存在——我们得到了描述波和旋转的工具。

每一次"假设它存在",都打开了一个新世界。

这也是 AI 的思维方式。神经网络不会问"这个词的含义是什么?"——它假设每个词可以用一组数字描述,然后去训练这组数字,直到它能产生有用的预测。

假设先行,验证随后。 这是数学的方法,也是科学的方法,也是 AI 的方法。


动手实验

实验一:感受 ReLU

# 纯 Python,不需要任何库

def relu(x):
    """ReLU:神经网络最常用的激活函数"""
    return max(0, x)

# 试试看
inputs = [3, 1, -2, 0.5, -7, 0, -0.1, 4.2]

print("输入  →  ReLU 输出")
print("─" * 25)
for x in inputs:
    result = relu(x)
    status = "✓ 通过" if result > 0 else "✗ 归零"
    print(f"  {x:>5}{result:>5}   {status}")

# 输出:
# 输入  →  ReLU 输出
# ─────────────────────────
#      3  →      3   ✓ 通过
#      1  →      1   ✓ 通过
#     -2  →      0   ✗ 归零
#    0.5  →    0.5   ✓ 通过
#     -7  →      0   ✗ 归零
#      0  →      0   ✗ 归零
#   -0.1  →      0   ✗ 归零
#    4.2  →    4.2   ✓ 通过

实验二:数的扩张

# 体验"数的扩张史"

# 第一步:自然数——只能描述"有多少"
natural = [1, 2, 3, 4, 5]
print(f"自然数: {natural}")
print(f"  能回答: 我有{natural[2]}只羊")

# 第二步:加入零
with_zero = [0, 1, 2, 3, 4, 5]
print(f"\n加入零: {with_zero}")
print(f"  能回答: 我有{with_zero[0]}只羊(一只都没有)")

# 第三步:加入负数——整数
integers = [-3, -2, -1, 0, 1, 2, 3]
print(f"\n整数: {integers}")
print(f"  能回答: 我欠别人{abs(integers[0])}只羊")

# 第四步:加入小数——有理数
rationals = [-1.5, -1, -0.5, 0, 0.5, 1, 1.5]
print(f"\n有理数: {rationals}")
print(f"  能回答: 我有半({rationals[4]})只蛋糕")

# 第五步:无理数——实数
import math
print(f"\n实数: π = {math.pi:.10f}...")
print(f"       √2 = {math.sqrt(2):.10f}...")
print(f"  小数永远写不完,但它们确实'存在'于数轴上")

本篇小结

这篇文章讲了什么?

一、零是占位符

  • 没有零,就没有位值制。1, 10, 100 无法区分
  • 零"守住位置",让 10 个符号能表达无限大的数

二、零有独特的"性格"

  • 加减时"透明",乘法时"黑洞",除法时"禁区"
  • 零不是"没有性格",它的性格非常鲜明

三、零打开了负数的大门

  • 有了零作为原点,数轴从射线变成了直线
  • 负数描述"反方向":欠债、降温、海平面以下

四、数的扩张从未停止

  • 自然数 → 整数 → 有理数 → 实数 → 复数
  • 每次扩张都是因为旧的数不够回答新问题

五、零是 AI 的"开关"

  • ReLU 函数:正数通过,负数归零
  • 零 = 沉默 = 选择性忽略 = 压缩
  • 神经网络通过归零来"关掉"不重要的连接

六、数学的勇气:接受"不存在"

  • 零、负数、无理数、虚数——都是人类接受"不存在"之后的产物
  • 不问"它存在吗",而问"如果它存在,会怎样"

下一篇预告

我们现在有了数(从负无穷到正无穷的完整数轴),有了符号系统(阿拉伯数字 + 位值制),有了零。

下一个大问题是:

如果有一个数,我不知道它是多少,但我知道它满足某个条件——我能找到它吗?

比如:一个数乘以自己等于 9,这个数是几?

答案是 3。但更重要的是——我们可以写成 x² = 9

x——这个字母——是人类给"未知"取的名字。从此,数学不再只是"算已知的数",而是"推理未知的数"。

下一篇:看见数学(三):未知数 x——给"不知道"取个名字


《看见数学》系列 — 从结绳记事到 AI,看见数学之美。
本文首发于「AI 学习笔记」博客:https://Jason-Azure.github.io/ai-blog/
微信公众号:AI-lab学习笔记
系列文章完整列表见 标签:看见数学