量化百科

[深度学习之美05】神经网络最本质的理论基础是什么?

由ypyu创建,最终由ypyu 被浏览 14 用户

用近似定理牛在哪里?

前面我们提到,机器学习在本质上,就是找好一个好用的函数。而人工神经网络最牛的地方可能就在于,它可以在理论上证明:“一个包含足够多隐层神经元的多层前馈网络,能以任意精度逼近任意预定的连续函数[1]”。

这个定理也被称之为通用近似定理(Universal Approximation Theorem)。这里的“Universal”,也有人将其翻译成“万能的”,由此可以看出来,这个定理的能量有多大。

图2-4 通用近似定理

“通用近似定理”告诉我们,不管函数

$f(x)$

在形式上有多复杂,我们总能确保找到一个神经网络,对任何可能的输入_x_,以任意高的精度近似输出值为_f_(x)(如图2-4所示)。即使函数有多个输入和输出,即

$f=f(x_1,x_2,...,x_m)$

,通用近似定理的结论也是成立的。换句话说,神经网络在理论上可近似解决任何问题,这就厉害了!有关神经网络可以计算任何函数的可视化证明,感兴趣的读者可以参阅Michael Nielsen的博客文章[2]。

使用这个定理时,我们需要注意如下两点:

(1)定理说的是,可以设计一个神经网络尽可能好地去“近似”某个特定函数,而不是说“准确”计算这个函数。我们通过增加隐层神经元的个数来提升近似的精度。

(2)被近似的函数,必须是连续函数。如果函数是非连续的,也就是说有极陡跳跃的函数,神经网络就“爱莫能助”了。

即使函数是连续的,有关神经网络能不能解决所有问题,也是有争议的。原因很简单,就如同那句玩笑话“理想很丰满,现实很骨感”说得那样,通用近似定理在理论上是一回事,而在实际操作又是另外一回事。

比如,深度学习新秀、生成对抗网络(GAN)发明者 Ian Goodfellow就曾发表意见说,“仅含有一层的前馈网络,的确足以有效地表示任何函数,但是,这样的网络结构可能会格外庞大,进而无法正确地学习和泛化:

"A feedforward network with a single layer is sufficient to represent any function, but the layer may be infeasibly large and may fail to learn and generalize correctly。”

Goodfellow的言外之意是说,“广而浅薄”的神经网络在理论上是万能的,但在实践中却不是那么回事。因此,网络往“深”的方向去做,才是正途。(这个议题,回头我们再深入探讨)

事实上,1989年“通用近似定理”就被提出了,到2006年深度学习开始厚积而薄发,这期间神经网络并没有因为这个理论而得到蓬勃发展。因此,从某种程度上,验证了Goodfellow的判断。

神经网络是如何模拟(拟合)一个函数的?

深度学习工程师Brendan Fortuner在其博客中[3]比较形象地说明“通用近似定理”的长处和短处,他把目标函数设为:

$f(x)=x^3+x^2-x-1$

(2-1)

神经元使用的激活函数是ReLU。ReLU是“Rectified Linear Units(修正线性单元)”的缩写。关于“激活函数”的概念在后续章节,我们会详细讲解。这里读者只需要知道ReLU是一个简单的非线性函数:

$ReLU=max(0,x)$

(2-2)

然后,重复尝试ReLU单元的不同组合,直到它拟合地看起来很像目标函数。下面是使用6个ReLU神经元组合的示意图。

在6个神经元分别用公式(2-3~公式(2-8)所示。

$neruon_1(x)=ReLU(-5x-7.7)$

(2.3)

$neruon_2(x)=ReLU(-1.2x-1.3)$

(2.4)

$neruon_3(x)=ReLU(1.2x+1)$

(2.5)

$neruon_4(x)=ReLU(1.2x-0.2)$

(2.6)

$neruon_5(x)=ReLU(2x-1.1)$

(2.7)

$neruon_6(x)=ReLU(5x-5)$

(2.8)

在上述公式中,诸如“-5”、“-1.2”等数值,是输入神经元与隐层神经元之间的连接权值(weight),而诸如“-7.7”、“-1.3”等数值,是隐层神经元的偏置(bias)。本来这些参数都是通过不断地训练学习而来的,这里为了说明问题,就直接给出了。

然后把这些神经元组合起来,就形成了输出函数,如公式(2-9)所示。

$f(x)=-n_1(x)-n_2(x)-n_3(x)+n_4(x)+n_5(x)+n_6(x)$

(2-9)

事实上,神经元前面的系数“-1”、“-1”、“-1”、“1”、“1”、“1”分别是隐层神经元和输出神经元之间的连接权重值,它们也是需要学习才能得到的,这里也直接给出了(为排版方便,公式(2-9)中,我们用

$n_1$

代替了

$neruon_1$

,其他类似)。

图2-5 神经网络拟合示意图

通过上述的工作,我们来看看如图2-5所示的神经网络拟合的效果如何呢?参见图2-6,从该图中可以看出,神经网络的确可以少量神经元和单个隐层来为非平凡函数(non-trivial functions)建模,如果我们把神经网络的参数调整的更加“细腻”,那么这个“近似”将会更加逼真。

图2-6 神经网络模拟函数示意图(来自参考文献[3]工具生成)

但细心的读者可能发现了图2-6中的端倪,那就是这个函数“近似”的区间在[-2,2]之间。在这个区间,神经网络的“近似”的效果,看起来还不错,但这个拟合效果,经不起区间范围的放大。

一旦区间放大,上述神经网络的近似效果就“大相径庭”。换句话说,如果我们不想重新训练且不想增加网络隐层神经元,那么就别指望它可以“泛化”支撑其他输入。

这里的泛化(generalization)是指,训练好的机器学习模型对新样本的适应能力。如果所设计的模拟仅仅对训练数据集合有效,而对训练集合之外的元素低效,那么就称这样的模型泛化能力差,或陷入了过拟合(overfitting)状态。

参考文献



[1] Hornik K, Stinchcombe M, White H.Multilayer feedforward networks are universal approximators[J]. NeuralNetworks, 1989, 2(5):359-366.

[2] Michael A. Nielsen, A visual proof that neural nets can compute any function, http://neuralnetworksanddeeplearning.com/chap4.html

[3] https://www.desmos.com/calculator/cfvtjusqmq


\

标签

深度学习神经网络机器学习函数深度学习算法