第六讲-训练神经网络(上)--课时14-**函数
**函数
-----------------------------------------------------------------------------------------------
sigmoid:将值**压缩到0-1之间
缺点:
(1)梯度很容易为0,这个**结点杀死了反向传播回来的梯度,易造成梯度消失
(2)**之后的均值不是0,全部都是正值(0-1之间)
f = sum(WiXi)+b
那么权重的局部梯度全为正,即而dL/df为正/负,则dWi均为正/负。
意味着,在进行参数更新时,我们将对所有的权重都增加或者都减小。这样的话更新起来非常慢。
下图右边为两个权重的更新示意图。
(3)
exp()函数计算量较大,不过这是个小问题
------------------------------------------------------------------------------------------------
tanh
仍然有saturated 梯度消失的问题
但是**后的均值为0,有正有负
------------------------------------------------------------------------------------------------
Relu函数
(1)优点:
正半轴不会有梯度消失问题
max(0,x)计算量小
收敛的更快,比sigmoid和relu一般快6倍
更符合生物学
(2)缺点:
**后为0或正值,不是以0为中心
负半轴存在梯度消失问题
-------------------------------
x1,x2
w1x1+w2x2+b=0为图中的直线
将w1x1+w2x2+b进行relu**
dead relu问题的出现原因:
(1)参数(w1,w2)初始化太糟糕
(2)learning rate 太大,更新之后分隔超平面变化大,很可能一下子就变成了dead relu。
事实上,有10%-20%的dead relu,但不影响。
有些人会将b初始化为大于0的数,以避免dead relu(是否有效没有得到承认)。一般都是将b初始化为0
------------------------------------------------------------------------------------------
leaky relu 不会dead,且更接近0均值
Prelu和leaky relu类似,只是负半轴的斜率是个参数,进行梯度更新
-----------------------------------------------------------------------------------------
Elu(更robust)
f(x) = alpha(exp(x)-1)
------------------------------------------------------------------------------------------------------------------
Max Out
-----------------------------------------------------------------------------------------------------------------
data preprocessing
对于图片,只需要0均值即可。
-----------------------------------------------------------------------------------------------
权重初始化
W不能全部初始化为一样的值,这样的话,隐藏层各个节点就都一样了,没有意义。
随机初始化,0.01*np.random.randn() 对于小的网络可以,但是网络深的话不行
可以看到,正向传播过程,后面的层都是均值0,方差0
则方向传播过程,梯度几乎为0,梯度消失。
-----------------------
W = 1 * np.random.randn() 也不行,Wx值大了以后会saturated,梯度消失
-----------------------
有效的初始化方式:
xavier(glorot)
注意,当使用relu**函数时,左半边为0,即方差较小了一半,权重初始化应在xavier的基础上再除以2