文章目录
1. 进行误差分析
有时候手工从错误集里找规律不失为一种高效方法。
手工建立一个表格,分析每一张识别开发样本集时的错误图片,统计每种错误类型的百分比,找其中提升效果明显的维度来改进。
2. 清楚标注错误的数据
深度学习算法对随机误差很健壮,但是对系统性的错误没那么健壮。
利用这个表格加一列,看看标错的样本占比多少。从上图中可以看出,把狗误认为猫的错误标签占错误样本的6%,只占总错误率的0.6%而已,后来总错误率降低了,我们的错误标签占比就会变高,又变成了需要优先提升的地方。
3. 快速搭建你的第一个系统,并进行迭代
一般来说,先建立第一个系统(设置开发/测试集和度量),然后往需要优先改善的方向迭代。但是如果所做的领域有很多经验可以借用或者说有些可借鉴的文献,解决问题相同,可以构建一个复杂的系统。
4. 使用来自不同分布的数据进行训练和测试
这个问题,如果将app和webpages图片合并到一起随机分训练开发测试集的话,我们处理的大部分数据并不是我们关心的。
5. 数据分布不匹配时候的偏差与方差的分析
方差问题:
数据不匹配问题:(训练集和测试集数据分布不同)
偏差问题:
上图最右边的情况不仅仅具有可避免偏差问题,还有数据不匹配问题。
6. 处理数据不匹配问题
出现数据不匹配问题的时候:
尝试把训练数据变得更像开发集;
收集更多类似你的开发集和测试集的数据。
让训练集更接近开发集:
使用人工合成数据技术:
在解决汽车噪音问题场合上,我们可以将大量的清晰音频合成一些高速公路背景噪音。
问题:过拟合
7. 迁移学习
老生常谈的做法了,一个是fine tuning,一个是当做pre-training使用的叫做feature extraction。
为什么有效:对于图像识别来说,很多低层次的特征,比如边缘检测、曲线检测和阳性对象检测,学习到的这些知识,对我们其他的任务有用,使得学习更快点,需要更少的学习数据。
说白了,就是数据量不够的时候,使用从大型数据集学习到的一些可能有用的特征。
什么时候有效?对于目前任务来说数据量远远小于之前训练好的网络的数据量。
以上就是迁移学习——一种串行学习。
8. 多任务学习
对于这个自动驾驶系统来说,要识别多个目标,因此,输出矩阵的维数要进行相应的变化。
相应的损失函数也要变成这四个维度的累加。训练一个神经网络同时做这四个任务要比训练四个完全独立的神经网络性能要更好。
在计算损失函数的时候,只对有标记的任务计算,其他忽略,这样就可以利用那种标记不完全的数据。
上图都写了,就不翻译了。(共享低维特征、单个任务数据少、可以训练一个大的神经网络来一次性完成所有任务)
9. 什么是端到端的深度学习
数据量小的时候,传统的流水线方法效果不错,但是当数据量非常大的时候,端到端系统方法效果就很显著了。
对于这个人脸识别系统来说,我们没有足够的端到端的数据,所以我们分成两步有足够数据的子任务。
端到端效果好, 因为数据比较多。
端到端效果不行,数据量少。
10. 是否要使用端到端的深度学习
好处。