代数基础
本章节介绍方程与不等式的变形、函数的核心概念、指数与对数运算、以及求和符号 Σ 与级数收敛。
本章节内容是 sigmoid、softmax、交叉熵、信息熵的共同数学根基,每个知识点都配了可交互的图像演示,拖动滑块比看十遍公式更能建立直觉。
方程与不等式的求解、变形
代数变形只依赖一句话。
等式两边同时做同样的运算,等式仍然成立。
只要你对方程左右两边"一视同仁"地加、减、乘、除(除数非零)、开方(注意正负号),方程的解就不会变。
一元一次方程
最基础的形式是 。
解 的完整步骤:
3x + 5 = 20 3x = 20 - 5 ← 两边同减 5(移项) 3x = 15 x = 15 / 3 ← 两边同除以 3 x = 5
核心动作只有两个:移项(本质是两边同减)和两边同除。
一元二次方程与判别式
形式为 ,两种常用解法。
解法一:因式分解。
x² - 5x + 6 = 0 (x - 2)(x - 3) = 0 → x = 2 或 x = 3
解法二:求根公式,适用于所有情况但计算量更大:
其中 叫判别式,记作 ,它直接决定了根的个数:
| 判别式 | 根的情况 | 几何含义(抛物线与 x 轴) |
|---|---|---|
| 两个不同的实根 | 抛物线与 x 轴交于两点 | |
| 一个重根 | 抛物线恰好碰到 x 轴(相切) | |
| 无实根 | 抛物线整体悬在 x 轴上方或下方 |
下面拖动滑块改变 ,观察抛物线形状与判别式如何联动。
解 的求根公式代入过程:
a=1, b=-2, c=-3 Δ = (-2)² - 4×1×(-3) = 4 + 12 = 16 x = (2 ± √16) / 2 = (2 ± 4) / 2 → x = 3 或 x = -1
分式方程:最后必须检验
先通分或去分母,转化成普通方程求解。
最后必须把解代回原方程检验,确认没有让分母为 0。
让分母变 0 的解要舍去,称为增根。
不等式:最容易出错的一条规则
不等式的变形规则与方程类似,但有一条关键区别。
不等式两边同时乘以(或除以)一个负数时,不等号方向要反转。
解 :
-2x > -6 ← 两边同减 6 x < 3 ← 两边同除以 -2(负数,不等号从 > 变成 <)
这条规则在机器学习里非常重要:推导优化算法的收敛方向、损失函数下降条件时,符号处理错了方向,结论会完全反过来。
不等式组的解集要取多个不等式解集的交集:
x > 1 x < 5 → 解集为 1 < x < 5
常用变形技巧
| 技巧 | 做法 | 典型用途 |
|---|---|---|
| 移项 | 把某一项移到等号另一边,同时改变符号 | 所有方程求解的基础动作 |
| 配方法 | 求二次函数顶点、简化损失函数推导 | |
| 换元法 | 把反复出现的复杂子表达式用一个新变量代替 | 化简结构复杂的式子 |
实例
import math
def solve_quadratic(a, b, c):
"""解 ax^2 + bx + c = 0,返回所有实根"""
delta = b * b - 4 * a * c # 判别式 Δ = b² - 4ac
if delta > 0: # Δ > 0:两个不同实根
r = math.sqrt(delta)
return [(-b + r) / (2 * a), (-b - r) / (2 * a)]
elif delta == 0: # Δ = 0:一个重根
return [-b / (2 * a)]
else: # Δ < 0:无实根
return []
# 验证 x² - 2x - 3 = 0,前面手算的结果是 x = 3 或 x = -1
print(solve_quadratic(1, -2, -3))
# Δ = 0 的情况:x² - 4x + 4 = 0,即 (x-2)² = 0
print(solve_quadratic(1, -4, 4))
# Δ < 0 的情况:x² + x + 1 = 0
print(solve_quadratic(1, 1, 1))
执行以上代码输出结果为:
[3.0, -1.0] [2.0] []
练习:解不等式 。
点击查看答案
两边减 9:;两边除以 -3(负数,不等号反转):。
函数的概念:定义域、值域、复合函数
函数 描述一种"输入到输出"的对应规则:每一个输入 x,有且只有一个输出 y 与之对应。
写作 ,读作"y 是 x 的函数"。
定义域:所有"合法输入"组成的集合
判断定义域,本质是排除让表达式"无意义"的取值:
| 表达式特征 | 限制条件 | 示例 |
|---|---|---|
| 分母 | 不能为 0 | |
| 偶次根号 | 根号下不能为负 | |
| 对数 | 真数必须大于 0 |
对数这一条在 AI 中特别重要:凡是用到 log 的地方(比如交叉熵损失),都要保证输入是正数。这也是为什么很多代码实现里写成 ——加一个很小的常数 ε,防止 报错或产生无穷大。
值域:所有"可能输出"组成的集合
的值域是 ,因为平方永远非负。
sigmoid 函数 的值域是开区间 ,永远不会等于 0 或 1,只会无限接近。
这正是它被用来表示"概率"的数学原因:概率理论上可以无限接近 0% 或 100%,但不会真的等于。
复合函数:函数套函数
把一个函数的输出,作为另一个函数的输入,写作 。
计算顺序是先算内层 g(x),再把结果代入外层 f。
设 ,,求 :
f(g(x)) = f(x+1) = (x+1)²
通常不等于 ,顺序不能随便换。
为什么复合函数对 AI 重要:神经网络本质上就是很多层函数的复合。
一个两层网络可以写成 ,其中 是第一层(线性变换 + 激活函数), 是第二层。
反向传播算法能"逐层"计算梯度,靠的正是复合函数求导的链式法则(后续微积分课程详细展开)。
实例
def f(x):
return x ** 2 # 外层函数 f(x) = x²
def g(x):
return x + 1 # 内层函数 g(x) = x + 1
# f(g(x)):先算 g(3) = 4,再代入 f 得 16
print(f(g(3)))
# g(f(x)):先算 f(3) = 9,再代入 g 得 10
# 两者不相等,说明复合顺序不能互换
print(g(f(3)))
执行以上代码输出结果为:
16 10
练习:设 ,,求 和 ,比较两者是否相同。
点击查看答案
两者不同,说明复合函数顺序不能互换。
指数与对数运算
一句话理解这两个函数的分工:指数函数负责"放大/压缩数值范围",对数函数负责"把乘除变成加减、把大范围数值压缩到可控范围"。
它们在 AI 的损失函数、激活函数设计中反复出现。
| AI 场景 | 公式 | 用到的性质 |
|---|---|---|
| sigmoid 函数 | 随 x 增大趋于 0,把任意实数压进 (0,1) | |
| softmax 函数 | 指数放大差异,再归一化成概率分布 | |
| 交叉熵损失 | 对数把"概率连乘"变成"数值连加",避免下溢 | |
| 信息熵 | log 让熵具有可加性 |
必须熟练的运算规则
指数运算规则:
对数运算规则,与指数规则一一对应:
换底公式,把任意底的对数换成自然对数:
指数与对数互为镜像
指数函数 与对数函数 互为反函数,图像关于直线 对称。
拖动滑块改变底数 a,观察两条曲线如何联动。
推导练习:为什么交叉熵要用 log
假设真实标签是"猫"(概率为 1),模型预测"是猫"的概率为 。
如果不用 log,直接用 作为损失,当 p 从 0.5 降到 0.1,损失只是"线性"增长,惩罚力度不够。
用 :当 (模型极度自信却判断错误)时,,给予极其严厉的惩罚;当 (判断正确)时,,几乎不惩罚。
这是对数函数"在 0 附近陡峭、在 1 附近平缓"的形状在损失函数设计中的直接应用,第二章会用交互图像专门展示这条曲线。
实例
import math
m, n = 8, 4
# 左边:直接算 log₂(8×4)
left = math.log(m * n, 2)
# 右边:log₂(8) + log₂(4)
right = math.log(m, 2) + math.log(n, 2)
print(left) # log₂32 = 5
print(right) # 3 + 2 = 5,两者相等,规则成立
print(abs(left - right) < 1e-12)
执行以上代码输出结果为:
5.0 5.0 True
练习:计算 ,并用对数法则化简为一个对数。
点击查看答案
数列与级数:理解 Σ 与收敛
数列是按顺序排列的一串数,记作 ,简记为 。
两种最基础的数列:
| 类型 | 特征 | 示例 | 通项公式 |
|---|---|---|---|
| 等差数列 | 相邻两项差值恒定(公差 d) | 2, 5, 8, 11, ...(d=3) | |
| 等比数列 | 相邻两项比值恒定(公比 r) | 2, 4, 8, 16, ...(r=2) |
求和符号 Σ 到底在算什么
意思是:让下标 i 从 1 变到 n,把每一个 都算出来,再全部加起来。
读 Σ 公式的三步法:先看求和变量是谁(下标),再看求和范围(从哪到哪),最后看每一项长什么样。
AI 公式里几乎总能看到 Σ,比如均方误差损失 ,和神经元的加权求和 。
两个求和公式:等差数列 ,等比数列()。
级数与收敛性
级数是数列"无穷项"加起来的和,即 。
无穷多个数加起来,结果会不会是无穷大?这就是收敛与发散的问题:
如果随着项数增加,累加的和趋近于一个确定的有限值,称级数收敛;如果和越来越大或没有固定趋势,称级数发散。
最经典的例子是等比级数 :
当 时收敛,和为 ;当 时发散。
点击"播放"按钮,观察部分和如何一步步逼近极限值。
为什么收敛性对 AI 重要
训练神经网络时,梯度下降的每一步更新可以看作一个数列,权重更新是否能"收敛"到一个稳定值,判断逻辑和级数收敛的直觉相通。
某些优化算法(如 Adam 里的动量项)本质是对历史梯度做加权指数衰减求和,数学形式就是一个公比小于 1 的等比级数。
循环神经网络(RNN)中,如果某个乘法因子反复相乘且绝对值小于 1,会导致"梯度消失"(对应级数收敛于 0);大于 1 则导致"梯度爆炸"(对应级数发散)。这是深度学习的经典问题,根源正是等比数列的直觉。
实例
# 理论极限:1 / (1 - 0.5) = 2
r = 0.5
limit = 1 / (1 - r) # 理论极限值 2
s = 0 # 部分和,从 0 开始累加
for i in range(6): # 逐项累加:1 + 0.5 + 0.25 + ...
s += r ** i
print(i + 1, s) # 打印项数与当前部分和
print(limit) # 理论极限,部分和越来越接近它
执行以上代码输出结果为:
1 1.0 2 1.5 3 1.75 4 1.875 5 1.9375 6 1.96875 2.0
可以看到每加一项,部分和到极限的差距就缩小一半——这正是公比为 0.5 的等比级数的收敛节奏。
练习:判断级数 是否收敛,如果收敛求其和。
点击查看答案
公比 ,满足 ,收敛。
本章小结
| 主题 | 一句话核心 |
|---|---|
| 方程与不等式 | 两边同时做相同运算;乘/除负数时不等号要反转 |
| 函数概念 | 定义域是"能输入什么",值域是"能输出什么",复合函数是"函数套函数" |
| 指数与对数 | 指数放大/压缩数值,对数把乘除变成加减——AI 损失函数的核心工具 |
| 数列与级数 | Σ 是"按规则求和",级数收敛与否决定模型训练是否稳定 |
