K. Hornik, M. Stinchcombe, and H. White. Multilayer feed- forward networks are universal approximators. Neural Net- works, 2(5):359-366, 1989 论文解读
神经网络就像"数学乐高积木":多层前馈网络如何用简单函数拼接复杂世界
第一节:通俗解释------万能近似定理的核心思想
万能近似定理 (Universal Approximation Theorem)揭示了多层前馈神经网络的本质能力:用简单的非线性函数像搭乐高积木一样,拼接出任何连续函数。就像用无数小积木块能搭出任意形状的城堡,神经网络通过组合隐藏层的激活函数(如Sigmoid、ReLU),能以任意精度逼近定义在有限空间内的复杂函数。
核心结论
- 隐藏层是核心:只需1个足够宽的隐藏层,就能逼近任意连续函数。
- 激活函数是关键:激活函数必须是非线性的(如Sigmoid),多项式函数无效。
- 逼近误差可控:隐藏层神经元越多,逼近精度越高(误差与神经元数量成反比)。
第二节:公式解释与案例
公式1:神经网络输出表达式
f ( x ) = W 2 ⋅ σ ( W 1 x + b 1 ) + b 2 f(x) = W_2 \cdot \sigma(W_1 x + b_1) + b_2 f(x)=W2⋅σ(W1x+b1)+b2
符号 | 解释 | 类比 |
---|---|---|
x x x | 输入向量 | 乐高积木的"原材料" |
W 1 , b 1 W_1, b_1 W1,b1 | 隐藏层权重和偏置 | 积木的"连接方式" |
σ ( ⋅ ) \sigma(\cdot) σ(⋅) | 激活函数(如Sigmoid) | 积木的"形状变换器" |
W 2 , b 2 W_2, b_2 W2,b2 | 输出层权重和偏置 | 最终拼接的"胶水" |
意义 :通过非线性激活 σ \sigma σ将线性变换 W 1 x + b 1 W_1 x + b_1 W1x+b1映射到高维空间,再组合成目标函数。缺点:理论要求隐藏层宽度无限,实际需权衡计算资源。
公式2:Sigmoid激活函数
σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+e−z1
- 作用:将任意输入压缩到(0,1),引入非线性(类似开关控制信息流动)。
- 案例 :拟合曲线 y = sin ( x ) y = \sin(x) y=sin(x)时,多个Sigmoid函数叠加可模拟波形起伏。
公式3:逼近误差边界
∥ f ( x ) − g ( x ) ∥ < ϵ \|f(x) - g(x)\| < \epsilon ∥f(x)−g(x)∥<ϵ
- ϵ \epsilon ϵ为逼近误差,隐藏神经元数量 N N N满足 N ∝ 1 / ϵ d N \propto 1/\epsilon^d N∝1/ϵd( d d d为输入维度)。
- 意义 :高维问题需要指数级神经元,解释深度学习为何依赖深层网络而非单纯拓宽。
第三节:公式探索与推演
相似公式对比
公式 | 表达式 | 特点 | 适用场景 |
---|---|---|---|
ReLU激活 | σ ( z ) = max ( 0 , z ) \sigma(z) = \max(0, z) σ(z)=max(0,z) | 计算高效,缓解梯度消失 | 深度网络 |
Tanh激活 | σ ( z ) = e z − e − z e z + e − z \sigma(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} σ(z)=ez+e−zez−e−z | 输出零中心化,梯度更稳定 | RNN、GAN |
多项式函数 | σ ( z ) = z 2 \sigma(z) = z^2 σ(z)=z2 | 无法满足万能近似条件 | 线性逼近 |
关键差异 :ReLU和Tanh虽非线性,但Hornik证明只要激活函数是非多项式的连续函数,即可实现万能逼近。
推导过程:从泰勒展开看函数逼近
假设目标函数 g ( x ) g(x) g(x)可展开为:
g ( x ) ≈ ∑ k = 0 ∞ a k x k g(x) \approx \sum_{k=0}^\infty a_k x^k g(x)≈k=0∑∞akxk
神经网络通过隐藏层 组合非线性项 σ ( w x + b ) \sigma(w x + b) σ(wx+b),等价于用非多项式基函数重构 g ( x ) g(x) g(x)。例如Sigmoid的泰勒展开包含无限高阶项,从而覆盖多项式无法表达的复杂度。
第四节:代码实现------用Keras验证万能近似定理
功能演示
- 拟合正弦函数 :用单隐藏层网络逼近 y = sin ( x ) y = \sin(x) y=sin(x)。
- 激活函数对比:Sigmoid vs ReLU的逼近效果差异。
- SHAP解释:可视化神经元对预测的贡献。
python
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import keras
from sklearn.model_selection import train_test_split
import shap
# 生成数据
X = np.linspace(-3, 3, 1000).reshape(-1, 1)
y = np.sin(X) + 0.1 * np.random.randn(*X.shape)
# 构建模型(单隐藏层,10个神经元)
model = keras.Sequential([
keras.layers.Dense(10, activation='sigmoid', input_shape=(1,)),
keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
# 训练并预测
history = model.fit(X, y, epochs=500, verbose=0)
y_pred = model.predict(X)
# 可视化
plt.figure(figsize=(10, 6))
plt.scatter(X, y, s=5, label='Noisy Data', alpha=0.4)
plt.plot(X, y_pred, c='red', lw=2, label='NN Prediction')
plt.title('Universal Approximation: Sin Wave Fitting', fontsize=14)
plt.xlabel('x', fontsize=12)
plt.ylabel('y', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()
plt.show()
# SHAP解释
explainer = shap.DeepExplainer(model, X[:100])
shap_values = explainer.shap_values(X[:10])
shap.summary_plot(shap_values, X[:10], plot_type='bar')
代码输出分析
- 拟合效果 :红色曲线紧密贴合噪声数据,证明网络捕捉了 sin ( x ) \sin(x) sin(x)的主成分。
- SHAP解释:条形图显示不同隐藏神经元对预测的贡献度,反映函数拼接过程。
关键词:
#万能近似定理
#UniversalApproximation
#激活函数
#Sigmoid
#ReLU
#函数逼近
#神经网络架构
#SHAP解释
#Keras