2020-5-9 吴恩达-NN&DL-w3 浅层NN(3.7 为什么需要非线性激活函数)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

3.7 为什么需要非线性激活函数?Why do you need non linear activation functions?

事实证明,要让你的NN能够计算出有趣的函数,你必须使用非线性激活函数,这点对于NN来说非常关键。否则就只能是把输入线性组合再输出。

我们已经说明过,双层NN网络正向传播的计算公式如下, A [ 0 ] A^{[0]} A[0]就是输入特征x

Z [ 1 ] = W [ 1 ] A [ 0 ] + b [ 1 ] Z^{[1]}=W^{[1]}A^{[0]}+b^{[1]} Z[1]=W[1]A[0]+b[1]
A [ 1 ] = g [ 1 ] ( Z [ 1 ] ) A^{[1]}=g^{[1]}(Z^{[1]}) A[1]=g[1](Z[1])
Z [ 2 ] = W [ 2 ] A [ 1 ] + b [ 2 ] Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]} Z[2]=W[2]A[1]+b[2]
A [ 2 ] = g [ 2 ] ( Z [ 2 ] ) A^{[2]}=g^{[2]}(Z^{[2]}) A[2]=g[2](Z[2])

其中 g [ 1 ] g^{[1]} g[1]选用tanh函数, g [ 2 ] g^{[2]} g[2]选用 σ \sigma σ函数。tanh函数和 σ \sigma σ函数都是非线性函数。

如果我们去掉g函数,即 A [ 2 ] = Z [ 2 ] A^{[2]}=Z^{[2]} A[2]=Z[2],或者令 g ( z ) = z g(z)=z g(z)=z,这个被称为线性激活函数(更学术点的名字是恒等激活函数,因为它把输入值直接输出了)。此时,预测值 y ^ \hat y y^是输入特征x的线性组合。

证明如下,因为

A [ 1 ] = Z [ 1 ] = W [ 1 ] A [ 0 ] + b [ 1 ] A^{[1]}=Z^{[1]}=W^{[1]}A^{[0]}+b^{[1]} A[1]=Z[1]=W[1]A[0]+b[1]
A [ 2 ] = Z [ 2 ] = W [ 2 ] A [ 1 ] + b [ 2 ] A^{[2]}=Z^{[2]}=W^{[2]}A^{[1]}+b^{[2]} A[2]=Z[2]=W[2]A[1]+b[2]

所以

A [ 2 ] = W [ 2 ] ( W [ 1 ] A [ 0 ] + b [ 1 ] ) + b [ 2 ] = ( W [ 2 ] W [ 1 ] ) A [ 0 ] + ( W [ 2 ] b [ 1 ] + b [ 2 ] ) A^{[2]}=W^{[2]}(W^{[1]}A^{[0]}+b^{[1]})+b^{[2]}=(W^{[2]}W^{[1]})A^{[0]}+(W^{[2]}b^{[1]}+b^{[2]}) A[2]=W[2](W[1]A[0]+b[1])+b[2]=(W[2]W[1])A[0]+(W[2]b[1]+b[2])

W ′ = ( W [ 2 ] W [ 1 ] ) W'=(W^{[2]}W^{[1]}) W=(W[2]W[1]) b ′ = ( W [ 2 ] b [ 1 ] + b [ 2 ] ) b'=(W^{[2]}b^{[1]}+b^{[2]}) b=(W[2]b[1]+b[2]),那么可以得到

A [ 2 ] = W ′ A [ 0 ] + b ′ A^{[2]}=W'A^{[0]}+b' A[2]=WA[0]+b

现在可以发现:如果你是用线性激活函数或者叫恒等激励函数,那么神经网络只是把输入线性组合再输出

这里是以只含一个隐藏层的双层NN为例。如果你在隐藏层用线性激活函数,在输出层用sigmoid函数,那么这个模型的复杂度和没有任何隐藏层的标准逻辑回归是一样的。

对于深度网络,有很多层的NN,会包含很多隐藏层。事实证明,如果你使用线性激活函数或者没有使用激活函数,那么无论你的NN有多少层,一直在做的只是计算线性函数,所以不如直接去掉全部隐藏层。

总结:
线性隐藏层一点用也没有,因为NN节点分2步计算,z已经是线性函数,如果a依然使用线性函数计算,那么这两个线性函数的组合本身就是线性函数。所以除非你引入非线性,否则你无法计算更有趣的函数,即使你的网络层数再多也不行。

只有一个地方可以使用线性激活函数 g ( z ) = z g(z)=z g(z)=z,就是你在做机器学习中的回归问题。

例如,y是一个实数, y ∈ R y \in R yR,如果要预测房地产价格,这是一个可以从0到非常大的数。此时在隐藏层可以使用ReLU,或者tanh,或者leaky ReLU,或者其他的非线性激活函数,而在输出层使用的是线性激活函数。
因为房价都是非负数,所以我们也可以在输出层使用ReLU函数,这样你的预测值 y ^ \hat y y^都大于等于0。

在隐藏层使用线性激活函数非常少见。
在隐藏层使用线性激活函数的,也就是可能是与压缩有关的一些非常特殊的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值