隐藏层的各种激活函数
概述
激活函数(Activation functions)能令神经网络产生非线性变化,增强网络表达能力,在设计网络时必不可少。
各种激活函数
激活函数 | 表达式 | 第一印象 |
---|---|---|
Sigmoid | 最早使用的激活函数之一 | |
Tanh | 0 均值版本的 Sigmoid | |
ReLU | 当下最流行的激活函数 |
Sigmoid
Sigmoid 在激活函数历史上有着重要的作用,是最早使用的激活函数之一。
但它有很多缺点:
- 计算成本高
- 输出均值非 0,优化器难以学习权重
极大或极小时容易梯度消失(饱和现象)
Sigmoid 不应是首选的隐藏层激活函数,还是让它做二分类本职任务吧。
Tanh
Tanh 是 Sigmoid 的变形。解决了输出均值非 0 的问题,仍然会有饱和现象。
在 GAN 的生成器网络中,可以在输出层利用 tanh 函数将网络的内部表示映射到所需的输出范围,例如图像生成中的像素值在 -1 到 1 之间。
ReLU
ReLU(Rectified linear unit)是现代神经网络中最常用的激活函数。速度极快,简单有效。又因为 ReLU 会使部分神经元输出为 0,可减少参数的相互依存关系,缓解过拟合问题的发生。
ReLU 可能导致 dead ReLU 现象——神经元永远不响应输入,且参数不被更新。这个缺陷可用 Xavier 参数初始化、使用 AdaGrad 自动调节 learning rate 等方法缓解。
ReLu 的改造
为了避免 dead ReLU 现象,需要改造 ReLU 函数,使其在
Leaky ReLU 的表达式如下,其中
PReLU 的表达式如下,其中
RReLU 类似于 PReLU,但
其他激活函数
ELU(exponential linear units)的表达式如下,其中
较大的
SELU(scaled ELU)的表达式如下。拥有自归一化的能力,其激活输出接近于 0 均值 1 方差的高斯分布(内部归一化 internal normalization),有效解决梯度爆炸或梯度消失的问题。在一些全连接网络和部分 RNN 网络体现出优势。
SELU 的自归一化能力基于某些特定假设,例如网络所有层都使用 SELU 激活,并采用一种称为 SELU 初始化的权重初始化。
GELU(Gaussian Error Linear Unit)的表达式如下。被证明在各种网络中表现良好,特别是在 NLP 和 transformer 中。
Softplus 的表达式如下。SoftPlus 可以视作 ReLU 的平滑近似,但没有 ReLU 的稀疏激活性(输出均大于零)。输入值远大于 0 时会出现饱和效应,就此而言 ELU 或 Swish 等更受欢迎。
Swish 的表达式如下。Swish 函数形状与 ReLU 相似,但更平滑且非单调。实验结论是其性能普遍匹配或略优于 ReLU。若希望在使用 ReLU 的网络提高准度,将所有 ReLU 替换为 Swish 也许值得一试。
HardSwish 的表达式如下。近似于
Mish 的表达式如下。输入值较大时, Mish 函数趋于线性。特别是在计算机视觉和自然语言处理中表现良好。
如何选择激活函数?
ReLU 简单有效,是永远的经典。
追求低运算成本,可以考虑 ReLU 系列(Leaky ReLU、PReLU、PReLU)。
追求性能,ELU 或 Swish 值得一试。
参考来源
- “Deep convolutional neural network–based image classification for COVID-19 diagnosis”,https://www.sciencedirect.com/topics/engineering/activation-function
- deephub,“激活函数其实并不简单:最新的激活函数如何选择?”,https://zhuanlan.zhihu.com/p/409247652
- Santosh Singh,“Activation functions and their advantages & disadvantages”,https://medium.com/@santosh76792/activation-functions-and-their-advantages-disadvantages-d5eaa1717805
- Okan Yenigün,“Choosing the Right Activation Function in Deep Learning: A Practical Overview and Comparison”,https://python.plainenglish.io/choosing-the-right-activation-function-in-deep-learning-a-practical-overview-and-comparison-c5372fe167f8
- Diganta Misra,“The Swish Activation Function”,https://blog.paperspace.com/swish-activation-function/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了