深度学习算法工程师面试(一)
今天去面试,感觉面试的题目很灵活,不是很好答。记下来,好好琢磨一下。有看到的可以探讨一下。
1.模型在测试集上效果很好,但是在实际数据上表现很差,这是什么现象?现象的名字叫什么?怎么解决?
感觉与过拟合的定义不一致,因为测试集我们只测试一次,说是过拟合有点问题。最后我给的答案是测试数据与实际数据分布不一样。
测试数据使我们训练的目标,但是实际数据分布不一致相当于设立了新的目标,这样会导致在测试数据集表现很好但是实际数据表现很差。
我在思考这样一个问题:我们训练的数据集应该是从我们要解决的实际问题中获取的数据集或者相联系的问题获取的,中间有噪声可
能会导致训练与实际数据稍有不同,但是这一点点干扰会导致训练好的模型在实际中表现很差吗?
2018-11-19
今天思考了下载训练集训练的很好,在测试集也测试的很好,说明模型具有一定的泛化能力,在实际数据测试结果很差,说明泛化能力不够,
可以认为是对于整个数据集过拟合;严重的情况就是实际数据与数据集并不符合同一分布,那样的话你在数据集学习的再好也没什么用。
说明这是过拟合现象的还有一种情况,就是测试集的不当划分根本没有体现出测试集的作用,或者测试集与训练集很有很多重合的数据,导致测试的结
果并不准确,学习的模型根本过拟合,根本没有泛化能力,对于实际数据效果就会很差了。我觉得数据集不服从同一分布的情况还是少的,毕竟是从要解决
的问题上获取的训练数据,与实际数据之间是有联系的;更多情况从其他方面查找分析问题,查找问题所在,并想出解决方法。对于数据不服从同一分布的
问题很难解决。
2.如何分辨两组数据服从同一分布还是不服从同一分布呢?
这里,我们要分清楚同一分布与同一类型分布。以高斯分布为例,两组数据都服从的是高斯分布,可能均值,方差不同,但是都是服
从同一类型的分布。两组数据都服从的是高斯分布,均值,方差都一致,服从同一分布。
我们在训练集训练,最后在测试集测试,我们希望训练集,测试集都服从的是同一分布。这样在训练好的时候,可以在测试集上获得
很好的效果。但是如果训练集和测试集服从同一类型分布,则在训练集上训练好的模型,还需要微调才能在测试集上取得好的效果。
这里不知道理解的对不对?这是我与别人沟通之后思考出来的答案。那么如何判断两组数据服从同一分布呢?至少判断为同一类型
分布,这样在训练好的模型才能在测试表现不错。当时面试时没回答出来,现在想想可以使用直方图或者其他可视化工具可视化这两组
数据,大致观察其分布是否一致。这里应该是判断同一类型分布,因为同一分布需要分布描述参数完全一致,看是没法看出来的。还有个想
法是计算两组数据相对应类别类内方差,判断是否属于同一类型分布。关于类内方差我是听面试官说的,但是具体了解也不清楚这个概念,
网上资料很少。
3.猫狗分类效果很差,猫错分为狗,狗错分为猫,解决步骤是什么?从哪些方面思考?
猫狗分类效果很差,是在哪一步判断很差的。一般是训练集验证集模型效果很好,发现测试集的分类效果差,这个是按照过拟合的解决方案,当然也要考虑数据的分布类型不一致,即测试集和训练集的分布类型不一致。
另外一种判断就比较糟糕了,处于训练阶段整个模型就比较糟糕。下面就以第二种情况做分析。
既然训练的模型效果不好,从两方面考虑:一个是数据,一个是模型。
先从数据思考,数据的准确性和数据的规模;
数据的准确性可以抽取一部分猫狗数据和其对应的标签进行查看,查看图片是猫的标签是猫,正确的数据和正确的对应标签才能指导模型的训练学习。
排除掉数据的错误后,可以思考数据的规模。或许现有的数据规模较小,提供的信息认为猫和狗非常相似,无法分辨,考虑加入新的具有判别信息的猫狗图片,提供额外的信息为分类猫狗提供判断依据。
接下来思考的可能是使用的分类网络不好,相对于数据可能出现了欠拟合问题,可以尝试更改网络直至过拟合,先把训练集训练好,才能思考测试集的效果的事;也可能是网络架构的原因,经典的分类网络
有很多,可以考虑换个分类网络;也可能是网络没有训练好,没有收敛,没有找到最优解等问题,可以考虑使用别人的预训练模型,自己微调一一般会得到一个比较好的分类效果。
4.如何精炼准确的介绍SVM。
SVM即支持向量机,是二分类模型,其目的是在特征空间上寻找一个具有最大分类间隔的线性超平面,进行数据分类。