建站服务外贸,百度电脑版网页版,做网站带源码软件,html写一个完整网页#x1f380;个人主页#xff1a; https://zhangxiaoshu.blog.csdn.net #x1f4e2;欢迎大家#xff1a;关注#x1f50d;点赞#x1f44d;评论#x1f4dd;收藏⭐️#xff0c;如有错误敬请指正! #x1f495;未来很长#xff0c;值得我们全力奔赴更美好的生活个人主页 https://zhangxiaoshu.blog.csdn.net 欢迎大家关注点赞评论收藏⭐️如有错误敬请指正! 未来很长值得我们全力奔赴更美好的生活 前言 神经网络的激活函数是在每个神经元的输出上应用的非线性函数。激活函数的引入是为了给神经网络引入非线性特性从而增强网络的表达能力使其能够学习和表示更为复杂的关系。这篇文章主要介绍一些常见的神经网络激活函数包括sigmoid、tanh、ReLU、Leoky ReLU、ReLU6和Softmax。 文章目录 前言一 、sigmoid1.表达式及其图像2. Sigmoid激活函数的优缺点3. 使用场景4. PyTorch代码 二、tanh1. 表达式以及图像2. Tanh激活函数的优缺点3. 使用场景4. PyTorch代码 三、ReLU1.表达式及其图像2. ReLU激活函数的优缺点3. 使用场景4. PyTorch代码 四、Leoky ReLU1.表达式及其图像2. Leoky ReLU激活函数的优缺点3. 使用场景4. PyTorch代码 五、ReLU61.表达式及其图像2. ReLU6激活函数的优缺点3. 使用场景4. PyTorch代码 六、Softmax1.表达式及其图像2. Softmax激活函数的优缺点3. 使用场景4. PyTorch代码 总结 一 、sigmoid
1.表达式及其图像
Sigmoid激活函数是一种常用的非线性激活函数通常用于神经网络的输出层特别是在二分类问题中。其主要特点是将输入值映射到一个在 (0, 1) 范围内的输出其数学表达式为 σ ( x ) 1 1 e − x \sigma(x)\frac{1}{1e^{-x}} σ(x)1e−x1
其中 e e e 是自然对数的底。函数的图像呈 S 形曲线中心点在 x 0 x0 x0 处输出值在 x x x接近正无穷和负无穷时分别趋近于 1 和 0。
图像如下所示
2. Sigmoid激活函数的优缺点
优点
输出范围在 (0, 1) Sigmoid函数的输出范围在 (0, 1) 之间可以被解释为概率值特别适用于二分类问题如判断一个样本属于某一类的概率。平滑性 Sigmoid函数是光滑的、可导的函数这在梯度下降等优化算法中很有用。
缺点
梯度消失问题Sigmoid函数在输入非常大或非常小的情况下导数接近于零可能导致梯度消失问题。在深度网络中这可能影响训练的稳定性和速度。输出非零均值 Sigmoid的输出均值接近于 0.5这会导致下一层神经元得到的输入主要是正值可能影响权重的更新效率。计算复杂度Sigmoid函数的计算涉及到指数运算相对于一些计算简单的激活函数如ReLU计算复杂度较高。
3. 使用场景 二分类问题 Sigmoid通常用于二分类问题的输出层输出可以解释为样本属于某一类别的概率。 概率表示 当需要将神经网络的输出解释为概率值时Sigmoid是一个合适的选择。 输出范围限制 在需要将输出限制在 (0, 1) 范围内的情况下如图像生成等任务Sigmoid可以确保输出在指定范围内。
尽管Sigmoid在过去被广泛使用但由于其存在的梯度消失问题和其他缺点近年来在深度学习中一些其他激活函数如ReLU及其变体更受青睐。选择激活函数通常取决于具体的任务和网络结构。
4. PyTorch代码
import torch
import torch.nn.functional as Fx torch.randn(5, 5)
sigmoid_output torch.sigmoid(x)二、tanh
1. 表达式以及图像
Tanh双曲正切激活函数是一种常用的非线性激活函数其输出范围在 (-1, 1) 之间。其数学表达式为 t a n h ( x ) e x − e − x e x e − x tanh(x)\frac{e^x-e^{-x}}{e^xe^{-x}} tanh(x)exe−xex−e−x
Tanh函数在形状上类似于Sigmoid函数但其输出范围更广从 -1 到 1均值接近于 0。与Sigmoid相比Tanh对输入的响应更强烈可以更好地处理具有负值的输入。
图像如下所示
2. Tanh激活函数的优缺点
优点 归一化输出 Tanh的输出范围在(-1, 1)之间相比于Sigmoid的(0, 1)输出更接近于零均值有助于减小梯度消失问题提高模型的训练稳定性。 激活强度较大 Tanh对输入的响应相对更强烈这有助于模型学习更复杂的特征和表示使其在某些任务上比Sigmoid更有效。 零中心化 Tanh的输出均值接近零有助于减小下一层神经元接收到的输入的均值有助于提高网络的拟合能力。
缺点 梯度消失问题 虽然相对于SigmoidTanh缓解了梯度消失问题但仍然可能在深度网络中存在。对于极端值的输入Tanh函数的导数仍然会趋近于零。 计算复杂度 Tanh函数的计算同样涉及到指数运算相对于一些计算简单的激活函数如ReLU而言计算复杂度较高。
3. 使用场景 中间层的激活函数 Tanh通常在神经网络的中间层中使用特别是在循环神经网络RNN等结构中有助于处理具有正负值的输入。 具有零均值要求的场景 当输入数据有零均值要求时Tanh激活函数可能更适用因为它的输出均值接近零。 二分类问题 在二分类问题中Tanh可以用作输出层的激活函数尤其是当输出需要在 (-1, 1) 范围内表示时。
总体而言Tanh激活函数在某些场景下可以取代Sigmoid并且相对于Sigmoid来说具有更广的输出范围和更强的响应能力。然而使用时需要注意梯度消失问题以及计算复杂度。在深度学习中ReLU及其变体目前是更为常见的选择之一。
4. PyTorch代码
import torch
import torch.nn.functional as Fx torch.randn(5, 5)
tanh_output torch.tanh(x)三、ReLU
1.表达式及其图像
ReLURectified Linear Unit是一种常用的非线性激活函数其数学表达式为 f ( x ) m a x ( 0 , x ) f(x)max(0,x) f(x)max(0,x) 即对于输入 x x x如果 x x x 大于零输出为 x x x否则输出为零。ReLU函数是一个简单而有效的激活函数它在神经网络中被广泛使用。其特点是在正值区域上保持线性增长同时在负值区域上输出为零。
图像如下所示
2. ReLU激活函数的优缺点
优点 计算简单 ReLU函数的计算非常简单只需要一个阈值比较和取最大值的操作相比于Sigmoid和tanh等函数的指数运算计算速度更快。 稀疏激活性 ReLU激活函数在正值区域上保持线性增长有助于网络的稀疏激活性即只有少数神经元被激活使网络更加稀疏。 解决梯度消失问题 相比于Sigmoid和tanh等激活函数ReLU在正值区域上没有梯度饱和问题可以缓解梯度消失问题有助于训练深度网络。
缺点 死亡神经元问题 在训练过程中某些神经元可能永远不会被激活称为“死亡神经元”问题。如果某个神经元在训练过程中对于所有样本都是负的那么该神经元的权重将永远不会被更新。 不适合所有情况 对于一些数据分布特殊的任务ReLU可能表现不佳。例如在处理负值较多的数据时可能导致大量神经元死亡。
3. 使用场景 深度神经网络 ReLU在深度神经网络中广泛应用特别是在卷积神经网络CNN和循环神经网络RNN等结构中因为它有助于解决梯度消失问题。 计算资源受限的环境 由于ReLU的计算简单适用于资源受限的环境例如移动设备、嵌入式系统等。 稀疏激活性要求 当稀疏激活性是一个设计考虑因素时ReLU是一个合适的选择因为它更容易使网络保持稀疏性。
总体而言ReLU是深度学习中常用的激活函数之一尤其在解决梯度消失问题和提高计算效率方面表现优越。然而需要注意一些可能出现的问题如死亡神经元问题。在实际应用中有时会采用ReLU的变体如Leaky ReLU等以缓解一些潜在问题。
4. PyTorch代码
import torch
import torch.nn.functional as Fx torch.randn(5, 5)
relu_output F.relu(x)四、Leoky ReLU
1.表达式及其图像
Leaky ReLU是对标准ReLU激活函数的一种改进旨在解决ReLU中可能出现的“死亡神经元”问题。Leaky ReLU允许在负值区域有一个小的斜率而不是直接输出零。其数学表达式为 f ( x ) { x , if x 0 α x , if x ≤ 0 f(x)\left\{\begin{array}{ll} x, \text { if } x0 \\ \alpha x, \text { if } x \leq 0 \end{array}\right. f(x){x,αx, if x0 if x≤0
其中 α \alpha α是一个小的正数通常很小比如 0.01。Leaky ReLU保留了负值区域这有助于避免某些神经元在训练中变得“死亡”。
图像如下所示 2. Leoky ReLU激活函数的优缺点
优点 避免死亡神经元问题 Leaky ReLU允许在负值区域有一个小的斜率这有助于保持负值区域的梯度避免神经元在训练过程中变得“死亡”。 简单计算 与ReLU相比Leaky ReLU的计算仍然相对简单只需添加一个额外的斜率。 稀疏激活性 Leaky ReLU保持了一定的稀疏激活性即仍然有神经元保持非零输出。
缺点 不一定适用于所有情况 尽管Leaky ReLU解决了死亡神经元问题但它并不一定在所有任务中都表现得比标准ReLU更好。在某些数据分布下Leaky ReLU可能仍然存在一些问题。 选择斜率的问题 选择 α \alpha α的值通常是一个超参数需要进行调优。选择不当可能导致一些问题过小的 α \alpha α可能无法解决死亡神经元问题而过大的 α \alpha α可能导致Leaky ReLU失去ReLU的优势。
3. 使用场景 深度神经网络 Leaky ReLU在深度神经网络中被广泛应用尤其是在解决死亡神经元问题方面。 需要稀疏激活性 当需要保持一定的稀疏激活性时Leaky ReLU可以是一个合适的选择。 不确定数据分布 在处理不同数据分布的任务时Leaky ReLU可能是一个更健壮的激活函数选择相对于ReLU在某些情况下可能表现得更好。
总体而言Leaky ReLU是对标准ReLU的一种改进通过引入一个小的负斜率解决了死亡神经元问题。在实际应用中可以根据具体任务和数据分布选择合适的激活函数。
4. PyTorch代码
import torch
import torch.nn.functional as Fx torch.randn(5, 5)
leaky_relu_output F.leaky_relu(x, negative_slope0.01) # 可根据需求调整负斜率五、ReLU6
1.表达式及其图像
ReLU6Rectified Linear Unit 6是对ReLU的一种变体它在正值区域上仍然保持线性增长但在负值区域上截断并将负值限制在零以下。其数学表达式为 f ( x ) m i n ( m a x ( 0 , x ) , 6 ) f(x)min(max(0,x),6) f(x)min(max(0,x),6)
即对于输入 x x x如果 x x x大于零输出为 x x x如果 x x x 小于等于零输出为零如果 x x x大于6输出为6。ReLU6的主要特点是在负值区域上的截断将负值限制在零以下并且在正值区域上允许线性增长最大值限制为6。
图像如下所示 2. ReLU6激活函数的优缺点
优点 抑制过大的激活值 通过将激活值限制在6以下ReLU6有助于抑制激活值的过大增长使得网络的表示范围更受控制尤其是在计算资源受限的环境中使用低精度的时候也能有很好的数值分辨率低精度的Float 16 / INT 8无法很好地精确大范围的数值。 计算简单 类似于ReLUReLU6的计算仍然相对简单只需要比较和取最小值和最大值的操作。
缺点
不适用于所有场景 ReLU6在一些任务和数据分布上可能表现不佳。对于一些特定的任务可能有更适合的激活函数选择。
3. 使用场景 限制激活值范围 当需要限制激活值的范围避免过大的激活值对网络造成负面影响时ReLU6可以作为一种选择。 计算资源受限的环境 由于ReLU6的计算仍然相对简单适用于计算资源受限的环境例如移动设备、嵌入式系统等。 对输入范围有要求的任务 当输入数据有特定的范围要求时ReLU6可以用来限制输出在一个固定的范围内。
总体而言ReLU6是对ReLU的一种变体主要通过将激活值限制在6以下来抑制激活值的过大增长。在实际应用中选择激活函数通常要根据具体的任务和网络结构进行调整。
4. PyTorch代码
import torch
import torch.nn.functional as Fx torch.randn(5, 5)
relu6_output F.relu6(x)六、Softmax
1.表达式及其图像
Softmax激活函数是一种常用于多分类问题的激活函数。它接受一个实数向量作为输入并将其转换成一个概率分布。Softmax函数的数学表达式为 S o f t m a x ( z ) i e z i ∑ j 1 K e z j Softmax(z)_i\frac{e^{z_{i} }}{ {\textstyle \sum_{j1}^{K}} e^{z_{j} }} Softmax(z)i∑j1Kezjezi
其中 z z z是输入向量的元素 K K K是类别的总数。Softmax函数对输入向量进行指数运算然后进行归一化使得输出的各个元素表示对应类别的概率且概率之和为1。
图像如下所示 2. Softmax激活函数的优缺点
优点 概率表示 Softmax将输入映射为概率分布适用于多分类问题输出的各个元素可以解释为对应类别的概率。 可导性 Softmax是可导的这使得在使用梯度下降等优化算法进行训练时更容易处理。
缺点 对输入敏感 Softmax对输入的敏感性较高当输入中存在较大的值时指数运算可能导致数值溢出数值过大或数值不稳定的问题。 类别之间相关性 Softmax假设各个类别是独立的可能无法很好地处理类别之间的相关性。 标签不平衡 在处理标签不平衡的情况下Softmax可能导致模型更加关注样本较多的类别而对样本较少的类别学习不足。
3. 使用场景 多分类问题 Softmax主要用于解决多分类问题其中需要将输入映射为各个类别的概率分布。 输出层激活函数 Softmax通常作为神经网络输出层的激活函数特别适用于需要将网络输出解释为概率分布的场景。 需要概率表示的任务 当任务需要模型输出概率表示时例如图像分类、语音识别等Softmax是一个常用的选择。
总体而言Softmax激活函数在多分类问题中表现出色提供了一种将神经网络输出转换为概率分布的方式。然而在一些特殊情况下可能需要注意其对输入的敏感性以及类别之间的相关性问题。
4. PyTorch代码
import torch
import torch.nn.functional as Fx torch.randn(5, 5)
softmax_output F.softmax(x, dim1)总结
在深度学习中激活函数的选择对模型的性能和训练过程至关重要。以下是以上6种激活函数的简单总结及其使用建议
Sigmoid激活函数输出范围在 (0, 1)适用于二分类问题但容易导致梯度消失问题。适用于二分类问题的输出层不建议在隐藏层使用可以考虑其他更有效的激活函数。 Tanh激活函数 输出范围在 (-1, 1)零中心化相对缓解了梯度消失问题。适用于隐藏层特别是需要输出在 (-1, 1) 范围的任务。 ReLU激活函数简单计算解决了梯度消失问题但可能导致死亡神经元问题。在隐藏层中广泛使用特别适用于深度神经网络和计算资源受限的环境。 Leaky ReLU激活函数 解决了死亡神经元问题保持了稀疏激活性。用于隐藏层尤其是在ReLU表现不佳时可以考虑使用需要保持稀疏激活性的任务。 Softmax激活函数 输出表示概率分布适用于多分类问题。用于多分类问题的输出层将网络输出映射为概率分布例如图像分类、语音识别等。 ReLU6激活函数对激活值进行限制抑制过大的激活值。用于需要限制激活值范围的任务例如计算资源受限的环境。
在隐藏层通常首选ReLU及其变体如Leaky ReLU因为它们计算简单且在实践中表现良好。对于二分类问题Sigmoid仍然是一个合适的选择但要注意梯度消失问题。对于需要输出概率分布的多分类问题Softmax是一个自然的选择。根据任务和实验结果可以进行激活函数的调整和尝试选择最适合特定情况的激活函数。
参考和图片来源
小wu学cv常用的激活函数合集详细版