本文转载自:
文章导读:
1. 两个前提
2. 单输入单输出的情况
3. 一般情形:多输入多输出情况
4. 使用sigmoid以外的神经元
5. 修正阶跃函数
6.总结
神经网络最令人激动的一个性质,就是它可以实现任意功能的函数。而且是即使对于只有一个隐藏层的神经网络,这个结论依然成立。
大部分神经网络的使用者都知道这个性质,但是并不理解为什么神经网络会有这样的性质。而其理论证明对于非数学专业的同学来说并不好理解,所以本章旨在用直观的方式帮助大家理解这个性质。
一. 两个前提
神经网络可以计算任意函数其实是有前提的。
首先要明白的是它并不是可以完全准确的计算原函数的值,但是通过增加隐藏层神经元的值我们可以越来越逼近原函数。就是说对于一个需要实现的函数f(x)f(x),要求实现精度为ϵ>0ϵ>0,也就是需要足够的隐藏层神经元使得神经网络输出g(x)g(x)满足|g(x)−f(x)|<ϵ|g(x)−f(x)|<ϵ对所有输入xx。
第二个前提是被模拟的函数是连续函数,不过有的时候对于非连续函数,神经网络得到的连续近似已经足够满足要求了。
二. 单输入单输出的情况
先考虑最基础的单输入单输出的函数情况。为了理解怎么利用神经网络去计算给定函数ff,我们先考虑只有一个隐藏层的情况,其中含有两个神经元。
考虑隐藏层第一个神经元,其输出由σ(wx+b)σ(wx+b)决定。改变其参数ww和bb可以发现如下规律:
- 改变b不会使函数形状发生改变,只会使其左右偏移。因为f(x)=11+ewx+b+b0=1ew(x+b0w)+bf(x)=11+ewx+b+b0=1ew(x+b0w)+b,b0>0b0>0时即bb增大时,相当于图像向左移动,b0<0b0<0时即bb减小时,相当于图像向右移动。
- 改变w则会改变函数的形状,因为f(x)=11+e(w+w0)x+b=11+ewxw+w0w+bf(x)=11+e(w+w0)x+b=11+ewxw+w0w+b,相当于在横轴上进行了放缩。当|w||w|(w<0w<0的时候,函数会在x轴上反转,不过不影响我们理解)变的越来越大的时候,函数就会变的越来越陡峭。实际中观察,当w=100w=100左右时,函数的陡峭程度已经接近于阶跃函数了。
继续增大ww的值使得其输出更加接近阶跃函数:
当我们对隐藏层的神经元的输出进行加权求和的时候,分析阶跃函数要比分析sigmoid函数容易。我们很容易可以知道两个阶跃函数的和是什么形式,但是对于两个sigmoid函数就没有这么容易得到。所以我们先假设这些神经元输出函数就是阶跃函数,当然这也是一种近似,我们随后再看这和真正的情况相比会有什么影响。
再考虑另外一个问题,我们知道标准的σ(z)σ(z)的中点在z=0z=0处,当它近似为一个阶跃函数的时候,阶跃点在哪呢?容易知道就是在wx+b=0wx+b=0处,即s=−bws=−bw。于是对于已经近似被认为是阶跃函数的神经元就可以只用一个参数s=−bws=−bw来代替之前的两个参数ww和bb。
接着再来考虑整个神经网络的情况。
右边展示的是加权输出的结果w1a1+w2a2w1a1+w2a2,其中a1a1和a2a2分别是隐藏层两个神经元的输出。不过注意到这里神经网络最终的输出为σ(w1a1+w2a2+b)σ(w1a1+w2a2+b)。
通过调节这些参数可以观察到:
- 调节