常用的激活函数sigmoid,relu,tanh

1.什么是激活函数?

在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两部:

(1)输入该节点的值为x1,x2时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值z[1]=w1x1+w2x2+b[1]=W[1]x+b[1]

(2)在进行一个非线性变换,也就是经过非线性激活函数,计算出该节点的输出值(激活值)a(1)=g(z(1)),其中g(z)为非线性函数.

2.为什么使用激活函数?

如果不使用激活函数,在这种情况下你每一层输出都是上一层输入的线性函数,很容易验证,无论你的神经网络有多少层,输出都是输入的线性组合,与没有隐藏层的效果相当,这种情况就是最原始的感知机.

正因为上面的原因,我们决定引入非线性函数作为激活函数,这样深层神经网络就有意义了(不再是输入输出间的线性组合了,可以逼近任意函数).最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入.

激活函数的作用是为了增加神经网络模型的非线性.否则的话,没有激活函数的每层就相当于矩阵相乘,就算叠加了若干层的隐藏层,无非也是矩阵相乘罢了,所以没有非线性结构的话,根本就算不上是神经网络.

3.常用的激活函数

3.1 sigmoid函数

sigmoid函数可用在网络的最后一层,作为输出层进行二分类,尽量不要使用在隐藏层

该函数是将取值为(−∞,+∞)的数映射到(0,1)之间.sigmoid函数的公式以及图形如下:

                                                  

对于sigmoid函数的求导推导为:

                                                  

sigmoid函数作为非线性激活函数,具有以下几个缺点:

(1)当z值非常大或者非常小时,sigmoid函数的导数将接近0.这会导致权重W的梯度将接近0,使得梯度更新非常缓慢,即梯度消失

(2)函数的输出不是以0为均值,将不便于下层的计算

3.2 tanh函数

该函数是将取值为(−∞,+∞)的数映射到(-1,+1)之间,其公式与图形为:

                                                           

tanh函数的均值为0,因此弥补了sigmoid函数均值为0.5的缺点.

对于tanh函数的求导推导为:

                                                    

3.3 Relu函数

Relu函数又称为修正线性单元,是一种分段线性函数,其弥补了sigmoid函数以及tanh函数的梯度消失问题.Relu函数的公式以及图形如下:

                                                             

Relu函数的求导为:

                                                                  

Relu函数的优点:
(1)在输入为正数时候,不存在梯度消失问题

(2)计算速度要 快很多,Relu函数只有线性关系,不管是前向传播还是反向传播,都比sigmoid和tanh要快很多(sigmoid和tanh要计算指数,计算速度会比较慢)

Relu函数的缺点:

当输入为负时候,梯度为0,会产生梯度消失问题.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值