新智元导读】“你最喜欢的机器学习算法是什么?”这个问题有些像“你最喜欢的颜色是什么?”说不重要吧,细究起来,颇有深意。本文摘选一些机器学习大牛在 Quora 的回答,看看他们爱用的算法和原因。
Yann LeCun,Facebook AI研究总监,纽约大学教授
Backprop。
Carlos Guestrin,机器学习 Amazon 教授,Dato CEO
和看电影一样,没有哪个机器学习算法是我的唯一最爱,但有若干的算法是我最喜欢的,每个有每个的理由。下面是我最喜欢的几个算法和模型:
最简洁的:感知器算法。它于1950年代被 Rosenblatt等人发明。这个极其简单的算法可以被视为如今一些最成功的分类器的基础,这些分类器包括支持向量机和Logistic 回归,并使用随机梯度下降来解决问题。对感知器算法的收敛性证明是我在机器学习领域见过的最简洁的数学工作。
最有用的:Boosting 算法,特别是 boosted 决策树。这一直观方法让你能够联合多个简单模型以建造高度精确的机器学习模型。Boosting 是机器学习领域最实用的方法之一,它被广泛应用于业界,可以处理范围广泛的数据类型,并能被大规模实现。我推荐,在实现可扩展的 boosted 树时,可以去了解一下 XGBoost 这个工具。Boosting 也拥有十分简洁的证明。
最重大的复兴:卷积神经网络深度学习。这种类型的神经网络在 1980年代早期已经出现。尽管从 1990 年代后期到 2000年代后期人们对它的兴趣下降了,它却在过去五年里出现了令人惊叹的复兴。尤其是,卷积神经网络构成了计算视觉和语音识别等影响巨大的深度学习模型的核心。
最优美的算法:动态编程(例如,Viterbi,forward-backward, variable elimination & belief propagation algorithms)。动态编程是计算机科学中最优雅简洁的算法技术,因为它使得人们能够通过搜索指数级空间找到可选的解决方案。这个想法已在机器学习中以不同方式得到应用,特别是在图模型领域,例如隐马尔可夫模型、贝叶斯网络和马尔科夫网络等。
最强大的基准算法:最邻算法( Nearest-neighbor algorithm)。通常,在写作论文时,你希望展示出“你的曲线优于我的曲线”。其中一个方法是引入一种基准方法,并展示你的方法比它更精确。最邻算法是最容易实现的基准算法,人们经常会首先尝试它,以为自己能轻易击败它并证明自己的方法非常棒。然而,令人惊讶的是,最邻算法极难击败!实际上,如果你有足够多的数据,最邻算法是非常强大的,并且,这个方法在实践中十分管用。
Alex Smola,亚马逊研究员,前CMU教授
或许所有人都最喜欢感知机算法。它是许多重要方法的起点。略举一二:
- 核方法(只需切换感知器算法的预处理过程)
- 深度网络(只需增加更多的层)
- 随机梯度下降(只需改变感知器算法的目标函数)
- 学习理论(只需让算法更新具有对抗性保证)
那什么是感知器算法呢?假设我们有一个线性方程,其形式为:
f(x)=⟨w,x⟩+bf(x)=⟨w,x⟩+b。
我们想估算出向量 w 和常量 b,以实现每当输入类别1时,f 总是为正,每当输入类别 -1 时,f总是为负。那么,我们可以按下面几步来做:
- 将 w和b初始化为0 (或任何可能更好的其他值)
- 持续对数据对(x,y)进行迭代,直到不再出现错误。
- 如果yf(x)<0 ,那进行如下更新:w+=yx, b+=y
该算法一定会收敛,而它所花的时间取决于问题有多困难。(更具体地说,取决于你在分隔正集合和负集合时有多困难)。更要紧的是,你会希望让算法尽可能快地经历所有错误。
François Chollet, 谷歌深度学习研究员、Keras作者
矩阵分解:它是一种简单、优雅的维数约简(dimensionality reduction)方式——而维数约简是认知的本质。推荐系统是矩阵分解的一大应用领域。它的另一个我(从 2010年处理视频数据开始)曾涉足多年的应用领域是分解特征之间的对间互信息(pairwise mutual information),或更常见的点间互信息(pointwise mutual information),而这可以被用于特征提取、词嵌入计算、标签嵌入计算(这也是我的一篇近期论文要讨论的,见注释[1])等。
在卷积环境中,该算法可以胜任图像和视频的无监督特征提取器。不过,它有一个重大缺点: 从基础上讲它是一个浅度算法。如果有监督标签可用的话,深度神经网络很容易超越它。
[1] [1607.05691] Information-theoretical label embeddings for large-scale image classification
Xavier Amatriain,Quora 机器学习负责人
我喜爱简单灵活的算法。如果我必须选一个,我要说我最喜欢的算法是集成算法(Ensemble),我认为它是我的“主算法”。无论你从什么算法开始,你总是可以使用集成算法来提升它。集成算法获得了 Netflix 奖,并常常展示出优秀业绩,而且它们还比较容易理解、优化和监控。
如果你责怪我不该用集成算法这样的“超级算法”来糊弄人,我会选择 Logistic 回归算法。该算法十分简单、高效、灵活,适用于许多应用,特别是分类和排序。
Ian Goodfellow,OpenAI 研究员
我喜欢 dropout 算法,因为“从单一模型中构建出指数级集成”这一思想十分简洁优雅。同样让我赞叹的是,它通过把权重除以2,就能很好地逼近对集成的预测。我不知道到底是什么理论原因让它能在深度非线性模型中表现出众,但确实如此。
Claudia Perlich,Dstillery 首席科学家,纽约大学兼任教授
是 Logistic 回归算法(再配上诸如随机梯度下降、特征哈希等吸引人的方法)。
我知道在这个深度学习时代,这可能听起来古怪。所以让我先谈谈背景:
在 1995-1998年期间我使用神经网络,1998-2002我使用基于树的方法,而2002年之后,logistics回归(以及包括分位数回归和泊松回归在内的线性模型)逐渐成为我的最爱。2003年我发表了一篇机器学习论文,在35个当时的大数据集上对比了树方法和logistic回归方法。
略过这篇30多页的论文,论文的简短结论是——如果信噪比高,树方法会赢。但如果问题的噪音很高,那么最优模型的 AUC 将小于 0.8,这logistic模型几乎总会击败树模型。最后,如果信号非常弱,高变异的模型将会迷失在噪音中。
这在实践中意味着什么呢?我常常处理的是那些噪音极高、可预测性很低的问题。想象一下,在各种问题中,一端是决定论式的问题(例如国际象棋),另一端是那些随机式问题(例如股市)。给定数据后,有些问题比其他问题更具有可预测性。可预测性的高低不是算法的问题,而是对世界是什么样的陈述。
我感兴趣的大多数问题都接近像股市那样的随机式问题。深度学习在解决“这张照片是猫吗”这样的决定论式问题时表现优越。但在不确定性的世界里,偏差-方差权衡常常会更倾向于偏差的那一侧——这就是说,你需要的是一个“简单”的、高度约束的模型。而这正是logistic 回归的有用之处。我发现,通过增加复杂特征来做出一个简单线性模型,这比约束一个强大(高变异)的模型类要容易得多。实际上,每一次我赢得数据挖掘竞赛(KDD, CUP 07-09)时,使用的都是线性模型。
除了绩效之外,线性模型也很健壮,不需要人手调整(好吧我承认,随机梯度下降和惩罚确实让线性模型变得更难了)。当你想在工业界做预测性建模时,这一点非常重要,因为在业界你没有时间花3个月去建立完美模型。
Shehroz Khan,机器学习研究者,多伦多大学博士后
我没有最爱的机器学习算法,因为这样的算法并不存在[1]。不过,我实现的第一个算法是朴素贝叶斯分类器。因此,在某种意义上它对我来说很重要。不过,当时它未能帮我完成工作。因为我当时想进行单类别分类[2]。朴素贝叶斯算法基于每个类别的频率计数来计算其先验概率。然而,如果单一类别的数据在训练期间不存在,它的先验概率就会是 0,这样你就没法计算它的似然度,因为没有任何训练数据、没有任何东西被归到那个类别。对该工作的实现使我认识到了这个简单算法在这个特定问题上的局限性。
脚注:
[1] 世上没有免费午餐。
[2] https://cs.uwaterloo.ca/~s255kha...
Ricardo Vladimiro,Miniclip 游戏分析师和首席数据科学家
是随机森林算法。对我来说学习随机森林的过程十分美妙。各个集成最终拥有了意义。那些漂亮但无用的决策树也有了存在的理由。Bootstrapping 特征最让人惊喜,它真的很神奇。
我觉得我对随机森林的看法是带感情的,因为我只用了较少时间就从它那里学到了如此多的东西。
p.s. 我知道我对决策树的看法有点极端。
Luca Parlamento,量化交易/机器学习博士候选人
最喜欢的算法是能解决具体问题的恰当算法!
原则上,我认为从业者的一大陷阱便是坚持某个自己最爱的算法。在实践中,使用某个你不太了解其如何运转的算法是很危险的……
因此,你需要找到一个平衡点,不要爱上特定的算法,但也不要钻牛角尖地认为切个洋葱也需要了解 17种不同的分类算法。这是一个优化问题,没有“免费午餐”式的一刀切解法。
Thorsten Joachims,康奈尔大学教授,用机器学习研究人类行为
让我先回答一个更简单的问题:有一些算法具有不必要的缺陷,是我所不喜欢的。但说到最喜欢的,有许多机器学习算法都很重要,属于是机器学习空间中的帕累托集。实际上,机器学习基本理论告诉我们,不存在在所有问题上都最优的单一算法。例如,如果我拥有高维度的稀疏数据(例如,根据话题对文本分类),训练实例却很少,那么我会使用SVM或logistic回归等归一化线性回归模型。但是,如果我拥有低维度致密数据和大量训练实例(例如语音识别或视觉),我就会使用深度网络。