只有一个隐藏层的神经网络也可以拟合任意函数,但是隐藏层所需要的神经单元可能是无限多个。故为了降低神经元的数量,我们可以考虑增加神经网络的层数。如果我们限定了神经网络的深度,那么需要的神经元个数的上限是多少?无限大。所以当你在AC0级的基础上建立一个固定深度的神经网络的时候,理论上,神经元的个数并没有一个上限。并且这个网络可以很好地构成任一函数。
但是接下来,假设我们有这样一个网络,如果这个网络足够深,但我限制每一层中神经元的个数,那么这个神经网络是否绝对可以拟合任一函数呢?确实不能。所以当我提到一个神经网络足够用的时候,意味着它的层数足够深,并且每一层的神经元数目足够。这整个网络可以模拟一个具体的函数了。现在我们谈论的是模拟一个具体函数的能力,并不是意味着仅仅它才可以模拟这个函数。
我们应该怎样设计一个神经网络去计算着一个特定的函数?第一个问题就是我们如何使用一堆数字来表示我们的输入和输出。神经网络的基本结构是感知机,它数学公式是:z=权重×输入的结果+偏置项。这样就得到一个关于输入的仿射组合。
其次是如何构建一个神经网络来执行必要的函数。激活函数,这个函数用来处理输入的仿射组合,并且激活函数在大多数情况下可以将它看做一个感知机,因为它最初被定义为一个阈值函数或是正弦函数。(每次提到感知机的时候,你应该能想到输入数据的仿射组合,而这些输入数据是输入到激活函数中去的,即all输入×权重+偏置)。但这样写有些麻烦,每次都得加b,有个简单的方法即在输入向量里添加1,设想它就是输入变量里的一个额外部分,这样偏置就直接变成了这里的权重,z=all输入×权重。
前馈网络:输入的数据在第一层被运算,得到的结果传到第二层继续运算,一直到最后一层。信号永远不会返回到前面的任何单元,它是单向的、非循环的。
分歧函数告诉了网络输出值和每个x对应的真实想要的值之间的差值。
学习一个神经网络就和确定网络参数是一样的,这些需要确定的参数就是网络所需要的权重和误差。用来对目标函数进行建模。在实际中,不会知道g(x)的函数定义,所以我们将根据画出输入输出训练实例,并估计网络的参数,来使用这些实例来对输入输出关系进行拟合。
最简单的多层感知机模型实际上并没有多层的概念,甚至也没有层,就是一个感知机模型。我们有很多实例,在数轴中就是一个个蓝色红色的点点,我们需要通过这些数据学习能够产生不同输出的权重w和偏置项b,这样就可以找到一个超平面,来完美分开蓝色和红色的点。