吴恩达深度学习笔记——八、第三课第二周:机器学习策略(下)
1 误差分析
当我们训练学习器但是效果不是很好时,我们往往需要进行误差分析,来确定下一步向哪个方向优化。就是对误分类的图片进行分析,看看是什么导致的误分类,然后优化算法减小该因素的影响,如果有多种因素,那我我们可以首先解决主要的因素。
2 清楚标注错误的数据
首先应声明的是深度学习算法对训练集中的随机误差是鲁棒的,但是对系统性误差很敏感。
如果错误标记的数据对开发集的误差有显著影响,那么应该花时间对其进行修正,如果对开发集的误差没有显著影响,那么就没必要修正。
像上图中的情况就没必要纠正样本的错误标签。
3 在不同的划分上进行训练并测试
3.2 如何划分数据集
当训练集和测试集/开发集分布很不同时,如何划分数据集:
3.2 不同集上的误差之间的差距所反映的问题
当我们的训练集和测试集/开发集分布很不同时,我们无法准确判断训练集误差和开发集误差相差较大是不是高方差导致的,因为本身他们的分布就不同,比如训练集猫猫图片分辨率很高,开发集猫猫图片分辨率不高,如下图所示:
所以我们从训练集中重新分出来一个测试开发集(Training-dev set):有和训练集相同的分布但是不用于训练,我们训练好模型后在Training-dev set上进行测试:
由上图可得我们的模型面临高方差的问题,泛化能力一般。
如果测试结果如下图所示,则说明我们的模型误差受数据不匹配问题影响较大:
不同数据集上的误差之间的差距所反映的问题如下图:
Dev error 和Test error之间差距大反应过拟合,这是因为Dev set 和Test set来自相同的分布。解决方法就是回到上一步,并尝试获得更大的dev set。
下面这张图进一步解释了不同不同数据集上的误差之间的差距所反映的问题如下图,其中左栏是训练数据集,就是人的语音数据,右栏是我们新开发一个汽车语音包的项目所收集到的开发集和测试集数据(有车内和车外的噪音)
3.3 解决data mismatch问题的办法
另一种更有效的方法就是人工生成数据(Artificial data synthesis),但是当车内噪音数据量较少时有可能过拟合:
4 迁移学习
迁移学习起作用的场合是我们在一个问题上有很多训练数据,但是在另一个有些类似的目标问题(神经网络的输入相同)上就没有这么多训练数据了,此时可以用迁移学习,迁移学习当下应用广泛。
当我们已经训练好一个猫猫图片分类器时,我们想将其应用到医学影像识别中,我们只需要将最后一层(输出层)以及其对应的权重删掉,并设置一个新的输出层,随机初始化权重,并在医学影像上进行训练即可:
如果我们的训练集够大,那么就可以将前面的权重也更新了,如果权重不够大,就可以仅训练输出层权重。
这可以看做一个pre-training和fine tuning(微调)的过程。通过pre-training,我们的神经网络学会了如何识别和感知低层次的特征,对将来fine tuning的具体任务有帮助。
甚至可以新建几层神经网络来进行迁移学习:
5 多任务学习
与迁移学习中训练完一个网络再训练针对另一个问题的网络不同的是,多任务学习试图让神经网络同时做好几件事情。
比如在训练自动驾驶模型时,要检测好几种物体:一张图片可以有很多个标签,这与softmax回归是不同的。在这里,我们要建立一个神经网络,输入一张图片,检测里面的n个目标(同时进行多个任务),一个神经网络的性能有时候比n个二分类器的性能还要好(前提是这个神经网络的规模要够大):
并且即使是这样的训练集,也可以进行训练:问号表示该张图片没有标记是否有该物体
6 端到端的深度学习
6.1 什么是端到端学习
忽略掉中间步骤,直接构建学习器网络,可以简化网络:
但是需要很大的数据量,比如10,000小时的数据,否则性能可能不如传统流水线的方法,端到端学习在翻译领域很好用。
6.2 评价端到端的学习