什么是激活函数?
在人工神经网络中,节点的激活函数定义了该节点或神经元对于给定输入或一组输入的输出。然后,将此输出用作下一个节点的输入,依此类推,直到找到原始问题的所需解决方案。
它将结果值映射到所需的范围,例如0到1或-1到1等。这取决于激活函数的选择。例如,使用逻辑激活函数将把真实的数域中的所有输入映射到0到1的范围内。
二分类问题的例子
在二分类问题中,我们有一个输入x,比如一张图像,我们必须将其分类为是否正确的对象。如果它是一个正确的对象,我们将给它赋值1,否则赋值0。因此,在这里,我们只有两个输出-图像包含有效对象或不包含。这是一个二分类问题的例子。
![](https://img-blog.csdnimg.cn/25fb357521564fbf9d171c010dc7a69b.png)
当我们将每个特征乘以权重(w1,w2,...,wm)并将它们全部相加时,
节点的输出=激活(输入的加权和)。
![](https://img-blog.csdnimg.cn/703a05bc45b64f4b939a30e7a0c5b8e2.png)
一些重要的术语和数学概念
-
传播是一个过程,反复调整权重,以最大限度地减少实际输出和期望输出之间的差异。
-
隐藏层是堆叠在输入和输出之间的神经元节点,允许神经网络学习更复杂的特征(如XOR逻辑)。
-
反向传播是一个过程,反复调整权重,以最大限度地减少实际输出和期望输出之间的差异。
它允许信息通过网络从成本向后返回,以计算梯度。因此,从最后一个节点开始按反向拓扑顺序循环节点,以计算最终节点输出的导数。这样做将帮助我们知道谁对最大的错误负责,并在该方向上适当地改变参数。
-
梯度下降在训练机器学习模型时使用。它是一种基于凸函数的优化算法,可以迭代地调整其参数,以最小化给定函数的局部最小值。梯度测量了如果你稍微改变输入,函数的输出会改变多少。
注意:如果梯度下降正常工作,则成本函数在每次迭代后都应该减少。
激活函数的类型
激活函数基本上有两种类型:
1.线性激活函数
Equation : f(x) = x
Range : (-infinity to infinity)
![](https://img-blog.csdnimg.cn/6ed6829bd01447a7916cb415aa3f2d24.png)
2.非线性激活函数
这使得模型很容易对各种数据进行泛化,并区分输出。通过仿真,发现对于较大的网络,ReLU要快得多。事实证明,ReLU可以更快地训练大型网络。非线性意味着输出不能从输入的线性组合中再现。
需要理解的非线性函数的主要术语是:
1.导数:y轴相对于x轴的变化(t时间内)。它也被称为斜坡。
2.单调函数:一个完全递增或递减的函数。
![](https://img-blog.csdnimg.cn/6f0ccd1e121b4343b16892fc0d5a668a.png)
非线性激活函数主要根据其范围或曲线划分如下:
![](https://img-blog.csdnimg.cn/9359f9bbb2de48c7b8fe838e3b5d3674.png)
让我们更深入地了解每个激活函数
1. Sigmoid:
它也被称为二分类器或Logistic激活函数,因为函数总是选择值0(假)或1(真)。
sigmoid函数产生与step函数类似的结果,输出在0和1之间。曲线在z=0处穿过0.5,我们可以为激活函数设置规则,例如:如果sigmoid神经元的输出大于或等于0.5,则输出1; 如果输出小于0.5,则输出0。
sigmoid函数在其曲线上没有加加速度。它是光滑的,它有一个非常好的和简单的导数,它在曲线上的任何地方都是可微的。
Sigmoid的推导:
![](https://img-blog.csdnimg.cn/6f07d76727ea450fb7c61f427c004156.png)
sigmoid的一个非常常见的性质是,当神经元的激活在0或1处饱和时,这些区域的梯度几乎为零。回想一下,在反向传播过程中,这个局部梯度将乘以整个目标的这个门的输出梯度。因此,如果局部梯度非常小,它将有效地"杀死"梯度,几乎没有信号将通过神经元流向其权重并递归地流向其数据。此外,额外的惩罚将被添加到初始化S形神经元的权重以防止饱和。例如,如果初始权重太大,那么大多数神经元将变得饱和,网络将几乎无法学习。
2. ReLU(Rectified Linear Unit):
它是使用最广泛的激活函数。因为它被用于几乎所有的卷积神经网络。函数及其导数都是单调的。
python
f(x) = max(0, x)
接近线性的模型易于优化。由于ReLU共享了线性函数的许多属性,因此它在大多数问题上都能很好地工作。唯一的问题是导数在z = 0时没有定义,我们可以通过在z = 0时将导数赋值为0来克服这个问题。然而,这意味着对于z <= 0,梯度为零,并且再次无法学习。
3. Leaky ReLU:
Leaky ReLU是ReLU函数的改进版本。ReLU函数,对于x<0,梯度为0,这使得该区域的神经元因激活而死亡。Leaky ReLU的定义就是为了解决这个问题。我们将Relu函数定义为x的一个小的线性分量,而不是将x小于0的Relu函数定义为0。
Leaky ReLU是解决垂死ReLU问题的一种尝试。当x < 0时,函数不是零,而是一个泄漏的ReLU将具有一个小的负斜率(0.01左右)。也就是说,该函数计算:
![](https://img-blog.csdnimg.cn/1747b71e92e24d6bad629e77a27f0db2.png)
4. Tanh或双曲正切:
它将一个实数压缩到范围[-1,1]与Sigmoid一样,它的激活饱和,但与Sigmoid神经元不同,它的输出是以零为中心的。因此,双曲正切非线性总是优于S形非线性。tanh神经元只是一个缩放的sigmoid神经元。
Tanh也像logistic sigmoid,但更好。其优点是负输入将被映射到强负,零输入将被映射到双曲正切图中的近零。
函数是单调可微的,但它的导数不是单调的。tanh和logistic Sigmoid激活函数都用于前馈网络。
它实际上只是sigmoid函数的缩放版本。
python
tanh(x)=2 sigmoid(2x)-1
![](https://i-blog.csdnimg.cn/direct/316191f017274d3bb11d0ae23f1c0d60.png)
5. SoftMax:
sigmoid函数可以很容易地应用,并且ReLU不会在训练过程中消除效果。但是,当你想处理分类问题时,它们就帮不上什么忙了。sigmoid函数只能处理两个类,这不是我们所期望的,但我们想要更多。softmax函数将每个单元的输出压缩到0和1之间,就像sigmoid函数一样。并且它还划分每个输出,使得输出的总和等于1。
softmax函数的输出相当于一个分类概率分布,它告诉你任何类为真的概率。
![](https://img-blog.csdnimg.cn/5ddc3a6dcea24255b18f4e36c6ba69f8.png)
其中0是输出层的输入向量(如果你有10个输出单元,那么z中有10个元素)。同样,j索引输出单元,所以j = 1,2,...,K。
Softmax函数的性质
1.计算的概率将在0到1的范围内。
2.所有概率之和等于1。
Softmax函数用法
1.用于多分类logistic回归模型。
2.在构建神经网络时,softmax函数用于不同层次和多层感知器。
例如:
Softmax函数将logits [1.2,0.9,0.4]转换为概率[0.46,0.34,0.20],概率之和为1。