文章目录
- 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
修正线性单元(Rectified linear unit,ReLU)是神经网络中最常用的激活函数。它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为零,从而允许基于梯度的学习(尽管在 x=0 的时候,导数是未定义的)。
使用这个函数能使计算变得很快,因为无论是函数还是其导数都不包含复杂的数学运算。然而,当输入为负值的时候,ReLU 的学习速度可能会变得很慢,甚至使神经元直接无效,因为此时输入小于零而梯度为零,从而其权重无法得到更新,在剩下的训练过程中会一直保持静默。
所以,你看到的网络可能是这样的:
实际上它可能是这样的:
question 1:这样的网络结构,输出结果难道不是线性的吗?
是的,还是非线性的,因为对于同一个激活函数的神经元来说,当输入数据的不同,可能使得激活函数对应的区域不同,可能处于线性状态,可能出于0状态,所以还是处于非线性状态。question 2:ReLU 是不可导的,怎样训练?
只是在0点处不可导,不可能都是处于0的状态吧?
3. Relu的变种
3.1 LeakReLU
经典(以及广泛使用的)ReLU 激活函数的变体,带泄露修正线性单元(Leaky ReLU)的输出对负值输入有很小的坡度。由于导数总是不为零,这能减少静默神经元的出现,允许基于梯度的学习(虽然会很慢)。
3.2 PReLU
参数化修正线性单元(Parameteric Rectified Linear Unit,PReLU)属于 ReLU 修正类激活函数的一员。它和 RReLU 以及 Leaky ReLU 有一些共同点,即为负值输入添加了一个线性项。而最关键的区别是,这个线性项的斜率实际上是在模型训练中学习到的。
3.3 RReLU
随机带泄露的修正线性单元(Randomized Leaky Rectified Linear Unit,RReLU)也属于 ReLU 修正类激活函数的一员。和 Leaky ReLU 以及 PReLU 很相似,为负值输入添加了一个线性项。而最关键的区别是,这个线性项的斜率在每一个节点上都是随机分配的(通常服从均匀分布)。
4. MaxOut 网络
Learnable activation function
首先让每一层的输出结果按照两两或者其他数量进行分组,每一组仅取最大值,于是就有:
4.1 与ReLU的关系
当MaxOut的weight不同时,可能激活函数为下面这个样子:
所以,MaxOut是可训练的激活函数。
4.2 可能训练处激活函数的样子
4.3 MaxOut 的训练
question:如果有的神经元没有被训练到怎么办?
其实不存在的,因为随着输入数据的不同,使用的神经元也不同,所以基本上不会存在没有被训练的神经元。和卷积神经网络中的Max pooling的训练算法是一样的。