神经网络学习笔记7——普遍性证明

209 阅读4分钟

这是我参与11月更文挑战的第12天

神经网络的普遍性

神经⽹络的⼀个最显著的事实就是它可以计算任何的函数,称为普遍性,该定理在神经⽹络只在输⼊层和输出层之间存在⼀个中间层的情况下也成立。

更准确的表述

对于“神经⽹络可以计算任何函数”这句话需要更精确地解释两点:

1、这种计算不是准确地计算任何函数,而是获得尽可能好的近似,通过增加隐含层们可以提升近似的精度。用形式化语言表述:对于目标精度ϵ>0\epsilon >0的函数f(x)f(x),通过使用足够多的隐含神经元使得神经网络输出g(x)g(x)对所有xx满足g(x)f(x)<ϵ|g(x)-f(x)|<\epsilon实现近似运算。

2、按照上⾯的⽅式近似的函数其实是连续函数,如果函数不是连续的,即函数图像会有突然、极陡的跳跃,那么⼀般来说⽆法使⽤⼀个神经⽹络进⾏近似(但是使用连续的近似也可能展现较好的性能)。

最简单的情况证明

函数只有⼀个输⼊和⼀个输出时,神经网络的普遍性证明。

对于类似下图的函数:

image.png

构造只包含一个隐含层的神经网络如下所示: image.png

其中神经网络隐含神经元使用的是S型函数σ=11+ez,z=wx+b\sigma=\frac{1}{1+e^{-z}},z=wx+b,改变wwbb的值观察输出的变化,如下图所示: image.png

观察可以发现,当ww很大时函数变为了阶跃函数,讨论阶跃函数显然比讨论S型函数更简单,阶跃的位置和bb成反比和ww成正比,用ss表示阶跃发生的点,s=b/ws=-b/wimage.png

隐式地将ww取为一个很大的值,选择b=wsb=-ws,这样只需要调整ss一个参数: image.png

取顶部隐含神经元s1=0.4s_1=0.4,底部隐含神经元s=0.6s=0.6,隐含层加权输出为w1a1+w2a2w_1a_1+w_2a_2aa是隐含层的输出值称为激活值(activations)。通过给定权重值可以得到下面的加权输出图像: image.png

调整权重值我们可以得到完全不同的另一个加权输出图像: image.png

对于这个函数图像我们想调整其凸起的高低,用hh表示高度,调整hh值观察变化: image.png

在进一步把区间[0,1]分割成大量子区间,用NN表示子区间的数目,当N=5N=5时,查看图像的变化: image.png

综上可知函数图像的阶跃点在于ss点的取值,阶跃高度在于hh的取值。

回到最上面的函数图像: image.png

它的公式是f(x)=0.2+0.4x2+0.3xsin(15x)+0.05cos(50x)f(x)=0.2+0.4x^2+0.3x \sin(15x)+0.05\cos(50x)x,y[0,1]x,y\in [0,1]

之前已经分析了隐含神经元的加权输出组合jwjaj\sum_j w_ja_j的变化情况,而神经网络的输出是σ(jwjaj+b)\sigma(\sum_j w_ja_j+b)

现在需要设计一个神经网络,它隐含层的加权输出为σ1f(x)\sigma^{-1} \circ f(x)符号\circ的意义,对于(fg)(x)(f \circ g)(x)有:

(fg)(x)=f(g(x))(f \circ g)(x)=f(g(x))

即:σ1f(x)=σ1(f(x))\sigma^{-1} \circ f(x)=\sigma^{-1}(f(x))image.png

σ1\sigma^{-1}σ\sigma的反函数,根据反函数的定理有:

σ(σ1f(x))=σ(σ1(f(x)))=f(x)\sigma(\sigma^{-1}\circ f(x))=\sigma(\sigma^{-1}(f(x)))=f(x)

也就是说通过将加权输出设为σ1f(x)\sigma^{-1} \circ f(x)可以完美控制网络的最终输出σ(jwjaj+b)\sigma(\sum _jw_ja_j+b)f(x)f(x)(注意到此处为简化问题将bb设置为了0),即实现了对f(x)f(x)的近似。

接下来就是简单的调整问题,通过调整sshh的值得到如下所示网络加权输出: image.png

综上证明了只有一个输入输出时,神经网络可以计算任何函数。

多个输入变量时

扩展上述问题,将一个输入变为多个输入: image.png

相应的函数图像也由二维变为三维: image.png

可以发现当第二个输入yy的权重w2=0w_2=0时,它对网络的输出结果没有任何影响。保持这个状态,只改变输入xx的权重w1w_1bb看能发生什么变化:

image.png

和上面相似的,当w1w_1变得极大时图像逐渐转变为阶跃函数,阶跃点在sx=b/w1s_x=-b/w_1

同样将ss作为参数,调整ss的值,单独给w1w_1w2w_2赋值,观察图像变化:

image.png

image.png

变化规律和上面只有一个输入的情况一样。

把问题变得更复杂,给w1,w2w_1,w_2同时赋值,观察图像变化:

image.png

基于上面的启发,可以想到如果能构建如下图所示的塔型函数,那就能实现用它来近似任何多输入的函数(通过在不同位置累加不同高度的塔):

image.png

实际上这个问题的本质就是:如何控制其他地方高度和中心塔高度的落差?

回忆σ\sigma的输入wx+bwx+b,也就是说只要合理设置bb的值就够了,例如设置b=3h/2b=3h/2

image.png

结论

上述内容直观清晰证明了神经网络如何计算任何函数(普遍性),但它并不是严谨的数学证明。