电话/微信 咨询QQ
如何解决特征工程,克服工业界应用 AI 的巨大难关
时间:2018-09-17  浏览:
特征共分两种,一种叫宏观特征,比方说年龄、收入,或是买过多少本书,看过多少部电影。另外一种是微观特征,指的是比拟细粒度的特征,你具体看过哪几本书,或者具体看过哪几部电影。每一部电影,每一本书,每一个人,都是不同的特征。书有几百万本,电影有几百万部,所以这样的特征量非常大。这里举一个开普勒沿模型这条路发现开普勒三定律的例子。在中世纪的时候,第谷把自己的头绑在望远镜上坚持观察了 30 年夜空,将各个行星的运动轨迹都记录下来。基于这些数据,开普勒不断的进行假设,最后假设行星的运动轨道是椭圆的,用椭圆的方程去拟合他的数据,发现拟合的非常好,便得到了一个新的模型:开普勒第一定律。这就是一个典型的沿着模型走的思路,通过观测数据,科学家获得一个假设,这个假设就是一个模型,然后用数据拟合这个模型的参数,最终在新的数据上验证模型是否正确,这是沿着模型走的一条路。到底是深度模型好还是宽度模型好呢?这里有一个没有免费的午餐定理:不存在万能的模型。简单来说,世界上不存在一个优化算法对任何问题上都有效,也就是说我们总能找到一个问题,让这个优化算法表现的并不比随机的更好。更进一步的说,所有的机器学习都是一个偏执,代表了对这个世界的认知。如果数据较少,这个偏执就需要比较强。比如说科学家观测物理现象,数据并不是特别多。这种情况下,你需要大量的理论和猜想,有少量数据做拟合验证就可以了。但如果假设错的话,就可能出现错误的结论。比如用地心论研究天体物理的话,就发现结论都是错的。但是如果数据很多,我们就不需要很强的偏置,将更多的不确定性加入模型,自动的通过数据进行拟合。综合起来,工业界的机器学习里面并没有免费的午餐,不存在哪一个模型是万能的模型。所以说你一定要根据你的业务做出合适的选择,才是最好的一个方式。比如,数据需要归集、整理、导入、清洗、拼接、特征工程等之后才能模型训练。之后模型上线还要保证系统的稳定性、时效性和吞吐等等指标。同时为了提供线上服务,需要重做一套线上的架构,这个架构需要保证数据流实时性、线上线下一致性,以及模型作用的机制。只有完成这些,这样才真正拥有了一个落地的人工智能系统,否则只能称之为在笔记本上做一个 AI 的玩具而已。刚才说到的还只是一个公司的问题与系统,如果用在各行各业的不同问题上,会发现问题非常多,所以企业一定需要一个集成上述所有能力的人工智能平台。开源社区内好的工具平台和算法能够起到很大作用,这些工具也会日趋成熟,但并不足够。虽然看起来人工智能已经在非常多的领域应用或者开始了突破性的尝试,但是如果对比 Hadoop 这样的分布式存储计算系统来说,还远远未普及。所以现在能够做 AI 应用的人,主要还是那些研究及应用的机器学习科学家,需要那种既懂机器学习,又了解业务,还精通系统架构的工程师。这就造成了 AI 的高门槛。就如同三四十年前,真正编程的人并不是现在我们这样的人,而是一群科学家们,他们通过纸带来控制程序的运行,自己不仅要编程,还得非常懂计算机体系架构。导致的结果是,根本不是每个人都能接触到这项技术,不是每个企业都能受惠于这个技术。但是现在,甚至在 Excel 中都可以编程,这些程序员可能完全不知道计算机的体系结构、操作系统、编译原理、数据库的概念,将全部心思花在理解与解决业务问题上,达到事半功倍的效果。所以,如果想让 AI 在工业界中产生更大的影响,真正的落地,我们需要的是一个完整的人工智能应用平台,让人以更低的成本用上人工智能。从这个角度上看,阻碍 AI 普及的并不是现在的算法效果不够好,而是现在算法的门槛太高,研发新的平台以及算法降低门槛的重要性大于优化算法效果的重要性,我们期望用低的门槛获得好的效果。如何降低这些门槛呢?这里分享一下第四范式的成果。首先特征工程是工业界应用 AI 的巨大的难关。特征工程的目标是针对于某个模型找出与要解决问题相关的关键属性,现在也有一些开源的项目尝试解决特征工程,下图就列出了 Spark 2.2 官方文档中包含的特征工程算法。那么,针对不同的业务、不同的模型,这些算子就足够我们低门槛建模了吗?如果想要做好特征工程,需要对将要使用的机器学习算法有深入了解才行,随便地将所有的特征全部扔进去,现有的算法并不能很好地处理。有时候,不同的算法为了达到同一个目标,使用特征工程与做法会完全不一样。以新闻推荐为例,我们要做两种特征,来提高推荐新闻的点击率。一种是一阶特征,描述的是那些用户直接喜欢的内容。另一种是二阶特征,描述的的是个性兴趣的扩展。比如说喜欢大数据的人,很有可能对机器学习也感兴趣。回头看,如何在之前提到的复杂模型(非线性模型)+ 宏观特征这条路添加一阶特征呢?如图左下角所示,由于是宏观特征,我们需要将不同的话题变成单个特征,一种做法是通过一阶逻辑的判断本篇新闻的话题是否属于用户历史的兴趣加入。这种方式下,在线上服务的时候,我们除了需要推荐实时信息之外,还需要实时维护用户历史的兴趣点,但是模型本生的更新频率就不用那么快了。毕竟,为了达到推荐时效性目标,要么特征静态、模型特别实时,要么特征实时、模型静态不变。更进一步的,我们总结对比一下,对于前文提到的机器学习四象限中的第 2,3,4 象限的模型,我们做特征工程的方式差距非常大。对于一阶特征,如果是线性模型加精细特征,直接做组合,不用统计;如果做非线性模型是需要统计的,同时用包含关系来做;如果用非线性模型不需要用包含关系,模型本身会进行特征组合。如果做二阶特征,每种方法都需要使用统计特征,但适用方式也各不相同,比方说非线性模型宏观特征,你需要三个相关的信息和很多统计才可以做到。这个例子说明了一个道理,如果要做好的特征工程,需要非常多的针对模型的定制化的优化,仅用现在的工具还完全不够,完全需要靠人的经验与判断。因此,研发自动特征工程的算法就变得尤为重要。自动特征工程是一个比较难的问题,在学术界与工业界都在积极地研究这个问题,这里跟大家分享自动工程的三个方向,隐式特征组合(如 NN,FM),半显式特征组合(如 GBDT)与显式特征组合(显式特征叉乘)。隐式特征组合主要特点是对连续值特征非常友好,最成功的应用场景是语音和图像。在这些原始信号是像素或是声波的问题里面,深度学习通过神经元网络产生底层的 Filter 以及层次化的特征组合,获得了远超人类手工特征工程的效果。但是深度神经网络并不是万能的,在深度学习中,高维离散特征的变量处理非常复杂,同时缺乏可解释性,过于黑盒化也是神经网络大家关注的焦点。这样会导致深度学习出来的特征组合相对难用到其他算法之上,也很难给人明确的信息反馈。显式特征组合还有一个问题是如何做连续值的组合,比如说一个人的年龄是 30,收入是 10000,应该怎么做组合特征呢?是乘、是加还是平方和?在 NN 中,是通过线性组合加上非线性变化,在 GBDT 中使用过特征值分裂,但是对限时特征组合,实际上没有一个好的现有方法去直接组合。虽然有着重重困难,显式特征组合的优势在于可解释性,会提供一个非常深入的洞察,可以知道哪些特征是潜在有关系的,应该组合起来;同时这样的方法享受比较好的可叠加性:所有机器学习算法都基于特征,显式特征组合的产出是特征集,这个特征集可以增强所有其他机器学习的算法,成为训练的基础。