1. 误差分析
误差分析:真的是把狗误标记成猫的样本多吗?
可以画一张表手工验证,给后期调优具体方向
2. 清除标注错误的数据
训练集分类将小白狗分类为猫,这种随机的错误在数据量很大的时候可以不做修改,但是某些错误(比如把白色的狗都分类成猫)为系统错误,没有那么好的鲁棒性。
建议:
3. 建立好模型,然后迭代
4. 在不同分布上的训练、测试
假设实际使用的数据有10,000,从网上下载的高清图有200,000,可选的方式:
1)混合在一起,随机分隔成训练集和测试集合。坏处:有可能“射偏”,dev set可能都是来自网页的高清图,没有实际价值,不介意这样做。
2)将10,000分为两个5000,第一个放training,之后两分做dev and test.
5. 不匹配数据划分的方差于偏差
如果像上面说的第二种做法划分数据集后,假设最优贝叶斯误差是0%,training error 是1%,Dev error是10%,但由于dev和test来自与training中大部分数据不同分布的数据(比如图像更模糊),那么这个10%并不一定是算法的问题。这个时候需要怎么验证呢:设立training-dev set ,是从training中挖出来的一块,与training来自同样的分布,在这个上面像测试集一样进行测试,来看这个training-dev error 会是多少,以此来判断是否是算法的问题还是数据来自不同分布导致的问题。
检查L形内的数值,查看是否是来自不同划分的数据集合给实验带来了影响。
6. 定位数据不匹配
找出到底数据及的不同在哪,然后试着人为制造一些数据。
虽然没有系统的解决方法,但是可以用人工数据和成来缓解,提高性能。比如,在做车内后视镜智能语音助手,需要收集车内人的语言信息,而只有清晰地语音信息没有包含车内噪声,那么为了更符合实际情况,可以将10000小时的语音信息与1小时的噪音进行合成来模拟车内语音环境。但是这也有一个可能的坏处:模型拟合了那1小时的噪声,而人耳是分辨不出来的。
7. 迁移学习
通常在一个数据量很多而另一个数据量很少,但是都是同样的输入时使用。比如X光图片和一般图片。
迁移学习就是将已经学习好的参数不变,最后的输出层改写成想要的输出即可,低层次的信息很可能在一种任务上有用的同时在另一种分类上也有用。
什么时候迁移学习有用:
8. 多任务学习
尝试让单个神经网络同时做几件事,希望几件事之间能够互相帮助
比如同时检测一幅图片里是否有汽车、行人、交通标示、红绿灯:
什么时候有用:
1)具有相似的低层次特征
2)数据量相同使用多任务学习的可以多学一点东西?(不一定准确)
3)如果比单个检测效果差可以考虑增大网络,一般会有近似及超越单个检测的效果
9. 端对端深度学习(end to end)
在数据量很大的时候可以提单很多需要将一个任务分解为很多步骤解决的中间件系统
比如人脸识别:定位人,放大人脸剪裁,与数据库中的数据对比,有两部分组成(不算最后对比)
更多例子:机器翻译与骨龄检测
10. 什么时候使用端对端深度学习
优缺点:
例子:无人驾驶,在现在的数据量还不足以使用端到端的深度学习,反而是有人工干预的分步方法更有希望。