深度学习——激活函数

激活函数

1.介绍

激活函数(Activation Function)层又称非线性映射(Non-Linearity Mapping)层,作用是增加整个网络的非线性(即表达能力或抽象能力)。深度学习之所以拥有强大的表示能力 ,关键就在于激活函数的非线性

然而物极必反。由于 非线性设计 所带来的一系列 副作用(如 期望均值不为0、死区),迫使炼丹师们设计出种类繁多的激活函数来 约束 非线性 的 合理范围

由于激活函数接在BN之后,所以激活函数的输入被限制在了(1,1)(-1,-1)之间。因此,即使是ReLu这种简易的激活函数,也能很好地发挥作用

2.函数类型

Sigmoid

Sigmoid函数,即著名的 Logistic 函数。被用作神经网络的阈值函数,将变量映射到(0,1)(0,1)之间
S(x)=11+ex S(x)=\frac{1}{1+e^{-x}}
在这里插入图片描述

缺点:

(1)输出值落在(0,1)(0,1)之间,期望均值为 0.5 ,不符合均值为 0 的理想状态(2)受现有的梯度下降算法所限(严重依赖逐层的梯度计算值),Sigmoid函数对落入(,5)(5,)(-\infty,-5)\bigcup(5,\infty)的输入值,梯度计算为 0,发生梯度弥散,因此该函数存在一正一负两块“死区”

tanh(x)

tanh是双曲函数中的一种,又名双曲正切
tanh(x)=2S(2x)1=exexex+ex tanh(x)=2S(2x)-1=\frac{e^x-e^{-x}}{e^x+e^{-x}}
在这里插入图片描述

改进:

将期望均值平移到了0这一理想状态

缺点:

本质上依然是Sigmoid函数,依然无法回避一左一右两块 “死区”(此时“死区”甚至还扩张了区间范围)

ReLu

ReLu函数,Rectified Linear Unit,又称 修正线性单元
ReLu(x)=max(0,x) ReLu(x)=max(0,x)
在这里插入图片描述
ReLu设计已成为了深度网络的标配,当下深度网络的结构和relu相关的两大标配:He初始化(对ReLu网络有利)和Conv->BN->ReLu(默认采用relu)

改进:

彻底消灭了正半轴上的死区;计算超简单;正是因为Alex Net中提出了ReLu,在当时很好地缓解了梯度弥散,使得网络深度的天花板第一次被打破;该设计有助于使模型参数稀疏。

缺点

期望均值跑得离0更远了;负半轴上的死区直接蚕食到了 0点

ReLu6

由于Relu函数的正半轴不施加任何非线性约束,因此当输入为正大数时,易引起正半轴上的梯度爆炸。因此,Relu6 应运而生
ReLu6(x)=min(max(0,x),6) ReLu6(x)=min(max(0,x),6)
在这里插入图片描述

改进:

对正半轴 施加了 非线性约束;计算超简单

缺点:

期望均值依然不为 0 ;正半轴上的“死区”死灰复燃,从ReLu的(,0)(-\infty,0)蚕食至 ReLu6的(,0)(6,)(-\infty,0)\bigcup(6,\infty),但是15年BN出来之后,输入被归一化到了(1,1)(-1,1)之间。因此,ReLu6的设计就显得没有必要了

Leaky ReLu

对ReLu函数新增一超参数λ\lambda,以解决负半轴的“死区”问题

其中,超参数常被设定为0.01或0.001数量级的较小正数

改进:

把 负半轴上的“死区”也端了,从此再无“死区”

缺点:

期望均值依然不为0;合适的λ\lambda值较难设定且较为敏感,导致在实际使用中性能不稳定

参数化ReLu

将Leaky ReLu函数中的超参数λ\lambda设置为和模型一起被训练到的变量,以解决λ\lambda值较难设定的问题

改进:

更大自由度

缺点:

更大的过拟合风险;较为麻烦

随机化ReLu

将 Leaky ReLu函数中的超参数λ\lambda随机设置

ELU

ELU函数,Exponential Linear Unit,又称指数化线性单元 ,于2016年提出
ELU(x)={x,x0λ(ex1),x<0 ELU(x)=\left\{ \begin{aligned} x,x\ge0\\ \lambda(e^x-1),x<0 \\ \end{aligned} \right.
其中,超参数λ\lambda常备设定为1

改进:

完美解决了“死区”问题

缺点:

期望均值依然不为0;计算较为复杂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章