1.3.3 激活函数介绍

激活函数

到目前为止,我们使用的激活函数全部都是 σ σ 函数,然而这并不一定是最好的函数,有时其他可选的函数效果也很好,下面我们来介绍一下其他的函数。

这里写图片描述

如图所示,我们在这里使用 σ σ 函数作为激活函数。我们现在使用g(z(x)),作为更一般的可以使用的函数。我们这里介绍一下tanhx,是双曲正切函数。tanhx,实际上在数学上是 σ σ 函数经过平移之后的结果。tanhx相比于 σ σ 函数更好的一点,就是他介于-1到1之间,平均值为0。而 σ σ 函数的平均值为0.5。这实际上可以让下层的学习更方便一些。因为tanhx的平均值为0,所以几乎在任何场景下,他的结果都比 σ σ 函数更好,但是有一个例外是在输出的预测值y^,因为我们希望输出的预测值介于0和1之间,而不是-1和1之间。在这里 σ σ 函数要效果好很多。这时我们应该使用 σ σ 函数作为输出层。

不过这两个函数也有一个缺点,从图像中我们可以看到,当z很大或者很小的时候,z的变化量接近于0,这在于我们求梯度的时候效果非常糟糕,会拖慢学习进度。

我们还有一个ReLU函数,为的就是应对这个问题,通常情况下我们都会使ReLU函数作为神经网络的激活函数,如果你不知道选什么函数作为激活函数,一般就选择ReLU函数。不过ReLU函数有一个缺点,就是如果z,是负数的时候,那么导数为0。在实践中使用ReLU函数,相比于tanh函数和 σ σ 函数而言,学习效率会高很多,因为他没有斜率接近于0的时候。

最后,我们总结一下,如图所示:

这里写图片描述

深度学习的一个特点就是在建立神经网络时,可以有很多不同的选择,比如隐藏单元、激活函数,还有如何初始化权重。

为什么需要非线性激活函数

为什么神经网络必须要用非线性的函数呢,我们这里来解释一下:

这里写图片描述

如图所示,如果我们舍去激活函数,或者干脆就让激活函数就等于z本身,而不做一些非线性处理,在图的右侧我们可以看出,最后的结果是

a[2]=wx+b a [ 2 ] = w ‘ x + b ‘

依旧是线性的。

如果你使用线性激活函数,那么神经网络不过是把输入经过线性组合之后再输出。对于这种情况来说,有激活函数和没有激活函数都没有办法改变线性性,无论是有多少的隐藏层也做不到。不引入非线性性,则永远只能在线性性里面打转。

神经网络的梯度下降法

下面我们介绍一下如何用梯度下降法来处理单隐层神经网络。

这里写图片描述

如图所示,左侧是正向传播的计算流程,右侧是反向传播的计算流程。右侧我们有一个语句:

np.sum(dz, axis=1, keepdims=True )

这个命令中axis=1表示的是要水平相加求和,keepdims=True表示的是防止python输出古怪的秩为1的数组,保证输出的是矩阵。
还有一个公式:

dz=wTdzg(z) d z = w T d z ∗ g ‘ ( z )

其中 g(z) g ‘ ( z ) 表示的是隐藏层激活函数的导数,注意这里我们所不同的是乘号两边两个矩阵逐个元素相乘

输出层的公式:

dz=AY d z = A − Y

假设的是用sigmod函数进行一个二元分类。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Einstellung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值