绝大多数內容参照自《Machine Learning Yearning》
Bias 和 Variance
误差(bias)就是指优化算法在训练集上的误差,也就是差错率,不正确越大偏差越大,欠拟合
标准差(variance)就是指优化算法在开发设计集(或检测集)上的表現比训练集算差是多少,还可以解释为多重共线性,主要表现 为训练集准确率很高,检测集在的准确率很低
可防止误差和难以避免误差
误差能够分成2个一部分,包含可防止误差和难以避免误差
怎样看待:假定目前一个各种奇珍动物识别技术,每日任务困难大,就算由人们来区别,也存有14%的差错率(最佳差错率)
如今优化算法做到:
训炼差错率=15%
开发设计差错率=30%
能够将训炼差错率(误差)溶解以下:
最伏差错率(“难以避免误差”):14%,能够将其以为是学习培训优化算法的误差“难以避免”的一部分。
可防止误差:1%。即训炼差错率和最伏误差中间的误差。
举个事例,该事例中最佳差错率是 14%,大家有:
● 训炼偏差 = 15%
● 开发设计偏差 = 16%
i这类情形下,可规避的误差偏差是 1%,标准差偏差约为 1%。因而,优化算法早已做的很好啦,基本上沒有提高的室内空间。它只比最好差错率低 2%
怎样设置期待误差
应用人们主要表现水准来可能最佳差错率,并设定可实现的“期待差错率”。 假定你的计算方法在某一每日任务上做到了 10% 的偏差,但平常人能够做到的偏差是 2% . 从而大家就可以了解最佳差错率是 2% 或更低,这也说明可防止误差最少是 8% . 因此你理应试着一下减少误差的技术性。更一般地说,有一个有效可达到的“期待差错率”能够幫助你来可能学习培训优化算法的可防止误差。这相反也帮你决策能否应用偏差减少技术性
误差和标准差的几类情形和解决方法
1)假定训练集差错率1%,开发设计集差错率10%,则样本方差大,多重共线性
-
改动实体模型构架
减少实体模型经营规模(例如神经细胞/层的总数),减少互联网复杂性
-
提升正则化
-
L 1 Regularization
-
L 2 Regularization
-
Dropout层
-
-
加上Batch Normalization
-
添加提早停止(Early stopping)
-
实体模型复位
-
根据数据预处理降低键入特点的数目和类型
-
特点特征提取
-
依据误差分析改动特点
-
检验训炼数据和数据测试是不是有比较应的特点,样本分布是不是一致,不一致的情况下,再次特征工程工作中
-
提升训炼信息的类型,促使训炼数据信息遮盖全部数据测试的特应用数据增强
-
提升信息量
2)假定训炼差错率为15%,开发设计差错率为16%,这个时候,误差较为大,欠拟合
-
提升训炼epoch
-
增大batch-size
-
调节激活函数(比如应用relu)
-
调节蚁群算法
-
比如应用Adam
-
增大learning rate
-
-
提升互联网复杂性
-
提升传输层数
-
提升卷积层輸出的安全通道数
-
提升池化层的结点数
-
-
检验训炼数据和数据测试是不是有比较应的特点
-
提升训炼信息的类型,促使训炼数据信息遮盖全部数据测试的特点,
-
提升外界数据,假如担忧外界数据环境污染training set,能够将外界数据的权重值降低一点
-
数据增强
-
3)假定训炼差错率为15%,开发设计差错率为30%,高误差,高标准差
这个时候,先要处理误差难题,仅有在训练集上逐渐收敛性了,才可以逐渐考虑到检测集在的标准差难题。因而碰到这样的状况,先依照高误差处理,高误差处理以后,或许很有可能高标准差的现象也就消失了,要是没有消退,在考虑到处理高标准差的难题。
4)假定训炼差错率为0.5%,开发设计差错率为1%,低误差,低标准差(极致情况)
5)假定训炼差错率为0.5%,开发设计差错率为1%,低误差,低标准差,可是开发设计集loss在底点不断波动
-
确定训练集和检测集遍布是不是具有很大的差别,差别大得话开展特征工程
-
确定是不是数据增强做的太多了
-
试着调节学习率,在不一样环节应用无需学习率
-
思索和检查网络是不是或是有点儿欠拟合,假如也有,处理欠拟合
-
寻找大量训炼数据信息,使其可以遮盖较多的样本分布
实体模型调参Pipeline
-
设置固定不动随机种子
-
先不必应用数据增强
-
设定合理性的baseline
-
多重共线性一个batch,随后观查loss最少能够抵达是多少,比照baseline,假如能抵达很低,开展下一步,假如不好,则考虑到 状况2)
-
制作training和testing 环节的loss曲线图
-
认证loss函数
-
假如train loss 小
-
假如test set 的loss 大,而train set 的loss小,表明多重共线性,应用状况1)处理
-
假如test set的loss 也小,那麼大部分算得上成功了
-
假如test set 的 loss 也小,可是波动,应用 状况5)处理
-
-
假如train loss 大
进到流程2)
-
已优化模型怎样进一步提高
-
优化网络构造,应用更快的backbone
-
应用更快的LOSS涵数,例如:回归问题能够考虑到smooth-l1等
-
考虑到应用难例发掘的方式
-
有标准得话,加大batchsize
-
考虑到预训练模型
-
观查检测样版,搜索case,对于Case来,填补样版 数据增强
-
试着不一样的提升涵数,更替训炼,fine-tuning
-
不一样的权重值复位方式
-
试着不一样的学习率初值和衰减系数值
-
考虑到在梯度方向上下功夫,能够是梯度方向剪裁、梯度方向校检、梯度方向归一化等方式
-
再次特征工程(通常最有效)