这一章比较简单,主要证明了为什么神经网络可以计算任意的连续函数。无论这个函数是什么,总存在一个神经网络,对任意的输入
x
,可以从网络中得到近似的
这个结论告诉我们,神经网络有一种普遍性(universality),无论我们要计算什么样的函数,总有一个神经网络可以计算它。甚至是只需要一层隐藏层就可以实现计算任意函数。因此非常简单的网络就可以很强大了。
本章将会给出一个关于universality theorem简单可视化的解释。
Two caveats
在进入解释之前,严格定义一下何为“a neural network can compute any function”。
第一,这并不意味着一个网络可以用来精确地(exactly)计算任意的函数,而是获得一个我们想要的最好的近似(approximation)。增加隐藏层可以增加近似的程度。
第二,我们所能近似的函数是连续函数(continuous functions)。但实际中还是可以用连续函数近似不连续的函数的。
Universality with one input and one output
为了理解为什么universality theorem成立,从理解神经网络如何构造一个单输入单输出的函数入手:
假设用以下神经网络来构造:
拖动
w
值和
因此,通过控制上图中
w
和
而实际上分析step functions比分析sigmoid functions简单,因为分析一系列的step functions的和比sigmoid functions的和简单。因此我们可以认为我们的神经网络输出的是step function的近似。
并且可以发现,阶跃发生在
s=−b/w
处。
因此可以只用一个
s
来简化表达:
目前为止,我们只考虑了上面的一个神经元,现在我们加入下面的一个神经元以及最后两个weights一起考虑:
调制参数,可以得到如下图像:
易知上图中
继续加入几个神经元,可以达到如下效果:
更进一步,可以得到:
回到原来的问题,我们如何用上面的结论去构造一个函数呢?这里我觉得已经非常简单了,就和积分的推导过程差不多。而书中也是这样的意思:
Many input variables
接下来先看一个有两个输入的例子,之后就可以推广到更多维度。
同样可以发现
w
调整“瀑布”的陡峭程度,越大越陡;而
依旧可以发现,其阶跃的位置为
s=−b/w1
。因此,同单输入一样定义:
如果由下面那个神经元影响,图像如下:
同一维的情况,可以“搭个桥”,注意此时的输出是输出层进入激活函数之前的输出:
同理如果是
y
主导的,就换个方向。
如果将两个方向结合起来,可以组成如下图像,中间一块凸起来是符合规律的,因为
上图省略了边权为0的边。
如果能将上面的图像经过输出层的激活函数后,变为如下的Tower function:
那么我们就可以把许多的Tower function叠加起来:
因此,加入输出层的偏差
此时可以选择
b=−3h/2
。
将两个不同模块结合起来,并增加一层输出,可以得到如下效果:
接下来如何构造出一个二维的函数与一维同理。
接着可以往更多维的推导了。
…
经过推导,可以得到一个
m
维的函数,为了得到类似上面的Tower function,其输出的偏差约为
至此,便可以解释本章的问题了。
Extension beyond sigmoid neurons
考虑不同与sigmoid的激活函数,
s(z)
:
我们依旧可以用这个函数来构造一个step function:
将
w
调大,调整位置
我们可以使用上面一节所提到的所有技巧来整合这个函数。
推广到一般,可以实现上述条件的激活函数满足:当 z <script id="MathJax-Element-397" type="math/tex">z</script>趋于正无穷和负无穷时,函数值趋近于两个值。
因而ReLU是不满足的。那么就有一个问题了,为什么ReLU可以用作激活函数来训练神经网络呢?
这里目前我也还没有答案。