深度学习之几种常见的**函数及其用法

在深度学习中,常常要用到**函数,**函数在深度学习模型中非常重要,**函数的选取极大地关系到模型的好坏,在此介绍一些常用的**函数及其最常用的使用场景。图源网络,侵删。

什么是**函数

**函数顾名思义,就是将深度学习中的线性加权**,引入非线性的因素。如果没有**函数,神经网络只是简单地矩阵相乘,无论叠加了多少层,仍然是矩阵相乘,都只是线性的变换,但是在矩阵相乘后,引入一个**函数,便引入了一个非线性的特性,在很多复杂的模型中,引入非线性特性是非常必要的。因此,神经网络中上一层到下一层之间,在传入下一层之前,进行的非线性变换,这个函数便叫做**函数。**函数的作用是将神经元的输出进行一个缩放,无论值为多少,输出都缩放到一个0-1的区间内。如图。
深度学习之几种常见的**函数及其用法
常见的**函数有sigmoid、ReLU、ELU 以及更新的 Leaky ReLU、SELU、GELU 等,下面将一一介绍并总结他们的优缺点及使用场景。

1. sigmoid**函数

sigmoid 函数是一个 logistic 函数,意思就是说:不管输入是什么,得到的输出都在 0 到 1 之间。也就是说,你输入的每个神经元、节点或**都会被缩放为一个介于 0 到 1 之间的值。
深度学习之几种常见的**函数及其用法

深度学习之几种常见的**函数及其用法
在说明**函数的原理前,需要先介绍一下反向传播与梯度。

反向传播、梯度消失、梯度爆炸

在反向传播过程中,根据权重和偏置的变化对影响成本函数的比例来调整权重和偏置,从而得到新的网络,这个过程叫做反向传播。在反向传播过程中,计算的每个权重和偏置的变化,这个变化叫做梯度,梯度的计算和权重影响成本函数(cost function)的比例有关,具体做法是计算成本函数相对于每个权重的偏导数。简单来说,梯度即求导。
深度学习之几种常见的**函数及其用法
上式中C为成本函数,w^L为第L层的权重,中间部分即可看做**函数的导数,sigmoid 函数中,它的导数为:
深度学习之几种常见的**函数及其用法
当我们向这个 sigmoid 函数输入一个很大的 x 值(正或负)时,我们得到几乎为 0 的 y 值。
深度学习之几种常见的**函数及其用法
那么梯度便变成:
深度学习之几种常见的**函数及其用法
上面我们说过,新的权重与梯度由很大的关系
深度学习之几种常见的**函数及其用法
在L层中,如果有太多的权重都是这样的太大或者太小的值,那么求得的梯度都几乎为0,那么我们根本无法调整网络。如果整个网络只有细微的更新,那么这个算法就不能随计算给网络带来改善,这个网络将毫无意义。
这个梯度几乎为0的现象即为梯度消失问题。这个问题使得 sigmoid 函数在神经网络中并不实用。
说到梯度消失问题,便不得不说梯度爆炸问题,梯度爆炸是梯度消失的反面,当在成本函数的悬崖上求导数时,便会出现梯度爆炸现象,梯度爆炸使得权重和偏置的值可能会爆发式地增大,进而导致整个网络爆炸。在一些循环神经网络中,如LSTM和GRU,经常会出现梯度爆炸现象。
深度学习之几种常见的**函数及其用法
如果要
避免梯度爆炸现象
,需要使用梯度裁剪。梯度裁剪很简单,即当计算出来的梯度很大时(如超过某个指定阙值),通过梯度规范化将其缩放到阙值范围内,这样便避免了梯度爆炸现象。
梯度爆炸很容易避免,但是梯度消失问题很难。

2. ReLU**函数(整流线性单元)

ReLU**函数能够解决梯度消失现象。
深度学习之几种常见的**函数及其用法
其微分方程为:
深度学习之几种常见的**函数及其用法

使用relu**函数,梯度要么是0,要么是1,便避免了梯度消失问题。深度学习之几种常见的**函数及其用法
但这又催生出另一个问题:死亡 ReLU 问题。死亡ReLU即当是0时,无法更新权重或者偏置。

3. ELU**函数(指数线性单元)

深度学习之几种常见的**函数及其用法
微分方程为:
深度学习之几种常见的**函数及其用法
深度学习之几种常见的**函数及其用法
ELU**函数成功避开了死亡 ReLU 问题,同时仍保有 ReLU **函数的一些计算速度增益。

4. Leaky ReLU**函数(渗漏型整流线性单元**函数)

深度学习之几种常见的**函数及其用法
其求导后要么为a,要么为1。
深度学习之几种常见的**函数及其用法

5. SELU**函数(扩展型指数线性单元**函数)

SELU**函数比较新。
深度学习之几种常见的**函数及其用法
其微分方程为:
深度学习之几种常见的**函数及其用法
深度学习之几种常见的**函数及其用法

6.GELU**函数(高斯误差线性单元**函数)

这个**函数在最近的 Transformer 模型(谷歌的 BERT 和 OpenAI 的 GPT-2)中得到了应用。
深度学习之几种常见的**函数及其用法
深度学习之几种常见的**函数及其用法

5个**函数总结

sigmoid **函数由于容易出现梯度消失,已经很少应用,以下为常使用的5个**函数。

名称 优点 缺点 使用场景
ReLU**函数 1,计算快,不涉及成本更高的指数运算。2,避免梯度消失问题 引入了死亡ReLU 普遍适用
ELU**函数 1,避免了死亡 ReLU 问题。2,得到负值输出,帮助网络向正确的方向推动权重和偏置变化。3,计算梯度时能得到**,而不是让它们等于 0。 1,指数运算,计算时间长。2,神经网络不学习 α 值。 普遍适用
Leaky ReLU**函数 1,避免了死亡ReLU。2,计算快 1,神经网络不学习α 值 普遍适用
SELU**函数 1,内部归一化,比外部归一化快,网络能更快收敛。2,不可能出现梯度消失或爆炸问题 1,计算复杂2,比较新 CNN,RNN
GELU**函数 1,避免梯度消失。2,NLP领域当前最佳,尤其在Transformer模型中表现最好 较新 NLP

如有错误,欢迎指正。