在前面两次的分享里,我们聊了一些在人工智能领域快速入门的捷径,以及面对不同的论文或别人分享的技术实践,我们该如何来选择技术。我们今天来看另一个话题:如何做人工智能研究。
对于初学者来说,可能很多人会觉得人工智能研究离自己比较远,在工作中一时半会儿也接触不到。但实际上,我们有必要了解做研究的一些基本原理,而且这些思路能够应用到我们的日常工作中。
对于中高阶的工程师来说,能够在研究方向更进一步,我们就可以更好地理解优秀的学术论文是怎么写成的,能够快速挖掘出论文的核心价值。同时,也可以把自己手上的工作总结成论文发表出去,真正参与到学术社区的建设当中。当然了,即便我们不以写论文为目的,用做研究的标准来要求自己平时的工作,也可以让很多工作更加严谨,这也是一种不错的进阶。
那到底什么是人工智能研究呢?
简单来说,只要是针对某一个问题,我们有新的方法、新的见解或是新的结果,这都是潜在的研究成果。另外一方面,如果我们发现了一个新的问题,甚至是一个新的领域,那就更具备总结出来加以发表的潜质。
你是不是已经注意到了,研究的一个核心要素就是“新”。这也是让很多初学者感到困惑的地方:我们平时的很多工作看上去都那么普通,没有什么创新的地方呀!
其实,哪怕是在人工智能技术应用非常广泛的很多领域和场景,依然有相当多的地方存在创新点,只是初学者不太容易注意到。我这里举几个例子,你可以感受一下。
例如,一个互联网网站经常使用在线测试,也就是通常所说的A/B测试,来判断这一个网站的新功能(或者新特性)是否好于现在的版本。一个最基本的设置就是把现在的版本当做“对照组”,然后把新的功能当做“实验组”,分别在50%的流量上运行这两个组别。然而,在线A/B测试存在一些根本上的挑战。
第一,我们举例是把整个网站流量的一半用于测试某一个组别,而有一些小的改变在50%的流量上可能需要2~3周的时间才能看出效果。而在真实情况中,拿来进行A/B测试的流量往往是占比更小的,因此等到能够看出一个实验的效果需要很长时间,这本身就是一个非常耗时的过程。
第二,如果我们测试的功能和收入相关,那么假设对照组或者实验组有明显的收入增加或者减少,观察到了这样的结果,但是我们无法在实验的过程中动态地调整这个预先设置好的比例。
你看,关于传统意义上A/B测试所面临的难题,我们这里仅仅是列举了两条,其实还有很多其他的问题。从这些问题出发,我们是不是就可以问问自己,能否找到节省A/B测试时间的方法呢?能否让实验达到同样的效果但是使用尽可能少的时间?能否在A/B测试的过程中动态调整用户或者流量的比例呢?这些问题,其实就都是研究课题。
再比如,传统的推荐系统非常适合电影推荐的场景,例如著名的Netflix大赛。经历了十多年的发展后,推荐系统方法重点都集中在矩阵分解这样的协同过滤的方向上。那是不是这样的方法就解决了所有的推荐问题呢?
我们试想一下,如果是电影推荐,我们作为一个用户,看了《纸牌屋1》之后,系统就给我们推荐《纸牌屋2》、《纸牌屋3》以及这一个系列,虽然有一点重复,但依然是可以接受的非常相关的推荐结果。那么,如果我们在一个电商网站上购买了一款佳能相机以后,系统依然给我们推荐类似的相机,我们是不是就会觉得这样的推荐短期内意义不大了呢?
我们可以看到,推荐系统对场景有非常高的要求。对于一些特定场景的推荐,我们无法直接照搬现有的方法。这个时候,这个场景,就需要一些创新,有可能是把现有的方法进行改进和调整,也有可能是完全提出一些新的思路或新的方法。
说到这里,你是不是对人工智能研究的范围有了一个新的认识呢?按照我们在这里举例的思路,你可以观察一下自己手边的项目,这里面或许就潜藏着不少值得研究的课题,说不定你就能发现一个新的研究领域。
由此可见,作为普通的工程师或者初学者,我们的工作中也有机会接触到研究课题和研究领域。那么,接下来,我们就来看一看怎么做人工智能研究。这其实是一个非常大的话题,今天我来给你提供一个简单的指南。
要做人工智能研究一般有这么几个步骤。
第一,好好总结一下在当前这个场景下,我们要解决的是什么问题,也就是针对要研究的问题进行建模归纳。回到刚才所提的电商推荐的例子,我们需要解决的问题是把类似的相机过滤掉?还是要推荐买了相机后其他的附件?还是要推荐相机的替代品?或者是要从根本上理解这样的情况是怎么产生的,消费者的心理预期是什么样的?你可以看到,即便是尝试解决同一个问题,我们也可以有好多不同的切入点。所以,最重要的第一步就是找准一个切入点。
第二,了解前人的工作,查找和学习相关文献。相信我,即便你认为找到了一个貌似完全新的问题或者领域,认真查找了相关文献之后,有很大可能你会发现其实已经有人做了一些类似的工作。甚至,你还可能发现你设想的某种方法已经有人尝试过了。
了解前人工作这个步骤,初学者或者是完全在工业界的工程师,往往容易忽略。这一步的核心,其实就是看前人在你设想的问题中是如何寻找方案的,和你设想的思路是不是完全一致。通常情况下,你会发现一定的差异性。于是,基于这些差异性,你可以提出一些“进阶性”(Incremental)的创新思路。这也就是我们常说的“站在巨人的肩膀上”。
另外,多了解前人的工作,我们不会把自己的思想和整个大的方法论孤立开来,能够更好地融入到研究的整个社群中去。
第三,选择一种测试数据集和一些“基线方法”(Baseline)来进行比较。无论是多么重要的新方法,也无论是什么样的新领域,如果我们不能通过一些标准的数据集,或者是构造一些可以值得信赖的数据集,而且和多种方法进行比较,那么这些创新也都无法通过检验。换句话说,我们提出的新方法、新思路再好,必须有一个相对的比较者,最好这个比较者是之前提出的,已经使用了的,这样,我们才能够更清楚地说明新的方法究竟好在哪里。
研究工作,特别是“了解前人工作”和“进行基线比较”这两点,是和一般的技术分享有区分的重要标志。这其实也是我们在上一次的分享中讲到的,有的技术分享其实只是描述做了一件事情,或者是描述了一个系统,我们无法真正知道这个系统的设计和整体的思路在社群中的位置,也不知道这个系统是否和类似系统进行过比较,这其实也给我们的技术选择设置了挑战。通过今天的内容,我们了解了研究工作的思路,把用研究的思路应用在工作中,会让我们平时的技术选择更加严谨。
今天我为你梳理了进行人工智能研究的一些思路。通过今天的内容,你会发现,人工智能研究离我们并不遥远,很多场景都有可能发现新问题、找到新方法。另外,了解一些研究思路对我们的日常工程开发也会有所借鉴。
最后,给你留一个思考题,如何来衡量我们自己做研究的价值?
欢迎你给我留言,和我一起讨论。
评论