首先激活函数肯定非线性连续的。
一.sigmoid
隐患1:饱和神经元导致梯度消失:
如果此时输入sigmoid的
x
x
x值为10或者-10等,
x
x
x是位于饱和区的数,该位置sigmoid的梯度(斜率)是几乎为0的正数,即在此处
∂
σ
∂
x
≈
0
(
正
)
\frac{\partial \sigma}{\partial x }\approx 0(正)
∂x∂σ≈0(正),会使得链式求导法则中上游的梯度
∂
L
∂
δ
\frac{\partial L}{\partial \delta}
∂δ∂L与该层的偏导数
∂
σ
∂
x
\frac{\partial \sigma}{\partial x }
∂x∂σ相乘之后得到一个及其小的数——梯度消失,这样会使得本层训练修正
w
w
w的效果很差,进而传到下一层就更凉凉了。。。
解决办法:最好使得第一此使用sigmoid层的输入的数据介于0附近(如先归一化,再去均值操作),经过sigmoid输出的数也肯定介于0-1之间的,然后再往后传……也要注意规避这一问题。
隐患2:不是以0为中心的函数
如果神经元的输入
x
x
x都是正数:会导致权值系数的变化趋势很粗糙很不理想(参CS321 p14)
假设
x
x
x由5个变量组成,当前层的神经元的数量是3个,激活层对第
j
j
j个神经元的执行的操作如下:
σ
=
f
(
∑
i
5
w
j
,
i
∗
x
i
+
b
j
)
\sigma =f(\sum_i^5 w_{j,i}*x_{i}+b_{j})
σ=f(∑i5wj,i∗xi+bj)
令
a
=
∑
i
5
w
j
,
i
∗
x
i
+
b
j
a=\sum_i^5 w_{j,i}*x_{i}+b_{j}
a=∑i5wj,i∗xi+bj
由于sigmoid函数的偏导数恒大于0,所以
∂
L
∂
a
\frac{\partial L}{\partial a}
∂a∂L的正负取决于
∂
L
∂
σ
\frac{\partial L}{\partial \sigma}
∂σ∂L的符号,同时梯度
∂
a
∂
w
j
,
x
=
x
i
\frac{\partial a}{\partial w_{j,x}}=x_{i}
∂wj,x∂a=xi,如果所有的
x
i
x_{i}
xi的值均为正,则会使得每个权值都朝着同时增大或者减小的方向变换,随着迭代的进行,
w
w
w整体(等同于
w
w
w的均值)的变化趋势呈现上升或者下降,但我们并不太关心整体,而需要的是
w
w
w本身里面的每个元素根据训练集做出不同方向的调整。
以标准的DNN网络为例子,假设当前层输入的变量是5个,当前层神经元的数量是3个,则当前层的权值系数是一个3行5列的二维矩阵(
W
X
+
b
WX+b
WX+b)。为了形象说明这个问题的严峻性,我们简化模型,假设模型需要训练的参数只有
w
0
w_{0}
w0和
w
1
w_{1}
w1,假设合理的变化趋势是
w
1
w_{1}
w1下降,而
w
0
w_{0}
w0上升,理想变化趋势如下图绿色线所示(
w
1
w_{1}
w1下降的同时
w
0
w_{0}
w0上升),但是由于
x
x
x的恒大于0的,导致
w
0
w_{0}
w0和
w
1
w_{1}
w1同时上升和下降,很有可能在训练结束,无法收敛到理想位置。
图片来自
根本原因就是sigmoid函数不是以0为中心的:
当前激活层的输出是恒大于0的,也就是下一层中,如果对权值系数求导,会出现更新方向一致的问题。
解决办法: 激活前的数据去均值,这样就存在
x
i
<
0
x_{i}<0
xi<0,s使得不同的
w
w
w有不同的变化趋势。特别是针对图像数据,因为原始数据均为大于0的数据。
缺陷3:指数运算
相比与点积和卷积运算,这小case