激活函数的使用

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

简单的二分类问题

在这里插入图片描述
1.网络结构的设计

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

2.分类结果
输出为 y = w 1 x 1 + w 2 x 2 + b y =w_1x_1+w_2x_2+b y=w1x1+w2x2+b ,此为 x 1 x1 x1 x 2 x2 x2 的线性组合,线性组合只能是直线,这样就拟合处一条直线,将圆形和正方形进行分类,分类后的结果如下图
在这里插入图片描述

复杂的二分类问题

在这里插入图片描述

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

1、加上激活函数网络结果的设计
其中σ表示激活函数
在这里插入图片描述
2、每个神经元的输入和输出
h 1 = w 1 x 1 + w 2 x 2 + b 1 h1 = w_1x_1 + w_2x_2 +b1 h1=w1x1+w2x2+b1
h 1 = w 3 x 1 + w 4 x 2 + b 1 h1 = w_3x_1 + w_4x_2 +b1 h1=w3x1+w4x2+b1
y = σ ( h 1 ) w 5 + σ ( h 2 ) w 6 + b 2 y = σ(h1)w_5 + σ(h2)w_6 +b2 y=σ(h1)w5+σ(h2)w6+b2
这时我们在得到输出的时候增加了非线性激活函数,使原来只能是线性组合的输出也增加了非线性的表达方式
3、加上激活函数的分类结果
加上非线性的表达方式后,拟合的结果就可以如下图,这样就可以很完美的完成分类
在这里插入图片描述

激活函数的用途

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

激活函数的种类

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

sigmoid函数

功能

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

数学形式

f ( x ) = 1 e x + 1 {f(x) =\frac{1}{e^x+1} } f(x)=ex+11

函数图像与导数图像

在这里插入图片描述

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

tanh函数

数学形式

t a n h ( x ) = e x − e − x e x + e − x {tanh(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}}} tanh(x)=ex+exexex

函数图像与导数图像

在这里插入图片描述

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

relu函数

数学形式

r e l u ( x ) = m a x ( 0 , x ) {relu(x) = max(0,x)} relu(x)=max(0,x)

函数图像及导数图像

在这里插入图片描述

优点
  • 计算速度快,不需要计算幂指数,只需要比较是否大于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是正的,那么梯度(对函数

f = w T x + b f = w^Tx+b f=wTx+b w {w} w 的偏导数)就是正的,那么在反向传播时,梯度会一直沿着一个方向发生变化,权重的收敛效率会低。0均值可以使输入是正负数量差不多的,那么梯度的变化方向是不确定的,就可以从各个方向来优化权重。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值