具有线性激活函数的神经网络可以产生线性函数的连接吗?
无论您将多少层投入网络,线性激活都无法像您显示的那样分离数据。
如果我们有多个线性激活的层,每个层相互馈送,前一层的神经元将计算输入的一些加权和并将其作为输入发送到下一层,下一层的神经元也将计算加权和该输入,反过来,它基于另一个线性激活函数触发。
不管有多少层和神经元,如果本质上都是线性的,那么最后一层的最终激活函数也是第一层输入的线性函数。
这意味着任何或所有这些层都可以用一层代替。这完全失去了堆叠层的优势,因为任何多层网络都等效于具有线性激活的单层,假设线性函数以线性方式组合仍然是另一个线性函数。
使用Tensorflow playground可视化这种混乱的好方法,它具有与您的数据类似的螺旋数据集。
与上一个链接中该数据的线性激活函数的失败相比,使用可以在 100 次左右迭代内分离数据的 Tanh 激活函数检查这个小得多的网络。
有关激活函数的进一步参考,请查看此博客文章。
由于我无法发表评论,因此对以前的答案有一些警告。
例如,如果您事先知道该变量的预期边界函数是什么,那么您可以先对其进行转换。例如,如果您知道一个特征应该是正弦的,您可以使用首先然后期望变量是线性的。那时它将拟合一个线性函数并改为求解幅度。当然,在大问题中,这可能是不切实际的,但仍然是可能的。
二次数据也是如此。我可以为每个看起来像的连续变量添加 1 个新功能并捕获任何二次依赖。
您显示的示例中的另一个解决方案是,如果您知道数据是分段的,您可以训练 3 个小型、易于训练的 NN,例如具有不同边界。在每次新的培训中,您都会为您的功能设置新的界限,并查看哪个会产生最佳结果。在您的情况下,这将接近, 和. 你可以说这是一个单一的分段神经网络,就像任何传统的分段函数一样。虽然最后一种方法看起来非常简单/不切实际,但实际上是在实践中完成的。例如,在自动驾驶中,可以训练一个单独的神经网络来进行物体检测(人类、灯光、标志等),另一个用于不同速度、条件和转弯半径的方向盘定位,另一个用于如何加速等,然后该系统运行所有这些并将它们的输出组合成一辆完整的驾驶汽车。然后,每个输出都是它处理“驾驶空间”的哪个区域的难题的边界。
因此,虽然我会说简单的答案是否定的,但如果您有一些先验知识,仍然有解决方法。
作为对通用近似定理的回应,请参阅此wiki,其中说
George Cybenko 在 1989 年证明了该定理的第一个版本,用于 sigmoid 激活函数。后来证明,当且仅当激活函数不是多项式时,深度神经网络类是通用逼近器。”