举例:图片猫分类器,算法将一些狗分类为猫
深度学习算法对于训练集中的随机错误是相当健壮的(robust),所以可以不用管
你有时间,修正下也没问题。
老师建议:
几乎所有的机器学习程序可能会有50个不同的方向可以前进,并且每个方向都是相对合理的,可以改善你的系统?如何集中精力
老师建议:
快速设立 开发集和测试集,还有指标(定目标,定错了,也可以改)
搭好系统原型,训练一下,看看效果,在 开发集 / 测试集上,评估指标表现如何
用之前说的偏差方差分析,错误分析,确定下一步优先做什么(哪些工作最有希望提升)
如果 训练数据 和 开发数据 来自不同的分布,特别是,也许算法在训练集上做得不错,可能因为训练集 很容易识别(高分辨率,清晰的图像),但开发集 难以识别得多。
所以也许 开发集 增加的 9%误差,没有方差问题,只反映了 开发集 包含更难准确分类的图片。
当你看 训练误差,再看 开发误差,有两件事变了:
你同时改变了两件事情,很难确认这增加的 9%误差,有多少是因为算法没看到开发集中的数据导致的,这是问题方差的部分,有多少是因为开发集数据就是不一样
为了分辨清楚两个因素的影响,定义一组新的数据,称之为训练-开发集,它是从 训练集 的分布里随机分出来的,但不用来训练
case A:
训练误差 & 训练-开发误差,差距 8 %,但是两者数据是同分布的,所以问题是泛化性能差,高方差问题
case B:
训练误差 & 训练-开发误差,差距 0.5 %,方差问题很小,但是在 开发集 上误差为 10%,训练-开发集 & 开发集 上的数据,模型都没有在上面训练过,由于他们是不同分布,模型擅长前者,而你关心的开发集,模型表现不好,这称之为数据不匹配
本节总结:
使用来自 和开发集、测试集 不同分布的 训练数据,这可以提供更多训练数据,有助于提高算法性能,但是,潜在问题就不只是 偏差 和 方差 问题,引入了 数据不匹配 问题
没有特别系统的方法去解决数据不匹配问题,但可以做一些尝试,见下节
发现有严重的数据不匹配,亲自做误差分析,了解 训练集 和 开发集 / 测试集 的具体差异
为了避免对 测试集 过拟合,要做误差分析,应该人工去看 开发集 而不是 测试集
举例:
开发一个语音激活的后视镜应用,你可能要听一下 开发集 的样本,弄清楚 开发集 和 训练集 有什么不同:
你意识到,开发集有可能跟训练集不同或者更难识别:
所以,如果你发现车辆背景噪音是主要误差来源,那么你可以模拟车辆噪声数据;
或者你发现很难识别街道号码,你可以有意识地收集更多人们说数字的音频数据,加到你的训练集里
如果你的目标是让训练数据更接近开发集,怎么做呢?
人工合成数据(artificial data synthesis)(干净的语音+汽车背景噪声)
人工数据合成有一个潜在问题:
比如说,你在安静的背景里录得 10000小时 音频数据,你只录了 1 小时 车辆背景噪音,将这 1小时 汽车噪音循环放 10000次,并叠加到上面的语音
有时候神经网络可以从一个任务中学习知识,并将这些知识应用到另一个独立的任务中。
例如,已经训练好一个神经网络识别猫,然后使用那些知识或部分知识去帮助您更好地阅读x射线扫描图,这就是所谓的迁移学习
把图像识别中学到的知识迁移到放射科诊断上来,为什么有效果?
迁移学习什么时候是有意义的呢?
无人驾驶车的例子,图片中你要检测很多对象(人,车,交通灯,停车标志等等),那么输出标签是多个标签。即建立单个神经网络,模型告诉你,每张图里面有没有这四个物体。
那么损失函数为:
1 m ∑ i = 1 m ∑ j = 1 4 L ( y ^ j ( i ) , y j ( i ) ) \frac{1}{m} \sum_{i=1}^{m} \sum_{j=1}^{4} L\left(\hat{y}_{j}^{(i)}, y_{j}^{(i)}\right) m1i=1∑mj=1∑4L(y^j(i),yj(i))
也可以训练四个不同的神经网络,而不是训练一个网络做四件事情。但神经网络系统得一些早期特征试图告诉我们,训练一个神经网络做四件事情 比 训练四个完全独立的神经网络分别做四件事,性能要更好
另外,多任务学习也可以处理图像只有部分物体被标记的情况。
比如有的图片有人,但是没有加人的标签,还有一些是问号,但是没关系,算法依然可以在上面进行训练(求和的时候会忽略问号)
多任务学习什么时候有意义?
实践中,多任务学习 的使用频率要低于 迁移学习计算机视觉
一个例外是物体检测,人们经常训练一个神经网络同时检测很多不同物体,这比训练单独的神经网络来检测视觉物体要更好
以前有一些数据处理系统或者学习系统,它们需要多个阶段的处理。那么端到端深度学习就是忽略所有这些不同的阶段,用单个神经网络代替它。它需要很多的数据来训练,才可能有好的效果。
端到端深度学习系统是可行的,它表现可以很好(例如,机器翻译),也可以简化系统架构,让你不需要搭建那么多手工设计的单独组件,但它并不是每次都能成功(从X射线照片判断年龄)
其优点:
其缺点:
是否使用?
老师认为:纯粹的端到端深度学习方法,前景不如更复杂的多步方法(比如人脸识别,人脸每次的位置是变化的,先识别出有人脸,然后把人脸区域截取出来,再对其进行预测,分步进行)。因为目前能收集到的数据,还有我们现在训练神经网络的能力是有局限的