长期以来,一直难以很好地理解为什么神经网络必须是非线性的,或者更确切地说,就是ReLU层的计算作用是什么但是实际上有一个非常直接的解释,可能有助于其他人绕开这个抽象主题,我来为大家科普一下关于为什么要加深神经网络呢 神经网络为什么是非线性的?以下内容希望对你有帮助!

为什么要加深神经网络呢 神经网络为什么是非线性的

为什么要加深神经网络呢 神经网络为什么是非线性的

长期以来,一直难以很好地理解为什么神经网络必须是非线性的,或者更确切地说,就是ReLU层的计算作用是什么。但是实际上有一个非常直接的解释,可能有助于其他人绕开这个抽象主题。

当我们尝试进行深度学习时,可能会遇到很多抽象概念和数学。这与经典编程是如此不同。

在经典编程中,我们可以阅读其他人的代码,并了解它应该做什么(至少有一定的经验)。语义(代码用于什么)和技术实现之间有着紧密的联系。甚至可以通过给变量,类和方法说出名称来加深这种联系。

深度学习与众不同

查看纯神经网络实现并不能告诉我们系统应该解决哪个问题。我们可以通过查看输入和输出形状来做一些猜测工作,但是在不同层之间只是对数字进行混洗。需要代码外的上下文信息以使其有意义。

关于神经网络,最令人困惑的是,对数据执行的简单数学运算(主要是乘和加)与神经网络能够执行的复杂任务(例如分类或生成图像)之间存在明显的矛盾。

最简单的图层

然后,这些ReLU层执行所有操作中最简单的数学运算:将所有负值替换为零。

但是,如果没有这些简单的操作,神经网络将无法执行任何有意义的任务。

不幸的是,通过这些小操作,神经网络就变成了数学家所说的非线性。解释神经网络为什么必须是非线性的一个经常考虑的示例是不能由线性系统解决的XOR门。但是,这个相当技术性的示例没有给出ReLU层(或相应的非线性层)的语义理由(在算法上)。

因此,以下是对非线性层的一些看法:

非线性层使神经网络能够学习制定条件决策来控制计算流程。

要了解这一点,我们必须回到经典编程

在经典编程中,我们实现了用于解决问题的算法。算法基本上是一组规则和指令,可以解决我们的问题。指令主要有两类

  1. 操纵数据的指令。
  2. 通过做出决定来控制程序流程的指令(例如,如果……则……)

(我们还可以移动数据,存储或加载数据等。但是这里我们并不关心这种实用程序任务。)

算法的一个重要属性是,我们能够以简单的散文(而不仅仅是代码)显式地写下规则和指令。

那么,为什么我们要进行深度学习呢?

我们从古典编程转向解决问题的深度学习的两个主要原因:

  1. 我们无法明确写下解决问题的规则(算法)。例如,我们无法写下检测图像中对象的规则。
  2. 我们知道规则,但是实现它们在计算上过于昂贵。因此,采用深度学习作为近似值。

因此,我们要做的是实现学习算法,而不是解决实际问题的算法。

神经网络需要两种指令

现在,随着神经网络取代经典算法,需要实现数据处理和决策指令。

  1. 数据操作由线性层完成。例如,它们可以强调数据中的模式(就像卷积过滤器一样)。
  2. 非线性层通过删除不那么重要的数据点来做出决策。
怎么做?

当然,ReLU或其他非线性层不是经典的if / then语句的实例。决策更加微妙。使用非线性层,系统能够学习线性层中的参数,这些参数迫使重要值变为正值,而使次要值变为负值。

从这个意义上说,该系统能够学习制定条件决策和控制计算流程。

决策本质上是非线性的

应该注意的是,我们可以做出的任何决定本质上都是非线性的。做出决定意味着比较不同的选择,并且只追求其中的一个。其他选项在决策点突然终止。

因此,难怪神经网络必须是非线性的,因为它们必须在控制计算流程方面做出决定。

与经典机器学习有什么区别?

传统的机器学习算法通常被认为是线性的,但这只是部分正确。区别在于决策点(以及因此非线性)已明确编程。

例如,在决策树中拆分数据或在k均值算法中将数据点分配给某些群集是非线性行为。但是决策点和标准是明确的,因此可以理解。因此,数据的完整控制流是固定的。

结果,这些算法是有限的,因为它们不能学习用于改变计算流程的新的或不同的决定。

,