激活函数

来源:互联网 发布:西南交大远程网络教育 编辑:程序博客网 时间:2024/04/30 00:38

1、什么是激活函数

激活函数(Activation Function)是用来加入非线性因素的,能够把输入的特征保留并映射下来。简单来说,就是用来拟合非线性的问题。


2、为什么要引进激活函数

线性的模型的表达能力不够。
a.对于一些线性问题可以线性区分,如一条直线对分类问题进行简单区分。这时可以使用单层感知机,单层感知机是神经网络组成单元。

b.对于一些非线性问题,可以在线性的基础上做一些线性变换或可以选择多层感知机(前馈神经网络)。多层感知机,不过是复杂的线性组合,此模型前向,无反馈,可以用无限多条直线逼近一条曲线。如三个函数f1,f2,f3:

         f(x)=f3(f2(f1))         f1:第一层         f2:第二层         f3:第三层

但对于需要大量线性函数拟和曲线的多层感知机,这样做太复杂和麻烦。
所以这个时候,就引入非线性函数。能够把输入的特征保留并映射下来,拟合非线性。


3、激活函数实例

为了更进一步的理解激活函数,下面就来举一个常用的例子,虽然烂大街,但是却十分经典:异或问题

这里写图片描述

显然异或函数非线性函数,线性不可分。但是我们可以设计一种神经网络,通过激活函数来使得这组数据线性可分。激活函数我们选择阀值函数(threshold function),也就是大于某个值输出1(被激活了),小于等于则输出0(没有激活)。这个函数是非线性函数。

这里写图片描述

这里写图片描述

如此就解决线性模型所不能解决的问题。


4、激活函数种类

Sigmoid

σ(x)=11+ex

这里写图片描述
Sigmoid 非线性函数将输入映射到 (0,1)之间。但是现在已经很少使用了,主要有以下两个问题:

  1. 函数饱和使梯度消失
    sigmoid 神经元在值为 0 或 1 的时候接近饱和,这些区域,梯度几乎为 0。这样,几乎就没有信号通过神经元传到权重再到数据了,因此这时梯度就对模型的更新没有任何贡献。除此之外,初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习。
  2. sigmoid 函数不是关于原点中心对称的
    这个特性会导致后面网络层的输入也不是零中心的,进而影响梯度下降的运作

tanh
tanh 函数实际上是一个放大的 sigmoid 函数,数学关系为:

tanh(x)=2σ(2x)1

这里写图片描述

tanh 函数同样存在饱和问题,但它的输出是零中心的,因此实际中 tanh 比 sigmoid 更受欢迎。

ReLU
ReLU 近些年来非常流行。它的数学公式为:

f(x)=max(0,x)

这里写图片描述
相较于 sigmoid 和 tanh 函数,ReLU 对于 SGD 的收敛有巨大的加速作用。有人认为这是由它的线性、非饱和的公式导致的。
相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的(指数)运算。ReLU 的缺点是,它在训练时比较脆弱并且可能“死掉”。一个非常大的梯度经过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0。也就是说,这个 ReLU 单元在训练中将不可逆转的死亡,导致了数据多样化的丢失。实际中,如果学习率设置得太高,可能会发现网络中 40% 的神经元都会死掉
合理设置学习率,会降低这种情况的发生概率。
如果使用 ReLU,那么一定要小心设置 learning rate

Leaky ReLU
Leaky ReLU 是为解决“ ReLU 死亡”问题的尝试。
ReLU 中当 x<0 时,函数值为 0。而 Leaky ReLU 则是给出一个很小的负数梯度值,比如 0.01。
这里写图片描述

PReLU

PReLU(Parametric Rectified Linear Unit), 顾名思义:带参数的ReLU。二者的定义和区别如下图:
这里写图片描述

如果ai=0,那么PReLU退化为ReLU;如果ai是一个很小的固定值(如ai=0.01),则PReLU退化为Leaky ReLU(LReLU)。
PReLU的几点说明
(1) PReLU只增加了极少量的参数,也就意味着网络的计算量以及过拟合的危险性都只增加了一点点。
(2) BP更新ai时,采用的是带动量的更新方式,如下图:
这里写图片描述

上式的两个系数分别是动量和学习率。
需要特别注意的是:更新ai时不施加权重衰减(L2正则化),因为这会把ai很大程度上push到0。事实上,即使不加正则化,试验中ai也很少有超过1的。

Maxout
Maxout 是对 ReLU 和 Leaky ReLU 的一般化归纳,它的函数公式是(二维时):

max(wT1+b1,WT2+b2)
ReLU 和 Leaky ReLU 都是这个公式的特殊情况(比如 ReLU 就是当
w1,b1=0
时)。
这样 Maxout 神经元就拥有 ReLU 单元的所有优点(线性和不饱和),而没有它的缺点(死亡的ReLU单元)。然而和 ReLU 对比,它每个神经元的参数数量增加了一倍,这就导致整体参数的数量激增。

原创粉丝点击