[博客翻译]PCA不是万灵药(2013)


原文地址:http://danluu.com/linear-hammer/


Patreon 今年早些时候,我参加了一家知名科技初创公司的面试,这家公司是众多声称比谷歌有更难的面试、更具挑战性的工作和更聪明员工的公司之一[1]。我的第一位面试官约翰给我展示了一番标准流程:配备了健康零食与糖果的迷你厨房;围绕着桌上足球的二十多岁的白人男性;明亮的空间配以可爱主题;还有一个用于视频游戏的大电视;最后是洗手间。他带我进入一间类似壁橱大小的会议室,我们开始进入正题。在讨论了基本的数据结构和算法之后,我们进入了核心问题:你会如何设计一个针对“foo”的分类系统[2]?我们讨论了设计权衡,但关键分歧在于算法选择。我表示,在面试中如果需要编码实现,我会选择使用朴素的矩阵分解算法,但我不期待能有出色结果,因为并非所有东西都能轻松分解。约翰持不同意见——他坚信PCA是任何分类问题的解决方案。

我们花了二十五分钟讨论背后的数学原理——占面试时间的一半——但很明显,理论层面我们都无法说服对方。我转换了策略,尝试从实证方法入手,引用了一个关于使用LSA(只能捕捉单词之间的二元关联)[3]与深度学习[4]在文本分类上的旧结果。LSA的结果是这样的:
PCA.png

每种颜色代表不同类型的文本,投影到两个维度;可能你不想降维这么多,但这能帮助我们直观地理解情况。不同类别之间有些分离:绿色点倾向于在右下角,黑色点在图的上半部分密集分布等。但基于这种分类方法,当文档相似且差异微妙时,效果可能并不好。而深度自编码器的结果如下:
deep_autoencoder.png

它并非完美,但效果明显更好。尽管举例后,我意识到与面试官无法达成一致,我询问是否可以同意不同意见并继续下一个话题。毕竟这只是面试,问题不大。但在面试之外,我每月至少会遇到一次类似的情况,人们坚信只需应用这些线性方法就能解决所有问题。当技术顾问带着通用的商业知识进来时,工程师们会抱怨收费高昂且给出泛泛的建议,而忽视细节。然而,数据科学作为新兴领域,人们自称数据科学家而非技术顾问就能获得宽容。我无意贬低数据科学(不论其含义如何),或者线性方法[5]。它们是有用的。但我经常看到人们试图将同样的四类线性方法应用到所有问题上。

事实上,在我写作这段文字的时候,我的女友在另一个房间接受一家大公司的数据科学团队的电话面试,他们试图使用多元回归预测系统性能,并从回归系数中分解资源利用率到应用和查询层面,得到类似“foobar使用了18%的CPU”这样的结果4000 QPS。他们提出的问题是:如何加速回归以将测试系统推向Web规模?真正的问题是:为什么要这么做?几乎每一门初级研究生计算机架构课程都会涉及编写或修改模拟器,因为实际系统的性能充满了非线性转折点,这些情况无法仅用排队理论模型,更别说线性回归模型来描述。

然而,当你只有线性工具时,非线性的问题看起来就像钉子一样适合用锤子解决。对此,John Myles White提出了一个很好的观点:线性与非线性并不是恰当的框架,对于这类问题,我们并没有一个好的词汇来讨论。对于术语的使用我可能有点模糊,如果需要更精确,你可以将“线性”替换为“模糊的目标函数”或“简单”之类的表述。

1.在我上大学的时候,衡量的标准是微软(MS)。我想知道下一个会是谁来挑战这个标准。
2.我没有透露具体问题,因为面试官要求保密,所以我描述了一个类似的问题,其中矩阵分解同样存在根本问题。
3.如果你熟悉PCA但不熟悉LSA,可以将LSA视为类似PCA的方法
4.2006年的一项研究取得了类似结果,但自2011年起的一系列论文表明可以用“简单”算法达到类似效果。尽管如此,目前的深度学习方法仍然优于最好的“简单”特征学习方法,这篇论文是我首先想到的例子。
5.有趣的是我写这篇文章是因为我热衷于使用最简单的方法完成工作,而线性方法往往是首选。事实上,我最常用的一个技巧就是用一阶泰勒展开替换复杂的函数。