Activation functions
-
Sigmoids
Sigmoid函数的导数最大值为0.25。这意味着当使用sigmoid单位执行反向传播时,返回到网络的错误将在每一层缩小至少75%。对于靠近输入层的图层,如果你有很多图层,那么权重更新会很小,而这些权重需要很长时间才能进行训练。由于这个原因,sigmoids已经失去了对隐藏单位的激活。
-
ReLUs (Rectified Linear Units)
Instead of sigmoids, most recent deep learning networks use rectified linear units (ReLUs) for the hidden layers. A rectified linear unit has output 0 if the input is less than 0, and raw output otherwise. That is, if the input is greater than 0, the output is equal to the input. Mathematically, that looks like
最近的深度学习网络使用整流线性单元(ReLU)代替sigmoids,用于隐藏层。如果输入小于0,则ReLUs输出0,否则输出原始值。也就是说,如果输入大于0,则输出等于输入。在数学上,这看起来像
因此,如果 ,然后 . 如果 ,然后 从图形上看,它看起来像:
image.pngReLU是最简单的非线性激活函数。当输入为正数时,导数为1,因此您没有看到sigmoids反向传播误差的消失效应。研究表明,ReLU可以为大型网络提供更快的训练。像TensorFlow和TFLearn这样的大多数框架都可以在隐藏层上使用ReLU,因此您不需要自己实现它们。
缺点
大梯度可以设置权重,使得ReLU单元始终为0.这些“dead”单元将始终为0,并且在训练中将浪费大量计算。
来自Andrej Karpathy的CS231n课程:
不幸的是,ReLU单位在训练期间可能很脆弱并且可能“dead”。例如,流过ReLU神经元的大梯度可能导致权重更新,使得神经元永远不会再次激活任何数据点。如果发生这种情况,那么流经该单元的梯度将从该点开始永远为零。也就是说,ReLU单元可以在训练期间不可逆转地dead,因为它们可以从数据流形中被淘汰。例如,如果学习率设置得太高,您可能会发现多达40%的网络可能“dead”(即永远不会在整个训练数据集中激活的神经元)。通过适当设置学习率,这将不是一个问题。
-
Softmax
相比用于回归的神经网络和二元分类。通常你会发现你想要预测一些输入是否属于许多类中的一个。这是一个分类问题,但sigmoid不再是最佳选择。相反,我们使用softmax函数。softmax函数将每个单元的输出压缩到介于0和1之间,就像一个sigmoid。它还将每个输出分开,使得输出的总和等于1. softmax函数的输出等于分类概率分布,它告诉您任何类的真实概率。
这与正常sigmoid之间唯一真正的区别是softmax对输出进行归一化,使它们总和为1。在这两种情况下,您都可以放入一个向量并输出一个向量,其中输出是相同大小的向量,但所有值都在0和1之间压缩。您将使用带有一个输出单元的sigmoid进行二进制分类。但是,如果您正在进行多项分类,则需要使用多个输出单位(每个类一个)和输出上的softmax激活。
例如,如果你有一个softmax函数的三个输入,比如说有三个输出单元的网络,它看起来像:
image.png数学上softmax函数如下所示 是输出层输入的向量(如果有10个输出单位,则有10个元素)。然后再次,索引输出单位。
image.png为了更好地理解这一点,考虑训练网络以识别图像中的手写数字并对其进行分类。网络将有10个输出单元,每个数字0到9一个。然后,如果您输入数字4的图像(见下文),则将激活对应于数字4的输出单元。
image.png来自MNIST数据集的图像
建立这样的网络需要10个输出单元,每个数字一个。每个训练图像都标有真实数字,网络的目标是预测正确的标签。因此,如果输入是数字4的图像,则对应于4的输出单元将被激活。
对于上面的示例图像,softmax函数的输出可能如下所示:
用于预测上述数字的网络的softmax输出示例.png图像看起来最像数字4,因此您可以获得很多概率。然而,这个数字看起来有点像7而有点像没有完成循环的9。所以,最有可能是4,但也有可能是7或9。
softmax可用于任意数量的类。正如您将在下面看到的,它将用于预测两类情绪,即积极或消极。它也用于成百上千个类,例如在有数百种不同可能对象的对象识别问题中。
网友评论