ML的数学基石-函数的光滑性与连续性层次
1. 核心概念:C^k 函数类
1.1 基本定义
- C^0:连续函数
- C^1:一阶连续可导(导函数存在且连续)
- C^k:k阶连续可导(k阶导数存在且连续)
- C^∞:无限可微/光滑函数
1.2 关键insight
仅仅”可导”不等于”C^1”!导函数必须连续才能称为C^1。
经典反例:
$ f(x) = \begin{cases}
x^2\sin(1/x), & x \neq 0 \
0, & x = 0
\end{cases} $
此函数处处可导,但导函数在x=0处不连续:
- $ f’(0) = 0 $(用定义计算)
- $ f’(x) = 2x\sin(1/x) - \cos(1/x) $ 当 $ x \neq 0 $
- $ \lim_{x \to 0} f’(x) $ 不存在(因为$ \cos(1/x) $振荡)
2. 连续性的层次结构
从强到弱的连续性概念:
1 | C^∞ ⊂ C^k ⊂ ... ⊂ C^1 ⊂ Lipschitz连续 ⊂ 一致连续 ⊂ 连续 |
2.1 Lipschitz连续
定义:存在常数L使得 $ |f(x) - f(y)| \leq L|x - y| $
几何意义:函数变化率有界(斜率不超过L)
与C^1的关系:
- 闭区间上的C^1函数必是Lipschitz连续
- Lipschitz连续不一定C^1(如 $ |x| $)
为什么导函数的连续性如此重要?
让我通过具体例子来展示导函数不连续会导致的各种问题。
1. 链式法则失效的风险
考虑两个函数的复合:
例子1:设
$ g(x) = \begin{cases}
x^2\sin(1/x), & x \neq 0 \
0, & x = 0
\end{cases} $
$ h(y) = y $
理论上,$ (h \circ g)’(0) $ 应该等于 $ h’(g(0)) \cdot g’(0) = 1 \cdot 0 = 0 $,但如果你在计算机上用有限差分等数值方法近似计算$ g’(0) $,会得到各种乱七八糟的值,而不是理论上的0。
2. 微分中值定理的应用受限
例子2:考虑函数
$ f(x) = \begin{cases}
x + 2x^2\sin(1/x), & x \neq 0 \
0, & x = 0
\end{cases} $
其导数为:
$ f’(x) = \begin{cases}
1 + 4x\sin(1/x) - 2\cos(1/x), & x \neq 0 \
1, & x = 0
\end{cases} $
问题场景:估计 $ f(0.01) - f(0) $
- 理论上:存在 $ \xi \in (0, 0.01) $ 使得 $ f(0.01) - f(0) = f’(\xi) \cdot 0.01 $
- 实际上:由于 $ f’(x) $ 在 $ x=0 $ 附近剧烈振荡(在 $ [-1, 3] $ 之间),我们无法给出稳定的估计
1 | 假设我们要估计 f(h) - f(0): |
3. 数值方法的不稳定性
例子3:用牛顿法求解方程 $ f(x) = 0 $
考虑函数:
$ f(x) = \begin{cases}
x + x^2\sin(1/x), & x \neq 0 \
0, & x = 0
\end{cases} $
牛顿迭代:$ x_{n+1} = x_n - \frac{f(x_n)}{f’(x_n)} $
问题:
- 当 $ x_n $ 接近0时,$ f’(x_n) $ 可能接近 $ \cos(1/x_n) $ 的某个值
- 如果 $ \cos(1/x_n) \approx 0 $,迭代会变得极不稳定
- 导函数的不连续导致收敛性无法保证
4. 泰勒展开的失效
例子4:考虑在 $ x=0 $ 附近展开
对于C^1函数,我们期望:
$ f(h) = f(0) + f’(0)h + o(h) $
但如果 $ f’ $ 不连续,余项 $ o(h) $ 的行为会很糟糕。
具体例子:
$ g(x) = \begin{cases}
x^2(2 + \sin(1/x)), & x \neq 0 \
0, & x = 0
\end{cases} $
虽然 $ g’(0) = 0 $,但:
- 一阶泰勒展开:$ g(h) \approx 0 $
- 实际值:$ g(h) = h^2(2 + \sin(1/h)) $ 在 $ [h^2, 3h^2] $ 之间振荡
- 相对误差可达300%!
因为函数导数在0点附近不连续,这样导致泰勒展开的“小量”项(理论上应属于 $ o(h) $的项)实际上主导了近似误差。
5. 优化算法的收敛性问题
例子5:梯度下降法
考虑目标函数:
$ f(x) = x^2 + \begin{cases}
x^3\sin(1/x), & x \neq 0 \
0, & x = 0
\end{cases} $
梯度下降:$ x_{n+1} = x_n - \alpha f’(x_n) $
问题:
- 在 $ x=0 $ 附近,梯度会突然变化
- 步长 $ \alpha $ 很难选择
- 算法可能在最优点附近振荡而不收敛
6. 积分相关的问题
微积分基本定理的应用
如果 $ f \in C^1[a,b] $,则:
$ \int_a^b f’(x)dx = f(b) - f(a) $
但如果 $ f’ $ 不连续,这个公式可能需要更仔细的处理(如广义积分)。
没有这个性质,我们失去了:
- 可靠的线性近似
- 稳定的数值方法
- 收敛的迭代算法
- 有效的误差估计
4. 典型例子
函数 | 连续性 | 可导性 | 函数类 |
---|---|---|---|
$ | x | $ | 连续 |
$ x | x | $ | 连续 |
$ x^2 $ | 连续 | 无限可导 | C^∞ |
$ \sqrt{x} $ (x≥0) | 连续 | x=0导数无界 | 非Lipschitz |
5. 实用判断准则
5.1 检查C^1
- 计算导函数
- 检查导函数的连续性(特别是分段点)
5.2 检查Lipschitz
- 若f∈C^1[a,b],则自动Lipschitz连续
- 否则直接验证定义或检查导数是否有界
6. 应用场景
- C^1:大多数优化算法的基本要求
- C^2:牛顿法、曲率分析
- Lipschitz:不动点定理、ODE解的存在性
- C^∞:泰勒级数、解析延拓
7. 关键要点
- C^k严格强于k次可导:需要k阶导数连续
- Lipschitz是C^1的推广:放松了可导性要求
- 光滑性层次:越光滑,性质越好,但要求越严格
- 实际应用:根据问题需求选择合适的光滑性假设
记住:数学中的”光滑”不是模糊概念,而是有精确的层次结构!
ML的数学基石-函数的光滑性与连续性层次