刚开始接触深度学习的小伙伴一定会有一个疑问:我们为什么需要设置激活函数呢?为什么这个激活函数需要是非线性的呢?
本文会就这个问题做一些探讨!
首先来看一个最简单的神经网络:
首先,神经网络需要经过前向传播,于是在每一个节点上,我们要经历的是一次线性变化,和一次非线性激活。
给定输入 x:
z
[
1
]
=
W
[
1
]
x
+
b
[
1
]
z^{[1]} = W^{[1]}x + b^{[1]}
z[1]=W[1]x+b[1]
a
[
1
]
=
g
[
1
]
(
z
[
1
]
)
a^{[1]} = g^{[1]}(z^{[1]})
a[1]=g[1](z[1])
z
[
2
]
=
W
[
2
]
x
+
b
[
2
]
z^{[2]} = W^{[2]}x + b^{[2]}
z[2]=W[2]x+b[2]
a
[
2
]
=
g
[
2
]
(
z
[
2
]
)
a^{[2]} = g^{[2]}(z^{[2]})
a[2]=g[2](z[2])
z表示线性变换,a表示非线性变换。
这里我们用的非线性函数
g
[
1
]
(
)
g^{[1]}( )
g[1]()可以是ReLU,可以是 tanh ,有或者是 sigmoid。
那假设我们不再设置非线性函数,那表达式会变为:
z
[
1
]
=
W
[
1
]
x
+
b
[
1
]
z^{[1]} = W^{[1]}x + b^{[1]}
z[1]=W[1]x+b[1]
a
[
1
]
=
z
[
1
]
a^{[1]} = z^{[1]}
a[1]=z[1]
z
[
2
]
=
W
[
2
]
x
+
b
[
2
]
z^{[2]} = W^{[2]}x + b^{[2]}
z[2]=W[2]x+b[2]
a
[
2
]
=
z
[
2
]
a^{[2]} = z^{[2]}
a[2]=z[2]
经过推导,可得:
a
[
2
]
=
(
W
[
2
]
W
[
1
]
)
x
+
(
W
[
2
]
b
[
1
]
+
b
[
2
]
)
a^{[2]} = (W^{[2]}W^{[1]})x + (W^{[2]}b^{[1]}+b^{[2]})
a[2]=(W[2]W[1])x+(W[2]b[1]+b[2])
其实就等于:
a
[
2
]
=
W
′
x
+
b
′
a^{[2]} = W^{'}x + b^{'}
a[2]=W′x+b′
也就是说,我们的多层神经网络被简化成了单层的线性回归网络!我们设置神经网络隐藏层的意义也就消失了!