python绘制激活函数 python 激活窗口 输入( 二 )


Sigmoid和 tanh 函数的一个普遍问题是它们值域饱和python绘制激活函数了。这意味着,大值突然变为1.0,小值突然变为 -1或0 。此外,函数只对其输入中间点周围的变化非常敏感 。
无论作为输入的节点所提供的求和激活是否包含有用信息,函数的灵敏度和饱和度都是有限的 。一旦达到饱和状态 , 学习算法就需要不断调整权值以提高模型的性能 。
最后,随着硬件能力的提高,通过 gpu 的非常深的神经网络使用Sigmoid 和 tanh 激活函数不容易训练 。在大型网络深层使用这些非线性激活函数不能接收有用的梯度信息 。错误通过网络传播回来,并用于更新权重 。每增加一层,错误数量就会大大减少 。这就是所谓的 消失梯度 问题,它能有效地阻止深层(多层)网络的学习 。
虽然非线性激活函数的使用允许神经网络学习复杂的映射函数 , 但它们有效地阻止python绘制激活函数了学习算法与深度网络的工作 。在2000年代后期和2010年代初期 , 通过使用诸如波尔兹曼机器和分层训练或无监督的预训练等替代网络类型,这才找到了解决办法 。
为了训练深层神经网络,需要一个激活函数神经网络,它看起来和行为都像一个线性函数,但实际上是一个非线性函数 , 允许学习数据中的复杂关系。该函数还必须提供更灵敏的激活和输入,避免饱和 。
因此,ReLU出现了, 采用 ReLU 可以是深度学习革命中为数不多的里程碑之一。ReLU激活函数是一个简单的计算 , 如果输入大于0,直接返回作为输入提供的值;如果输入是0或更?。?返回值0 。
我们可以用一个简单的 if-statement 来描述这个问题 , 如下所示:
对于大于零的值,这个函数是线性的,这意味着当使用反向传播训练神经网络时,它具有很多线性激活函数的理想特性 。然而,它是一个非线性函数,因为负值总是作为零输出 。由于矫正函数在输入域的一半是线性的,另一半是非线性的,所以它被称为 分段线性函数(piecewise linear function )。
我们可以很容易地在 Python 中实现ReLU激活函数 。
我们希望任何正值都能不变地返回,而0.0或负值的输入值将作为0.0返回 。
下面是一些修正的线性激活函数的输入和输出的例子:
输出如下:
我们可以通过绘制一系列的输入和计算出的输出,得到函数的输入和输出之间的关系 。下面的示例生成一系列从 -10到10的整数 , 并计算每个输入的校正线性激活,然后绘制结果 。
运行这个例子会创建一个图,显示所有负值和零输入都突变为0.0,而正输出则返回原样:
ReLU函数的导数是斜率 。负值的斜率为0.0 , 正值的斜率为1.0 。
传统上 , 神经网络领域已经不能是任何不完全可微的激活函数 , 而ReLU是一个分段函数 。从技术上讲,当输入为0.0时 , 我们不能计算ReLU的导数,但是,我们可以假设它为0 。
tanh 和 sigmoid 激活函数需要使用指数计算 ,  而ReLU只需要max(),因此他 计算上更简单,计算成本也更低。
ReLU的一个重要好处是,它能够输出一个真正的零值。这与 tanh 和 sigmoid 激活函数不同,后者学习近似于零输出 , 例如一个非常接近于零的值 , 但不是真正的零值 。这意味着负输入可以输出真零值,允许神经网络中的隐层激活包含一个或多个真零值 。这就是所谓的稀疏表示,是一个理想的性质,在表示学习,因为它可以加速学习和简化模型 。
ReLU看起来更像一个线性函数,一般来说,当神经网络的行为是线性或接近线性时,它更容易优化。

推荐阅读