0.声明:
本文中所有的
z
z
z,都是
z
=
w
T
x
z=w^Tx
z=wTx,我们需要给
z
z
z加一个激活函数:
1.sigmoid函数
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1
-
函数取值范围 ( 0 , 1 ) (0,1) (0,1)
-
求 g ′ ( z ) g'(z) g′(z), g ′ ( z ) = − 1 × ( 1 + e − z ) ′ ( 1 + e − z ) 2 = e − z ( 1 + e − z ) 2 = 1 1 + e − z ( 1 − 1 1 + e − z ) = g ( z ) ( 1 − g ( z ) ) g'(z)=\frac{-1\times (1+e^{-z})'}{(1+e^{-z})^2}=\frac{e^{-z}}{(1+e^{-z})^2}=\frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}})=g(z)(1-g(z)) g′(z)=(1+e−z)2−1×(1+e−z)′=(1+e−z)2e−z=1+e−z1(1−1+e−z1)=g(z)(1−g(z))
-
当 z = 10 z=10 z=10或 z = − 10 z=-10 z=−10时, d d z g ( z ) ≈ 0 \frac{d}{dz}g(z)\approx 0 dzdg(z)≈0
-
当 z = 0 z=0 z=0时, d d z g ( z ) = g ( z ) ( 1 − g ( z ) ) = 1 / 4 \frac{d}{dz}g(z)=g(z)(1-g(z))=1/4 dzdg(z)=g(z)(1−g(z))=1/4
-
在神经网络中 a = g ( z ) a=g(z) a=g(z),所以, g ′ ( z ) = a ( 1 − a ) g'(z)=a(1-a) g′(z)=a(1−a)
2.tanh函数
或叫做双曲正切函数,
g
(
z
)
=
t
a
n
h
(
z
)
=
e
z
−
e
−
z
e
z
+
e
−
z
g(z)=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}
g(z)=tanh(z)=ez+e−zez−e−z
- 函数取值范围 ( − 1 , 1 ) (-1,1) (−1,1)
- 求 g ′ ( z ) g'(z) g′(z), g ′ ( z ) = ( e z − e − z ) ′ ( e z + e − z ) − ( e z − e − z ) ( e z + e − z ) ′ ( e z + e − z ) 2 = 1 − t a n h 2 ( z ) g'(z)=\frac{(e^z-e^{-z})'(e^z+e^{-z})-(e^z-e^{-z})(e^z+e^{-z})'}{(e^z+e^{-z})^2}=1-tanh^2(z) g′(z)=(ez+e−z)2(ez−e−z)′(ez+e−z)−(ez−e−z)(ez+e−z)′=1−tanh2(z)
- 当 z = 10 z=10 z=10或 z = − 10 z=-10 z=−10时, d d z g ( z ) ≈ 0 \frac{d}{dz}g(z)\approx 0 dzdg(z)≈0
- 当 z = 0 z=0 z=0时, d d z g ( z ) = 1 − t a n h 2 ( 0 ) = 1 \frac{d}{dz}g(z)=1-tanh^2(0)=1 dzdg(z)=1−tanh2(0)=1
从sigmod和tanh的函数图像可以看出,事实上,tanh函数是sigmoid的向下平移和伸缩后的结果。对它进行了变形后,穿过了点,并且值域介于+1和-1之间。
注意:
sigmoid函数和tanh函数两者共同的缺点是,在 z z z特别大或者特别小的情况下,导数的梯度或者函数的斜率会变得特别小,最后就会接近于0,导致降低梯度下降的速度。
3.ReLu函数
线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元,是一种人工神经网络中常用的激活函数。
g
(
z
)
=
m
a
x
(
0
,
z
)
g(z)=max(0,z)
g(z)=max(0,z)
只要是正值的情况下,导数恒等于1,当
z
z
z是负值的时候,导数恒等于0。从实际上来说,当使用
z
z
z的导数时,
z
=
0
z=0
z=0的导数是没有定义的。
- z < 0 z<0 z<0时, g ′ ( z ) = 0 g'(z)=0 g′(z)=0
- z > 0 z>0 z>0时, g ′ ( z ) = 1 g'(z)=1 g′(z)=1
- 注:通常在 z = 0 z= 0 z=0的时候给定其导数1,0;当然 z = 0 z=0 z=0的情况很少
4.Leaky Relu
是另一个版本的Relu,
a
=
m
a
x
(
0.01
z
,
z
)
a=max(0.01z,z)
a=max(0.01z,z)
当
z
z
z是负值时,这个函数的值不是等于0,而是轻微的倾斜,如上图。
为什么常数是0.01?当然,可以为学习算法选择不同的参数。