繁体   English   中英

为什么 ReLU function 在 CNN 的每一层之后?

[英]Why ReLU function after every layer in CNN?

我正在介绍 Duke 提供的 Coursera 上的 ML,如果您对 ML 感兴趣,我推荐它。 本课程的讲师解释说“我们通常在神经网络的层之间包含非线性。这样做有很多原因。首先,如果它们之间没有任何非线性,连续的线性变换(完全连接的层)会折叠成一个单一的线性变换,这意味着 model 并不比单层更具表现力。另一方面,中间非线性可防止这种崩溃,从而使神经网络能够逼近更复杂的函数。” 我很好奇,如果我应用 ReLU,我们是否会丢失信息,因为 ReLU 会将每个负值都转换为 0? 那么这个变换如何比没有 ReLU 的变换更具表现力呢?

在多层感知器中,我尝试在没有 ReLU 转换的情况下在 MNIST 数据集上运行 MLP,并且性能似乎没有太大变化(使用 ReLU 为 92%,没有 ReLU 为 90%)。 但是,我仍然很好奇为什么这种转变为我们提供了更多信息而不是丢失信息。

第一点是,如果没有非线性,例如 ReLU function,在神经网络中,网络仅限于执行输入的线性组合。 换句话说,.network只能学习输入和output之间的线性关系。这意味着.network不能逼近非线性的复杂函数,例如多项式或非线性方程。

考虑一个简单的示例,其中任务是根据坐标 (x, y) 将 2D 数据点分类为属于两个类之一。 线性分类器,例如单层感知器,只能绘制一条直线来分隔两个类。 但是,如果数据点不是线性可分的,线性分类器将无法准确地对它们进行分类。 非线性分类器,例如具有非线性激活的多层感知器 function,可以绘制弯曲的决策边界并更准确地分离两个类。

ReLU function 通过引入非线性增加了 neural.network 的复杂性,这使得 .network 可以学习更复杂的数据表示。 ReLU function 定义为 f(x) = max(0, x),它将所有负值设置为零。 通过将所有负值设置为零,ReLU function 在.network 中创建了多个线性区域,这使得.network 可以表示更复杂的函数。

例如,假设您有一个包含两层的神经网络,其中第一层具有线性激活 function,第二层具有 ReLU 激活 function。第一层只能对输入执行线性变换,而第二层可以进行非线性变换。 通过在第二层中使用非线性 function,网络可以学习更复杂的数据表示。

在您的实验中,当您删除 ReLU function 时,性能没有太大变化是正常的,因为您尝试解决的数据集和问题可能不够复杂,不需要 ReLU function。换句话说,一个线性 model 可能足以解决该问题,但对于更复杂的问题,ReLU 可能是实现良好性能的关键组件。

还需要注意的是,ReLU 并不是唯一引入非线性的 function,也可以使用其他非线性激活函数,例如 sigmoid 和 tanh。 激活 function 的选择取决于您正在处理的问题和数据集。

Neural.networks 的灵感来自大脑的结构。 大脑中的神经元通过使用电脉冲和化学信号在大脑的不同区域之间传递信息。 有些信号很强,有些则不是。 信号微弱的神经元不会被激活。

Neural.networks 以相同的方式工作。 有些输入特征信号弱,有些信号强。 这些取决于功能。 如果它们很弱,相关的神经元就不会被激活,也不会向前传递信息。 我们知道某些特征或输入对于 label 的贡献并不是关键因素。出于同样的原因,我们不会为 neural.networks 中的特征工程而烦恼。 model 负责处理。 因此,激活函数在这里提供帮助并告诉 model 哪些神经元以及它们应该传输多少信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM