掘金 人工智能 15小时前
非线性激活
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

神经网络的激活函数是其核心组成部分,它决定了神经元是否激活以及传递信息的强度。非线性激活函数能够“掰弯”线性关系,使得深层网络能够拟合复杂的现实世界问题,如图像和语音识别。本文深入探讨了Sigmoid、Tanh、ReLU及其变种(Leaky ReLU, PReLU, ELU, GELU/Swish)等常见激活函数的原理、优缺点及适用场景。其中,ReLU因其计算效率高和解决了梯度消失问题而成为首选,而Sigmoid和Tanh则在特定场景下(如输出层)依然发挥作用。

💡 非线性激活函数是神经网络的关键,它使多层网络能够学习复杂的非线性关系,否则多层线性层等同于单层线性网络,无法解决现实世界的大部分问题。

📉 Sigmoid和Tanh函数存在梯度消失和输出非零中心的问题,尤其在深层网络中会导致底层权重更新困难,其计算也相对复杂,但Sigmoid在二分类输出层和Tanh在输出范围[-1,1]的回归问题中仍有价值。

🚀 ReLU(修正线性单元)通过f(x)=max(0,x)解决了梯度消失问题(在正区间),计算速度极快,并引入稀疏性,是目前深层网络中最常用的激活函数。

⚠️ ReLU存在“神经元死亡”问题,即输入恒为负时神经元无法更新。Leaky ReLU和PReLU通过在负区间引入小斜率α来解决此问题,而ELU则在负区间采用指数函数,使输出均值更接近零。

🧠 GELU和Swish是近年来在SOTA模型中流行的平滑、非单调激活函数,计算更复杂但性能可能更优。选择激活函数时,ReLU是默认选项,若遇神经元死亡可尝试Leaky ReLU/PReLU,追求极致性能可尝试ELU, GELU, Swish。

一、 非线性激活是什么

想象一个神经网络里的神经元(Neuron)。它会接收来自上一层多个神经元的输入信号。这些信号被加权求和后,得到一个总的输入值。

激活函数的作用,就像是这个神经元的“审批开关”或“情绪调节器”。

它接收这个总输入值,然后决定:

非线性激活函数就是一个“有个性的”审批开关。它不是简单地把输入值原封不动地传出去(那是线性激活),而是会根据输入值的大小,进行一次非线性的“加工”或“扭曲”,然后再输出。

二、为什么必须用非线性激活函数?

这是最核心的问题。一句话概括:如果没有非线性激活函数,再深的神经网络也只相当于一个单层网络。

假设我们不用任何激活函数,或者用一个线性的激活函数(比如 f(x) = ax)。

h1 代入第二个式子,得到: output = W2 * (W1 * input + b1) + b2 output = (W2 * W1) * input + (W2 * b1 + b2)

W = W2 * W1b = W2 * b1 + b2,你会发现,这个两层网络最终还是可以写成 output = W * input + b 的形式。

结论就是: 无论叠加多少个线性层,其最终效果都等同于一个单独的线性层。这样的网络只能学习线性关系,比如线性回归。但现实世界中的绝大多数问题,比如图像识别、语音识别,都是高度非线性的。

非线性激活函数的作用就是“掰弯”这个线性关系。 它在每一层都引入了非线性变换,使得神经网络的层数有了意义,每一层都可以学习到输入数据中不同层次、不同抽象维度的特征。这使得深层网络能够拟合极其复杂的函数,从而获得强大的表达能力。

三、 常见的非线性激活函数

a. Sigmoid (S型函数)
b. Tanh (双曲正切函数)
c. ReLU (Rectified Linear Unit / 修正线性单元)

这是目前在深层网络中最受欢迎、最常用的激活函数。

d. Leaky ReLU / PReLU

为了解决“Dying ReLU”问题而诞生。

e. ELU (Exponential Linear Unit)
f. GELU (Gaussian Error Linear Unit) / Swish

这些是近年来在SOTA(State-of-the-art)模型(如BERT, GPT)中流行的激活函数。

它们都是平滑、非单调的函数,在很多任务上的表现都优于ReLU,但计算也更复杂。

四、如何选择?

    首选 ReLU: 它是绝大多数情况下的默认选择。如果你不确定用什么,就先用ReLU。它速度快,性能通常也很好。

    观察神经元死亡情况: 如果你在训练中发现有大量的神经元输出持续为0(可以通过可视化工具查看),可以尝试 Leaky ReLUPReLU,看看是否能改善性能。

    追求极致性能: 如果计算资源不是瓶颈,并且你希望压榨出模型的最后一点性能,可以尝试 ELU, GELU, 或 Swish。尤其是在Transformer架构中,GELU和Swish非常常见。

    Sigmoid 和 Tanh 的使用场景:

      隐藏层: 在深度神经网络中,尽量避免在隐藏层使用Sigmoid和Tanh,因为它们的梯度消失问题太严重。

      输出层: 它们在输出层仍然非常有用。

        Sigmoid: 用于二分类问题的输出层(输出概率)。Tanh: 用于输出值范围在 [-1, 1] 之间的回归问题,或某些模型的中间状态(如RNN)。

五、实操(实现一个简单的ReLU)

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

激活函数 神经网络 深度学习 ReLU 梯度消失
相关文章