1.为什么不能全部设为0
https://zhuanlan.zhihu.com/p/27190255
简单来讲就是如果全为零那么每次更新的时候权重都一样
这里的deltaw和之前正想传播学习的a值什么的相关:因为正想传播所有的那个都一样,从而deltaw一样
参考:https://zhuanlan.zhihu.com/p/24801814
本来我们希望不同的结点学习到不同的参数,但是由于参数相同以及输出值都一样,不同的结点根本无法学到不同的特征!这样就失去了网络学习特征的意义了。
参考链接:https://zhuanlan.zhihu.com/p/38315135
简单的说:
随机初始化的缺点是因为网络输出数据分布的方差会随着神经元个数改变(而且也和上一层输出神经元的方差相关)
从而(?)这个梯度在每一层是不一样的,要么就是导致激活失灵/要么就是激活饱和,导致剃度接近0,就是导致很难更新了
随机初始化就是搞一些很小的值进行初始化,实验表明大了就容易饱和,小的就激活不动
看一下第一个分布:sigmoid+标准差=0.01的随机初始化
可以看到激活之在0.5附近啊,很容易梯度就是0了,这就没法学习了
sigmoid+标准差=1的随机初始化
你看看激活函数都饱和成什么样子了!在-1,1附近还是梯度很小啊,没法学习
现在Tanh+随机初始化看看发生了什么
同时伴随着Z值消失和激活消失
增大标准差会怎么样
从最后一个隐藏层反向传播至第一个隐藏层的过程中,梯度越来越大?另外,类似sigmoid激活函数,Z值的区间太宽了,导致激活塌缩到大多数值要么是零要么是一的情形。同样,这不好
看看冠军搭配0.1
- 首先,梯度在所有层相似(同时位于一个适宜的尺度——约为权重的1/20)
- 其次,Z值位于一个适宜的区间(-1, 1),在所有层上相似(虽然可以观察到一些收缩)
- 最后,激活并没有塌缩到二值模式,并且在所有层上相似(同样,有一些收缩)
简单来说,这意味着我们可以在网络后面堆叠另一层,然后期望Z值、激活、梯度的分布仍然是相似的。我们肯定不希望网络表现出塌缩、消失、爆炸
到这里我们应该看出来了,关键在权重的标准差选取上!!
所有有了X初始化(但X适合和tanh不适合relu)
所以有了H初始化
然后又有了BN