1.Carrying out error analysis
例:当我们在训练一个模型的时候,我们的准确率是90%,bayes optimized bias是0%,这个时候错误率达到了10%,那么我们如何分析是哪错了,并且快速改正,如果我们分析发现误将狗识别为猫,那我们是否又应该加入一些狗的图片,增强模型对负样本的训练?
这个时候就引入了误差分析
分析过程:
这里吴恩达老师是取出100张被错误标记的图片,观察其中把狗标记为猫的例子,假设:有5张是狗标记为猫的例子,那么在总共的错误中,把狗标记为猫只占了5%,我们不需要耗费大量成本加入一些狗的图片,对模型就行一个重新的训练,因为这样我们最多只能把错误率降低到9.5%.
这种错误分析可以同时评估多个影响模型性能的因素,若某因素所占的比重越大,则影响越大,越应该花费时间精力解决这个问题
2.Cleaning up Incorrectly labeled data
监督学习的过程中,可能存在着样本标签标记错误的情况(Incorrectly labeled examples),如果只是随机的,由于深度学习算法比较健壮,将不会产生什么影响,可以忽略;如果是系统的,那么会对DL 的算法造成影响.
例:假设我们做一个猫的分类器,但标记的时候误将一只白狗标记为猫,如果有少数的其他的不同的狗标记为猫,可能不会产生什么影响;但也误将其他的白狗标记为猫,可能会对DL 算法造成很大影响
以上是指的训练集的Incorrect labeled example,如果是dev/test set 又该怎么办?
可以用第一节所学的error analysis,对incorrect labeled example进行一个分析,根据它所占的比重来判断是否对其进行一个手动修正.下图中它占得比重小,就算全部修改过来,也只能改正0.6%的准确率.
可以不进行修改.
dev set 的作用是用来帮助选出错误率最低的模型,如果各个算法的错误率比较接近,又存在incorrect labeled example,我们需要对其进行一个修正
对于纠正dev set 上的incorrect labeled example,这儿有一些原则:
test set 也应该与dev set 一样保持相同的进程,确保他们来自相同的分布,即修正dev set 的incorrect labeled example时,也要修正test set的.
同时考虑算法得到的错误例子与正确例子,修正那些标签可能会导致算法会得到错误结果,不过通常不会那么做,因为如果你的分类器比较准确,那么你所得到的错误个数比正确的少的多,分析那些错误的很容易看出来哪错了,但去考虑正确的,比较难(这里不是太明白..)
train 和dev/test set可以来自轻微的不同分布;之前说过不去修正train set也没太大影响,如果incorrect labeled example不是系统的话,(train set 太大修改也很耗费精力)所以修改dev /test set会与train set有轻微的不同
3.Building your first system quickly ,then iterate
如何建立所需要的模型,我们可以建立第一个简单的模型,然后不停的迭代优化
1.设置dev/test set和metric
2.初始化模型
3.分析bias/vias和erro analysis来确定下一步干什么
4.Training and testing on different distribution
当train set 与dev/test set 分布不同时如何处理?
例:
做一个猫的分类器,假设总共有210,000样本,其中200,000来源于webpage,比较清晰,专业, 而10,000样本来源于用户,拍摄的不清晰,不专业,假设train set 的大小为200,000,dev/test set size为5000,如何分配
第一种方法是将train set和dev/test set完全混合,然后在随机选择一部分作为train set,另一部分作为dev/test set。例如,混合210000例样本,然后随机选择205000例样本作为train set,2500例作为dev set,2500例作为test set。然而我们实际上是要验证用户拍下的照片,而这样分配实际webpage所占的比重仍然很大,用户图片所占的比重小,不能起到很好的验证效果.
第二种方法是将200000例webpages图片和5000例用户图片组合成train set,剩下的2500例用户图片作为dev set,2500例用户图片作为test set。其关键在于dev/test set全部来自于用户。这样保证了验证集最接近实际应用场合。这种方法较为常用,而且性能表现比较好。
5.Bias and Variance with dismatched data distributions
之前我们讲过关于train set与dev/test set 同分布下的bias 和varience
当train set 与dev/test set不同分布的时候,varience可能来自于本就不同的分布,或者算法本身
这种train set 与dev/test set分布不同的情况,我们要求得varience的方法是设立train-dev set,它的分布与train set的分布相同,但并不用于训练
这样就存在如下error:
一般情况下,human-level error、training error、training-dev error、dev error以及test error的数值是递增的,但是也会出现dev error和test error下降的情况。这主要可能是因为训练样本比验证/测试样本更加复杂,难以训练。
6.addressing data dismatch
处理train set 与dev /test set 分布不同的问题,有两条建议:
1.人为的分析train set 和dev/test set的不同 例:一个有噪音,一个没噪音
2.使train set数据与dev/test set数据更加的相似 例:人工合成噪音加入没有噪音的背景中,需要注意的是,我们不能给每段语音都增加同一段背景噪声,这样会出现对背景噪音的过拟合,效果不佳。这就是人工数据合成需要注意的地方。
7.Transfer learning
深度学习非常强大的一个功能之一就是有时候你可以将已经训练好的一部分知识(网络结构)应用到另外一个类似的模型中去,这样的学习叫深度学习.
例如:我们已经训练好了一个猫的模型,那我们可以将这个模型的一部分网络结构应用到使用X光片预测疾病的模型中去.
如下:我们可以将NN的前(L-1)层保持不变,更改输出层的参数w[l],b[l]不变,只改变输入X,输出Y,重新训练输出层的w[L],b[L], 当然,我们也可以在后面加几层
如果样本足够多的话,我们可以只保留网络结构,重新训练所有层的参数w[l],b[l],这样模型会更加精确,样本对模型的影响大. 选择哪种方法通常由样本的数量决定
如果重新训练所有的参数w[l],b[l],初始的w[l],b[l]是由之前的模型得到的,这一过程称之为pre-training
不断调试,优化w[l],b[l]的过程称之为fine-tuning
迁移学习之所以可以的原因是:神经网络的浅层能够检测图片的许多固有特征,如图像边缘,曲线等,使用之前已经训练好的网络可以帮助我们更快,更准确的提取X光片的特征,二者处理的都是图片,而图片处理是有相同的地方,第一个训练好的神经网络已经帮我们实现如何提取图片有用特征了。 因此,即便是即将训练的第二个神经网络样本数目少,仍然可以根据第一个神经网络结构和权重系数得到健壮性好的模型
什么情况下使用Transfer learning
8.Multi-task learning
多任务学习即利用一个神经网络同时执行多个任务,类似于将多个神经网络融合在一起,用一个神经网络实现多种任务.
如:无人驾驶问题,同时检测行人,车,停车标志,交通灯,如下左图,可以表示为如下右图形式,输出层为Y,如下图
与softmax regression不同的是,softmax regression 中只有一个为1,即y={0,0,1,0}T,而multi-task learning 可以有多个标签为1
多任务学习(mutil-task learning)中,可以出现某个标签为空的情况.在计算cost function时,只会计算0/1标签的loss function和
多任务学习是使用单个神经网络模型来实现多个任务。
实际上,也可以分别构建多个神经网络来实现。但是,如果各个任务之间是相似问题(例如都是图片类别检测),则可以使用多任务学习模型。
什么时候多任务学习有用:
每个任务的低层次特征差不多,例如都是图片.
每个任务的样本差不多
可以训练一个足够大的神经网络来完成所有的任务。
9.what is end-to-end deep learning
什么是端到端深度学习?
以一个语音识别为例:传统的语音识别如下:
输入音频-找特征-识别音节-识别单词-生成文字
端到端学习则一步到位,将所有不同阶段的数据处理系统或学习系统模块组合在一起,用一个单一的神经网络模型来实现所有的功能。
如果训练样本足够大,神经网络模型足够复杂,那么end-to-end模型性能比传统机器学习分块模型更好。实际上,end-to-end让神经网络模型内部去自我训练模型特征,自我调节,增加了模型整体契合度。
10.whether to use end-to-end deep learning
端到端学习(end-to-end deep learning)优点:
1.能让NN自己去找特征进行一个学习
2.对人为设计的组件需求度更低
缺点:
1.可能需要非常多的数据
2.一些人为设计的组件是很有用的,但端到端学习会将这个取消.