qianceng神经网络_深度学习笔记(七)浅层神经网络之激活函数

一、激活函数的选择

上一篇笔记中学习到,应该怎样计算网络的输出?

$$z^{[1]}=W^{[1]}x+b^{[1]}$$

$$a^{[1]}=\sigma(z^{[1]})$$

$$z^{[2]}=W^{[2]}a^{[1]}+b^{[2]}$$

$$a^{[2]}=\sigma(z^{[2]})$$

事实上,我们仅仅用到了$\sigma(x)=\frac{1}{1+e^{-x}}$激活函数,输出单元的激活函数 不仅仅是$\sigma(x)$,还有很多...那么用$g(z)$代替$\sigma(z)$,网络输出计算可改写为:

$$z^{[1]}=W^{[1]}x+b^{[1]}$$

$$a^{[1]}=g(z^{[1]})$$

$$z^{[2]}=W^{[2]}a^{[1]}+b^{[2]}$$

$$a^{[2]}=g(z^{[2]})$$

首先介绍一下另一个激活函数——双曲正切函数:$tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}.$ 如图所示,这个函数几乎总是比$\sigma$表现要好。优点在于这个非线性函数能起到数据中心化的作用,让数据平均值为0.而非0.5.使得下一层网络的学习更加方便。

小结一点:tanh函数比$\sigma$函数更具有普适性,几乎所有场合可以用tanh而非后者,但是在二分类期望输出[0,1]时,隐藏层选择tanh,输出层仍然选择$\sigma$即可。

如果说自变量$z$非常大或非常小的时候,$\sigma$和$tanh$梯度都非常小,不利于梯度下降法。接下来介绍现在默认常用的激活函数:$a=ReLU(z)=max(0,z).$ 即非线性修正单元。如果你不知道隐藏层该用什么激活函数,那么建议使用ReLU.

还有一种表现更佳的激活函数,但是使用频率较低,带泄露的ReLU(leaky ReLU)

$$a=max(0.01z,z)$$

最后总结一下激活函数的选择,我把函数和解释都放在一幅图中。

二、为什么用非线性激活函数?

如果我们令$$a^{[1]}=z^{[1]},a^{[2]}=z^{[2]}.$$

即激活函数$$g(z)=z.$$

我们称这个激活函数为线性激活函数 或 恒等激活函数。

如果用了这样一个线性激活函数,结果会怎么样?我们来看看吴恩达老师的推导过程。

如果在网络层中使用线性激活函数,输出的结果也同样只是线性结果,因为线性函数的组合同样也是线性函数,无法计算出更有趣的函数。不使用非线性激活函数就和没有隐藏层效果相同,网络层数再多,也没有一点儿用!

三、激活函数的导数

对于$sigmoid$函数$$a=g(z)=\frac{1}{1+e^{-z}}$$

$$g'(z)=\frac{d}{dz}g(z)=a(1-a)$$

对于$tanh$函数$$a=g(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}$$

$$g'(z)=1-a^2$$

对于$ReLU$函数$$a=g(z)=max(0,z)$$

$$ f(x)=\left\{\begin{aligned}0 , z<0;\\1,z\geq0.\end{aligned}\right.$$

对于$leakyReLU$函数$$a=g(z)=max(0.01z,z)$$

$$f(x)=\left\{\begin{aligned}0.01 , z<0;\\1,z\geq0.\end{aligned}\right.$$

有了这些求导基础后,我们就可以准备实现神经网络上的梯度下降算法了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值