激活函数是什么激活函数是神经网络中对神经元计算结果进行加工的函数.神经元首先经过线性计算然后通过激活函数转为非线性所以激活函数最大的作用就是给神经网络引入非线性能力如果没有激活函数的话无论神经网络叠加多少层最终都只会是一个线性模型只能处理很简单的问题。加入激活函数以后神经网络才能处理:图像中的复杂形状文本中的语义关系特征之间的非线性关系常见的激活函数ReLu:f(x)max(0,x) f(x) max(0,x)f(x)max(0,x)x 0时输出xx 0时输出0计算速度快,是隐藏层中最常见的激活函数缺点输入长期小于等于0时神经元可能无法继续学习这叫“神经元死亡”。总结ReLU 是一种常用的激活函数它会保留正数将负数置为 0。它的主要作用是给神经网络加入非线性能力。ReLU 计算简单、训练速度快并且在正数区域梯度为 1可以缓解深层网络中的梯度消失问题。但它也可能出现神经元死亡即输入长期为负时输出和梯度一直为 0。代码importtorch.nnasnn activationnn.ReLU()Leaky ReLU:f(x){x,x0αx,x≤0 f(x) \begin{cases} x, x0 \\ \alpha x, x\leq 0 \end{cases}f(x){x,αx,x0x≤0它是 ReLU 的改进版本。负数区域不会直接变成0而是保留一个较小的值。可以缓解 ReLU 的神经元死亡问题。总结 :Leaky ReLU 是 ReLU 的改进版本。普通 ReLU 会把负数直接置为 0可能导致神经元死亡Leaky ReLU 在负数区域保留一个较小的斜率使梯度不为 0从而让参数能够继续更新。它的优点是计算简单、能够缓解神经元死亡和梯度消失缺点是负数区域的斜率需要人为设置而且不一定在所有任务中都优于 ReLU。代码activationnn.LeakyReLU(negative_slope0.01)Sigmoid:σ(x)11e−x \sigma(x)\frac{1}{1e^{-x}}σ(x)1e−x1Sigmoid主要用于把模型输出转换成概率,它会把任意输入压缩到 0 和 1 之间,适合二分类任务的输出层优缺点优点输出范围固定在0∼10\sim10∼1容易解释为概率。函数连续且平滑。适合二分类模型的输出层。缺点容易出现梯度消失当输入很大或很小时函数进入饱和区梯度接近 0参数更新会非常慢。输出不是以 0 为中心Sigmoid 的输出始终是正数可能让梯度更新方向不够稳定。计算比 ReLU 复杂需要进行指数运算速度通常比 ReLU 慢总结Sigmoid 会把输入映射到 0 到 1 之间因此常用于二分类模型的输出层将结果解释为概率。它的缺点是输入过大或过小时梯度接近 0容易出现梯度消失因此深层网络的隐藏层通常更常使用 ReLU。Tanh:输出范围-1 到 1它与 Sigmoid 类似但是输出以0为中心。过去经常用于循环神经网络但同样可能出现梯度消失activationnn.Tanh()Softmax:Softmax 会把一组数字转换成概率并且所有概率之和等于1例如原始输出[2.1, 0.8, 0.3]概率输出[0.69, 0.19, 0.12]适合多分类的输出层代码activationnn.Softmax(dim1)使用 PyTorch 的nn.CrossEntropyLoss()时模型最后通常不需要手动添加 Softmax因为损失函数已经包含了相应计算。