此系列是记录DL、ML相关的一些基础概念,便于理解和回顾!一天两道!哈哈哈~~,水滴石穿!小白水平,若有错误,欢迎指正!
深度学习之非线性激励函数
参考链接:https://www.sohu.com/a/214965417_100008678
1、使用激活函数的重要性
不使用激活函数的话,每一层输出都是上层输入的线性函数,无论网络多少层,输出都是输入的线性组合;
使用的话,就引入了非线性元素,使得神经网络训练后可以逼近任意的非线性函数,这样的 model 可以应用到众多的非线性模型中。
2、Sigmoid函数
σ
(
x
)
=
1
1
+
e
−
x
\sigma(x)=\frac{1}{1+e^{-x}}
σ(x)=1+e−x1其中
x
x
x 表示上一层的输出。其函数图和导数图如下:
求导得:
σ
(
x
)
′
=
σ
(
x
)
⋅
(
1
−
σ
(
x
)
)
\sigma(x)^{\prime}=\sigma(x) \cdot(1-\sigma(x))
σ(x)′=σ(x)⋅(1−σ(x))。函数值在[0,1]之间,导数在[0,0.25]之间。取:激活函数为
A
(
w
i
x
i
+
b
i
)
A(w_{i}x_{i}+b_{i})
A(wixi+bi),输出的值为:
y
=
A
(
w
i
x
i
+
b
i
)
y=A(w_{i}x_{i}+b_{i})
y=A(wixi+bi),输入的值:
v
=
w
i
x
i
+
b
i
v=w_{i}x_{i}+b_{i}
v=wixi+bi。那么梯度更新为:
w
i
+
1
=
w
i
−
η
∂
L
∂
w
w_{i+1}=w_{i}-\eta\frac{\partial L}{\partial w}
wi+1=wi−η∂w∂L
=
w
i
−
η
(
∂
L
∂
y
∂
y
∂
v
∂
v
∂
w
)
=w_{i}-\eta(\frac{\partial L}{\partial y}\frac{\partial y}{\partial v}\frac{\partial v}{\partial w})
=wi−η(∂y∂L∂v∂y∂w∂v)其中 L 为损失函数,当
x
x
x 为
−
i
n
f
-inf
−inf 或者
+
i
n
f
+inf
+inf 的时候,
σ
(
x
)
\sigma(x)
σ(x)为 0 或者 -1,此时的梯度为 0。那么
∂
y
∂
v
\frac{\partial y}{\partial v}
∂v∂y = 0,那么
w
i
+
1
=
w
i
w_{i+1}=w_{i}
wi+1=wi。这样权重
w
w
w 没有更新到。且
σ
(
x
)
\sigma(x)
σ(x) 函数不是关于原点对称,均值接近0.5,不利于下一层学习,收敛速度慢。并且导数的最大值为0.25,太小了,小的不能再小了。
输出0均值的好处:举例来讲,如果所有均为正数或负数,那么其对的导数总是正数或负数,这会导致如下图红色箭头所示的阶梯式更新,这显然并非一个好的优化路径。深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。
3、tanh函数
tanh
x
=
e
x
−
e
−
x
e
x
+
e
−
x
\tanh x=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}
tanhx=ex+e−xex−e−x
函数是零均值,函数范围为 [-1,1],导数范围为 [0,1]。但是无法缓解 梯度饱和 现象。
4、ReLu函数
ReLu
(
z
)
=
{
z
z
>
0
0
z
<
=
0
\operatorname{ReLu}(z)=\left\{\begin{array}{ll}{z} & {z>0} \\ {0} & {z<=0}\end{array}\right.
ReLu(z)={z0z>0z<=0
修正线性单元relu实际上是一个分段函数,梯度在 x >= 0 为 1, 反之为 0。x >= 0时,导数为1,完全消除了sigmoid函数的饱和效应;x<0时输出0,神经元不会被激活,意味着同一时间只有部分神经元会被激活,从而使得网络很稀疏,对计算来说非常有效率。计算复杂度上relu也相对sigmoid和tanh更为简单。实验中还发现relu函数有助于随机梯度下降方法收敛,收敛速度快6倍左右。但是仍然有缺陷。
在x<0时,梯度为0,这部分卷积结果响应一旦变为负值将无法影响网络训练,这种现象叫死区。有两个主要原因可能导致这种情况产生:
- 非常不幸的参数初始化,中大奖,倒霉到家;
- learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用自动调节learning rate的算法