深度学习——机器学习策略(2)

1. 误差分析manual error analysis

对学习的结果进行人工误差分析。

例:猫的分类器

比如train结果的正确率为90%(10%的误差),对结果进行人工分析,如果发现有些狗被识别为猫导致错误,那是不是就可以考虑怎么来减少这种错误?

如何通过人工误差分析来提高算法性能

可以按下面的方式来列出一些可能的错误类型,然后统计在一定样本空间内每种错误所占的比例(中间也可能总结出新的错误类型),根据比例大小来判断应该先从哪个方向开始进行优化(如下是模糊对结果影响比较大)

2. 标注错误的数据

监督学习是包含输入X和输出标签Y,如果Y被标记错误(人为的),那是否有必要对这些标签进行修改?

答案:DL对于随机误差鲁棒性不错,所以如果这些人为误差随机性较大,且数据集较大,则不太有必要进行修改。但是如果是系统误差就问题大了

扫描二维码关注公众号,回复: 93996 查看本文章

3. 修正标签的几点建议

4. 建立一个ML系统的建议

例如一个语音识别系统,建议快速建立一个简单的,然后再进行优化迭代

5. 如果train和dev数据不是同分布?

第一种方式会导致dev/test中包含了train data,而这些数据并不是我们想要关心的

建议使用第二种

6. 数据不匹配问题

新增一个train-dev数据集(与train同分布),用它来判断是否存在data mismatch问题

7. 如何处理data mismatch问题

让train尽量与dev相似

可以采用人工合成数据的方法,但是可能会有过拟合的问题。比如为了模拟在汽车的嘈杂环境中说话的场景,将1000句说话声与1个小时的汽车声音合并,可能需要把1小时的时间复制n多份,然后合并,这样可能会导致对这1小时声音的过拟合

8. 迁移学习transfer learning

从一个任务学习后,把它的网络再运用于另一个任务

如果一个任务的数据会比较少,那可以从另一个数据量大的任务先预学习,然后进行微调,得到我们想要的任务的结果???这里的预学习和微调要再看一下

可以这样的原因:两个任务会共享一些低层的特征,比如输入的都是图片

做法:一般是把输出进行修改(也可以多加几层),对输出层用新任务的数据再训练,而其它层的可以不变(如果新任务的数据多,那也可以再训练)

例:把学习猫图片迁移到学习x射线图

什么时候迁移学习是比较有意义的

9. 多任务学习

一次可以学习多个特征,比如从一张图中同时识别是否有车、有停车标志等,也就是对于一个输出有多种标签

什么时候多任务学习会比较有用

例:无人驾驶时需要同时识别多种物体

第二点:每个任务的数据量差不多,如果关注于最后一个任务,那么其它任务的知识也许也可以起到帮助作用。而如果只有一个网络一个任务,这个数据量可能就相对较少

第三点:多任务的性能比单任务差的唯一情况是它的网络不够大

总体来说:在实践中,多任务学习会比迁移学习的使用频率低,但是计算机视觉是例外

 9. end-to-end 端到端学习

端到端的学习:利用神经网络可以直接拿到你想要的结果

传统上,有些事是以流水的方式工作,比如音频转文字,需要先识别出特征,然后音位,然后一个词,最后变成文本。但是以端到端的方式的话就是直接输入音频,经过网络学习输出文本即可

有些并不能一步就完成的,需要分成多步。比如门禁系统,通过识别人脸来判断是否准入

这里分成两步:先从图片找出头部并放大,再与信息系统中的头像进行比较判断是否一致

为什么?每一步的操作比较简单,且每一步的数据可以够大。如果直接一步的话,数据量(需要的是人靠近门禁系统时的照片)并不是很大(端到端的学习需要有足够多的数据)

9. 什么时候应该用端到端学习

优缺点

let data speak:不在中间加入人为的思想,比如在语音识别时,并不强调一定要以音位的方式来表达转换

hand designed:就是人为的想法,当数据量比较少的时候这个是比较有帮助的

数据和人工组件是深度学习两个知识来源

是否应该使用端到端?

举了一个自动驾驶的例子,一个是数据量,另一个是数据形式(x是图片,y是方向盘的操作,这样的数据并不是很容易获得)。需要中间经过一些其它的系统,而不是直接端到端

猜你喜欢

转载自www.cnblogs.com/coolqiyu/p/8666615.html