前有LR,后有神经网络,树模型是怎么退出江湖的?
大家好,我是梁唐。
今天这篇文章和大家聊聊机器学习中的树模型,树模型相关的原理网上到处都是,之前也写过相关的文章,这次就不过多赘述了。咱们主要是结合场景做一些探讨,简单分析一下树模型的问题。
略显尴尬的树模型
2016年阿法狗战胜了李世石,不仅表明了人类在围棋上输给了AI,也宣告了深度学习新时代的来临。
新时代的体现是什么呢?一个是互联网公司以及互联网业务的崛起,第二个是大众对于人工智能、深度学习的强烈热情。
我们可以简单列举一下互联网公司的主要业务,无非广告、搜索、推荐、视频、图像识别、文本处理、金融、风控这几个领域。如今除了金融、风控等对可解释性有特殊需求的领域,几乎无一例外背后全是深度模型。机器学习时代的模型和算法,正逐渐消失在人们的视野当中,甚至就连面试都很少提及了。
但是这里面有一个问题,如果说LR、线性回归、SVM这些模型过于简单,无非刻画越来越复杂场景中的数据。但通过ensemble方式由多棵子树组合而成的树模型,曾经也在各类大赛当中大放异彩,为什么也会有这样的情况呢?
这个问题没有标准答案,但它非常值得我们思考。
干不了和干不好
对于这个问题的答案,我们可以分成好几层来回答。
首先从最简单的入手,各大公司的算法专家们都不傻,大家都在忙着想方设法地优化算法的效果。只要某种方法可能存在效果,都会进行尝试。既然业界主流不这么做,一定是因为这么做效果不好。
效果不好的结论很容易得到,哪怕是外行人也能推测出来。但针对这个结论我们又有了新的问题,为什么效果不好呢?神经网络是有三头六臂吗,还是有权威认证过,效果怎么就一定要比传统模型好呢?
这个问题稍微难一些,但也不是不好回答。一个模型效果不好无非两种情况,要么干不了,要么干不好。
干不了
先来说说干不了的,首先,图像和文本相关的预测,树模型基本干不了。
干不了的原因不少,选几个典型的。比如说涉及和文本、图像它的预测结果不是统一、规范的。比如说机器翻译,我们输入5个单词,可能翻译出来10个汉字,也可能翻译出来6个汉字。具体翻译成什么样,是根据输入决定的,事先不知道。而树模型要么用来回归要么用来分类,这两种输出的结果都是确定的。
再比如图片的输入维度很高,一张图片动辄数十万像素点,我们要基于这么高的特征维度进行训练,那么对应的模型参数也是一个天文数字。而树模型则很难有如此高的参数数量,并且也无法进行卷积这样的操作,可以从图片当中提取特征进行分析。
所以图像、视频、语言、文本这些数据,树模型束手无策,这是它干不了的。
干不好
其次是干不好的,也就是能干,但是效果不行的,基本上也就是除了图片和文本之外剩下的业务,以搜索、广告、推荐为主。
如果大家看过我之前写的介绍这三个系统的文章,应该多少有些印象。这三个业务的核心目标是一样的,都是追求更好的排序。只是不同的业务场景对于“好”的标准不同,以及一些技术细节和场景要求有所差异而已。
排序的过程其实很简单,我们输入所有的信息,比如商品信息、用户信息,由模型返回一个打分。最后系统根据模型的打分进行倒排,分数高的排在前,分数低的排在后。在这样的问题中,模型的输出是明确的,就是一个浮点数,显然树模型也能搞定。
既然树模型也能搞定,那它为什么效果不好干不过深度模型呢?
这个问题就不太好回答了,原因有点多,我们一个一个来说。
首先想到的还是参数规模问题,神经网络的参数规模更大,可以刻画更加复杂的问题,拟合能力自然也就越强,越能发现数据之间的微小联系。这个都很好理解,就不过多解释了。
除了参数规模之外,还有两个非常非常关键,也非常重要的原因,为了表达清楚,我展开详细说说。
特征表达
关于特征表达的问题,我在之前的文章也说过,神经网络之所以在推荐、广告等领域大行其道,一个很重要的原因是它使用了Embedding。如果不理解Embedding的话,可以简单当做是向量来理解,意思差不多。
简单来说,在神经网络当中我们可以将一个标量转化成Embedding,也就是向量来表达,从而提升了数据的维度,提升了模型的表达能力。大家可能都听说过在NLP领域中有一个非常基础的技术叫做Word2vec,也就是说把单词向量化,把单词表达成一个高维空间的向量。
这样做的好处很明显,将单词表达到了高维空间之后,那么单词就有了空间向量的一些属性。比如说可以计算相似度,可以计算距离等等。由于向量代表了单词,那么我们也就间接量化了单词相似度、单词距离这么一个原本不太好量化的值。
这还是其次,更关键的是,神经网络能够从这些向量化的单词当中学到更多的含义,比如文本的结构,上下文的关系,以及主谓语、时态等高阶的信息。这些都是以往传统的机器学习模型无法办到的。
![](http://n4.ikafan.com/assetsj/blank.gif)
体现在推荐、广告这些业务当中,我们也可以利用类似的原理,将一些标量转化成向量。比如说用户的性别、商品的类别、是否打折、是否有活动等等,在特征集当中,这些标量占据了大多数。并且当中也包含了大量高阶的信息,神经网络能够对这些标量也做Embedding处理,从而带来效果的巨大提升。
模型短板
最后一点关于树模型的短板,不论是决策树、随机森林、GBDT、XGBoost,这些树模型虽然原理不尽相同,但当中都有一个核心点是相同的。就是在训练的时候,会选择信息增益最大的划分方式,针对特征进行分割。
不同的算法建树的原理可能不同,但都是基于特征值进行划分的。这就带来了一个问题,针对推荐、搜索场景当中大量的0/1特征,树模型很难发挥出能力来。因为0和1天然已经分好了类了,样本当中只有这两个取值,也就没有什么信息增益最大的划分方式一说了。
而神经网络呢,0和1属于不同的类别,类别可以拿来做成Embedding。也就是说0这个类别有0类别的向量,1这个类别有1这个类别的向量。两个向量的取值不同,代表不同的含义。不仅完美表达了样本,而且还能刻画不同类别的高阶信息,且不说模型结构,单说对于样本数据的表达能力上,神经网络就已经碾压树模型了。
而在推荐、搜索这些场景当中,大量这样的离散类型特征,反而是连续特征占了少数。因为连续特征信息太少了,就只有一个值,一个单纯的值往往只能拿来加减乘除。而类别特征就不一样了,除了可以做成Embedding向量之外,还可以和其他的类别特征进行交叉。
举个简单的例子,性别可以分成两类,男人和女人。对于树模型就是简单的0或1,而在神经网络当中我们还可以和商品是否打折进行联动。比如男人_打折,男人_不打折,女人_打折和女人_不打折,这样又诞生出了新的类别。我们都知道相比于男性,女性对于折扣信息可能更加敏感,显然如果一个商品满足观看的用户是女性,并且又有折扣,它会被点击的概率则会大大增加。
神经网络可以学习到性别和折扣这些离散类型交叉组合的高阶信息,而树模型则没有这样的能力,往往需要算法工程师手动去制作这样的交叉特征,显然是非常麻烦,并且收效微薄的。
到这里,我们用了几千字的篇幅才勉强把树模型为什么表现不好这个问题说清楚。看似普通寻常的事实背后往往藏着非常深刻的原因,各行各业的牛人,很多就是凭借着对这些原因的思考和挖掘才成长起来的。
希望大家保持探索,热衷思考,都能找到自己的独特发现。