隐藏层的各种激活函数

概述

激活函数(Activation functions)能令神经网络产生非线性变化,增强网络表达能力,在设计网络时必不可少。

各种激活函数

激活函数 表达式 第一印象
Sigmoid 11+ex 最早使用的激活函数之一
Tanh e2x1e2x+1 0 均值版本的 Sigmoid
ReLU max(x,0) 当下最流行的激活函数

Sigmoid

Sigmoid 在激活函数历史上有着重要的作用,是最早使用的激活函数之一。

但它有很多缺点:

  • 计算成本高
  • 输出均值非 0,优化器难以学习权重
  • x 极大或极小时容易梯度消失(饱和现象)

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 函数,使其在 x<0 时能够产生相应。

Leaky ReLU 的表达式如下,其中 0.01 可以定为其他较小的值。

Leaky ReLU(x)={xx00.01xx<0

PReLU 的表达式如下,其中 α 是可学习参数,而不是固定值。

PReLU(α,x)={xx0αxx<0

RReLU 类似于 PReLU,但 α 是高斯分布 U(l,u) 的采样值。这会让训练过程有随机因素,减少过拟合风险。推理时一般 α 取高斯分布均值。

其他激活函数

ELU(exponential linear units)的表达式如下,其中 α>0 是固定值。ELU 的输出平均值更接近于 0,缓解梯度消失从而加快学习速度,有负数饱和区域从而对噪声有鲁棒性。理论性能好于 Leaky ReLU、PReLU 和 RReLU,但计算成本高得多。

较大的 α 有助于抑制负输入的影响,促进稀疏性、降低神经元饱和(输入接近边界而导致梯度消失)的可能性。若 α 大于 1,ELU 对负输入更加敏感。

ELU(α,x)={xx0α(ex1)x<0

SELU(scaled ELU)的表达式如下。拥有自归一化的能力,其激活输出接近于 0 均值 1 方差的高斯分布(内部归一化 internal normalization),有效解决梯度爆炸或梯度消失的问题。在一些全连接网络和部分 RNN 网络体现出优势。

SELU 的自归一化能力基于某些特定假设,例如网络所有层都使用 SELU 激活,并采用一种称为 SELU 初始化的权重初始化。

λ 通常会随其他超参一同调整,以达到最优性能。

SELU(α,λ,x)=λ{xx>0α(ex1)x0α1.6732632423543772848170429916717λ1.0507009873554804934193349852946

GELU(Gaussian Error Linear Unit)的表达式如下。被证明在各种网络中表现良好,特别是在 NLP 和 transformer 中。

GELU(x)=xP(Xx)0.5x(1+tanh(2π(x+0.044715x3)))

Softplus 的表达式如下。SoftPlus 可以视作 ReLU 的平滑近似,但没有 ReLU 的稀疏激活性(输出均大于零)。输入值远大于 0 时会出现饱和效应,就此而言 ELU 或 Swish 等更受欢迎。

Softplus(x)=ln(1+ex)

Swish 的表达式如下。Swish 函数形状与 ReLU 相似,但更平滑且非单调。实验结论是其性能普遍匹配或略优于 ReLU。若希望在使用 ReLU 的网络提高准度,将所有 ReLU 替换为 Swish 也许值得一试。

Swish(x)=xsigmoid(x)=x1+ex

HardSwish 的表达式如下。近似于 Swish,且运算量大大降低。

HardSwish(x)=xReLU(6(x+3))6

Mish 的表达式如下。输入值较大时, Mish 函数趋于线性。特别是在计算机视觉和自然语言处理中表现良好。

Mish(x)=xtanh(softplus(x))

如何选择激活函数?

ReLU 简单有效,是永远的经典。

追求低运算成本,可以考虑 ReLU 系列(Leaky ReLU、PReLU、PReLU)。

追求性能,ELU 或 Swish 值得一试。

参考来源

posted @   倒地  阅读(137)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示