4大挑战与6大方法,还原算法的真相

如今,算法非常重要。算法是现代数据收集、分析挖掘网络的中枢,也是AI和机器人发展的动力。从概念层面来说,所谓算法可以简单理解为程序一步步录入任务并输出结果的过程,但从实际操作而言,这个过程其实非常复杂。究其原因,算法在执行的过程中有两个步骤构成,其一是把任务转换成一系列逻辑步骤,其二则是把逻辑步骤转化为计算机代码。 Pagerank 鉴于算法的重要性,社会学家也应该重视算法对社会发展的影响。那么我们应该如何正确认识算法呢?Rob Kitchin的论文Thinking critically about and researching algorithms提供了一个很好的思路,他提到了算法研究中的四大挑战和六个解决思路。本文将尝试对该论文进行一些总结。
1、算法研究中的四大挑战
首先,我们来看看有哪些挑战。正如前文所言,算法从概念层面理解是直线的,他们可以被理解为按照逻辑和次序完成输入输出。这样的说法可以被普通人完全理解。但在实际应用中却并非如此。这其中有很多原因,包括法律/文化层面,也有技术层面的。研究人员必须避免每一个可能的原因或者留意这些潜在的障碍。 Kitchin提到了四点: 第一,算法可以不对外界暴露具体内容。算法经常是私人所有的。公司或者政府创造并拥有它,具体的机制也并不对外界公开。我们因此说它是在「黑盒」中。我们看得到它们在现实中产生的效果(它们的输出),但看不到它们内在运转的机制(盒子中的东西)。这种「黑盒」现象有它存在的理由,有时仅仅是为了保护创造者的知识产权,有时是为了让该算法持续产生它们的效用。举个例子,谷歌一直担心如果它公布了Pagerank算法是如何工作的,人们就会开始利用这些规则来作弊,削弱算法的有效性。如果你想更多地了解「黑盒」现象,Frank Pasquale写了一本关于它的书,你可以找来读读。 [caption id="attachment_3642" align="aligncenter" width="1920"]The Black Box Society: The Secret Algorithms That Control Money and Information by Frank Pasquale The Black Box Society: The Secret Algorithms That Control Money and Information by Frank Pasquale[/caption] 第二,算法之间差别很大,而且与上下文紧密联系。一个人可以从头开始编写一个简单的算法,完成单个任务。在这种情况下,写出来的算法往往易于分解和理解。现实中,大多数有趣且社会影响大的算法并不是由一个人编写,也不会从头开始,而是由大的团队把已有的方案和混杂的代码片段组合成一个完整的算法网络。这样得出的是一个算法体系,分解和理解它都要难得多。 第三,算法是自发育和施为性的(ontogenetic and performative)。现代的算法不仅与上下文联系紧密,它们通常还是自发育的。这是个有些爱说行话的人的说法,源自生物学。在这里它只是指算法都不是静态和不变的。它们一旦发布了出来,人们就常常修改它们以适应自己的需求。程序员研究用户交互后相应地修改代码。他们经常尝试算法的不同版本来确定哪个最好。而且,有些算法具有自我学习和适应的能力。这种动态和发育的特点意味着它们难于被学习和研究。之后某个时候这个算法系统也许已经和你之前研究时的它不一样了。 第四,算法不会受到约束。一旦人们开始使用这些算法,它们就经常以不受控制的方式发展和变化起来。发生这种情况最明显的例子就是当算法产生意料之外的结果或者以预想不到的方式使用的时候。如果我们不能根据一个算法过去的使用和效果做出有效推测,我们就很难把它推广到未来的使用中。从这点来看,算法的这种特性就成为了研究它的一个挑战。 这四个问题还经常混合起来,给研究人员提出了更多的挑战。
2、六种算法研究的方法
挑战是存在的,然而算法在社会和技术上的重要性使得对它有必要进行研究。研究者如何能够理解算法结构的复杂且前后相关的性质和用法呢?单一的研究方法绝不可能对付,我们或许需要使用结合的方法。 Kitchin在论文里认同了六种可能的方法,各有优劣。我在下边会简单描述: 1. 研究伪代码和源代码: 第一种方法是最明显的,它研究构建算法的代码。我在以前的帖子中论述过,这包括两点: 首先,「伪代码」,这是形式化的人类语言规则集合,任务在此被翻译(伪代码遵循一些编程语言惯例,但是目标是人类阅读)。其次,「源代码」,这是计算机语言,人类语言规则集在此被翻译。同时研究两者有助于研究者理解算法如何工作。对这种方法,Kitchin提了三个更明确的变异:
  • 解构: 只通读代码和相关文件,找出算法工作方式。
  • 家系图谱: 当算法用不同版本的代码改进和重写时,绘出算法变化和发展的家系图 (Kitchin 2014)。当算法是动态的、并且语意镶嵌时,这很重要。
  • 比较分析: 你通过此法可以看到同样的基础任务如何被翻译成不同的编程语言并通过一系列操作系统执行。这经常会揭示出一些微妙而不曾预料到的变量。
这些方法的问题:代码经常是散乱的,需要大量翻译工作;研究者将需要一些技术专家;仅集中于代码意味着算法结构和用法的上下文方面信息丢失。 2. 自反生成代码:第二种方法涉及坐下来勾画出你自己如何把一项任务转成代码。 Kitchin 把这称为「自我民族志(auto-ethnography)」,听起来很恰当。这种自动人种学或多或少有些用处。理想情况下,研究者应当精密地反映这个把任务转换成规则集合计算机语言的过程,并且考虑各种社会、法律和技术框架来勾画出着手方式。这些有明显的限制,因为这过程是主观的,容易有个人偏见和缺点。但它能够很好地为别的研究方法提供补充。 3.反向工程: 这第三种方法需要做一些解释。如上所述,研究者面对的障碍之一,就是很多算法是「黑箱」。这意味着,为了找出算法如何运作,你必须反向在黑箱里进行的工程。你需要研究算法的输入输出,也许加上有着不同输入的实验。人们经常在google的网页排名上来这么做,通常使他们自己的网页在搜索结果里更靠前。这种方法也有明显的局限,即对算法运的了解不完全、不完美。 4. 对编程团队进行采访并了解人文构造:第四个方法对于纠正前面的几个方法中缺乏前后联系的的问题有很大的帮助。这个方法随着编程小组建立算法来采访他们,或者小心地观察他们(使用文化人类学的手法)。这个方法有助于研者确定算法构建后背后的原因,以及塑造工程决定背后的社会文化原因。也许接触这样的编程小组很困难,但是Kitchin特别指出,有一个叫Takhteyev的研究人员曾经在他自己参与的一个开源小组中展开研究。 5.解包全部社会型技术组合(Unpacking the full socio-technical assemblage):要用有点难懂的术语来描述第五种方法。所谓「社会技术性组合(socio-technical assemblage)」集中了全部型塑算法建构的法律、经济、制度、技术、政府、政治等因素。采访编程团队并对他们进行人种学研究有助于理解其中一些影响因素,但是,如果我们希望完全解开这些因素(当然,我们不可能完全理解某种现象),还需要知道更多。Kitchin认为,对合作报告、法律框架、政府政策文件、金融、核心权力人物的传记以及其他类似材料进行研究,有助于促进这类研究。 6.研究算法在真实世界中的效果:这是显而易见的另一种方法。不是关注于如何产生算法以及哪些因素影响算法生产,而是去研究算法在真实世界的效果。比如,它如何影响使用者?它会造成什么样的意料之外的后果?有各种促进这种研究的研究方法。用户体验,用户采访以及用户的人文结构都是可能采用的方法。好的研究会关注算法如何改变用户行为以及使用者可能采取的抗拒或者颠覆算法的预期功能的方式(例如,使用者试图「玩弄」google的Pagerank)。 1 当然,没有哪种单一方法足以解决问题,需要结合起来使用。不过,这些情况总会让人想起盲人摸象的老故事。虽然每个人触摸的是大象的不同部分,但是,他们都在研究同一个潜在对象。   作者简介:John Danaher是一名对技术、宗教、伦理学和法律感兴趣的学者。John获得刑法学专业PhD(研究方向刑事责任及游戏理论)。他曾是Keele大学的讲师,对技术,伦理学,哲学和法律感兴趣。现在是Ireland 国立大学的讲师。 来源Philosophical Disquisitions,机器之心编译出品,作者:John Danaher,翻译:赵赛坡、张之乎、Duo,Daniel Tan、anthea12。校对:微胖。
入门
暂无评论
暂无评论~
返回顶部