激活函数的作用
引入非线性因素
若神经网络仅由线性层构成,那么无论网络的层数有多少,其整体的输出依然是输入的线性组合。这样的网络只能拟合线性函数,在处理复杂的非线性问题(如语音识别、图像分类)时能力十分有限。激活函数的加入可以打破这种线性限制,使神经网络能够学习并表示任意复杂的非线性函数。例如,在一个简单的两层神经网络中,如果没有激活函数,那么输出只是输入的线性变换。但加入了 Sigmoid 激活函数后,网络就能学习到复杂的非线性模式。
特征映射与数据变换
激活函数可以将输入数据映射到一个新的特征空间,使得数据在这个新空间中更易于被神经网络处理。不同的激活函数具有不同的映射特性。例如,ReLU(Rectified Linear Unit)激活函数可以将负数输入置为 0,正数输入保持不变,这样可以突出数据中的正向特征,减少数据的稀疏性,同时加快神经网络的训练速度。
控制神经元的激活状态
激活函数可以控制神经元的激活状态,决定神经元是否要对输入进行响应。以 Sigmoid 函数为例,它的输出范围在 0 到 1 之间,可以看作是神经元的激活概率。当输入信号较弱时,Sigmoid 函数的输出接近 0,意味着神经元处于未激活状态;当输入信号较强时,输出接近 1,神经元被激活。这种机制可以帮助神经网络筛选出重要的输入信息,忽略不重要的信息。
梯度传递与模型训练
在神经网络的反向传播过程中,激活函数的导数决定了梯度的传递情况。合适的激活函数能够保证梯度在网络中有效地传播,避免出现梯度消失或梯度爆炸的问题。例如,ReLU 激活函数的导数在正数区域恒为 1,这使得梯度在传播过程中不会出现衰减,从而有助于缓解梯度消失问题,提高模型的训练效率。
Sigmoid 函数
常用于二分类问题
优点:
函数的值域在(0,1)之间,可将任意实数映射到0到1的区间,常被用于将输出解释为概率。
将很大范围内的输入特征值压缩到0~1之间,使得在深层网络中可以保持数据幅度不会出现较大的变化,而Relu函数则不会对数据的幅度作出约束;
缺点:
当输入非常大或非常小的时候,输出基本为常数,即变化非常小,进而导致梯度接近于0;
梯度可能会过早消失,进而导致收敛速度较慢,例如与Tanh函数相比,其就比sigmoid函数收敛更快,是因为其梯度消失问题较sigmoid函数要轻一些;
softmax
Softmax一般用来作为神经网络的最后一层,用于多分类问题的输出。其本质是一种激活函数,将一个数值向量归一化为一个概率分布向量,且各个概率之和为1。
Tanh