文章目录

  • 1 sigmoid激活函数的不足之处
  • 2. Relu
  • 3. Relu的变种
  • 3.1 LeakReLU
  • 3.2 PReLU
  • 3.3 RReLU
  • 4. MaxOut 网络
  • 4.1 与ReLU的关系
  • 4.2 可能训练处激活函数的样子
  • 4.3 MaxOut 的训练


1 sigmoid激活函数的不足之处

在网络结构非常深的情况下,由于梯度消失问题的存在,可能会导致靠近输入附近的隐藏层的权重变化较慢,导致结果训练效果较差。

2. Relu

ReLU用那个损失 relu 作用_激活函数


修正线性单元(Rectified linear unit,ReLU)是神经网络中最常用的激活函数。它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为零,从而允许基于梯度的学习(尽管在 x=0 的时候,导数是未定义的)。

使用这个函数能使计算变得很快,因为无论是函数还是其导数都不包含复杂的数学运算。然而,当输入为负值的时候,ReLU 的学习速度可能会变得很慢,甚至使神经元直接无效,因为此时输入小于零而梯度为零,从而其权重无法得到更新,在剩下的训练过程中会一直保持静默。

所以,你看到的网络可能是这样的:

ReLU用那个损失 relu 作用_激活函数_02


实际上它可能是这样的:

ReLU用那个损失 relu 作用_斜率_03

question 1:这样的网络结构,输出结果难道不是线性的吗?
是的,还是非线性的,因为对于同一个激活函数的神经元来说,当输入数据的不同,可能使得激活函数对应的区域不同,可能处于线性状态,可能出于0状态,所以还是处于非线性状态。

question 2:ReLU 是不可导的,怎样训练?
只是在0点处不可导,不可能都是处于0的状态吧?

3. Relu的变种

3.1 LeakReLU

ReLU用那个损失 relu 作用_斜率_04


经典(以及广泛使用的)ReLU 激活函数的变体,带泄露修正线性单元(Leaky ReLU)的输出对负值输入有很小的坡度。由于导数总是不为零,这能减少静默神经元的出现,允许基于梯度的学习(虽然会很慢)。

3.2 PReLU

ReLU用那个损失 relu 作用_激活函数_05


参数化修正线性单元(Parameteric Rectified Linear Unit,PReLU)属于 ReLU 修正类激活函数的一员。它和 RReLU 以及 Leaky ReLU 有一些共同点,即为负值输入添加了一个线性项。而最关键的区别是,这个线性项的斜率实际上是在模型训练中学习到的。

3.3 RReLU

ReLU用那个损失 relu 作用_权重_06


随机带泄露的修正线性单元(Randomized Leaky Rectified Linear Unit,RReLU)也属于 ReLU 修正类激活函数的一员。和 Leaky ReLU 以及 PReLU 很相似,为负值输入添加了一个线性项。而最关键的区别是,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)。

4. MaxOut 网络

Learnable activation function

首先让每一层的输出结果按照两两或者其他数量进行分组,每一组仅取最大值,于是就有:

ReLU用那个损失 relu 作用_ReLU用那个损失_07

4.1 与ReLU的关系

ReLU用那个损失 relu 作用_激活函数_08

当MaxOut的weight不同时,可能激活函数为下面这个样子:

ReLU用那个损失 relu 作用_权重_09

所以,MaxOut是可训练的激活函数。

4.2 可能训练处激活函数的样子

ReLU用那个损失 relu 作用_斜率_10

4.3 MaxOut 的训练

ReLU用那个损失 relu 作用_斜率_11

question:如果有的神经元没有被训练到怎么办?

ReLU用那个损失 relu 作用_斜率_12


其实不存在的,因为随着输入数据的不同,使用的神经元也不同,所以基本上不会存在没有被训练的神经元。和卷积神经网络中的Max pooling的训练算法是一样的。