Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

参与熊猫 杜伟

从ReLU到GELU,一文概览神经网络的激活函数

在计算每一层的激活值时,我们要用到激活函数,之后才能确定这些激活值究竟是多少。根据每一层前面的激活、权重和偏置,我们要为下一层的每个激活计算一个值。但在将该值发送给下一层之前,我们要使用一个激活函数对这个输出进行缩放。本文将介绍不同的激活函数。
 
在阅读本文之前,你可以阅读我前一篇介绍神经网络中前向传播和反向传播的文章,其中已经简单地提及过激活函数,但还未介绍其实际所做的事情。本文的内容将建立在你已了解前一篇文章知识的基础上。

前一篇文章地址:https://mlfromscratch.com/neural-networks-explained/

Casper Hansen

目录
  • 概述

  • sigmoid 函数是什么?

  • 梯度问题:反向传播

  • 梯度消失问题

  • 梯度爆炸问题

  • 梯度爆炸的极端案例

  • 避免梯度爆炸:梯度裁剪/范数

  • 整流线性单元(ReLU)

  • 死亡 ReLU:优势和缺点

  • 指数线性单元(ELU)

  • 渗漏型整流线性单元(Leaky ReLU)

  • 扩展型指数线性单元(SELU)

  • SELU:归一化的特例

  • 权重初始化+dropout 

  • 高斯误差线性单元(GELU)

  • 代码:深度神经网络的超参数搜索

  • 扩展阅读:书籍与论文

概述

激活函数是神经网络中一个至关重要的部分。在这篇长文中,我将全面介绍六种不同的激活函数,并阐述它们各自的优缺点。我会给出激活函数的方程和微分方程,还会给出它们的图示。本文的目标是以简单的术语解释这些方程以及图。

我会介绍梯度消失和爆炸问题;对于后者,我将按照 Nielsen 提出的那个很赞的示例来解释梯度爆炸的原因。
 
最后,我还会提供一些代码让你可以自己在 Jupyter Notebook 中运行。

我会在 MNIST 数据集上进行一些小型代码实验,为每个激活函数都获得一张损失和准确度图。

专业用户独享

本文为机器之心深度精选内容,专业认证后即可阅读全文
开启专业认证
入门激活函数
291
相关数据
超参数优化技术

反向传播算法技术

反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法计算对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。 在神经网络上执行梯度下降法的主要算法。该算法会先按前向传播方式计算(并缓存)每个节点的输出值,然后再按反向传播遍历图的方式计算损失函数值相对于每个参数的偏导数。

双曲正切函数技术

在数学中,双曲函数是一类与常见的三角函数(也叫圆函数)类似的函数。双曲正切函数是双曲函数的一种,它也是双曲正弦函数(sinh)与双曲余弦函数(cosh)的商。 在人工智能领域,tanh函数是一种常见的激活函数,取值范围为(-1,1),“在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果”。

LeakyReLU技术

ReLU是将所有的负值都设为零,保留正值;相反,Leaky ReLU是给所有负值赋予一个非零斜率,即x<0时,y=α·x。

梯度消失问题技术

梯度消失指的是随着网络深度增加,参数的梯度范数指数式减小的现象。梯度很小,意味着参数的变化很缓慢,从而使得学习过程停滞,直到梯度变得足够大,而这通常需要指数量级的时间。这种思想至少可以追溯到 Bengio 等人 1994 年的论文:「Learning long-term dependencies with gradient descent is difficult」,目前似乎仍然是人们对深度神经网络的训练困难的偏好解释。

指数线性单元技术

一种激活函数, ELUs是对ReLU激活函数的一种演变,将激活函数更能够保持一个noise-robust状态。所以提出一个具有负值的激活函数,这可以使得平均激活接近于零,但它会以更小的参数饱和为负值的激活函数ELUs。

批归一化技术

批归一化(Batch Normalization,BN)由谷歌于2015年提出,是一个深度神经网络训练的技巧,它不仅可以加快模型的收敛速度,还能在一定程度上缓解深层网络中的“梯度弥散”问题,从而使得训练深层网络模型更加容易和稳定。目前BN已经成为几乎所有卷积神经网络的标配技巧了。从字面意思看来Batch Normalization(简称BN)就是对每一批数据进行归一化。

推荐文章
为什么没有对比Swish函数呢