AI_高等数学-1. 函数与极限
1. 函数与极限
学习目标
- 掌握 AI 中最常用的四种函数:指数、对数、多项式、Sigmoid
- 理解极限的直观含义,能够计算简单极限
- 熟记关键导数公式,为梯度下降和反向传播打下基础
- 通过 Python 代码验证理论,实现数值微分近似求导
1.1 常用函数(AI 核心常用)
1.1.1 指数函数
知识点
- 定义: y = a x ( a > 0 , a ≠ 1 ) y = a^x \quad (a > 0, a \neq 1) y=ax(a>0,a=1)。AI 中最常用 a = e a = e a=e(自然常数 e ≈ 2.71828 e \approx 2.71828 e≈2.71828),即 y = e x y = e^x y=ex。
- 核心性质:
- 定义域 R \mathbb{R} R,值域 ( 0 , + ∞ ) (0, +\infty) (0,+∞)
- a > 1 a > 1 a>1 时单调递增, 0 < a < 1 0 < a < 1 0<a<1 时单调递减
- 恒过点 ( 0 , 1 ) (0, 1) (0,1)
- 导数: d d x e x = e x \frac{d}{dx} e^x = e^x dxdex=ex(自身导数,梯度计算的基础)
- AI 应用场景:Softmax 归一化、连续变量建模、神经网络中的指数线性单元 (ELU)、梯度计算。
手工计算示例
-
计算 e 2 e^2 e2 和 e − 1 e^{-1} e−1
e 2 ≈ 2.71828 2 = 7.389 e^2 \approx 2.71828^2 = 7.389 e2≈2.718282=7.389, e − 1 = 1 / e ≈ 0.368 e^{-1} = 1/e \approx 0.368 e−1=1/e≈0.368 -
解方程 e x = 5 e^x = 5 ex=5
两边取自然对数: x = ln 5 ≈ 1.609 x = \ln 5 \approx 1.609 x=ln5≈1.609
Python 代码示例
import numpy as np
import matplotlib.pyplot as plt
# 计算指数函数值
x = np.array([0, 1, 2, -1, -2])
y = np.exp(x)
print("x:", x)
print("e^x:", np.round(y, 3))
# 绘制 y = e^x 图像
x_plot = np.linspace(-3, 3, 100)
y_plot = np.exp(x_plot)
plt.figure(figsize=(8, 5))
plt.plot(x_plot, y_plot, color='blue', label='$y = e^x$')
plt.axhline(0, color='black', linestyle='--', alpha=0.5)
plt.axvline(0, color='black', linestyle='--', alpha=0.5)
plt.title('指数函数 $y = e^x$')
plt.xlabel('x'); plt.ylabel('y')
plt.legend(); plt.grid(alpha=0.3)
plt.show()
学习资料链接
1.1.2 对数函数
知识点
- 定义:指数函数的反函数, y = log a x y = \log_a x y=logax。AI 中最常用自然对数 y = ln x y = \ln x y=lnx(底 e e e),也常用 log 10 x \log_{10} x log10x。
- 核心性质:
- 定义域 ( 0 , + ∞ ) (0, +\infty) (0,+∞),值域 R \mathbb{R} R
- 与指数函数互逆: ln ( e x ) = x \ln(e^x)=x ln(ex)=x, e ln x = x e^{\ln x}=x elnx=x
- 单调递增(底 a > 1 a>1 a>1)
- 导数: d d x ln x = 1 x \frac{d}{dx} \ln x = \frac{1}{x} dxdlnx=x1
- AI 应用场景:交叉熵损失函数、对数似然、数据压缩(防止数值溢出)、信息熵计算。
手工计算示例
-
计算 ln 1 \ln 1 ln1, ln e \ln e lne, ln 10 \ln 10 ln10
ln 1 = 0 \ln 1 = 0 ln1=0, ln e = 1 \ln e = 1 lne=1, ln 10 ≈ 2.303 \ln 10 \approx 2.303 ln10≈2.303 -
解方程 ln ( x + 2 ) = 1 \ln(x+2)=1 ln(x+2)=1
取指数: x + 2 = e 1 ⇒ x = e − 2 ≈ 0.718 x+2 = e^1 \Rightarrow x = e - 2 \approx 0.718 x+2=e1⇒x=e−2≈0.718
Python 代码示例
import numpy as np
import matplotlib.pyplot as plt
# 计算自然对数和常用对数
x = np.array([1, np.e, 10, 0.5])
print("x:", x)
print("ln(x):", np.round(np.log(x), 3)) # np.log 是自然对数
print("log10(x):", np.round(np.log10(x), 3))
# 绘制 y = ln x
x_plot = np.linspace(0.1, 5, 100)
y_plot = np.log(x_plot)
plt.figure(figsize=(8, 5))
plt.plot(x_plot, y_plot, color='red', label='$y = \\ln x$')
plt.axhline(0, color='black', linestyle='--', alpha=0.5)
plt.axvline(0, color='black', linestyle='--', alpha=0.5)
plt.title('自然对数函数 $y = \\ln x$')
plt.xlabel('x'); plt.ylabel('y')
plt.legend(); plt.grid(alpha=0.3)
plt.show()
学习资料链接
1.1.3 多项式函数
知识点
- 定义: y = a n x n + a n − 1 x n − 1 + ⋯ + a 1 x + a 0 y = a_n x^n + a_{n-1} x^{n-1} + \cdots + a_1 x + a_0 y=anxn+an−1xn−1+⋯+a1x+a0, n n n 为非负整数, a n ≠ 0 a_n \neq 0 an=0。
- 常见类型:
- 一次多项式(线性函数): y = k x + b y = kx + b y=kx+b,图像为直线,斜率为 k k k。
导数: d d x ( k x + b ) = k \frac{d}{dx}(kx+b)=k dxd(kx+b)=k。 - 二次多项式: y = a x 2 + b x + c y = ax^2+bx+c y=ax2+bx+c,图像为抛物线,有极值点。
- 一次多项式(线性函数): y = k x + b y = kx + b y=kx+b,图像为直线,斜率为 k k k。
- AI 应用场景:线性回归、多项式回归、神经网络中的线性变换层。
- 幂函数求导公式(一般形式): d d x x n = n x n − 1 \frac{d}{dx} x^n = n x^{n-1} dxdxn=nxn−1,对多项式逐项求导非常有用。
手工计算示例
-
线性函数: y = 2 x + 3 y=2x+3 y=2x+3,求 x = 1 x=1 x=1 和 x = − 2 x=-2 x=−2 时的值。
x = 1 ⇒ y = 5 x=1 \Rightarrow y=5 x=1⇒y=5; x = − 2 ⇒ y = − 1 x=-2 \Rightarrow y=-1 x=−2⇒y=−1。 -
二次函数极值: y = x 2 − 4 x + 3 y = x^2 - 4x + 3 y=x2−4x+3,求最小值。
顶点横坐标 x = − b 2 a = 2 x = -\frac{b}{2a}=2 x=−2ab=2,最小值 y = 2 2 − 8 + 3 = − 1 y=2^2-8+3=-1 y=22−8+3=−1。
Python 代码示例
# 导入数值计算库numpy,用于数组和数值运算
import numpy as np
# 导入绘图库matplotlib,用于绘制数据点和拟合曲线
import matplotlib.pyplot as plt
# 导入线性回归模型,用于拟合多项式曲线
from sklearn.linear_model import LinearRegression
# 导入多项式特征构造器,用于将x转为x²、x等高阶特征
from sklearn.preprocessing import PolynomialFeatures
# 定义 一次多项式函数(线性函数 y = kx + b)
def linear_func(x, k=2, b=3):
# 计算并返回线性函数结果:k*x + b
return k * x + b
# 定义 二次多项式函数(y = ax² + bx + c)
def quadratic_func(x, a=1, b=-4, c=3):
# 计算并返回二次函数结果
return a*x**2 + b*x + c
# 生成测试用的x数组(4个数值)
x = np.array([1, -2, 3, 0])
# 打印输入的x
print("x:", x)
# 打印一次多项式计算结果
print("一次多项式:", linear_func(x))
# 打印二次多项式计算结果
print("二次多项式:", quadratic_func(x))
# ------------------- 二次多项式拟合示例 -------------------
# 设置随机种子,保证每次运行生成的噪声都一样(可复现)
np.random.seed(42)
# 生成在 [-5,5] 之间均匀分布的50个点,作为x数据
x_data = np.linspace(-5, 5, 50)
# 生成真实的y数据:2x²+3x+1,并加上正态分布噪声(模拟真实数据)
y_data = 2*x_data**2 + 3*x_data + 1 + np.random.normal(0, 2, 50)
# 创建多项式特征生成器,degree=2表示生成二次多项式特征(x, x²)
poly = PolynomialFeatures(degree=2)
# 将x_data转为二维数组,并生成多项式特征 [1, x, x²]
x_poly = poly.fit_transform(x_data.reshape(-1, 1))
# 创建线性回归模型,并使用多项式特征拟合y_data
model = LinearRegression().fit(x_poly, y_data)
# 使用训练好的模型进行预测,得到拟合曲线y_pred
y_pred = model.predict(x_poly)
# 绘制原始带噪声的数据点(散点图)
plt.scatter(x_data, y_data, color='orange', label='带噪声数据')
# 绘制多项式拟合曲线
plt.plot(x_data, y_pred, color='blue', label='二次多项式拟合')
# 设置图表标题
plt.title('多项式回归示例')
# 设置x轴和y轴标签
plt.xlabel('x'); plt.ylabel('y')
# 显示图例、显示网格(透明度0.3)
plt.legend(); plt.grid(alpha=0.3)
# 展示绘制好的图像
plt.show()
学习资料链接
1.1.4 Sigmoid 函数
知识点
- 定义: σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1,读作“Sigmoid”或“Logistic 函数”。
- 核心性质:
- 定义域 R \mathbb{R} R,值域 ( 0 , 1 ) (0, 1) (0,1)
- 图像呈 “S” 型,中心对称于点 ( 0 , 0.5 ) (0, 0.5) (0,0.5)
- 单调递增,光滑且无穷可导
- 极限特性: lim x → + ∞ σ ( x ) = 1 \lim_{x\to +\infty}\sigma(x)=1 limx→+∞σ(x)=1, lim x → − ∞ σ ( x ) = 0 \lim_{x\to -\infty}\sigma(x)=0 limx→−∞σ(x)=0
- 导数: σ ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x) = \sigma(x)(1-\sigma(x)) σ′(x)=σ(x)(1−σ(x))(可用自身表示,极大简化反向传播计算)
- AI 应用场景:二分类输出层(概率解释)、神经网络隐藏层激活函数、LSTM 门控机制。
手工计算示例
-
计算 σ ( 0 ) \sigma(0) σ(0), σ ( 1 ) \sigma(1) σ(1), σ ( − 1 ) \sigma(-1) σ(−1)
σ ( 0 ) = 0.5 \sigma(0)=0.5 σ(0)=0.5, σ ( 1 ) = 1 1 + e − 1 ≈ 0.731 \sigma(1)=\frac{1}{1+e^{-1}}\approx0.731 σ(1)=1+e−11≈0.731, σ ( − 1 ) = 1 1 + e 1 ≈ 0.269 \sigma(-1)=\frac{1}{1+e^{1}}\approx0.269 σ(−1)=1+e11≈0.269
验证对称性: 0.269 = 1 − 0.731 0.269 = 1-0.731 0.269=1−0.731。 -
利用导数公式计算 σ ′ ( 2 ) \sigma'(2) σ′(2)
已知 σ ( 2 ) ≈ 0.881 \sigma(2)\approx0.881 σ(2)≈0.881,则 σ ′ ( 2 ) = 0.881 × ( 1 − 0.881 ) = 0.105 \sigma'(2)=0.881\times(1-0.881)=0.105 σ′(2)=0.881×(1−0.881)=0.105。
Python 代码示例
import numpy as np
import matplotlib.pyplot as plt
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
s = sigmoid(x)
return s * (1 - s)
x = np.array([-3, -1, 0, 1, 3])
print("x:", x)
print("Sigmoid(x):", np.round(sigmoid(x), 3))
print("Sigmoid'(x):", np.round(sigmoid_derivative(x), 3))
# 绘图
x_plot = np.linspace(-5, 5, 100)
y_sig = sigmoid(x_plot)
y_der = sigmoid_derivative(x_plot)
plt.figure(figsize=(10, 4))
plt.subplot(1,2,1)
plt.plot(x_plot, y_sig, 'purple', label='$\\sigma(x)$')
plt.axhline(0.5, color='gray', linestyle='--')
plt.title('Sigmoid 函数'); plt.grid(alpha=0.3)
plt.subplot(1,2,2)
plt.plot(x_plot, y_der, 'green', label="$\\sigma'(x)$")
plt.title('Sigmoid 导数'); plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
学习资料链接
1.2 极限概念(直观理解,不深究 ε-δ)
1.2.1 极限的直观定义
当自变量 x x x 无限趋近 于某个值 x 0 x_0 x0(或趋于无穷大)时,函数值 f ( x ) f(x) f(x) 无限趋近 于一个确定的常数 A A A,则称 A A A 为极限,记作
lim x → x 0 f ( x ) = A 或 lim x → ∞ f ( x ) = A . \lim_{x \to x_0} f(x) = A \quad \text{或} \quad \lim_{x \to \infty} f(x) = A. x→x0limf(x)=A或x→∞limf(x)=A.
核心思想:变量可以无限接近某个目标,但不一定等于该目标。例如 lim x → 2 ( 2 x + 3 ) = 7 \lim_{x\to 2}(2x+3)=7 limx→2(2x+3)=7,虽然 x x x 可以取 2,但极限概念允许 x x x 从左右两侧无限逼近 2。
1.2.2 常用极限(必须熟记)
| 极限表达式 | 值 | 备注 |
|---|---|---|
| lim x → 0 sin x x \lim_{x \to 0} \frac{\sin x}{x} limx→0xsinx | 1 1 1 | 重要极限,导数推导基础 |
| lim x → 0 e x − 1 x \lim_{x \to 0} \frac{e^x - 1}{x} limx→0xex−1 | 1 1 1 | 等价于 e x e^x ex 在 0 处的导数 |
| lim x → ∞ ( 1 + 1 x ) x \lim_{x \to \infty} \left(1+\frac{1}{x}\right)^x limx→∞(1+x1)x | e e e | 自然常数的定义 |
| lim x → + ∞ e − x \lim_{x \to +\infty} e^{-x} limx→+∞e−x | 0 0 0 | 指数衰减 |
| lim x → − ∞ e − x \lim_{x \to -\infty} e^{-x} limx→−∞e−x | + ∞ +\infty +∞ | 指数爆炸 |
| lim x → + ∞ σ ( x ) \lim_{x \to +\infty} \sigma(x) limx→+∞σ(x) | 1 1 1 | Sigmoid 饱和 |
| lim x → − ∞ σ ( x ) \lim_{x \to -\infty} \sigma(x) limx→−∞σ(x) | 0 0 0 | Sigmoid 饱和 |
1.2.3 手工计算示例
-
判断 lim x → 2 ( 2 x + 3 ) \lim_{x \to 2} (2x+3) limx→2(2x+3)
当 x x x 无限接近 2 时, 2 x + 3 2x+3 2x+3 无限接近 7 7 7,所以极限为 7 7 7。 -
判断 lim x → ∞ 1 x \lim_{x \to \infty} \frac{1}{x} limx→∞x1
当 x x x 无限增大时, 1 x \frac{1}{x} x1 无限接近 0 0 0,极限为 0 0 0。 -
计算 lim x → 0 e x − 1 x \lim_{x \to 0} \frac{e^x - 1}{x} limx→0xex−1
利用 e x ≈ 1 + x e^x \approx 1 + x ex≈1+x(当 x x x 很小时),则 ( 1 + x ) − 1 x = 1 \frac{(1+x)-1}{x}=1 x(1+x)−1=1,故极限为 1 1 1。
1.2.4 Python 代码验证
import numpy as np
# 1. 验证 lim_{x->2} (2x+3) = 7
x_2 = np.array([1.9, 1.99, 1.999, 2.001, 2.01, 2.1])
print("2x+3 逼近 7:", 2*x_2 + 3)
# 2. 验证 lim_{x->∞} 1/x = 0
x_inf = np.array([10, 100, 1000, 10000])
print("1/x 逼近 0:", 1/x_inf)
# 3. 验证 lim_{x->0} (e^x-1)/x = 1
x_0 = np.array([0.1, 0.01, 0.001, 0.0001, -0.0001, -0.001, -0.01, -0.1])
y_0 = (np.exp(x_0) - 1) / x_0
print("(e^x-1)/x 逼近 1:", np.round(y_0, 4))
1.2.5 极限在 AI 中的意义
- 导数的定义:导数本身就是一种极限(差商的极限),是梯度下降的理论基石。
- 梯度消失/爆炸:深层网络中多个 Sigmoid 导数连乘,当每项都接近 0 时,梯度极限趋于 0(梯度消失)。
- 收敛性分析:优化算法是否收敛到最小值,取决于迭代序列的极限。
- 数值稳定性:理解极限可以帮助避免除以 0 或溢出等数值问题。
1.3 必备导数公式汇总(熟记)
| 函数 | 导数 | 备注 |
|---|---|---|
| f ( x ) = x n f(x)=x^n f(x)=xn | f ′ ( x ) = n x n − 1 f'(x)=n x^{n-1} f′(x)=nxn−1 | 幂函数(多项式的基础) |
| f ( x ) = e x f(x)=e^x f(x)=ex | f ′ ( x ) = e x f'(x)=e^x f′(x)=ex | 指数函数 |
| f ( x ) = ln x f(x)=\ln x f(x)=lnx | f ′ ( x ) = 1 x f'(x)=\frac{1}{x} f′(x)=x1 | 自然对数 |
| f ( x ) = σ ( x ) = 1 1 + e − x f(x)=\sigma(x)=\frac{1}{1+e^{-x}} f(x)=σ(x)=1+e−x1 | f ′ ( x ) = σ ( x ) ( 1 − σ ( x ) ) f'(x)=\sigma(x)(1-\sigma(x)) f′(x)=σ(x)(1−σ(x)) | Sigmoid 导数,用于反向传播 |
目标:这些公式是理解梯度下降和反向传播的核心。建议手动推导一遍 Sigmoid 导数,加深记忆。
1.4 代码实践:数值微分与链式法则验证
数值微分用差商近似导数:
f ′ ( x ) ≈ f ( x + h ) − f ( x ) h f'(x) \approx \frac{f(x+h)-f(x)}{h} f′(x)≈hf(x+h)−f(x)
其中 h h h 是一个很小的数(如 10 − 5 10^{-5} 10−5)。该技巧可用于验证解析导数的正确性。
import numpy as np
def numerical_derivative(f, x, h=1e-5):
"""数值微分(前向差分)"""
return (f(x + h) - f(x)) / h
# 测试函数:f(x) = e^x * ln(x) (可验证链式法则)
def f(x):
return np.exp(x) * np.log(x)
# 解析导数(通过乘积法则+链式法则): f'(x) = e^x * ln(x) + e^x * (1/x)
def analytic_derivative(x):
return np.exp(x) * np.log(x) + np.exp(x) / x
x_test = 2.0
num_deriv = numerical_derivative(f, x_test)
ana_deriv = analytic_derivative(x_test)
print(f"数值导数: {num_deriv:.6f}")
print(f"解析导数: {ana_deriv:.6f}")
print(f"误差: {abs(num_deriv - ana_deriv):.2e}")
结果:误差通常小于 10 − 8 10^{-8} 10−8,验证了链式法则和求导公式的正确性。
学习资料链接(综合)
视频教程
文档与书籍
- 《人工智能数学基础》(清华大学出版社)
- 《机器学习的数学》
- numpy 官方教程
在线练习
可视化工具
小结
| 函数类型 | 核心公式 | 定义域 | 值域 | 关键导数 | AI 主要应用 |
|---|---|---|---|---|---|
| 指数 | e x e^x ex | R \mathbb{R} R | ( 0 , ∞ ) (0,\infty) (0,∞) | e x e^x ex | Softmax,梯度 |
| 对数 | ln x \ln x lnx | ( 0 , ∞ ) (0,\infty) (0,∞) | R \mathbb{R} R | 1 / x 1/x 1/x | 交叉熵,信息熵 |
| 多项式 | x n x^n xn | R \mathbb{R} R | 视次数 | n x n − 1 n x^{n-1} nxn−1 | 线性/多项式回归 |
| Sigmoid | 1 1 + e − x \frac{1}{1+e^{-x}} 1+e−x1 | R \mathbb{R} R | ( 0 , 1 ) (0,1) (0,1) | σ ( 1 − σ ) \sigma(1-\sigma) σ(1−σ) | 二分类,激活函数 |
极限 是微积分的基石,理解极限有助于掌握导数、梯度下降等核心概念。建议结合 Python 代码和绘图工具,通过数值实验加深对函数行为和极限思想的理解。
下一步:继续学习导数、梯度下降、链式法则,为反向传播算法打下坚实的数学基础。
更多推荐
所有评论(0)