神经网络是一个由其参数解释的分类模型。
让我们回到基础。考虑具有 N 个输入和一个输出的单个神经元。它应用以下形式的功能:
x = g(所有输入的加权和)
,其中 g 是一些非线性函数,例如 sigmoid 或 tanh 或 ReLU - 确切的函数确实会影响性能,但与我们的讨论无关。
问题在于类之间的分离面是线性的(假设分类基于 x>0.5 之类的东西)。
问题在于,许多现实世界的问题都不是线性的。它们实际上是极其复杂的问题,因此我们需要一个能够估计这种高度非线性函数的模型。
现在,让我们想象一个小型神经网络,第一层有 2 个神经元,输出层有 1 个神经元。
输入层的 2 个神经元将有它们的输出:
x_1 = g(所有输入的加权和)
x_2 = g(所有输入的加权和)
(g 通常对于一层上的所有神经元都是相同的。它没有必须,但它没有多大意义。对于剩下的讨论,让我们假设g 到处都是一样的)。
现在,x_1 和 x_2 是另一层神经元的输入,因此它的输出(以及整个网络的输出)为:
X = w_1*x_1 + w_2*x_2 = w_1*g(所有输入的加权总和)+ w_2*g(所有输入的加权总和)
这是由具有 N 个输入的神经网络估计的函数,输入层上有 2 个神经元,输出层有一个神经元。当然,它由 2n+2 个权重参数化:每个输入神经元有 n 个权重,输出神经元有 2 个权重。
如您所见,这个表达式很难写在纸上(在 StackOverflow 上更难写),而且对于深度神经网络来说,它会变得极度复杂。然而,从本质上讲,所有的神经网络都是这种长但相对简单的表达式的简单图形模型,其中我们对每个节点的输入进行加权求和并应用非线性函数。
由于这种模型能够估计高度非线性函数,因此深度神经网络的趋势正在上升。从技术上讲,通过universal approximation theorem,我们只需要一个隐藏层(想想之前的网络,在输入层上有 2 个神经元,而在该层上有超过 2 个神经元)。但事实证明,设计火车是非常不切实际的(部分原因是该层需要大量的神经元)。于是人们开始在另一个之上堆叠越来越多的层,我们得到了我们现在拥有的复杂架构:加法、乘法和 g 的大型链。