结论直接看——激活函数的选择方式
神经网络主体分为输入层、隐藏层和输出层三个模块。一般情况下,输入层只负责对数据的输入,并不做任何的变换。故而,激活函数的选择只涉及隐藏层和输出层两个模块。
激活函数的选择方式
理论情况下,激活函数是可以根据需求,随意选择与组合的。但是经过前辈们的实验经验,下面的流程往往是效率最高的。(非绝对正确,仅作参考。若有更好的选择,欢迎分享。)
隐藏层
- 优先选择ReLU激活函数;
- 如果ReLU效果不好,那么尝试其他的激活函数(优先选择ReLU系列);
- 如果使用了ReLU,需要注意一下Dead ReLU问题;
- 少使用Sigmoid激活函数,可以尝试使用tanh激活函数。
注意:ReLU系列指的是以ReLU激活函数为基础,进行改变的一系列激活函数。
输出层
输出层的激活函数选择,主要有其任务决定。
- 二分类问题选择Sigmoid激活函数;
- 多分类问题选择Softmax激活函数;
- 回归问题选择Identity激活函数。
常见激活函数
常见的激活函数有:Identity、Sigmoid(Logistic)、TanH、Softmax、ReLU和ReLU系列(基于ReLU变化的)等等。
Softmax函数公式如下:
激活函数详解
网上已经有了较为全面的讲解,我就不进行详细介绍。如果没有方向,可以看看下面这些网址。
相关学习网址
理论
理论相关:深度学习基础篇:如何选择正确的激活函数? - 知乎 (zhihu.com)
Sigmoid函数:一文掌握Sigmoid激活函数:深度学习的“隐形”英雄-CSDN博客
API
Pytorch相关:简单易懂的PyTorch激活函数大全详解-CSDN博客
Pytorch英文网:torch.nn — PyTorch 2.4 documentation
Pytorch中文网:PyTorch 文档 — PyTorch 2.4 文档 - PyTorch 中文
激活函数对比
主要对Sigmoid、TanH、RuLE和RuLE系列 四类激活函数进行对比。
Sigmoid函数两个问题
如Sigmoid图所示,Sigmoid函数往往有两个问题:非零中心问题和梯度消失问题。
- 非零中心问题:y轴的值域不关于0对称,这会延缓网络的收敛速度;
- 梯度消失问题:激活函数的梯度小(1以下),长久的累积,会导致梯度无限接近于0,这会导致权重无法更新。
对于Sigmoid函数,梯度消失问题有两部分——(-6,6)之内和(-6,6)之外。-6和6是Sigmoid大概等于零的点,为了便于表示,就直接以这个为标准了。在(-6,6)之外,函数梯度一直为0,这个可以用标准化来避免。在(-6,6)之内,梯度很小,一直小于0.25,累乘情况下,很容易出现梯度消失问题。
Sigmoid函数 >> Tanh函数
与Sigmoid函数相比,TanH函数不仅没了非零中心问题,而且相对缓解了中心区域(等价于Sigmoid函数的-6~6之内)的梯度消失。
虽然TanH解决了非零中心问题,缓解了梯度消失问题,但是还是存在计算量大的问题(指数运算)。
TanH函数 >> ReLU函数
与sigmoid函数、Tanh函数相比,采用ReLU函数,整个过程的计算量会节省很多。尽管ReLU 存在非零中心问题,它的计算效率高,并且在很大程度上缓解了梯度消失问题,因此仍然是深度学习中常用的激活函数。
ReLU虽然带来了效率的提升,但是仍然有着非零中心问题和Dead ReLU问题。
Dead ReLU(死亡 ReLU)问题是指在使用 ReLU 激活函数时,某些神经元的输出长期为 0,导致它们无法参与训练。这是因为 ReLU 的输出特性是当输入小于或等于 0 时,激活函数的输出为 0。而一旦某个神经元进入了这种状态,它可能会在整个训练过程中一直保持输出为 0,不再更新参数,进而“死亡”。
ReLU函数 >> ReLU系列函数
ReLU系列函数,是在ReLU函数基础上的进一步改进,主要是用于克服ReLU的非零中心问题和Dead ReLU问题的。往往在ReLU函数出现Dead ReLU问题后,才会使用ReLU系列函数用于激活函数。
标签:函数,Sigmoid,梯度,ReLU,问题,神经网络,激活 From: https://blog.csdn.net/qq_51448765/article/details/142431806