也谈 机器学习到底有没有用 ?

jopen 10年前

今天看到@52CS 文字化了@老师木谈机器学习的一系列文章,其中有一篇我很感兴趣的文章《机器学习有没有用?》,文字版连接:http://php-52cs.rhcloud.com/?p=87

作为一个机器学习爱好者,也想谈一下自己目前对机器学习的看法。但事先声明,本人对机器学习研究不多,知之甚少,实践也有限,文章观点难免有狭隘之处。

1. 机器学习是有用的。

对于这个问题,其实大家都心知肚明了。看看铺天盖地的机器学习相关的论文,新闻,再看看工业界招聘的需求,动不动都会写上:有机器学习背景者优先,甚至在去年预测的十大改变未来的技术中为列第一位的就是深度学习技术。为什么这么多人关注机器学习呢?或许正是因为它有用吧。具体到自己从事的互联网行业,眼睁睁看着机器学习技术的不断改进对产品收益的不断提升,没有比这个事实更能让人信服的机器学习有用了。当然,也有一些其他领域的项目声称用了机器学习技术之后没有带来明显的变化,原因可能有二:1)这个项目不适合用机器学习技术;2)没有用对机器学习技术。

2. 机器学习的优势在哪里?

这个问题要从机器学习的具体应用方式来讲,以我看来,当前有两种大的应用方式:1)组织和拟合参数;2)学习特征表示。(这里可能有人不太赞同,如果你把特征表示也视为参数的话,第二种其实也算是第一种的特殊案例吧)。在机器学习发展不算长也不算短的几十年里,可以说第一种方式是占主导和统治地位的。而且这种思想更严重影响了机器学习的主要应用领域,如自然语言处理,图像分类等等。甚至你现在问这些领域的教授,他们解决一个具体问题时依然是这种思维。为什么这种思维影响这么大?原因有二:1)这种解决问题的思路简单但有效,看看NLP领域的paper就知道,对于不同的问题,抽象成一个机器学习可解决的问题,然后就同一个套路来求解了,而且效果往往不错。2)机器学习自身的发展过于强调实际应用和算法,理论研究相对滞后。这方面其实我没有发表意见的权利,吃过的盐太少。但听到过一些大家谈论过相关的话题,我想这个说法也不算为过。一个突出的具体事实你可以读机器学习领域的一些论文,你会发现只要实验结果好,算法能不能证明,甚至最终能不能收敛都不是大问题。就连当前最最火的深度学习,99%的人也只是看到它work,为什么work,能不能更 work都没有详细的理论分析。

回到机器学习的优势这个话题。我目前狭义地认为机器学习只不过是起到了自动调节各因素权重,综合学习出来一个组合而已。它为什么有作用?不在于它比人更聪明,仅仅在于它能处理的数据量更大,超过了单个人的处理能力,也超过了多个人协作处理的能力。在当前全民大数据的背景下,机器学习也会被吵得更火,捧的更高。但目前深度学习的操作中,领军人物是一般是从第二个应用方式(学习特征表示)来发展机器学习的,这或许是思维的一个大转变。

3. 要不要深入专研机器学习技术?

说机器学习是计算机领域最为火热的topic应该没有太多人反对吧,接踵而来的就是各种相关的学习材料,书、论文、技术报告、视频,甚至大牛的对话都成为人们关注的焦点。也有一大群比我还有兴趣的爱好者来参与其中,呵呵。不过坦率的讲,我已经慢慢回归理性,对该领域的成果和人物没有之前那么崇拜了。就个人而言,我非常认同@老师木的观点,机器学习学多学深了没有太大用处,还不如多提高自己的编程能力实用。如果非要说出了子丑寅卯来,我觉得有以下几个原因:1)实践是检验真理的唯一标准,研究者给我们那些条条框框还有所谓的经验,不一定完全正确,至少某些情况下是不太对的,唯一永恒正确的就是不断的去试,好了就好了,坏了就坏了;2)机器学习是一个很跨界,很四不像的东西,你要真想想明白背后的原理,做到融汇贯通,没有概率、矩阵、统计、信息方面的大量储备以及还不错的智商和记忆力的话,想把一个很简单的东西用稍微理论的方式说明白很难。而且这个领域的新东西太多,你先要识别出哪些是灌水的,哪些是老生常谈的,哪些是真正有用的也需要花一些时间的。3)只需要熟悉几个常用的算法,然后结合你的领域知识用好他们就能做到90分。这个可以看百度少帅@李沐的那篇关于大数据特征工程的文章,机器学习的应用是否成功,很大程度上取决于特征,而不是算法。(现在在图像和语音领域,这一说法似乎可以稍微放松些,因为最近deep learning确实做了一些能对特征处理不那么依赖的工作)。

4. 深度学习还能火多久?

虽然读了一些相关的材料,但回过头来想一想,什么sparse coding、autoencoder、Word2vec、cnn、rnn等等,和最基础的聚类和分类算法也没太大的不同,唯一的不同可能就是所谓的 “Deep”吗?其实这里我真想再说一下我对word2vec的理解,单从作者发布的几篇论文来讲,这个模型连Deep都称不上,严格来说跟深度学习半毛钱关系都没有。对于Deep Learning在NLP上的应用,我已经从起初的乐观到现在回归理性了,不管Hinton还是什么Bengio再寄希望于Deep Learning在NLP上取得类似语音和图像上的胜利,我至少目前和未来的一段时间内不会太盲目迷信他们的说法的。NLP的问题如@老师木所说,本质是结合上下文的消歧。最最重要的就是如何利用上下文,如何表示上下文。当前的研究工作说白了就是在这个方面折腾来折腾去,换换结构,换换粒度,其他的就是融进更多数据或者知识,仅此而已。再回头看看深度学习在图像上取得的成功,是真的达到了人类的水平了吗?张钹院士在一次讲座中曾经指出过这个问题,不是深度学习太牛逼,是之前的技术太差,深度学习技术(如经典CNN)相对之前是好了不少,但准召的绝对值也才达到刚刚能看的地步。

回答这个问题,可能跟回答统计学习在机器翻译上还能火多久有太多的相似之处,甚至就是同样一个问题。在之前十年或者更长的时间里,IBM为首的一帮人的工作让人们认识到统计学习的重要性,然后大批统计学习的东西引入到自然语言处理的各个领域,现在来看结果如何呢?NLP的那些难题解决了几个?很不幸,至少目前来看也仅仅是多收了三五斗而已。

5. 如何学机器学习?

上面的3只是说你不用太专研机器学习,但多知道点常用的算法是无害的。所以这里的学仅仅是指多学习一些能立马提升你应用机器学习技术的东西。(更多的我也不知道,我也只能算是机器学习实践者,而且还是初级的)。学习任何东西,都是因人而异,因目的而已。就看你自身是怎么样一个状态,想达到怎么样一个状态了。对于没有任何经验的同学来说,其实是最好办的,不要去跟什么最新的文章,最新的会议的,就老老实实的读一本机器学习教材,中英文的都无所谓,能读懂就行。选好一本教材,然后认真读,中途不要说什么适合不适合的东西,第一遍也不要想着完全读懂,先顺一遍下来有个印象,知道些基本概念就行。然后再对第一遍中不太懂的章节再读第二遍。这样完成一本教材之后,你知道了一些常用的算法了,然后就可以着重学习一些常用的经典的能用的算法了,不要永远只停留在 K-Means和K-NN上面,好歹咱也知道点经典的SVM、RF、BP算法吧。再然后呢就看你是想做一个实践者还是研究者了,如果只是想做实践者呢,最好能动手写一两个算法,然后用它解决几个经典的实际问题,再对比着找一些这些实际问题的解决方法,看看自己的差在什么地方,别人的好在什么地方就更好了。举个实际例子来讲,你可能同样是用NB算法来识别一个垃圾邮件,别人的效果可能比你要好很多,一般两个常见的原因:1)算法的假设;2)特征的优劣。对于后者,一般就是所谓的领域知识吧,多看看别人设计的特征就知道人家对这个问题的理解程度了。对于前者呢,80%的人一般都是用非0即1的VSM,你可以假设对于每个类每个词都是一个(条件)独立的变量,服从伯努利分布,这样就有M(词的个数)只有两面的骰子。每个邮件用这些骰子来产生,产生哪个词就用哪个骰子。而20%的人会用更合理的假设,所有的词是一个multi-nominal的分布,每个邮件只是用同一个这样的骰子来产生。对于很多场景来说,后者往往是有效的。至于为什么有效?理论上我也没太明白,但实际效果是被不少人验证过的。

来自:http://1.guzili.sinaapp.com/?p=234