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
2
3
4
5
6
7
假设我们要估计 f(h) - f(0):

h = 0.01: 可能 f'(ξ) ≈ -0.8, 估计值 ≈ -0.008
h = 0.0099: 可能 f'(ξ) ≈ 2.5, 估计值 ≈ 0.02475
h = 0.0101: 可能 f'(ξ) ≈ 0.3, 估计值 ≈ 0.00303

三个几乎相同的h值,估计结果差异巨大!

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

  1. 计算导函数
  2. 检查导函数的连续性(特别是分段点)

5.2 检查Lipschitz

  1. 若f∈C^1[a,b],则自动Lipschitz连续
  2. 否则直接验证定义或检查导数是否有界

6. 应用场景

  • C^1:大多数优化算法的基本要求
  • C^2:牛顿法、曲率分析
  • Lipschitz:不动点定理、ODE解的存在性
  • C^∞:泰勒级数、解析延拓

7. 关键要点

  1. C^k严格强于k次可导:需要k阶导数连续
  2. Lipschitz是C^1的推广:放松了可导性要求
  3. 光滑性层次:越光滑,性质越好,但要求越严格
  4. 实际应用:根据问题需求选择合适的光滑性假设

记住:数学中的”光滑”不是模糊概念,而是有精确的层次结构!

Author

李三(cl0und)

Posted on

2025-08-11

Updated on

2025-08-11

Licensed under