1、进行误差分析(Carrying out error analysis)
当训练完模型后,可以得到该模型的误差。接着我们要不断的对模型进行优化,减少误差。误差分析就是为了指导模型往能最大化减少误差的方向调整。
误差分析就是对由不同错误分类类型引起的错误占总错误的比例进行排序,优先优化占比高的错误类型。
以识别猫为例,预测失败可能有很多种类型,如:把狗错识别为猫、把老虎错分成猫、图片模糊、滤镜等。我们可以逐一检查误检的样本,统计出各种错误的类型比例,这样我们可以辨别出某些不值得优化的类型,然后把精力投入到比例较高的错误类型的优化。
2、清除标记错误的数据(Cleaning up incorrectly labeled data)
我们的数据集中可能有一些样本被错误的标记,是否应该更正标记。通常如果错误标记是随机产生的而不是有规律的,可以不更正。因为深度学习算法对随机的错误有较强的鲁棒性(robusteness)。
我们可以在误差分析中加入错误标记这种错分类型,统计出它的占比。如果占比较大则考虑修改,较小可以不修正。如果真的需要修正,对整个数据集进行检查并修正明显是不明智的,所以正常只对错分的数据中的错误标记的样本进行修正。训练开发和测试集都需要进行修正,保证它们是同一的分布。
3、快速搭建系统并迭代(Build your first system quickly, then iterate)
搭建深度学习模型时,应该快速搭建出第一个简单的模型,然后通过偏差、方差和误差分析来驱动模型的优化。这样可以防止一开始就训练一个很复杂的模型结果却不好,浪费大量的时间。但如果有很多经验和参考时,搭建第一个模型时可以适当的复杂一点。
1、在不同分布的数据上训练和测试(Training and testing on different distributions)
因为需求的数据量非常大,所以我们有时候使用的训练集、开发集和测试集来自不同的分布,这就是数据不匹配。这种情款其实很常遇到,因为对于某领域通常有一个很大的通用数据库,但我们要开发一个相对更细分的领域时我们的数据通常较少。例如语音识别相对于手机语音唤醒功能。
以大量的高质量和少量的低质量图片的数据集为例,对数据集分配有两种选择。
option 1:相对差,不采用
将两组数据合并到一起,随机选取样本分配到训练、开发、测试集中。
好处:三个集合中的数据均来自于同一分布;
坏处:我们目标是优化低质量图片的开发集数据,但是经过调整后开发集的数据大部分来自训练集高质量图片,这样优化目标就不准确了。
option 2:相对好,采用
训练集全部是高质量图片,也可以有低质量图片。开发和测试集都是低质量图片。
好处:优化目标准确;
坏处:训练集和开发、测试集来自不同的分布。
2、不匹配数据分布的偏差和方差(Bias and Variance with mismatched data distributions)
如果训练集和开发、测试集来自不同分布,当对算法进行评估发现开发集效果不好时,我们不能很好的区分这是由于高方差还是数据不匹配引起的。
分析方法:设置训练开发集
训练开发集(Training-dev set):和训练集同一分布,但不用来训练,其实就是从原本的训练集分一部分出来。
可避免偏差(avoidable bias):训练集和人类水平之差
方差(variance):训练开发集和训练集之差
数据不匹配(data mismrtch):开发集和训练开发集之差
3、解决数据不匹配(Addressing data mismatch)
人工数据合成(Artificial data synthesis): 改变训练集数据使它和开发、测试集的数据更相似。例如使用通用的语音数据库来开发车辆语音识别系统时,可以把汽车的噪音和通用的语音数据库的数据进行人工合成作为训练集。
迁移学习就是把任务A(数据量大)中学到的知识应用到另一个独立的任务B(数据量少)。因为任务B的数据量少,训练模型时不能得到很好的效果,这时可以利用任务A已经学习到的一些通用的特征来使我们的模型有更好的表现。
预训练权重(pre-training weights):在通用数据库训练出来的权重。
微调权重(fine tuning weights):对预训练的权重进行微调(改变最后某几层的权重),用它来初始化自己的模型。
为什么有效:
以图像识别为例,在通用的大型数据库中训练分类器,往往网络的前几层模型能很好的学习到图像的一些基本特征,如: 边缘检测等。因为这些低层次的特征可以泛化到任务,所以它能让我们的模型表现得更好。
迁移学习有意义的条件:
多任务学习:
多个任务并行学习,如在一张图片中同时检测出多个目标。
在神经网络中,把最后一层的神经元个数设为多任务的个数。样本的标签也应与此匹配。
cost function :类似于逻辑回归
i 表示第几个样本,j 表示第几个神经元即第几个任务
softmax和多任务学习的区别:
softmax是假定图片中只有一个目标,但这个目标可能属于不同的类别,选择概率最高的那一类作为预测的结果。而多任务学习是假定图片中有多个目标,预测输出每个目标的概率。
迁移学习有意义的条件:
1、端到端的深度学习定义
通过缩减人工预处理和后续处理,尽可能使模型从原始输入到最终输出,给模型更多可以根据数据自动调节的空间,增加模型的整体契合度。
以语音翻译为例:
传统机器学习:语音>>发音>>词>>句
端到端:语音>>句子
因为现在有大量的语音译为文本的数据,所以可以使用端到端。
2、端到端的深度学习使用规则(Whether to use end-to-end deep learning)
根据优缺点来决定:
当有大量的端到端的数据时可以使用端到端的深度学习,如上例的语音识别。
当端到端的数据不多,而人工设计组件的数据多时不用端到端的深度学习,如下例,人脸识别。
图片>>人脸检测(人脸区域提取)>>人脸识别(与数据库匹配)
从有大量背景的图片到人脸区域的数据和从人脸区域到人名的数据很多,但是直接从有大量背景的图片到人名的数据相对小得多。而且这类数据不好获取或成本太高。所以不选择端到端的深度学习。