从零开始构建机器学习模型(六)模型提升

https://www.zhihu.com/search?type=content&q=PKLot

作者:雨落晨曦
链接:https://zhuanlan.zhihu.com/p/36475070
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

我们以前文的MLP神经网络为例,通过三个方面进行模型的提升:

一.输入效果提升

前文说到的输入规范化等等是通用的一些提升方案,而对于具体的情况又有不同的应用:

a)对于图像分类和识别问题,我们可以考虑对图像进行预处理

  1. 裁剪,翻转,缩放,参考从零构建机器学习模型(一)数据预处理初阶,主要作为提升模型健壮性和泛化性的考虑;
  2. 像素转换,图像在RGB空间可能无法得到清晰的表达,此时我们可以考虑转换色彩空间到HSI (hue、saturation、intensity) 和HSV (hue、saturation、value) 以及HLS (hue、lightness、saturation) 等,例如在传统的PKLot检测中,我们就可以在包括RGB空间在内的四个空间分别使用Canny算子进行边缘提取再做后续分析,其实也就是数据扩充的思想。其中HSI和HSV颜色空间的差异在于亮度分量(I or V)的计算方式。HSI颜色空间适合传统的图像处理函数,如卷积、均化、直方图等,可以通过处理亮度值来实现这些操作,因为亮度I对R、G、B值的依赖程度是一样的。HSV颜色空间适合处理色度和饱和度,因为它使得饱和度具有更大的动态取值范围;
  3. 通过减去训练集均值提升模型表现,对这一点的具体原理我并不确定,我在某AI芯片公司面试被问过这一点的作用,我的回答是减去均值会将色彩的值从0~255转至[-M,N]的区间,这样在神经网络中训练时可以加速收敛,这一点在反向传播中可以比较清楚得看到,保证了梯度更新同时有正向加速和反向抑制。然而面试官似乎并不认可这个结论,尴尬 ̄□ ̄||
  4. 如果分析的是视频图像,也就是连续图像的问题,我们还可以考虑使用图像尺度空间,差分,光流图等思路进行输入提升;

b)对于文本分类以及命名体识别问题,我们可以考虑对文字做Embedding

  1. 通过全局共现矩阵做矩阵分解,也就是我们常说的LSI算法。这样做的思路与PCA算法降噪相似。文本分类问题的最大难题在于文本噪声,而共现矩阵在做奇异值分解后会形成降维的U,D,V三个矩阵,也就是降维阵U,缩放阵D以及重构阵V,在降维阵U中进行文本处理并移除低特征值维度将有利于去处噪声,提升表达;
  2. 通过局部共现矩阵做Skip-Gram或CBOW,也就是前几年火起来的word2vec的思路。这样做的思路其实是想要通过S-G和CBOW做semantic parsing,也就是让神经网络自行对人类的语义学做数字化解释;
  3. 通过传统语义学对文本进行语义parsing并捕获核心词heading进行降维,这个思路目前不火,主要原因就是过分依赖语义研究和模板匹配了;

c)对于一般的问题,我们可以考虑做降维,例如PCA,这个很简单就不说了

二.模型效果提升

常见的模型效果提升有很多因模型而异的方案,这里先介绍下最通用的三个:Stacking, Boosting和Bagging,之后再具体模型分析时说明不同模型特定的优化。

a)Stacking

Stacking的思路在于通过模型的堆叠最大可能地利用不同模型的优势进行效果提升,继续以神经网络为例,假设我们训练好了一个神经网络NetA,然而这个NetA并不能达到我们的要求,一般来说我们会考虑加深层数活着对模型参数修正如更改每层神经元个数,但是这种方案有太多玄学的东西。这时候我们就可以考虑将NetA的输出层抹除并将最后一层隐藏层作为输入,在其上层Stacking一个SVM,因为SVM自带规范化,而它的升维操作又可以提供与神经网络加深层数等效的提升效果,因此SVM可以被视为一个缩小了参数搜索空间的神经网络,要比我们进行强行调参要容易得多,此时NetA的从第一层到最后一个隐层可以被视为特征提取方案。这个思路最好的一个例子就是RCNN。

当然上层不用SVM也没问题,GBDT,RBFN等等这些都是有效的,只要能利用起它们的优势。

b)Boosting

这一点我还在研究,因为理论上来说神经网络也是可以通过Boosting的思路进行进一步优化,Boosting的核心思路在于样本权重的更新,也就是对样本的额外动态加权。因此假如我们考虑将损失函数重写为加权形式,则很容易用pipe-line的方案做Boosting才对,不过最终效果没有做出来。

c)Bagging

这个思路就比较常见了,尤其是在RandomForest中,通过Bootstrap的方式抽样并进行森林的投票,抗拒过拟合现象,不过这是从概率的角度解释的,因为本质是组合概率嘛,但是实际上我们只能保证Bagging模型在最坏情况下是优于最差模型的。

三.输出效果提升

这里主要是一点思路,既分离输出。

例如在多分类的情况下,我们常采用softmax作为输出,然而softmax有个最常见的问题就是上下溢。对于数字类型的上下溢我们对输出值预先除以某个自然对数次方就可以解决,但是对于由于类别过多引起的上下溢却不能这样做。此时我们可以考虑做hierarchical的思路,将类别做类似于B树的多分类多层次模型,每次分类作为单独的分类模型输出结果,这样可以解决类别过多引起的上下溢问题,当然也是某ERP公司面试时候的问题咯。

猜你喜欢

转载自blog.csdn.net/gaotihong/article/details/82761272
今日推荐