神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)

神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)

常规 sigmoid 和 tanh

sigmoid


这里写图片描述
神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)_第1张图片

特点:可以解释,比如将0-1之间的取值解释成一个神经元的激活率(firing rate)

缺陷:

  1. 有饱和区域,是软饱和,在大的正数和负数作为输入的时候,梯度就会变成零,使得神经元基本不能更新。
  2. 只有正数输出(不是zero-centered),这就导致所谓的zigzag现象:


神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)_第2张图片

详细说明:


神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)_第3张图片

3 . 计算量大(exp)

tanh

tanh函数定义如下:


这里写图片描述

激活函数形状:


神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)_第4张图片

tanh和sigmoid函数是具有一定的关系的,可以从公式中看出,它们的形状是一样的,只是尺度和范围不同。

tanh是zero-centered,但是还是会饱和。

ReLU 大家族

ReLU


神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)_第5张图片

CNN中常用。对正数原样输出,负数直接置零。在正数不饱和,在负数硬饱和。relu计算上比sigmoid或者tanh更省计算量,因为不用exp,因而收敛较快。但是还是非zero-centered。

relu在负数区域被kill的现象叫做dead relu,这样的情况下,有人通过初始化的时候用一个稍微大于零的数比如0.01来初始化神经元,从而使得relu更偏向于激活而不是死掉,但是这个方法是否有效有争议。

LeakyReLU


神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)_第6张图片

为了解决上述的dead ReLU现象。这里选择一个数,让负数区域不在饱和死掉。这里的斜率都是确定的。

PReLU

parametric rectifier:

f(x) = max(ax,x)

但是这里的a不是固定下来的,而是可学习的。

ELU


神经网络激活函数汇总(Sigmoid、tanh、ReLU、LeakyReLU、pReLU、ELU、maxout)_第7张图片

具有relu的优势,且输出均值接近零,实际上prelu和LeakyReLU都有这一优点。有负数饱和区域,从而对噪声有一些鲁棒性。可以看做是介于relu和LeakyReLU之间的一个东西。当然,这个函数也需要计算exp,从而计算量上更大一些。

大一统:Maxout

maxout是通过分段线性函数来拟合所有可能的凸函数来作为激活函数的,但是由于线性函数是可学习,所以实际上是可以学出来的激活函数。具体操作是对所有线性取最大,也就是把若干直线的交点作为分段的界,然后每一段取最大。

maxout可以看成是relu家族的一个推广。

缺点在于增加了参数量。

更多相关见以前整理的一篇:深度学习中的各种tricks_2.0_maxout

2018年04月22日21:53:22

你可能感兴趣的:(深度学习,深度学习专题)