首先,我们不会将线性函数相互堆叠以获得非线性函数。NN 可能永远不会那样工作有一个明确的原因:将线性函数相互堆叠会再次产生线性函数。
神经网络非线性的原因在于线性函数后面的激活函数!然而,原则上你是对的:我们只是将很多逻辑回归(虽然不是线性回归!)相互叠加,然后...... tadaa:我们从中得到了一些好处......这公平吗?事实证明(从理论的角度来看)它实际上是公平的。更糟糕的是:使用著名且广为人知的 Stone-Weierstrass 定理,我们简单地证明了只有一个隐藏层且在最终节点处没有输出函数的神经网络足以逼近任何连续函数(相信我,连续函数可能很难看)野兽,见“魔鬼楼梯”:https ://en.wikipedia.org/wiki/Cantor_distribution) 在形式的间隔上[a,b](只有一个隐藏层且在最后一个节点没有输出函数的 NN 正是以下形式的函数x↦=b+a1ϕ1(x)+...+alϕl(x)在哪里l是隐藏层的大小,即逻辑函数中的多项式,它们根据定义形成代数!)。即“通过构造”,NN 非常具有表现力。
那我们为什么要使用深度神经网络呢?
原因是上面的 SW 定理只保证有足够大的层大小,以便我们可以接近我们的(希望是连续的)目标函数。但是,所需的层大小可能非常大,以至于没有计算机可以处理这种大小的权重矩阵。具有更多隐藏层的神经网络似乎是“准确性”和可计算性之间的良好折衷。我不知道有任何理论结果表明,与仅仅增加单个隐藏层的大小相比,当放置更多隐藏层时,NN 的表达能力会增长“多少”,但网络上可能有一些资源...
我们能真正理解深度神经网络吗?
示例问题:为什么 NN 准确地将这种情况预测为 TRUE,而将另一种类似情况预测为 FALSE?为什么它认为这个客户比另一个客户更有价值?我真的不相信。它伴随着模型的复杂性,您无法再合理地解释它......我只听说这仍然是一个活跃的研究领域,但我不知道任何资源......
是什么让 NN 在所有模型中如此独特?
这些天我们如此多地使用神经网络的真正原因是因为以下两个原因:
- 它们具有自然的“流媒体”属性。
- 我们可以在多个方向将它们拉到最大。
1. 我的意思是给定一个训练集T, 一个神经网络f在这个集合上训练的T和一些新的训练样本T′,我们可以很容易地将这些训练样本包含到 NN 中,只需继续梯度下降/反向传播算法,同时只从T′为培训。强化学习的整个领域(用于赢得井字游戏、乒乓球、国际象棋、围棋等游戏,许多不同的 Atari 游戏仅使用一个模型等)都基于此属性。人们试图将这种流属性注入其他模型(例如梯度提升),但它并没有那么自然地出现,并且不像 NN 设置那样计算成本低。
2. 我的意思是人们训练神经网络做最奇怪的事情,但原则上他们只是使用相同的框架:将平滑函数堆叠在一起,然后让计算机(即 PyTorch/Tensorflow)为你做脏数学,比如计算损失函数对权重的导数。一个例子是这篇论文人们已经使用了 RL 方法,并且还通过教它如何在内存堆栈上操作(!)来改进 NN 的架构来学习化学物质的复杂语言。尝试通过梯度提升来做到这一点;-) 他们必须这样做的原因是化学语言至少与括号语言一样“难学”(即每个左括号在单词后面都有一个右括号) ) 因为人们用来描述分子的 SMILES 语言包含符号“(”和“)”。从理论计算机科学(乔姆斯基层次结构)中,人们知道不能用常规自动机来描述这种语言,但需要下推自动机(即具有堆栈存储器的自动机)。这就是他们(我猜)向神经网络教授这个奇怪的东西的动机。