计算机系统应用教程网站

网站首页 > 技术文章 正文

激活函数快速概述

btikc 2024-09-05 12:32:56 技术文章 9 ℃ 0 评论

每个神经元的正向传播步骤计算输入的加权和加上偏差:

然后应用激活函数A在每个神经元处生成输出:

激活函数执行Y 的非线性变换,该范围将基于某个阈值确定神经元是否将触发。将许多这些神经元堆叠在一起,最终得到一个神经网络。

非线性变换是激活函数的重要特性。如果你的激活函数是线性的,那么无论你的神经网络中有多少层,最终结果仍然是线性函数。

有许多激活函数各有其优缺点。以下是当今最常用激活函数。

sigmoid

sigmoid激活函数定义如下:

最初常用于隐藏层和outer层,现在主要用于outer层。它介于0和1之间,是二元分类问题的理想选择。

由于速度的原因,隐层中sigmoid函数的使用减少了。这个函数遇到了所谓的梯度消失问题。看看下面的图。在负的和正的极端情况下导数都接近于0。这给深度神经网络带来了一个问题,因为模型停止学习或以非常小的速度学习,从而成倍地增加了训练时间。

在使用sigmoid激活函数时,反向传播也没有得到优化。在预处理步骤中,通常将值归一化为均值0,以提高梯度法的效率。以0.5为中心的sigmoid函数在这方面没有帮助。

由于上述原因,sigmoid函数现在主要用于outer层中以进行二元分类任务。

sigmoid函数的向量化python实现如下:

SOFTMAX

当处理多类分类问题时,该函数通常用于神经网络的输出层。

与sigmoid函数类似,Softmax将其输入转换为0到1之间的范围。它用所有类的指数和除以每一项的e来归一化输出。结果是一个分类概率分布。

最有可能为True的类是概率最大的类。很容易看出为什么,这是在输出层选择多类分类的函数,将网络的输出转化为分类概率分布。

Softmax的公式如下:

其中z是向量,K是向量维度,j是向量的第i个元素。

要在python中实现softmax函数,您将执行以下向量化实现:

如果我们将上面图像的向量传递给此函数,您将得到相同的结果:

z=[0.5,2.3,0.8]
softmax(z)

array([ 0.11905462, 0.72023846, 0.16070692])

RELU

RELU通常用于神经网络的隐藏层。

它们是机器学习从业者能够训练更深层神经网络的原因之一。RELU没有表现出前面描述的梯度消失问题,允许在更快的时间内训练大型神经网络。

Relu的公式如下:

RELU的导数总是1或0,不包括0处的导数,0处的导数没有定义,但通常被1代替,这意味着在外部范围内的导数不会变得非常小,就像sigmoid函数或其他激活函数(如tanh)的情况一样。

并不是所有关于RELU的事情都是完美的,他们可以表现出一个不同的问题,称为Dying Relu问题,特别是当学习率太高的时候。简而言之,较大的梯度会导致权重更新,从而导致RELU在任何其他数据点不再激活。因此,表现出这种反应的神经元永远不会再fires,因此被认为是死的。

即使存在Dying Relu问题的可能性,但经验法则是在隐藏层中使用RELU,除非你有充分的理由不这样做。

要在python中实现RELU,请使用以下代码:

结论

我们现在已经了解了神经网络中最常用的3种激活函数,您可以在实现算法时使用以下经验法则,特别是如果您刚刚开始并且不知道从哪里开始。

  • 对于二元分类,请在outer层使用sigmoid函数。
  • 对于多标签分类,请在outer层使用sigmoid函数。
  • 对于多类分类,请在outer层使用softmax函数。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表