人工智能
数学
机器学习
深度学习(Deep Learning)

如何从数学或者物理意义上理解神经网络?

关注者
62
被浏览
30,599

10 个回答

神经网络模拟人类神经元和脑科学的各种结合,不太懂,这里就不说了。

从数学上,我来说一下作为一个小白自认为把神经网络搞懂的过程叭!

首先呢,肯定是Universal approximation theorem

A feedforward network with a linear output layer and at least one hidden layer with any “squashing” activation function (such as the logistic sigmoid activation function) can approximate any Borel measurable function from one finite-dimensional space to another with any desired nonzero amount of error, provided that the network is given enough hidden units.

波莱尔可测函数属于实变函数里的内容,超纲啦,我们可以来看一下更亲民的版本

在实数域 R^n 上任意有界闭区间的连续函数都可以被只有一层隐层的前馈神经网络无限接近。

无限接近不太严谨,,翻译成数学语言

给定一个连续函数 f(x) ,对 \forall \varepsilon > 0 , 存在一个只有一层隐层的前馈神经网络 g(x) ,使得

|f(x) - g(x)| < \varepsilon, \forall x

类比经验分布函数依概率收敛于总体分布函数,对任意连续函数 f(x) 可以切分成很多小柱子,当柱子切分的非常细的时候,我们可以达到非常高的拟合精度。

即,给定一个连续函数 f(x) ,对 \forall \varepsilon > 0 , \exists N ,使得

|f(x) - \sum_{i=1}^{N}g_i(x)| < \varepsilon, \forall x

其中 g_i(x) 为如下的小柱子函数。

在前馈神经网络中,每个神经元接受上一层的所有神经元的输出,计算加权和,具有很好的可加性,所以我们可以把问题拆解成去拟合每一个单独的小柱子 g_i(x)

回顾神经元的输出(加sigmoid激活函数), \sigma (x) = \frac{1}{1+e^-(\omega x + b)}

对它求导 \sigma '(x) = \frac{\omega}{(1+e^{-(\omega x + b)})^2}

x = - \frac{b}{\omega} , \omega \rightarrow \infty 时, \sigma ' (x) \rightarrow \infty

平滑圆润的sigmoid函数此时近似成阶梯函数

两个阶梯函数叠加,就组成上面说的小柱子。

以上,可视化的证明了任意一元连续函数(一个输入一个输出)可以被只有两层隐层的前馈神经网络无限逼近。当然啦,多元连续函数(n个输入m个输出)也可以以此类推。

追求极致的我撸了一把更为严谨的严格证明,只有一个感受就是神经网络确实厉害呀。。

理解了神经网络超强的表达力之后,再手推了经典网络的反向传播。相比上面的证明,这个就轻松太多啦,主要就是一个链式法则,一个随机梯度下降,不管是CNN还是LSTM只要仔细一点就好了。

看到这里呢,我就觉得完全掌握了神经网络的精髓,内心OS:神经网络深度学习不就这样叭。。。(是的,我就是一个理论派)


--------------------------------------------分割线-------------------------------------------------

等真正工作开始炼丹实践的时候,,发现too young too naive。。。

才明白为什么前馈神经网络都这么强了还要搞那么多复杂的模型结构,各种收敛问题、过拟合,梯度弥散,灾难性遗忘等等。。。

炼丹多年后,,

不要试图去理解神经网络,永远都理解不了它┗( T﹏T )┛


参考&图片截取自:

neuralnetworksanddeeplearning.com

hackernoon.com/illustra

deeplearningbook.org/co

en.wikipedia.org/wiki/U

发布于 2020-03-18 21:54

之前写了一篇文章,正好回答一波。神经网络最简单的模型是全连接神经网络,所以从他的反向传播原理出发来理解整体的训练过程(梯度下降),这就是从数学或物理意义上理解神经网络。

4.2.2 全连接神经网络原理

光看名字,可能大家并不了解这个网络是干啥的,那么笔者先给大家附上一张图,如图 4.2所示。它作为神经网络家族中最简单的一种网络,相信大家看完它的结构之后一定会对它有个非常直观的了解。

图 4.2 全连接神经网络示意图

对,就是这么一个东西,左边输入,中间计算,右边输出。可能这样还不够简单,笔者给大家画一个更简单的运算示意图,如图 4.3所示。

图 4.3 全连接神经网络运算示意图

不算输入层,上面的网络结构总共有两层,隐藏层和输出层,它们“圆圈”里的计算都是公式(4.1)和(4.2)的计算组合:

每一级都是利用前一级的输出做输入,再经过圆圈内的组合计算,输出到下一级。

看到这里,可能很多人会疑惑,为什么要加上f(z)这个运算,这个运算的目的是为了将输出的值域压缩到(0,1),也就是所谓的归一化,因为每一级输出的值都将作为下一级的输入,只有将输入归一化了,才会避免某个输入无穷大,导致其他输入无效,变成“一家之言”,最终网络训练效果非常不好。

此时,有些记忆力比较好的读者可能会想,反向传播网络?反向去哪了?对的,这个图还没画完整,整个网络结果结构应该是这样,如图 4.4所示。

图 4.4 反向传播示意图

那有些读者又会提出新的问题了,那反向传播的东西到底是什么呢?目的又是什么呢?这里,所有读者都要有这么一点认识,神经网络的训练是有监督的学习,也就是输入X 有着与之对应的真实值Y ,神经网络的输出Y 与真实值Y 之间的损失Loss 就是网络反向传播的东西。整个网络的训练过程就是不断缩小损失Loss 的过程。为此,就像高中一样,我们为了求解某个问题,列出了一个方程,如公式(4.3)~ (4.5):

上述的公式经过化简,我们可以看到A、B、C、D、E、F都是常系数,未知数就是w 和b ,也就是为了让Loss 最小,我们要求解出最佳的w 和b 。这时我们稍微想象一下,如果这是个二维空间,那么我们相当于要找一条曲线,让它与坐标轴上所有样本点距离最小。比如这样,如图 4.5所示。

图 4.5 曲线拟合图

同理,我们可以将Loss 方程转化为一个三维图像求最优解的过程。三维图像就像一个“碗”,如图 4.6所示,它和二维空间的抛物线一样,存在极值,那我们只要将极值求出,那就保证了我们能求出最优的(w , b)也就是这个“碗底”的坐标,使Loss 最小。

图 4.6 三维图像示意图

那说了这么多,我们应该如何求解呢?


读者们是否还记得上高中的时候,当我们列完函数方程之后,做的第一件事就是对这个函数求导,是的,这里也一样,要求极值,首先求导。不过,我们高中没有接触过二元凸函数的求导,但是相信翻阅此书的读者应该都是大学生,这时候要拿出高等数学这本书来了,偏导数在这里隆重登了场。偏导数简单来讲,也就是对X,Y分别求导,在求导过程中,把其他的未知量当成常数即可。


好了,理论知识补充完了,这时候我们想象自己在一座山上,要想从山上最快地去到谷底,那就要沿着最陡峭的地方往下走。这个最陡峭的地方,我们叫做梯度,像不像我们对上面那个“碗”做切线,找出最陡的那条切线,事实上我们做的就是这个,求偏导就是这么一个过程。

我们每走一步,坐标就会更新:

当然,这是三维空间中的,假如我们在多维空间漫步呢,其实也是一样的,也就是对各个维度求偏导,更新自己的坐标。

其中,w的上标i表示第几个w,下标n表示第几步,α是学习率,后面会介绍α的作用。所以,我们可以将整个求解过程看做下山(求偏导过程),为此,我们先初始化自己的初始位置。

这样我们不断地往下走(迭代),当我们逐渐接近山底的时候,每次更新的步伐也就越来越小,损失值也就越来越小,直到达到某个阈值或迭代次数时,停止训练,这样找到 就是我们要求的解。

我们将整个求解过程称为梯度下降求解法

这里还需要补充的是为什么要有学习率α,以及如何选择学习率α?

通常来说,学习率是可以随意设置,你可以根据过去的经验或书本资料选择一个最佳值,或凭直觉估计一个合适值,一般在(0,1)之间。这样做可行,但并非永远可行。事实上选择学习率是一件比较困难的事,图 4.7显示了应用不同学习率后出现的各类情况,其中epoch为使用训练集全部样本训练一次的单位,loss表示损失。

图 4.7 学习率变化示意图

可以发现,学习率直接影响我们的模型能够以多快的速度收敛到局部最小值(也就是达到最好的精度)。一般来说,学习率越大,神经网络学习速度越快。如果学习率太小,网络很可能会陷入局部最优;但是如果太大,超过了极值,损失就会停止下降,在某一位置反复震荡。

也就是说,如果我们选择了一个合适的学习率,我们不仅可以在更短的时间内训练好模型,还可以节省各种运算资源的花费。

如何选择?业界并没有特别硬性的定论,总的来说就是试出来的,看哪个学习率能让Loss收敛得更快,Loss最小,就选哪个。

发布于 2020-03-01 10:45

谢邀,神经网络范畴很大呀,理解也可以从不同角度理解。

比如,按照万能近似定理的理解,神经网络可以逼近任意连续有界函数,但这个逼近是没有讨论泛化的,如果你仔细读了万能近似定理的证明并且读明白了的话,你会发现其实约等于用MLP构造了一个分段线性函数或者说查找表。这个基本上就是记录了要经过的所有点,并不会泛化。

如果要泛化,一般需要训练算法,不同泛化方法背后的机制肯定是完全不同的。

如果是Hinton 06年的时候DBN那种搞法,我记得之前看到过一篇论文论述了DBN这种堆叠RBM用能量函数搞的训练方法和物理上重整化有相似性。

当然现在主流的还是用梯度下降训练,这个就又是另一个故事了,目前能说得清的很有限,推荐看一下以色列教授Tishby的一系列论文,一方面从信息论角度,把梯度下降训练的神经网络解释为逐层降低输入中包含的但输出中不包含的信息,这个是他的信息瓶颈理论。当然他也做了一些梯度下降动力学方面的研究。不过基本还是对简单MLP做的,现在那些结构特别炫酷的DNN模型,你要是能用数学解释清楚,我觉得图灵奖可以颁给你了。

发布于 2020-03-01 17:09

大部分神经网络都是黑箱,不容易直观解释。

有一些神经网络的部分结构,有着较为明确的解释。

例如, 深度残差收缩网络 [1] [2]的软阈值化层,是用于消除冗余信息的,具体可以参考这个网页 [3]

(面向强噪、高冗余数据的)残差收缩网络


参考

  1. ^M. Zhao, S. Zhong, X. Fu, B. Tang, M. Pecht, Deep residual shrinkage networks for fault diagnosis, IEEE Transactions on Industrial Informatics, vol. 16, no. 7, pp. 4681-4690, 2020.  https://ieeexplore.ieee.org/document/8850096/
  2. ^深度残差收缩网络:借助注意力机制实现特征的软阈值化  https://zhuanlan.zhihu.com/p/121801797
  3. ^深度残差收缩网络:从删除冗余特征时的灵活程度进行讨论  https://my.oschina.net/u/4505302/blog/3230965
编辑于 2023-08-20 19:55

Deep network is physical.

编辑于 2020-03-20 14:55

百度一下相关的论文读读就行了……

多层感知机可以理解为线性回归+逻辑回归+线性回归+逻辑回归

发布于 2020-03-01 02:17

看你想要怎么“理解”。这个问题在学术界依然是open的。这几年有neural ode的角度把神经网络和各种DE联系起来,另外还有neural tangent kernel和mean field的角度,这些是寻求神经网络结构的interpretation。把各种各样的东西比如数值算法和优化算法写出神经网络的形式也算是一种研究。还有人做误差分析,以及loss function landscape的分析来解释为什么这个非凸问题却可以得到很好的结果。总之这个问题的答案目前还不是很明了。

发布于 2020-05-06 01:07

就是对原始数据经过一层(或多层)线性变换外加一层非线性转换(激活函数)构成的"抽像"数据表示,有了这些表示(表征)之后,再通过全连接(线性转换)和打分函数(softmax),就得出这个抽象表征具体的物体类别的概率向量,取概率最大的那个项,就是最后的类别,所以说现代意义的神经网络解决的主要是抽取关键特征(尽管抽取的特征有可能不好直接用人话描述)的能力

编辑于 2020-04-12 15:33

其实可以理解为神经网络是一个拥有大量未知参数数学函数。

世界上所有的任务都可以描述一个函数的输入输出过程,比如,输入一张猫的图片,得到这是一只猫的输出结果。

训练过程就是确定各个参数的过程,确定参数后,一个数学函数就确定了。而对于函数中的各项的在具体识别过程中的作用其实没人知道,或者只能通过经验得出一些规律,有点类似中医。

以识别猫的图片来说,就是用大量的猫图片训练神经网络,让它自己总结猫的特征,或者说识别猫的经验,然后将这些特征以参数的形式确定在数学函数中,每输入一张图片调整一次参数(通过数学优化理论,使得确定的参数能让函数输出结果与猫的结果的差别最小),至于这些参数的确切作用,大部分情况下是无法理解的

发布于 2022-06-16 16:03

占个坑,以后再答


从信息的角度会比较好理解神经网络所干的事情。

我们可以将神经网络的每一层看成一次回归,回归得到的超平面便可以对上一层的信息进行分类,这样一层一层下去,我们的网络就可以提取到原始数据的比较抽象的特征,利用这些特征就可以实现有趣的事情。

编辑于 2020-05-01 00:54