深度学习(3)--小总结(评估指标,查准查全率,正交化思想,划分数据集,贝叶斯最优误差,解决数据不匹配,多任务学习,端到端架构)

从总体架构的角度思路来看待机器学习问题

闲来复习,可以学到很多东西!


上一篇:深度学习(2)--小总结(指数加权平均值,偏差修正,momentum梯度下降,学习率衰减,batch归一化与BN层)https://blog.csdn.net/qq_36187544/article/details/91849279

下一篇:深度学习(4)--卷积神经网络小总结(Inception及其超好用的百度云链接,CNN,LeNet,AlexNet,vgg,ResNet,1×1卷积核,扩充数据)https://blog.csdn.net/qq_36187544/article/details/92613205


目录

机器学习评估指标

贝叶斯最优误差

划分数据集的方法

正交化思想

解决数据不匹配

多任务学习

端到端架构


机器学习评估指标

通过评估指标来确定优化方向,提高优化效率

单实数评估指标查准率(precision,分类器分类的结果有多少是正确的),查全率(recall,分类器分类的结果占这个类别总数是多少),F1-score为查准率和查全率的调和平均,通过这些指标来选择。但其实仍旧是看需求来确认什么指标更重要。
比如,一共有100张猫的图片和100张非猫图片,任务需求是分类出猫的图片,分类器的结果是有98张猫的图片,但这个结果中有8张是错误的,则查准率为90/98,查全率为90/100。
附带评价指标:运行时间等


贝叶斯最优误差

贝叶斯最优误差,能达到的最好的极限。一般来讲,机器能达到或者想要达到的即贝叶斯最优误差,比人会略高一点,因为人类在任务上的能力很强,但是不会达到极限。
通过人类表现进行思考:一定程度上认为人类的极限就是贝叶斯最佳误差。机器的极限为贝叶斯最佳误差,训练集与贝叶斯最优误差之间的差距成为可避免偏差,验证集与训练集之间的差距为方差差距,采取不同的优化措施


划分数据集的方法

一定要将目标数据集放在dev和test集中。
比如,如果实际数据集只有10K,但是网上爬取的数据集可到100K:
方案1:混合两数据集,按比例划分到训练,验证和测试集中(虽然满足同分布,但是目标混淆了,目标是实际数据集)
方案2:取实际数据集一半和所有额外数据集进入训练集,剩下一般的实际数据集进入验证和测试集中

总之,合理划分数据集,而不是简单的融合按比例划分


正交化思想

把各个指标独立开,可以用加权等方式强化指标作用。
比如控制汽车有方向盘、油门、刹车,这几个控制是相互不干涉的,

验证集和测试集同分布,取训练集部分作为训练-验证集
比如,训练集误差小,但训练-验证集和验证集误差大,说明方差大。再比如,训练集和训练-验证集误差都小,但是验证集误差大,说明数据不匹配(说明算法不匹配期望数据分布)
总之,训练集与贝叶斯最佳误差之间的差距为可避免误差,训练集与训练-验证集之间的差距为方差问题,训练-验证集与验证集之间的差距为数据不匹配问题,验证集与测试集的差距为对开发集过拟合了。(如下图)

深度学习(3)--小总结(评估指标,查准查全率,正交化思想,划分数据集,贝叶斯最优误差,解决数据不匹配,多任务学习,端到端架构)_第1张图片
特殊情况:如果验证集和测试集相较于训练集简单,也可能存在验证集和测试集误差比训练-验证集误差小的情况。


解决数据不匹配

对于可避免误差, 认为偏差过大,换更深更广的网络,对于方差,扩充训练集。但是对于数据不匹配问题,没有系统的解决方案,以下为解决思考方案:

误差分析,人工分析训练集和验证集之间的误差。比如,通过人工发现主要因为背景噪声带来的误差,可以人工合成带噪声的数据进行训练。

注意,不要过多用同一个噪声去合成新数据,这样可能导致对这个噪声的过拟合。(容易想到)


多任务学习

训练一个网络输出多个标签比训练多个网络效果更好,这就是多任务学习的力量。多任务学习在CV领域应用效果好。

比如,需要识别一张图片有没有交通标牌,有没有汽车,有没有红绿灯三个任务,用一个网络去实现效果可能会更好。因为前几层神经网络里把一些较底层的特征学习到了

多任务学习适用于什么情况?1.多任务共用相似的底层特征,比如交通图片识别中,汽车交通牌等。2.多任务时,提供的样本数据可能更多。比如,有100张图片供A类识别使用,100张供B类识别使用,训练同一个网络可以有更多数据,底层特征识别更加完备。3.如果网络小不要使用多任务学习!会降低性能。但当网络足够大时通常不会降低。


端到端架构

简单理解,端到端就是一步到位的架构做法。比如现在经手的项目,从图片中识别试纸,读取上面的数值,架构是边缘检测>>>试纸分类>>>读取数值,如果采用端到端的做法即输入数据>>>读取数值。

优点:1.真的实现让数据说话,不管函数映射如何,训练一个足够大的网络,让网络自己处理,而不是引入人类的看法。2.不如手动设计组件,简化架构流程

缺点:1.需要大量数据。2.手动设计的组件其实是把人类认知蕴含其中,如果数据量少,这是一种很实用的方法。

现在分部组件架构更加通用,且吴恩达认为组件架构更加有前景。

你可能感兴趣的:(#,deepLearning-学习)