为什么在分类时要使用激活函数

简单的二分类问题

softplus激活函数使用 激活函数的使用_神经网络


1.网络结构的设计

  • 将类别设为圆形为0、正方形为1
  • input: 每个点(圆形和正方形)的坐标
  • output: 0或者1
  • 网络结构如下图

2.分类结果

输出为 softplus激活函数使用 激活函数的使用_神经网络_02 ,此为 softplus激活函数使用 激活函数的使用_人工智能_03softplus激活函数使用 激活函数的使用_神经网络_04 的线性组合,线性组合只能是直线,这样就拟合处一条直线,将圆形和正方形进行分类,分类后的结果如下图

softplus激活函数使用 激活函数的使用_神经网络_05

复杂的二分类问题

softplus激活函数使用 激活函数的使用_深度学习_06

解决这类问题,如果我们还是用线性的方式解决这类问题,可以把圆形和正方形分类成如下结果,可以看到分类效果并不好,并且加再多的隐藏层,结果依然是线性组合,线性组合只能是直线。

softplus激活函数使用 激活函数的使用_神经网络_07

1、加上激活函数网络结果的设计

其中σ表示激活函数

softplus激活函数使用 激活函数的使用_softplus激活函数使用_08


2、每个神经元的输入和输出

softplus激活函数使用 激活函数的使用_激活函数_09

softplus激活函数使用 激活函数的使用_深度学习_10

softplus激活函数使用 激活函数的使用_激活函数_11

这时我们在得到输出的时候增加了非线性激活函数,使原来只能是线性组合的输出也增加了非线性的表达方式

3、加上激活函数的分类结果

加上非线性的表达方式后,拟合的结果就可以如下图,这样就可以很完美的完成分类

softplus激活函数使用 激活函数的使用_神经网络_12

激活函数的用途

  • 神经网络中的每个神经元节点接受上一层神经元的输出值作为本层神经元的输入值,在多层神经网络中,上层节点的输出和下层节点的输入之间具有一个函数关系,这个函数称为激活函数。
  • 每一层的输出是输入的线性组合,如果没有激活函数,每一层节点的输入都是上层输出的线性函数,网络的逼近能力有限,因此引入非线性函数作为激活函数,使网络结表达能力就更加强大(可以表现非线性关系)。

激活函数的种类

几种常见的激活函数有:sigmoid函数、tanh函数、relu函数等

sigmoid函数

功能

将变量映射到(0,1)之间,如果变量非常大的负数,则会被映射成0,如果是非常大的正数,会被映射为1。sigmoid函数可以用来计算实数、矢量和矩阵。

数学形式

softplus激活函数使用 激活函数的使用_深度学习_13

函数图像与导数图像

softplus激活函数使用 激活函数的使用_深度学习_14

缺点
  • 会造成梯度消失
    —还有可能造成梯度爆炸
    从上图sigmoid函数的导数的图像中可以看到,若输入稍偏离原点0,则函数的梯度就变的很小了。在优化损失函数时,通过链式法则来计算各个权重对损失函数的影响,反向传播经过很多层sigmoid后,梯度可能会小到接近0,从而造成梯度消失,使得浅层的权值得不到更新。
  • sigmoid的outout不是0均值(0均值可以在传播中加快网络中每一层权重参数的收敛)
  • 函数中有幂指数,计算费时。

tanh函数

数学形式

softplus激活函数使用 激活函数的使用_激活函数_15

函数图像与导数图像

softplus激活函数使用 激活函数的使用_人工智能_16

优点
  • tanh的output是0均值的(以0为中心,有正有负),解决了sigmoid不是0均值的问题
缺点
  • 梯度消失,从tanh导数图像可以看到,当输入偏离0时,梯度会很小
  • 幂指数运算费时

relu函数

数学形式

softplus激活函数使用 激活函数的使用_深度学习_17

函数图像及导数图像

softplus激活函数使用 激活函数的使用_softplus激活函数使用_18

优点
  • 计算速度快,不需要计算幂指数,只需要比较是否大于0
  • 当输入是正数时,可以解决梯度消失的问题,因为当input>0时,导数都是等于1,梯度不会消失
缺点
  • output不是0均值
  • Dead ReLU Problem,在负数部分,梯度为0,相应参数永远不会被更新,并且某些神经元可能永远不会被激活(前向传播中前一层的输出为负时,激活后为0),变成dead Neuron。在使用relu激活函数时,要必免learning rate设置太大,使得更新太快(梯度下降是用w=w−learningrate∗gradient,若learning rate设置太高,使得w变为负数,有可能会使relu的input变为负数,从而失去对该神经元的激活),或者 使用Xavier初始化参数 的方法。

激活函数的选择

最好不要用sigmoid,tanh也是不适用的,其会导致梯度消失问题。使用relu函数,要小心设置learning rate。还有其他的激活函数,如leaky relu、prelu和maxout等等,可以优先选择relu,如果出现Dead ReLU Problem,应该使用leaky relu、prelu和maxout。



【知识拾遗】 1、为什么0均值可以0均值可以在传播中加快网络中每一层权重参数的收敛? 由反向传播的推导过程可以得知,当前一层的output是正的,那么梯度(对函数

softplus激活函数使用 激活函数的使用_深度学习_19softplus激活函数使用 激活函数的使用_softplus激活函数使用_20