这是我参与11月更文挑战的第12天
神经网络的普遍性
神经⽹络的⼀个最显著的事实就是它可以计算任何的函数,称为普遍性,该定理在神经⽹络只在输⼊层和输出层之间存在⼀个中间层的情况下也成立。
更准确的表述
对于“神经⽹络可以计算任何函数”这句话需要更精确地解释两点:
1、这种计算不是准确地计算任何函数,而是获得尽可能好的近似,通过增加隐含层们可以提升近似的精度。用形式化语言表述:对于目标精度的函数,通过使用足够多的隐含神经元使得神经网络输出对所有满足实现近似运算。
2、按照上⾯的⽅式近似的函数其实是连续函数,如果函数不是连续的,即函数图像会有突然、极陡的跳跃,那么⼀般来说⽆法使⽤⼀个神经⽹络进⾏近似(但是使用连续的近似也可能展现较好的性能)。
最简单的情况证明
函数只有⼀个输⼊和⼀个输出时,神经网络的普遍性证明。
对于类似下图的函数:
构造只包含一个隐含层的神经网络如下所示:
其中神经网络隐含神经元使用的是S型函数,改变和的值观察输出的变化,如下图所示:
观察可以发现,当很大时函数变为了阶跃函数,讨论阶跃函数显然比讨论S型函数更简单,阶跃的位置和成反比和成正比,用表示阶跃发生的点,:
隐式地将取为一个很大的值,选择,这样只需要调整一个参数:
取顶部隐含神经元,底部隐含神经元,隐含层加权输出为,是隐含层的输出值称为激活值(activations)。通过给定权重值可以得到下面的加权输出图像:
调整权重值我们可以得到完全不同的另一个加权输出图像:
对于这个函数图像我们想调整其凸起的高低,用表示高度,调整值观察变化:
在进一步把区间[0,1]分割成大量子区间,用表示子区间的数目,当时,查看图像的变化:
综上可知函数图像的阶跃点在于点的取值,阶跃高度在于的取值。
回到最上面的函数图像:
它的公式是,。
之前已经分析了隐含神经元的加权输出组合的变化情况,而神经网络的输出是。
现在需要设计一个神经网络,它隐含层的加权输出为,符号的意义,对于有:
即::
是的反函数,根据反函数的定理有:
也就是说通过将加权输出设为可以完美控制网络的最终输出为(注意到此处为简化问题将设置为了0),即实现了对的近似。
接下来就是简单的调整问题,通过调整和的值得到如下所示网络加权输出:
综上证明了只有一个输入输出时,神经网络可以计算任何函数。
多个输入变量时
扩展上述问题,将一个输入变为多个输入:
相应的函数图像也由二维变为三维:
可以发现当第二个输入的权重时,它对网络的输出结果没有任何影响。保持这个状态,只改变输入的权重和看能发生什么变化:
和上面相似的,当变得极大时图像逐渐转变为阶跃函数,阶跃点在。
同样将作为参数,调整的值,单独给或赋值,观察图像变化:
变化规律和上面只有一个输入的情况一样。
把问题变得更复杂,给同时赋值,观察图像变化:
基于上面的启发,可以想到如果能构建如下图所示的塔型函数,那就能实现用它来近似任何多输入的函数(通过在不同位置累加不同高度的塔):
实际上这个问题的本质就是:如何控制其他地方高度和中心塔高度的落差?
回忆的输入,也就是说只要合理设置的值就够了,例如设置:
结论
上述内容直观清晰证明了神经网络如何计算任何函数(普遍性),但它并不是严谨的数学证明。