神经网络最本质的理论基础是什么?
作者:玉来愈宏
来源:知乎
链接:https://zhuanlan.zhihu.com/p/39334377
编辑:王萌(深度学习冲鸭公众号)
著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理
机器学习在本质上,就是找好一个好用的函数。而人工神经网络最牛的地方可能就在于,它可以在理论上证明:“一个包含足够多隐层神经元的多层前馈网络,能以任意精度逼近任意预定的连续函数[1]”。
用近似定理牛在哪里?
这个定理也被称之为通用近似定理(Universal Approximation Theorem)。这里的“Universal”,也有人将其翻译成“万能的”,由此可以看出来,这个定理的能量有多大。
图2-4 通用近似定理
“通用近似定理”告诉我们,不管函数 在形式上有多复杂,我们总能确保找到一个神经网络,对任何可能的输入x,以任意高的精度近似输出值为f(x)(如图2-4所示)。即使函数有多个输入和输出,即
,通用近似定理的结论也是成立的。换句话说,神经网络在理论上可近似解决任何问题,这就厉害了!有关神经网络可以计算任何函数的可视化证明,感兴趣的读者可以参阅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]比较形象地说明“通用近似定理”的长处和短处,他把目标函数设为:
(2-1)
神经元使用的激活函数是ReLU。ReLU是“Rectified Linear Units(修正线性单元)”的缩写。关于“激活函数”的概念在后续章节,我们会详细讲解。这里读者只需要知道ReLU是一个简单的非线性函数:
(2-2)
然后,重复尝试ReLU单元的不同组合,直到它拟合地看起来很像目标函数。下面是使用6个ReLU神经元组合的示意图。
在6个神经元分别用公式(2-3~公式(2-8)所示。
(2.3)
(2.4)
(2.5)
(2.6)
(2.7)
(2.8)
在上述公式中,诸如“-5”、“-1.2”等数值,是输入神经元与隐层神经元之间的连接权值(weight),而诸如“-7.7”、“-1.3”等数值,是隐层神经元的偏置(bias)。本来这些参数都是通过不断地训练学习而来的,这里为了说明问题,就直接给出了。
然后把这些神经元组合起来,就形成了输出函数,如公式(2-9)所示。
(2-9)
事实上,神经元前面的系数“-1”、“-1”、“-1”、“1”、“1”、“1”分别是隐层神经元和输出神经元之间的连接权重值,它们也是需要学习才能得到的,这里也直接给出了(为排版方便,公式(2-9)中,我们用 代替了
,其他类似)。
图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]. Neural
Networks, 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
本文节选自《深度学习之美:AI时代的数据处理与最佳实践》(张玉宏著,电子工业出版社,2018年7月出版)。
推荐阅读:
我的2022届互联网校招分享
我的2021总结
浅谈算法岗和开发岗的区别
互联网校招研发薪资汇总
2022届互联网求职现状,金9银10快变成铜9铁10!!
公众号:AI蜗牛车
保持谦逊、保持自律、保持进步
发送【蜗牛】获取一份《手把手AI项目》(AI蜗牛车著)
发送【1222】获取一份不错的leetcode刷题笔记
发送【AI四大名著】获取四本经典AI电子书
神经网络最本质的理论基础是什么?相关推荐
- 王维嘉:神经网络的本质是在数据里面提取相关性
https://www.toutiao.com/a6674548769591132683/ 3月30日下午消息,2019中国(深圳)IT领袖峰会在今日举行,在青年领袖论坛环节,CEG Ventures ...
- 神经网络的节点代表什么,神经网络的本质是什么
BP神经网络的核心问题是什么?其优缺点有哪些? . 人工神经网络,是一种旨在模仿人脑结构及其功能的信息处理系统,就是使用人工神经网络方法实现模式识别.可处理一些环境信息十分复杂,背景知识不清楚,推理规 ...
- 通用近似定理(学习笔记)
通用近似定理(学习笔记) -----用任意深度的神经网络逼近函数,张玉宏的<深度学习之美>阅读笔记. 发展历程 "通用近似定理"1989年被提出[1],其中George ...
- 【数据挖掘】神经网络 后向传播算法 ( 线性回归与逻辑回归 | 单个神经元本质及逻辑 | 神经网络每一层分析 | 神经网络矩阵形式 | 线性变换与非线性变换 )
文章目录 I . 线性回归 与 逻辑回归 II . sigmod 非线性激活函数 III . 神经元单元 逻辑 IV . 单个 神经元单元 总结 V . 神经网络 每一层分析 VI . 神经网络 矩阵 ...
- 反向传播算法的理论基础,神经网络反向传播算法
1.如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(Artificial Neural Network,ANN)的最常用且最有效的算法.其 ...
- BP神经网络的数学本质
原创文章,转载请说明来自<老饼讲解-BP神经网络>:bp.bbbdata.com 目录 一. 隐神经元与tansig函数 二 .BP本质 三.BP神经网络的曲线拟合要素 (一) 误差函数 ...
- 神经网络反向传播的作用,双向传播的神经网络
如何理解神经网络里面的反向传播算法 反向传播算法(Backpropagation)是目前用来训练人工神经网络(ArtificialNeuralNetwork,ANN)的最常用且最有效的算法. 其主要思 ...
- 人工神经网络的算法原理,对人工神经网络的理解
什么是人工神经网络及其算法实现方式 人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点. 它从信息处理角度对人脑神经元网 ...
- 如何简单形象又有趣地讲解神经网络是什么?(知乎) 说的人很多,理解很充分
https://www.zhihu.com/question/22553761 如何简单形象又有趣地讲解神经网络是什么? 有网友在 Quora 上提问:对于那些非计算机科学行业的人,你会如何向他们解释 ...
最新文章
- 类继承中的构造函数与析构函数
- android适配右到左布局注意事项
- 用android studio测量距离,Android studio 百度地图开发(6)Marker绑定事件、计算两点距离...
- python第三方库下载-python常用第三方库介绍及下载
- Python中使用元组对ndarray矩阵的某个维度进行选取和调序的操作
- centos(linux) 下如何查看端口占用情况及杀死进程
- VB 调用 QuickTestpro 脚本
- C# 程序执行时间差
- 国内一些大公司的开源项目
- Wannafly交流赛1: B. 白兔的式子(组合数)
- Android自定义ToolBar布局
- BZOJ 1087 [SCOI2005]互不侵犯King(状压DP)
- Uniapp微信雪糕刺客单页小程序源码
- 一个计算机爱好者的不完整回忆(十二)下载软件
- 转载:全志问题解决方法
- Go官方的使用Gin开发Web服务教程 | Gopher Daily (2021.08.19) ʕ◔ϖ◔ʔ
- iOS-图文混排方案-2种方案
- 直播电商平台开发,点击让窗口抖动动画效果
- 自动化测试工具 Java等
- 如何理解一台服务器可以绑定多个ip,一个ip可以绑定多个域名