过拟合: 随着模型复杂度的增加: 训练集误差减小,验证集误差增大,
(1) early stopping
每次迭代计算验证集的accuracy,连续10次没突破最佳就停止训练。
(2) 数据集扩增:
复制原有数据加上随机噪声,重采样,根据当前数据集估计数据分布参数,使用该分布产生更多的数据。
(3)正则化:
范数:满足 正定,齐次,三角不等式
||A||=n*max(|aij|)
L1 范数:各个元素绝对值之和
L2 范数: 在回归中,称为岭回归。欧几里得距离,样本和标签之差的平方之和。
L1: 基于L1范数,参数绝对值和与参数的积项。
C0 是最原始的代价函数,n是样本格式, lambda 是正则项表达式。
对于有些模型,如线性回归(L1 正则线性回归即为lasso 回归),常数项b的更新方程不包括正则项,即:
梯度下降算法中,和
都小于0.
从上式可以看出,当w为正时,更新后w会变小,当w为负时,更新后w 会变大,因此L1正则项是为了使得那些原先处于0附近的参数w往0移动,从而降低模型的复杂度,防止过拟合,
L2 正则:L2 正则是基于L2 范数,即在目标函数后面加上参数的L2范数和项,即参数的平方和与参数的积项。即:
L2 项参数乘了1/2 ,是为了便于计算以及公式的美感。
L2 的正则项可以 使w变下加剧,更小的参数值w意味着模型的复杂度更低,对训练数据的拟合刚刚好(奥卡姆剃刀),不会过分拟合训练数据,从而使得不会过拟合。以提高模型的泛化能力。
比较:
https://blog.csdn.net/w5688414/article/details/78046960
L1比L2 鲁棒性更好,对异常点有很好的抗干扰的能力。
L2 误差会放大很多,对异常点更敏感
L1 不太稳定,每一次调整回归线会跳很大。
L1 会使得系数更稀疏,L2 往往有非稀疏的系数。
L2 的计算更高效。
从公式上看,两者的区别:
L1的绝对值之和,因此同一个问题得出的解可能有多个,
ref:https://blog.csdn.net/u014381600/article/details/54341317
(4) dropout
(5)合适的模型:合适的层数和结构
(6) 对网络加噪声,在权重上加噪声,对网络的响应加噪声
(7)结合多个模型:从N个模型中随机选一个的期望误差会比所有模型的平均输出误差大。
Bagging: 就是分段函数的概念:用不同模型拟合不同部分的训练集,以随机森林为例,就是训练了一堆互不关联的决策树,但是神经网络本身时间长,所以不单独使用神经网络做 。
Boosting:只使用简单的神经网络,加权平均其输出。
参考:https://blog.csdn.net/heyongluoyao8/article/details/49429629
https://www.zhihu.com/question/59201590