万能近似定理: 逼近任何函数的理论
那么,如何找到一个模型函数,具有通过调整参数成长为上图函数的潜力呢?我们首先考虑启动函数,即可以叠加多个不同的函数以匹配复杂函数的函数。
接下来,假设我们能写出以下函数 - Hard Sigmoid。通过叠加多个不同的 Hard Sigmoid 函数,我们可以匹配到复杂函数的形状,如下图所示。虽然叠加后不等于原图,但非常直观。实际上,叠加这5条线后,每到下一个台阶都会受到上一条 Hard Sigmoid 函数尾部常量的叠加,位置会产生偏移,但这是可以通过调整线条位置解决的。可以肯定的是,通过叠加多条 Hard Sigmoid 函数实现上图效果。
实际上,除了 Hard Sigmoid 外,还有 Sigmoid、RELU 等多种函数可以通过叠加实现任意函数,这种函数称为“启动函数”。每一种函数都有明确表达式,比如 Sigmoid,其导数可通过自身得出,非常巧妙。
另外,优化阶段需要对损失函数求导,启动函数也要参与求导,所以启动函数的导数越容易计算,且计算量越小,它在机器学习中就越占优势。
我们回到找通用模型函数的问题,如何利用启动函数生成可以逼近一切函数的模型函数?根据启动函数的思考,我们发现通过叠加n条启动函数就可以逼近一切函数,因此我们要找的模型函数就是由n条启动函数组成的巨大函数。
以Sigmoid函数为例,它拥有c、w和b三个未知参数,它们与未知数x的运算关系是:w乘以x,加上b,最后乘以c。当然,不同的启动函数未知参数数量也不同,但大致我们可以认为,与未知数x的运算分为三大类。
那么对于变量x来说,要形成上图多条启动函数叠加,每个启动函数会拥有自己不同的w与b参数。另一方面,输入不一定只有一个变量,比如图像识别入参是图片像素点乘以rgb个数,ChatGPT入参是输入文字的token个数,一旦入参从一个变成两个,函数图像就从二维图形变成了三维。
如果入参继续增加,这个函数将变得更加高维,人类难以想象出它的图像,但从数学上来讲,我们是在求解一个很高维的函数。
假设输入有m个变量,从x₁到xₘ,每个变量叠加n个启动函数,即x₁在每个启动函数都有n个w与b参数,以此类推,一共有n x m个w与b参数。画成图之后会发现,对于每一个启动函数,叠加了n个常量b,所以我们可以把这些常量求和看成是一个参数,简化函数的参数。
最终要求解的y = y₁ + y₂ .. + yₙ,我们发现,这个值正好等于以下两个矩阵的点积(忽略对常数b的计算)。
而矩阵运算可以利用GPU并行执行,无论未知数变量m或启动函数数量n为多少,计算的时间复杂度都是常数O(1),这也是为什么机器学习必须用GPU计算的原因,不是CPU算不了,而是计算速度被矩阵运算甩了好几个数量级。
神经网络的深度之所以机器学习和神经网络这两个名词总是一起出现,是因为神经网络是目前机器学习最好的架构。而我们上面提到的模型函数就是一层神经网络。
之所以叫神经网络,是因为把输入的m个未知变量当做信号刺激,把n个计算节点看作神经节点的话,它和人脑的神经网络接收电信号的过程很像,只不过它只有一层网络,这一层有n个神经元。如果把神经网络拓展到p层呢?我们可以把神经网络画出两层,以便于理解p层神经网络的架构。
即把每层网络的输出作为下一层网络的输入,就可以无限增加神经网络的深度了。注意每一次各个点的参数w与b都不一样,每一层的节点数量也可以不同。如果把每个神经网络抽象为一个点,从左到右画,神经网络就可以抽象为下图。
实验证明,神经网络层级越深,每个节点的神经元越多,一般来说这个神经网络的潜力越大,效果越小。但相应的,越复杂的神经网络越难training。
从模拟任意函数的角度,我们发现通过启动函数的无限叠加,理论上可以逼近一切函数。面对真实世界的输入,我们可以构造矩阵计算来解决。如果问题的复杂度太高,一层神经网络往往不会有很好的效果,但我们惊讶地发现,通过让神经网络变得越来越深,往往能取得更好的效果,因为也许这能模拟人脑各神经元之间处理神经信号的特征。
至于为什么神经网络越深效果越好,以下是ChatGPT给出的回答:
然而,深度神经网络并非没有缺点。随着网络深度的增加,也会带来一些挑战,如梯度消失或梯度爆炸问题、过拟合、以及更高的计算成本和内存需求。因此,虽然深度神经网络在很多任务上表现出色,但设计和训练这样的网络需要谨慎和精细的技术,如残差连接(ResNet)、批量归一化、Dropout等技术,以及更高效的优化算法。
有一点是可以肯定的,即因为网络深度的增加,确实会带来如ChatGPT所说的一系列问题,而这也是许多机器学习领域的专家研究的方向,在之后的章节中,我们会提到具体代码实现以及部分优化思路。我们下一篇就来介绍,如何设计该神经网络的代码。
万能近似定理: 逼近任何函数的理论
从模拟任意函数的角度,我们发现通过启动函数的无限叠加,理论上可以逼近一切函数。面对真实世界的输入,我们可以构造矩阵计算来解决。如果问题的复杂度太高,一层神经网络往往不会有很好的效果,但我们惊讶地发现,通过让神经网络变得越来越深,往往能取得更好的效果,因为也许这能模拟人脑各神经元之间处理神...
为什么多项式可以近似任意函数?
任意函数不太可行, 近似的说法有点模糊.与之意思接近的严格的表述是如下Weierstrass定理:若f(x)是闭区间[a,b]上的连续函数, 则存在一列多项式Pn(x), 使Pn(x)在[a,b]上一致收敛到f(x).这里"近似"的意义是一致逼近, 即|f(x)-Pn(x)|在[a,b]上的最大值趋于0.而可被一致逼近的只有[a...
为什么左极右连函数是稠密的?
总的来说,左极右连函数是稠密的,因为它们可以以任意精度逼近实数空间中的任何函数。这个结论是基于Weierstrass逼近定理和Stone-Weierstrass定理的,这两个定理都是在数学分析中被广泛接受和应用的基本定理。
泰勒定理的内容和意义
泰勒定理是数学中的一个重要定理,它提供了一个在局部范围内逼近任何函数的方法,即通过将函数展开成无穷级数的方式。这个定理是由英国数学家布鲁克·泰勒(Brook Taylor)于1715年提出的。泰勒定理的内容是:任何一个函数f(x),如果在其定义域内存在一个点a,使得f(x)在a点处可导,那么f(x)在a点...
大语言模型从零开始(三):一文详解神经网络和梯度下降
人工神经网络可以实现人工智能,其数学理论中的通用近似定理表明,人工神经网络可以逼近任意复杂函数。前向传播和反向传播是人工神经网络的两个重要过程。前向传播是从输入层开始,经过网络中各层的计算,最终通过输出层产生输出的过程。反向传播是从输出层开始,计算损失函数对参数的梯度,从而实现参数更新的...
KAN会取代MLP成为神经网络新的范式吗?
MLP架构的数学基础是基于Tsybenko定理,即万能近似定理。该定理表明人工神经网络具有逼近任意函数的能力,但并未说明如何选择神经网络参数(权重、神经元数量、神经层层数等)以达到特定目标。1989年,George Cybenko首次提出单一隐藏层、任意宽度、使用Sigmod函数的前馈神经网络的通用近似定理。两年后,Kurt ...
通用近似定理
想象一个无限可塑的橡皮泥创作过程,无论你想塑造出小动物、植物还是山峰,只要有足够的技巧和耐心,几乎可以达到任何形态。神经网络与这个过程相似,目标函数则是你想要塑造的形状。通用近似定理暗示,无论你的创作多么复杂,理论上都有可能通过调整神经网络的参数来实现精准逼近。然而,实际找到这个能完美...
为什么神经网络能以任意精度拟合任意复杂度的函数?
Universal approximation theorem (Hornik et al., 1989;Cybenko, 1989) 定理表明:前馈神经网络,只需具备单层隐含层和有限个神经单元,就能以任意精度拟合任意复杂度的函数。这是个已经被证明的定理。下面我们用一种轻松的方式解释,为什么神经网络(理论上)可以拟合任何函数? 看过《神偷奶爸》这部电影的同学都知道,小黄人...
深度学习浅析-通用逼近定理,深度网络和梯度消失\/爆炸
首先,通用逼近定理指出,多层前馈网络,只要隐层神经元足够多,就能以任意精度逼近任意连续函数。这一定理的关键在于神经网络的“近似”性质以及被逼近函数的连续性要求。理论上,单隐层网络就能近似许多函数,但实践中,深度网络往往能更高效地处理复杂问题。深度网络之所以更受欢迎,是因为它们能提升模型复杂...
什么是通用近似定理?
通用近似定理是神经网络领域的一个关键理论。它表明,只要神经网络具有足够的宽度和深度,尤其是隐藏层且使用非线性激活函数,那么它能以任意精度近似任何连续函数。此定理为神经网络的强大能力提供了数学基础,解释了它们在图像识别、语言处理和游戏控制等复杂任务中的卓越表现。这个定理的重要性在于,它向我们...