一个是不能有对称性,好比全为0.这样的反向传播对每个单元学习到的结果都同样。没有区分度学习不到东西。网络
另外一个要求是避免落入激活函数饱和区,致使梯度学习太慢。dom
第三点对于深度网络中的每一层,它们的输出方差应该尽可能相同,知足学习到的目标分布和原始分布一致(那咱们将其都转换到均值0方差1)。函数
知足第一点,用随机化,使用高斯分布,均匀分布都行。学习
知足第二点,让它的均值0方差1便可,不会跳跃到饱和区(sigmoid最明显,所以后来用ReLU了)。spa
知足第三点,采用Xavier初始化方法,输出输入方差一致。.net
详细说一下blog
咱们假设输入输出的单元,均值0方差1。get
对于一个线性激活函数来讲,n个输入单元一个偏置b
class
它的方差计算方法
由于咱们假设均值为0,有
同时w的产生和输入的x天然是没什么关系,独立分布。
前向传播,反向传播的方差计算相似,所以知足下面便可。
具体来讲,对于sigmoid , \(W^{[l]}=np.random.randn(shape)*np.sqrt(\frac{1}{n^{[l-1]}})\)
ReLU, \(W^{[l]}=np.random.randn(shape)*np.sqrt(\frac{2}{n^{[l-1]}})\)