1、神经网络过拟合问题
1、解决思想:
① 首先现从数据上来解决:(1)增大训练集的容量(数据增强)。(2)解决样本不均衡(数据增强)
① 在不改变网络结构的情况下,使用 dropout(类似RF中的booststaping),只在训练时有用,以概率p让某些神经元参数
停止更新,但是下个批次样本可能重新启动
② 在不改变网络结构的情况下,使用 BN层(作用:在前面文章中),神经网络 毕竟 是一个线性累加的模型,每一个子
项的值不能太大(参考 多项式扩展线性回归的过拟合问题), 控制 w 与 x 值的大小至关重要, BN 层可以有效 控
制网络中 x 值得大小及其分布(将多层之后分布差异很大的数据 重新零中心化分布),使预测 累加结果不会产生偏置效果(过拟合)。
总结: BN 也算是一种另类的正则化,与L1L2正则化不同的是 BN 是通过重构多层神经网络输出的较大的差异性输出的分布 来解决 偏置问题. BN 改变的是 子项 的 x , l2 改变的是子项的 w
④ 加入 正则 化 ------- L1/L2正则 原理:通过约束参数的大小来缓解样本输入差异性较大导致的偏置效果. BN 改变的是 子项 的 x , l2 改变的是子项的 w
⑤ early stopping
⑥ label_smoothing
K = inputs.get_shape().as_list()[-1] # number of channels
return ((1-epsilon) * inputs) + (epsilon / K)
⑦ 更改网络的设计结构。eg:加入残差结构 / 降低参数数量的方法包括greedy constructive learning、剪枝和权重共享等
2 关于正则化的几个问题
1.神经网络中的正则化是什么?
2.神经网络的正则化技术有哪些?为何能防止过拟合?
3.DropOut和BatchNorm混和使用的问题?
BN和Dropout单独使用都能减少过拟合并加速训练速度,但如果一起使用的话并不会产生1+1>2的效果,相
反因为【训练阶段与预测阶段存在的方差偏移】可能会得到比单独使用更差的效果。
解决方案有二:
① 将dropout放在所有的BN之后,一般仅在最后一层输出层softmax前加入
② 使用高斯dropout
具体参考文章:
4.为何BatchNorm出现后基本不用L2 Regularization?
防止过拟合的方法、关于正则化的几个问题
2、神经网络欠拟合问题
加深网络结构等...
3、Conv层、BN层、Relu激活层、pool层先后顺序
Conv层 ---- BN层(实际代码中拥有可学习的线性映射参数) ---- Relu激活层 ---- pool层