多核学习在图像分类中的应用

简介:

1摘要

分类在搜索引擎中的应用非常广泛,这种分类属性可以方便在rank过程中针对不同类别实现不同的策略,来更好满足用户需求。本人接触分类时间并不长,在刚用SVM做分类的时候对一个现象一直比较困惑,看到大家将各种不同类型特征,拼接在一起,组成庞大的高维特征向量,送给SVM,得到想要的分类准确率,一直不明白这些特征中,到底是哪些特征在起作用,哪些特征组合在一起才是最佳效果,也不明白为啥这些特征就能够直接拼在一起,是否有更好的拼接方式?后来了解到核函数以及多核学习的一些思想,临时抱佛脚看了点,对上面的疑问也能够作一定解释,正好拿来和大家一起探讨探讨,也望大家多多指点。本文探讨的问题所列举的实例主要是围绕项目中的图像分类展开,涉及SVM在分类问题中的特征融合问题。扩展开来对其他类型分类问题,理论上也适用。

关键词: SVM  特征融合 核函数 多核学习

 

2基本概念阐述

SVM:支持向量机,目前在分类中得到广泛的应用

特征融合:主要用来描述各种不同的特征融合方式,常见的方式有前期融合,就是前面所描述的将各个特征拼接在一起,后期融合本文后面会提到

核函数:SVM遇到线性不可分问题时,可以通过核函数将向量映射到高维空间,在高维空间线性可分

多核学习:在利用SVM进行训练时,会涉及核函数的选择问题,譬如线性核,rbf核等等,多核即为融合几种不同的核来训练。

3应用背景

在图片搜索中,会出现这样的一类badcase,图像的内容和描述图像的文本不一致,经常会有文本高相关,而图像完全不一致的情况。解决这类问题的一个思路就是综合利用图像的内容分类属性和文本的query分类属性,看两者的匹配程度做相应策略。

4分类方法的选取

下面就可以谈到本文的重点啦,那是如何对图像分类的呢?

对分类熟悉的同学,马上可能要说出,这还不easy,抽取各种特征,然后一拼接,随便找个分类器,设定几个参数,马上分类模型文件就出来啦,80%准确率没问题。

那这个方法确实不错也可行,但是有没有可以改进的地方呢?

这里可能先要说明下图像分类的一些特殊性。

图像的分类问题跟一般的分类问题方法本质上没太大差异,主要差异体现在特征的抽取上以及特征的计算时间上。

图像特征的抽取分为两部分,一部分是针对通用图像的特征,还有一部分则是针对特定类别抽取的特征。这些特征与普通的文本特征不一致的地方在于,一个图像特征由于存在分块、采样、小波变换等,可能维度就已经很高。譬如常见的MPEG-7标准中提到的一些特征,边缘直方图150维,颜色自相关特征512维等。在分类过程中,如果将这些特征拼接在一起直接就可能过千维,但是实际在标注样本时,人工标注的正负样本也才几千张,所以在选择分类器时,挑选svm,该分类器由于可以在众多分类面中选择出最优分界面,以及在小样本的学习中加入惩罚因子产生一定软边界,可以有效规避overfitting。

在特征的计算时间上,由于图像处理涉及的矩阵计算过多,一个特征的计算时间慢的可以达到0.3秒,所以如何挑选出既有效又快速的特征也非常重要。

5两种特征融合方式的比较

那刚才的方法有什么问题呢?

仔细想想,大致存在以下几点问题:
1. 你所提取的所有特征,全部串在一起,一定合适么?如果我想知道哪些特征组合在一起效果很好,该怎么办?
2. 用svm进行学习时,不同的特征最适合的核函数可能不一样,那我全部特征向量串在一起,我该如何选择核函数呢?
3. 参数的选取。不同的特征即使使用相同的核,可能最适合的参数也不一样,那么如何解决呢?
4. 全部特征都计算,计算时间的花销也是挺大的

对于刚才的问题,如果用前期融合,可能是用下面方式来解决:
1. 根据经验,觉得在样本中可能表现不错的特征加进来,至于组合么,全部串在一起,或者选几个靠谱的串一起,慢慢试验,慢慢调,看哪些特征有改进就融合在一起
2. 也是根据经验,选取普遍表现不错的RBF核,总之结果应该不会差
3. 交叉验证是用来干嘛的?验证调优参数呗,全部特征融合在一起,再来调,尽管验证时间长,不要紧,反正模型是离线训练的,多调会也没关系。

那是否有更好的选择方案呢?

多核学习(MKL)可能是个不错的选择,该方法属于后期融合的一种,通过对不同的特征采取不同的核,对不同的参数组成多个核,然后训练每个核的权重,选出最佳核函数组合来进行分类。

先看下简单的理论描述:

普通SVM的分类函数可表示为:

 

其中为待优化参数,物理意义即为支持向量样本权重,用来表示训练样本属性,正样本或者负样本,为计算内积的核函数,为待优化参数。

其优化目标函数为:

 


其中用来描述分界面到支持向量的宽度,越大,则分界面宽度越小。C用来描述惩罚因子,而则是用来解决不可分问题而引入的松弛项。
在优化该类问题时,引入拉格朗日算子,该类优化问题变为:
 


其中待优化参数在数学意义上即为每个约束条件的拉格朗日系数。
而MKL则可认为是针对SVM的改进版,其分类函数可描述为:
 


其中,表示第K个核函数,则为对应的核函数权重。
其对应的优化函数可以描述为:
 


在优化该类问题时,会两次引入拉格朗日系数,参数与之前相同,可以理解为样本权重,而则可理解为核函数的权重,其数学意义即为对每个核函数引入的拉格朗日系数。具体的优化过程就不描述了,不然就成翻译论文啦~,大家感兴趣的可以看后面的参考文档。
通过对比可知,MKL的优化参数多了一层其物理意义即为在该约束条件下每个核的权重。
Svm的分类函数形似上是类似于一个神经网络,输出由中间若干节点的线性组合构成,而多核学习的分类函数则类似于一个比svm更高一级的神经网络,其输出即为中间一层核函数的输出的线性组合。其示意图如下:
 

 


在上图中,左图为普通SVM示例,而全图则为MKL示例。其中

为训练样本,而

为不同的核函数,

为支持向量权重(假设三个训练样本均为支持向量),

为核权重,y为最终输出分类结果。

6实验过程:

以实际对地图类别的分类为例,目前用于分类的特征有A,B,C,D,E,F,G(分别用字母代表某特征),这些特征每个的维数平均几百维。
准备工作:
1. 人工标注地图类别正负样本,本次标注正样本176张,负样本296张
2. 提取正负训练样本图片的A~G各个特征
3. 归一化特征
4. 为每个特征配置对应的核函数,以及参数
工具:

Shogun工具盒:http://www.shogun-toolbox.org/,其中关于该工具的下载,安装,使用实例都有详细说明。该工具除了提供多核学习接口之外,几乎包含所有机器学习的工具,而且有多种语言源码,非常方便使用。

结果测试:

经过大约5分钟左右的训练,输出训练模型文件,以及包含的核函数权重、准确率。

在该实例中,7个特征分别用七个核,其权重算出来为:

0.048739 0.085657 0.00003 0.331335 0.119006 0.00000 0.415232,

最终在测试样本上准确率为:91.6%

为了节省特征抽取的时间,考虑去掉权重较小的特征A、C、F,

拿剩下4个核训练,几分钟后,得到核函数权重如下:

0.098070 0.362655 0.169014 0.370261,

最终在测试样本上准确率为:91.4%

在这次训练中,就可以节约抽取A、C、F特征的训练时间,并且很快知道哪些特征组合在一起会有较好的结果。

实验的几点说明:
1. 该类别的分类,因为样本在几百的时候就已经达到不错效果,所以选取数目较少。
2. 该实验是针对每个特征选择一个核,且每个核配置固定参数,实际中如果时间允许,可以考虑每个特征选不同核,同一核可以选取不同参数,这样可以得到稍微更好的结果。
参考文章:

Large Scale Multiple Kernel Learning

SimpleMKL

Representing shape with a spatial pyramid kernel

参考代码:http://www.shogun-toolbox.org/doc/cn/current/libshogun_examples.html

7个人经验与总结:

1. 多核学习在解释性上比传统svm要强。多核学习可以明显的看到各个子核中哪些核在起作用,哪些核在一起合作效果比较好。
2. 关于参数优化。曾经做过实验,关于同一特征选用同一核,但是不同参数,组合成多个核,也可以提升分类准确率。
3. 多核学习相比前期特征融合在性能上会有3%~5%左右的提升。
4. 通过特征选择,可以节约特征计算时间。

by wenshilei 








本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/742984 ,如需转载请自行联系原作者
相关文章
|
5天前
|
机器学习/深度学习 自然语言处理 并行计算
探索深度学习中的Transformer模型:原理、优势与应用
探索深度学习中的Transformer模型:原理、优势与应用
|
4月前
|
机器学习/深度学习 存储 负载均衡
深度学习之数据并行与模型并行
深度学习的数据并行(Data Parallelism)和模型并行(Model Parallelism)是两种主要的并行化策略,用于加速大规模模型训练。
112 1
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】Transformer模型大小与性能探究
【机器学习】Transformer模型大小与性能探究
375 5
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
多任务学习的优势
【5月更文挑战第25天】多任务学习的优势
112 6
|
自然语言处理 Java 物联网
干货!MFTCoder论文多任务微调技术详解
代码大模型(Code LLMs)已经成为一个专门的研究领域,通过使用代码相关数据对预训练模型进行微调来提升模型的编码能力。以往的微调方法通常针对特定的下游任务或场景进行定制,意味着每个任务需要单独进行微调,需要大量的训练资源,并且由于多个模型并存而难于维护和部署。此外,这些方法未能利用不同代码任务之间的内在联系。
429 0
|
机器学习/深度学习 算法 搜索推荐
多任务学习模型之DBMTL介绍与实现
本文介绍的是阿里在2019年发表的多任务学习算法。该模型显示地建模目标间的贝叶斯网络因果关系,整合建模了特征和多个目标之间的复杂因果关系网络,省去了一般MTL模型中较强的独立假设。由于不对目标分布做任何特定假设,使得它能够比较自然地推广到任意形式的目标上。
|
存储 机器学习/深度学习 人工智能
神经网络推理加速入门——指令流水线
指令流水线到底是如何工作的呢?
神经网络推理加速入门——指令流水线
|
机器学习/深度学习 自动驾驶 语音技术
八、迁移学习和多任务学习
八、迁移学习和多任务学习
八、迁移学习和多任务学习
|
机器学习/深度学习
深度学习:轻量级神经网络MoblieNet v1
深度学习:轻量级神经网络MoblieNet v1
163 0
深度学习:轻量级神经网络MoblieNet v1
|
机器学习/深度学习 算法 架构师
如何在GPU上设计高性能的神经网络
如何在GPU上设计高性能的神经网络
197 0
如何在GPU上设计高性能的神经网络