第一幕,我们学会了描述静止的世界:数、零、x、坐标、方程。

但真实的世界不是静止的。温度在变,速度在变,你的心跳在变,股价在变。

第二幕的主题是:变化。

而要描述变化,我们首先需要一个新工具——函数

系列导航

第一幕 · 数的觉醒(5 篇)→ 查看全部
▸ 第六篇(本文):函数——万能的输入-输出机器 【第二幕开篇】
▹ 第七篇:指数爆炸——人脑理解不了的增长
▹ 第八篇:圆与波——三角函数的真面目
▹ 第九篇:微积分(上)——追问"此刻"
▹ 第十篇:微积分(下)——加起来的艺术

第一章:一台自动售货机

想象一台自动售货机。

你投进去 3 块钱,它吐出来一瓶矿泉水。 你投进去 5 块钱,它吐出来一瓶可乐。 你投进去 8 块钱,它吐出来一杯咖啡

        ┌─────────────────┐
        │                 │
  输入  │   自动售货机     │  输出
 ──────→│   (一台机器)     │──────→
  3 元  │                 │  矿泉水
  5 元  │                 │  可乐
  8 元  │                 │  咖啡
        │                 │
        └─────────────────┘

  规则明确:每个输入对应一个确定的输出
  你不会投 3 块钱进去,有时出矿泉水有时出咖啡

这就是函数的本质:

给一个输入,得一个确定的输出。

数学家把这件事写成一行符号:

f(x) = y

f  = 这台"机器"(函数)
x  = 你投进去的东西(输入)
y  = 机器吐出来的东西(输出)

就是这么简单。函数 = 一台有明确规则的机器。你给它一个东西,它按规则返回一个结果。

一句话记住: 函数不是一个高深的数学概念。函数就是一台"输入→输出"的机器。你每天都在和函数打交道——只是没人告诉你它叫函数。


第二章:你身边全是函数

一旦你理解了"输入→输出",你会发现——函数无处不在

生活中的函数
机器(函数)输入 (x)输出 f(x)数学写法
体温计你的体温一个数字f(身体) = 36.5°C
导航软件起点 + 终点一条路线f(A, B) = 最短路
菜谱食材一道菜f(鸡蛋, 番茄) = 番茄炒蛋
计算器一道算式一个结果f(3+5) = 8
翻译软件中文句子英文句子f(“你好”) = “Hello”
搜索引擎关键词一页结果f(“天气”) = 天气页面

看到了吗?每一个有明确规则的"输入→输出"过程,都是函数。

但这里有一个关键:输入一样,输出必须一样。

你在同一台计算器上按 3 + 5,不可能有时候出 8,有时候出 9。这就是函数的铁律——同样的输入,永远得到同样的输出。

古人也懂这个道理。《荀子》说:"规矩诚设矣,则不可欺以方圆。"——规矩(规则/函数)一旦定下来,结果就是确定的。


第三章:函数的数学面孔

把函数从日常生活搬到数学里,最常见的形式是:输入一个数,输出一个数。

最常见的函数
f(x) = 2x + 1

  投入 x = 0  →  吐出 2×0+1 = 1
  投入 x = 1  →  吐出 2×1+1 = 3
  投入 x = 2  →  吐出 2×2+1 = 5
  投入 x = 10 →  吐出 2×10+1 = 21

规则很简单:乘以 2,再加 1

上一篇我们学了坐标系。现在我们知道——每个函数都可以画成一幅图。

把所有的 (x, f(x)) 画在坐标系上:

f(x) = 2x + 1

     y
  7 ─┤            ★
     │          ╱
  5 ─┤        ★
     │      ╱
  3 ─┤    ★
     │  ╱
  1 ─★
 ────┼────┼────┼────→ x
     0    1    2    3

一条直线!

不同的函数,画出来就是不同的"脸"。 这就是函数的"相貌":

函数的"脸谱大全"
直线 f(x) = 2x + 1      抛物线 f(x) = x²
         ╱                      ╱╲
       ╱                      ╱    ╲
     ╱                      ╱        ╲
   ╱                      ╱            ╲
"匀速变化"              "先慢后快"或"先快后慢"


波浪 f(x) = sin(x)      S 形 f(x) = sigmoid(x)
     ∿∿∿                         ╱───
   ∿    ∿                      ╱
  ∿      ∿                   ╱
"周期循环"              "从 0 渐变到 1"


阶梯 f(x) = 取整          ReLU f(x) = max(0,x)
   ┌──┐                         ╱
 ──┘  └──┐                    ╱
         └──┐              ──╱
"整数跳变"              "负数归零"(第二篇学过!)

看到函数的"脸",你就能直觉地理解它的"性格":

  • 直线 = 稳定、匀速、可预测
  • 抛物线 = 先慢后快(或先快后慢),有一个顶点
  • 波浪 = 周而复始、循环往复(心跳、四季、潮汐)
  • S 形 = 从"几乎没有"平滑过渡到"几乎全部"(概率、信心)
  • ReLU = 负数全关,正数全放(神经网络的开关——第二篇讲过)

一句话记住: 函数的图像就是它的"性格写照"。看一眼图形,你就知道这个函数在描述什么样的变化。


第四章:线性 vs 非线性——世界的真相

在所有函数中,有一条最重要的分界线:线性和非线性。

线性:直线的世界

线性函数:f(x) = kx + b

  - 画出来是直线
  - 变化是均匀的:x 每增加 1,y 就增加 k
  - 可预测:知道了 k 和 b,一切尽在掌握

线性关系很好理解:时薪 50 元,工作 8 小时挣 400 元。工作 16 小时挣 800 元。简单、直接、等比例。

但问题是——现实世界几乎没有东西是线性的。

非线性:弯曲的真相

现实世界是弯的
你以为是直线的其实是弯的
“学 10 小时提 10 分”刚开始提分快,后来越来越慢(边际递减)
“多吃一碗一样饱”第一碗雪中送炭,第五碗痛苦万分
“人口每年增长 1%”60 年后人口翻 1.8 倍(复利/指数)
“跑步速度匀加速”越快空气阻力越大,加速越难
“投入越多产出越多”到了一个点后,投入更多反而产出下降

人类的直觉是线性的——我们天生觉得"多一倍投入就多一倍产出"。但自然界几乎所有规律都是非线性的。

这就是为什么:

  • 你觉得"每天学一小时,100 天就能精通"——但实际上学习曲线是弯的
  • 你觉得"存钱翻倍需要双倍时间"——但复利让翻倍越来越快
  • 你觉得"病毒传播是线性的"——但指数增长让你措手不及

非线性是世界的真相。而数学的威力,就在于它能精确描述这些弯曲。

中国古人的直觉:道德经》说"反者道之动"——事物发展到极端就会反转。这其实就是在说非线性:不是一直往上走的,到了一个点就会弯回来。老子在两千五百年前就感受到了非线性,只是他用的是哲学语言,数学家用的是方程。

一句话记住: 人类的直觉是线性的(一条直线),但世界的真相是非线性的(各种弯曲)。数学帮你看见弯曲——这就是它的价值。


第五章:函数的"组装"——从简单到复杂

一个函数很简单。但函数最强大的特性是——它们可以组装。

函数套函数

f(x) = 2x        (乘以 2)
g(x) = x + 1     (加 1)

g(f(x)) = ?
  先把 x 投入 f → 得到 2x
  再把 2x 投入 g → 得到 2x + 1

g(f(3)) = g(6) = 7

这就像工厂的流水线

原料 x
┌──────┐    ┌──────┐    ┌──────┐
│ 第一道│    │ 第二道│    │ 第三道│
│ 工序  │───→│ 工序  │───→│ 工序  │───→ 成品 y
│ f₁(x) │    │ f₂    │    │ f₃    │
└──────┘    └──────┘    └──────┘

每道工序是一个函数
整条流水线也是一个函数(一个大函数 = 三个小函数套在一起)

这正是神经网络的工作方式。每一"层"就是一个函数,整个网络就是几十个函数套在一起的流水线

流水线 vs 神经网络
工厂流水线神经网络
每道工序切割、打磨、上色矩阵乘法 + 激活函数
工序数量几道到几十道几十层到上百层
原料铁矿石、布料文字、图片
成品汽车、衣服下一个词、一张图
调整方式工程师调机器梯度下降调参数

中国的"流水线"智慧

说到流水线,中国古代也有类似的思想。

《考工记》(约公元前 5 世纪)是中国最早的手工业技术文献。书中记载了制造一辆车需要的多道工序——每道工序的"输入"是上一道的"输出"。这不就是函数的组合吗?

更精确的例子是算筹——中国古代的计算工具。用算筹做乘法时,每一步的结果是下一步的输入。一步一步,最终得到答案。算筹运算的每一步,就是一次函数调用。


第六章:连接 AI——GPT 是一个函数

现在,让我们做一个大胆但准确的声明:

GPT 是一个函数。
        ┌─────────────────────────┐
        │                         │
  输入  │         GPT             │  输出
 ──────→│  (一个超大型函数)       │──────→
 "今天  │                         │ "真好"
 天气"  │  几十亿个参数            │
        │  几十层流水线            │
        │                         │
        └─────────────────────────┘

  f("今天天气") = "真好"
  f("1+1等于") = "2"
  f("写一首关于春天的诗") = "春风又绿江南岸..."

认真的。把所有复杂性剥掉,GPT 做的事情就是:

接收一段文字(输入),输出下一个最可能的词(输出)。

它是一个函数。一个非常非常大的函数。

自动售货机 vs GPT:同一个框架
自动售货机GPT
输入3 块钱“今天天气”
输出矿泉水“真好”
规则硬编码(人写的价格表)学来的(从万亿个词中训练)
旋钮几个(价格、库存)1750 亿个(参数)
能调吗换价格表训练(梯度下降)

区别在哪?

  1. 规模:自动售货机有几个按钮,GPT 有 1750 亿个"旋钮"(参数)
  2. 规则来源:售货机的规则是人写的,GPT 的规则是从数据中来的
  3. 非线性:GPT 是一个极其复杂的非线性函数——几十层嵌套,每层都有非线性激活

框架完全一样:输入 → 处理 → 输出。

亲眼看一看

让我们用实验室里的迷你模型 microgpt 来验证"AI 是函数":

azureuser@ai-lab:~$ cd ~/microgpt && python3 -c "
# microgpt 训练后的模型,就是一个函数
# 输入:前几个字母   输出:下一个字母

# 模拟:函数的输入输出
inputs_outputs = [
    ('Ma', 'r'),    # 输入 Ma → 输出 r(Mary)
    ('Jo', 'h'),    # 输入 Jo → 输出 h(John)
    ('Tr', 'e'),    # 输入 Tr → 输出 e(Trey)
]

print('microgpt 就是一个函数:')
print('─' * 35)
for inp, out in inputs_outputs:
    print(f'  f(\"{inp}\") = \"{out}\"')
print()
print('输入前两个字母,输出最可能的下一个字母')
print('和自动售货机是同一回事——只是规则是学来的')
"
microgpt 就是一个函数:
───────────────────────────────────
  f("Ma") = "r"
  f("Jo") = "h"
  f("Tr") = "e"

输入前两个字母,输出最可能的下一个字母
和自动售货机是同一回事——只是规则是学来的

一句话记住: 不管 AI 看起来多么智能、多么神秘,剥开所有外衣,它就是一个函数——一个有几十亿个旋钮、经过海量数据调校的、巨大的"输入→输出"机器。理解了函数,你就理解了 AI 的骨架。


第七章:为什么函数是第二幕的起点?

函数之所以是第二幕的起点,是因为它引入了数学中最重要的概念之一:

变化。

在第一幕里,方程描述的是固定的关系——x + y = 35 永远成立,不随时间改变。

但函数天然地描述了变化——当 x 变化时,f(x) 跟着变化。

函数打开的新问题
有了函数,新的问题涌出来了:

❶ 变化有多快?
   → 导数(微积分的第一个主角)

❷ 变化会爆炸吗?
   → 指数函数(下一篇)

❸ 变化会循环吗?
   → 三角函数(第八篇)

❹ 变化的总量是多少?
   → 积分(微积分的第二个主角)

这些都是第二幕要回答的问题。
而函数,是它们共同的起点。

《道德经》说: “道生一,一生二,二生三,三生万物。”

在数学的世界里,函数就是那个"一"。从函数出发,长出了微积分、概率论、信号处理、控制理论……长出了整个现代数学和现代科技。


动手实验

实验一:建一台你自己的"函数机器"

# 你来定义函数的规则!

def my_machine(x):
    """你的函数:输入一个数,输出一个数"""
    return 3 * x - 2

# 测试你的机器
print("我的函数机器:f(x) = 3x - 2")
print("─" * 30)
for x in range(-3, 6):
    y = my_machine(x)
    bar = "█" * max(0, y + 12)  # 简易图表
    print(f"  f({x:>2}) = {y:>3}  {bar}")

# 输出:
# 我的函数机器:f(x) = 3x - 2
# ──────────────────────────────
#   f(-3) = -11  █
#   f(-2) =  -8  ████
#   f(-1) =  -5  ███████
#   f( 0) =  -2  ██████████
#   f( 1) =   1  █████████████
#   f( 2) =   4  ████████████████
#   f( 3) =   7  ███████████████████
#   f( 4) =  10  ██████████████████████
#   f( 5) =  13  █████████████████████████

实验二:函数的组合——流水线

# 三个简单函数组成一条流水线

def f1(x):
    """第一道工序:乘以 2"""
    return x * 2

def f2(x):
    """第二道工序:加 10"""
    return x + 10

def f3(x):
    """第三道工序:如果负数就归零(ReLU!)"""
    return max(0, x)

# 流水线:f3(f2(f1(x)))
print("三步流水线:乘2 → 加10 → ReLU")
print("─" * 45)
for x in [-8, -5, -3, 0, 2, 5, 10]:
    step1 = f1(x)
    step2 = f2(step1)
    step3 = f3(step2)
    print(f"  x={x:>3} → ×2={step1:>3} → +10={step2:>3} → ReLU={step3:>3}")

# 输出:
#   x= -8 → ×2=-16 → +10= -6 → ReLU=  0
#   x= -5 → ×2=-10 → +10=  0 → ReLU=  0
#   x= -3 → ×2= -6 → +10=  4 → ReLU=  4
#   x=  0 → ×2=  0 → +10= 10 → ReLU= 10
#   x=  2 → ×2=  4 → +10= 14 → ReLU= 14

# 这就是一个最简单的"神经网络"!
# 线性变换(×2) + 偏置(+10) + 激活函数(ReLU)

本篇小结

第二幕开篇 · 这篇文章讲了什么?

一、函数 = 输入→输出的机器

  • 自动售货机、体温计、导航软件——全是函数
  • 同样的输入,永远得到同样的输出

二、函数有"脸"

  • 直线、抛物线、波浪、S 形、ReLU——不同的函数不同的"性格"
  • 看一眼图形就知道它在描述什么变化

三、线性 vs 非线性

  • 人类直觉是线性的,但世界是弯的
  • 数学帮你看见弯曲

四、函数可以组装

  • 函数套函数 = 流水线
  • 神经网络 = 几十层函数的流水线

五、GPT 是一个函数

  • 输入文字,输出下一个词
  • 和自动售货机同一个框架,只是有 1750 亿个旋钮

六、函数引出"变化"

  • 当 x 变化时,f(x) 跟着变化
  • 变化多快?→ 导数。变化爆炸?→ 指数。变化循环?→ 三角

下一篇预告

函数描述了"输入→输出"的关系。有些函数温和——线性,直线,可预测。

但有一种变化,温和到你注意不到它,然后突然炸开

把一张纸对折 42 次,厚度能从地球到月球。信吗?

一粒米放在棋盘第一格,每格翻倍,64 格之后有多少米?

答案是:全世界的粮食都不够填。

这就是指数增长——人类大脑天生的盲区。理解它,就理解了为什么 AI 的进步让所有人"措手不及"。

下一篇:看见数学(七):指数爆炸——人脑理解不了的增长


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