隐含层数越多,越容易拟合复杂函数
为了拟合复杂函数需要的隐含节点数目,基本上随着隐含层数目的增加呈现指数下降的趋势,也就是说层数越多,神经网络所需要的隐含节点可以越少。层数越深,概念越抽象,需要背诵的知识点(神经网络的隐含节点)就越少。
但是,层数越多,容易出现过拟合以及参数难以调试以及梯度弥散的问题。
过拟合:预测模型在训练模型上升高在测试集上下降。泛化能力不行。
防止过拟合的方法:dropout
解决梯度弥散:ReLU
解决参数多:使用Adam Adagrad等方法自适应参数调节方法
关于权重初始化:
sigmod做激活函数: 将偏执b和权重都初始化为0,因为sigmod在0附近最敏感,梯度最大
ReLU做激活函数:偏执设为0,权重初始化为正态分布。有时候需要在参数上加一点噪声来打破完全对称并避免0梯度,有时候在偏执上赋一些小的非0值来避免死亡神经元。
此外,为了防止特征过多带来的过拟合,一般采用加入正则化项或者减少特征的方式。一般采用L1正则会制造稀疏的特征,大部分没有用的特征的权重会置为0,而L2正则会让特征的权重不能过大,会造成特征的权重比较均匀。
关于梯度下降:
在神经网络中,如果有n个样本,m个参数,有以下几种梯度下降的方式:
1. 首先计算n个样本中所有的loss_fun的和后取平均,之后更新参数,之后继续求所有样本的和
2. 来一个样本就根据损失函数更新一次参数
3. 每次从n个样本中选取一个数量为k的batch,计算这k个样本的loss_func的和取平均&