CS231n学习笔记--2.NN2
1.不能将神经网络所有的权重都初始化为0,这样会导致所有的神经元输出都是相同的,进而在反向传播时所有的导数就都是相同的,导致所有的参数更新也是相同的。
2.还有其他很多初始化方法,batchnorm在一定程度上能够缓解初始化不好的情况。
3.关于BN,总结几点(来源于https://blog.****.net/malefactor/article/details/51476961):
(1)BN的作用是使深度神经网络训练过程中的每一层输入保持相同分布。
(2)启发思想是白化,白化只对输入层做了调整,从而使网络训练收敛变快,而BN是对网络每一层都做了一次简单的白化。
(3)基本思想:
(4)如果是简单的把输入分布拉到sigmoid的类似线性区域,那么这就失去了深度学习的意义,就简化成线性变换了,因此BN又加了scale和shift,这两个值是需要学习的,核心思想是找到线性和非线性的平衡点,是网络表达能力增强。
4.正则化(防止过拟合):
L2:是权值更加分散
L1:截断效应,使权值更稀疏,可以用于特征选择,不考虑特征选择的话L2优于L1。
Dropout:就是模型融合的思想,即缓解了过拟合,又避免了同时训练多个神经网络模型的计算复杂度,具体参考论文:http://www.cs.toronto.edu/~rsalakhu/papers/srivastava14a.pdf
5.Dropout实现
实现就是生成一个dropout矩阵U,然后与H相乘,很简单。注意预测阶段为了保持训练数据和测试数据一直要乘以p.
为了不动predict的代码,也可以采用invert dropout: