欢迎来到加倍考研网! 北京 上海 广州 深圳 天津
微信二维码
在线客服 40004-98986
推荐适合你的在职研究生专业及院校
学习如何学习的算法:简述元学习研究方向现状两面争

学习如何学习的算法:简述元学习研究方向现状

要想实现足够聪明的人工智能,算法必须学会如何学习。很多研究者们曾对此提出过不同的解决方案,其中包括 UC Berkeley 的研究人员提出的与模型无关的元学习(MAML)方法。本文将以 MAML 为例对目前的元学习方向进行简要介绍。对我而言,第一次听到元学习的预述时,是一个极其兴奋的过程:建立不仅能够进行学习,还能学会如何进行学习的机器项目。元学习试图开发出可以根据性能信号做出响应,从而对结构基础层次以及参数空间进行修改的算法,这些算法在新环境中可以利用之前积累的经验。简言之:当未来主义者们编织通用 AI 的梦想时,这些算法是实现梦想必不可少的组成部分。本文的目的在于将这个问题的高度降低,从我们想得到的、自我修正算法做得到的事情出发,到这个领域现在的发展状况:算法取得的成就、局限性,以及我们离强大的多任务智能有多远。为什么人类可以做到这些事?具体地讲:在许多强化学习任务中,和人类花费的时间相比,算法需要花费惊人的时间对任务进行学习;在玩 Atari 游戏时,机器需要 83 小时(或 1800 万帧)才能有人类几小时就能有的表现。来自近期 Rainbow RL 论文中的图片这种差异导致机器学习研究人员将问题设计为:人类大脑中针对这项任务使用的工具和能力是什么,以及我们如何用统计和信息理论的方法转化这些工具。针对该问题,元学习研究人员提出了两种主要理论,这两种理论大致与这些工具相关。学习的先验:人类可以很快地学会新任务是因为我们可以利用在过去的任务中学到的信息,比如物体在空间里移动的直观的物理知识,或者是在游戏中掉血得到的奖励会比较低这样的元知识。学习的策略:在我们的生活中(也许是从进化时间上讲的),我们收集的不仅是关于这个世界对象级的信息,还生成了一种神经结构,这种神经结构在将输入转化为输出或策略的问题上的效率更高,即使是在新环境中也不例外。显然,这两个想法并非互相排斥,在这两个想法间也没有严格的界限:一些与现在的世界交互的硬编码策略可能是基于这个世界的深度先验的,例如(至少就本文而言)这个世界是有因果结构的。也就是说,我认为这个世界上的事情都可以用这两个标签分开,而且可以将这两个标签看作相关轴的极点。不要丢弃我的(单)样本在深入探讨元学习之前,了解单样本学习相关领域的一些概念是很有用的。元学习的问题在于「我该如何建立一个可以很快学习新任务的模型」,而单样本学习的问题在于「我该如何建立一个在看过一类的一个样本后,就能学会该如何将这一类分出来的模型」。让我们从概念上思考一下:是什么让单样本学习变得困难?如果我们仅用相关类别的一个样本试着训练一个原始模型,这个模型几乎肯定会过拟合。如果一个模型只看过一幅图,比如数字 3,这个模型就无法理解一张图经过什么样的像素变化,仍然保持 3 的基本特征。例如,如果这个模型只显示了下面这列数字的前三个样本,它怎么会知道第二个 3 是同一类的一个样本呢?理论上讲,在网络学习中,我们想要的类别标签有可能与字母的粗细程度有关吗?对我们而言做出这样的推断这很傻,但是在只有一个「3」的样本的情况下,想让神经网络能做出这样的推理就很困难了。有更多样本会有助于解决这一问题,因为我们可以学习一张图中什么样的特征可以定义其主要特征——两个凸的形状,大部分是垂直的方向,以及无关紧要的改变——线的粗细、还有角度。为了成功实现单样本学习,我们不得不激励网络,在没有给出每一个数字间差别的情况下,学习什么样的表征可以将一个数字从其他数字中区别出来。单样本学习的常用技术是学习一个嵌入空间,在这个空间中计算出两个样本表征间的欧几里德相似性,这能很好地计算出这两个样本是否属于同一类。直观地讲,这需要学习分布中类别间差异的内部维度(在我的样本中,分布在数字中),并学习如何将输入压缩和转换成那些最相关的维度。我发现记住这个问题是一个很有用的基础,尽管不是学习如何总结存在于类别分布中的碎片化信息和模式,而是学习存在于任务中的类的分布规律,每一类都有自己的内部结构或目标。如果要从最抽象开始,构造一个神经网络元参数的等级,会有点像这样:通过使用超参数梯度下降,网络从任务的全部分布中学习到有用的表征。MAML 和 Reptile 是有关于此的直接的好例子,分享层级结构的元学习是一种有趣的方法,这种方法可以通过主策略的控制学习到清晰的子策略作为表征。网络学习要优化梯度下降的参数。这些参数就像是学习率、动量以及权重之于自适应学习率算法。我们在此沿着修改学习算法本身的轨道修改参数,但是有局限性。这就是 Learning to Learn By Gradient Descent by Gradient Descent 所做的。是的,这就是这篇文章真正的标题。一个学习内部优化器的网络,内部优化器本身就是一个网络。也就是说,使用梯度下降更新神经优化器网络参数使得网络在整个项目中获得很好的表现,但是在网络中每个项目从输入数据到输出预测结果的映射都是由网络指导的。这就是 RL 和 A Simple Neural Attentive Meta Learner 起作用的原因。为了使这篇文章更简明,我将主要叙述 1 和 3,以说明这个问题的两个概念性的结局。其他名称的任务另一个简短的问题——我保证是最后一个——我希望澄清一个可能会造成困惑的话题。一般而言,在元学习的讨论中,你会看到「任务分布」的提法。你可能会注意到这个概念定义不明,而你的注意是对的。对于一个问题是一个任务还是多个任务中的一个分布,人们似乎还没有明确的标准。例如,我们应该将 ImageNet 视为一个任务——目标识别——还是许多任务——识别狗是一个任务而识别猫是另一个任务呢?为什么将玩 Atari 游戏视为一个任务,而不是将游戏的每一个等级作为一个独立任务的几个任务?我能得到的有:「任务」的概念是用已经建立的数据集进行卷积,从而可以自然地将在一个数据集上进行学习认为是单个任务对于任何给定分布的任务,这些任务之间的不同之处都是非常显著的(例如,每一个学习振幅不同的正弦曲线的任务和每一个在玩不同 Atari 游戏的任务之间的差别)所以,这不仅仅是说「啊,这个方法可以推广到这个任务分配的例子上,所以这是一个很好的指标,这个指标可以在任务中一些任意且不同的分布上表现良好」。从方法角度上讲,这当然不是方法有效的不好的证据,但我们确实需要用批判性思维考虑这种网络要表现出多大的灵活性才能在所有任务中都能表现出色。那些令人费解的动物命名的方法在 2017 年早些时候,Chelsea Finn 及其来自 UC Berkeley 的团队就有了叫做 MAML的方法。MAML(Model Agnostic Meta Learning,与模型无关的元学习)参见:与模型无关的元学习,UC Berkeley 提出一种可推广到各类任务的元学习方法。如果你有心想要了解一下,请转向本文的「MAML 的种类」部分。在学习策略和学习先验之间,这种方法更倾向于后者。这种网络的目标在于训练一个模型,给新任务一步梯度更新,就可以很好地归纳该任务。就像是伪代码算法。1. 初始化网络参数 θ。2. 在分布任务 T 中选择一些任务 t。从训练集中取出 k 个样本,在当前参数集所在位置执行一步梯度步骤,最终得到一组参数。3. 用最后一组参数在测试集中测试评估模型性能。4. 然后,取初始参数θ作为任务 t 测试集性能的梯度。然后根据这一梯度更新参数。回到第一步,使用刚刚更新过的θ作为这一步的初始θ值。这是在做什么?从抽象层面上讲,这是在寻找参数空间中的一个点,就分布任务中的许多任务而言,这个点是最接近好的泛化点的。你也可以认为这迫使模型在探索参数空间时保留了一些不确定性和谨慎性。简单说,一个认为梯度能完全表示母体分布的网络,可能会进入一个损失特别低的区域,MAML 会做出更多激励行为来找到一个靠近多个峰顶端的区域,这些峰每一个的损失都很低。正是这种谨慎的激励使 MAML 不会像一般通过少量来自新任务的样本训练的模型一样过拟合。2018 年的早些时候文献中提出了一种叫做 Reptile 的更新方法。正如你可能从它的名字中猜出来的那样——从更早的 MAML 中猜——Reptile 来自 MAML 的预述,但是找到了一种计算循环更新初始化参数的方法,这种方法的计算效率会更高。MAML 明确取出与初始化参数 θ 相关的测试集损失的梯度,Reptile 仅在每项任务中执行了 SGD 更新的几步,然后用更新结束时的权重和初始权重的差异,作为更新初始权重的梯度。g_1 在此表示每个任务只执行一次梯度下降步骤得到的更新后的梯度。这项工作从根本上讲有一些奇怪——这看起来和将所有任务合并为一个任务对模型进行训练没有任何不同。然而,作者提出,由于对每项任务都使用了 SGD 的多个步骤,每个任务损失函数的二次导数则被赋予影响力。为了做到这一点,他们将更新分为两部分:1. 任务会得到「联合训练损失」的结果,也就是说,你会得到用合并的任务作为数据集训练出来的结果。2. SGD 小批次梯度都是接近的:也就是说,在通过小批次后,梯度下降的程度很低。我选择 MAML/Reptile 组作为「学习先验」的代表,因为从理论上讲,这个网络通过对内部表征进行学习,不仅有助于对任务的全部分布进行分类,还可以使表征与参数空间接近,从而使表征得到广泛应用。为了对这个点进行分类,我们先看一下上图。上图对 MAML 和预训练网络进行比较,这两个网络都用一组由不同相位与振幅组成的正弦曲线回归任务训练。在这个点上,两者针对新的特定任务都进行了「微调」:红色曲线所示。紫色三角代表少数梯度步骤中使用的数据点。与预训练模型相比,MAML 学到了,正弦曲线具有周期性结构:在 K=5 时,它可以在没有观察到这一区域数据的情况下更快地将左边的峰值移到正确的地方。尽管很难判断我们的解释是不是网络的真正机制,但我们可以推断 MAML 在算出两个相关正弦曲线不同之处——相位和振幅——方面做得更好,那么是如何从这些已给数据的表征进行学习的呢?网络一路向下对一些人来说,他们的想法是使用已知算法,例如梯度下降,来对全局先验进行学习。但是谁说已经设计出来的算法就是最高效的呢?难道我们不能学到更好的方法吗?这就是 RL(通过慢速强化学习进行快速强化学习)所采用的方法。这个模型的基础结构式循环神经网络(具体来说,是一个 LTSM 网络)。因为 RNN 可以储存状态信息,还可以给出不同输出并将这些输出作为该状态的函数,理论上讲这就有可能学到任意可计算的算法:也就是说它们都具有图灵完备的潜力。以此为基础,RL 的作者构建了一个 RNN,每一个用于训练 RNN 的「序列」都是一组具有特定 MDP(Markov Decision Process,马尔科夫决策过程。从这个角度解释,你只需将每次 MDP 看作环境中定义一系列可能行为且通过这些行为产生奖励)的经验集合。接着会在许多序列上训练这个 RNN,像一般的 RNN 一样,这是为了对应多个不同的 MDP,可以对 RNN 的参数进行优化,可以使所有序列或试验中产生的遗憾(regret)较低。遗憾(regret)是一个可以捕获你一组事件中所有奖励的指标,所以除了激励网络在试验结束时得到更好的策略之外,它还可以激励网络更快地进行学习,因此会在低回报政策中更少地使用探索性行为。图中显示的是运行在多重试验上的 RNN 的内部工作,对应多个不同的 MDP。在试验中的每一个点,网络都会通过在多个任务和隐藏状态的内容学习权重矩阵参数化函数,隐藏状态的内容是作为数据函数进行更新并充当一类动态参数集合。所以,RNN 学习的是如何更新隐藏状态的权重。然后,在一个给定的任务中,隐藏状态可以捕获关于网络确定性以及时间是用于探索还是利用的信息。作为数据函数,它可以看得到特定任务。从这个意义上讲,RNN 在学习一个可以决定如何能最好地探索空间、还可以更新其最好策略概念的算法,同时使该算法在任务的一组分布上得到很好的效果。该作者对 RL 的架构和对任务进行渐进优化的算法进行比较,RL 的表现与其相当。我们可以扩展这种方法吗?本文只是该领域一个非常简要的介绍,我肯定遗漏了很多想法和概念。如果你需要更多(信息更加丰富)的看法,我高度推荐这篇 Chelsea Finn 的博客,此人也是 MAML 论文的第一作者。在这几周的过程中,我试着对这篇文章从概念上进行压缩,并试着对这篇文章进行理解,在这一过程中我产生了一系列问题:这些方法该如何应用于更多样的任务?这些文章大多是在多样性较低的任务分布中从概念上进行了验证:参数不同的正弦曲线、参数不同的躲避老虎机、不同语言的字符识别。对我而言,在这些任务上做得好不代表在复杂程度不同、模式不同的任务上也可以有很好的表现,例如图像识别、问答和逻辑问题结合的任务。然而,人类的大脑确实从这些高度不同的任务集中形成了先验性,可以在不同的任务中来回传递关于这个世界的信息。我的主要问题在于:这些方法在这些更多样的任务中是否会像宣传的一样,只要你抛出更多单元进行计算就可以吗?或在任务多样性曲线上的一些点是否存在非线性效应,这样在这些多样性较低的任务中起作用的方法在高多样性的任务中就不会起作用了。这些方法依赖的计算量有多大?这些文章中的大部分都旨在小而简单的数据集中进行操作的部分原因是,每当你训练一次,这一次就包括一个内部循环,这个内部循环则包含(有效地)用元参数效果相关的数据点训练模型,以及测试,这都是需要耗费相当大时间和计算量的。考虑到近期摩尔定律渐渐失效,在 Google 以外的地方对这些方法进行应用研究的可能性有多大?每个针对困难问题的内部循环迭代可能在 GPU 上运行数百个小时,在哪能有这样的条件呢?这些方法与寻找能清晰对这个世界的先验进行编码的想法相比又如何呢?在人类世界中一个价值极高的工具就是语言。从机器学习方面而言,是将高度压缩的信息嵌入我们知道该如何转换概念的空间中,然后我们才可以将这些信息从一个人传递给另一个人。没人可以仅从自己的经验中就提取出这些信息,所以除非我们找出如何做出与学习算法相似的事,否则我怀疑我们是否真的可以通过整合这个世界上的知识建立模型,从而解决问题。

格什温

25岁天才AI算法研究员,高二创业、高三保送清华,还有一特殊爱好

最近在《中国青年报》创业板块上看到一则人物报到,占了整个版面,文章内容主要介绍一位神一样存在的“天才”少年。感慨万分,中国AI界有如此“神人”真的是一大幸事。我们先看下他的一些标签:“小学三年级学习奥数”、“12岁自学编程”“第23届国际信息学奥林匹克竞赛(IOI)金牌第二名”、“高二应邀作为公司联合创始人创业”、“高中毕业保送清华大学”、“成为姚班(计算机科学实验班)学生”、“AI算法研究员”、“旷视研究院算法总监”“拿到4个国际顶级会赛冠军”、“IEEE国际计算机视觉与模式识别会议(CVPR)颁奖嘉宾”。看到这些标签,感觉任何词语来形容都显得过于轻巧,唯有竖起大拇指,由衷地说一声:“天才,天才啊”。右二为范浩强下面我们看看这位“天才”少年是如何成长起来的,看看他身上都有哪些特质值得我们学习。他的名字叫做范浩强。出生于1994年,今年25岁,从小就对数学具有浓厚兴趣的他,在三年级的时候开始学习奥数,这个可能是他拥有今天成就的主要原因,也是他的算法研究的启蒙。奥数获奖对他来说,可能还不足以充分发挥他的聪明才智,当他12岁时,接触到计算机这个可以创造无数可能性的“魔盒”,他开始为此着迷,开始通过网络自学编程,然后开始接触数学的高端玩法“信息学”(OI)。信息学(OI)竞赛奥数要说是数学的低端玩法的话,那么,信息学(OI)竞赛就是高端玩法,因为,这个比赛主要体现在实用上,奥数只是解题,而信息学则主要通过计算机编程来实现一些算法,来解决实际问题。所以说,更注重的是参赛者的动手能力、编程能力、程序调试、分析问题、解决问题的能力,难度更大。但是,在浓厚兴趣的推动下,范浩强却没有丝毫退缩,反而带着浓厚的兴趣参加训练,也参加了一场场比赛。在2011年7月21日,作为中国队的选手之一,范浩强在泰国芭提雅以599分(满分600)的成绩夺得第23届国际信息学奥林匹克竞赛(IOI)金牌第二名。并且他从高二开始做竞赛教练。碾压众多专业教练。在2012年的全国青少年信息学奥林匹克竞赛(NOI)上又获得金奖后被保送至清华大学计算机系。清华大学能够进入中国的最高学府学习已经非常厉害了,但是,范浩强又一次成功地证明了自己,他通过“二次招生”考试考进了清华大学“姚班”(计算机科学实验班)。下面为了让大家能够对所谓的“姚班”有一个直观的认识,列举几个数据:2018年仅有6位同学凭借高考裸分进入“姚班”。2005年至今姚班学生在本科期间发表的论文有193篇记录在册,姚班学生为论文通讯作者或主要完成人的有160篇;并有65人次在FOCS、STOC、SODA、NIPS、COLT、CVPR、AAAI等国际顶级会议上作大会报告。2005年开班至今,“姚班”已经送走11届毕业生340人,41人赴Google、MSRA、IBM、Facebook、网易等著名计算机企业工作。已经毕业的340人中有202人赴美国、新加坡、香港和法国等地读研,其中有赴MIT 18人、Princeton 20人、斯坦福大学9人、CMU 22人、耶鲁大学1人、宾夕法尼亚大学3人、哥伦比亚大学9人、UCBerkeley 9人等;这些毕业生可以说都已经在国际计算机界崭露头角,有所作为,有些乃至于引领此轮全球信息革命创新浪潮。人工智能AI范浩强就是进入这样一个班级,虽然这个班级里的每一位同学都是“神一样”的存在,但是,在他们眼里,范浩强依旧是不折不扣的“神人”,也是他们膜拜的对象。就连OI界的传奇人物之一,清华大学特奖得主陈立杰都自叹“智商被碾压”,非常佩服范浩强同学。陈立杰何许人也,1995年8月1日出生,同样就读于清华大学“姚班”。在信息学奥赛(OI)国内无人能敌,在国际上排名前列。他还是一位一天可以学习十四个小时、天赋和努力程度双碾压的传奇人物。陈立杰当这么一位传奇人物,在范浩强面前都觉得“智商被碾压”的时候,不得不让我们对其佩服有加。大家要是觉得,范浩强只是一个乖乖学生就大错特错了,由于出色的编程功底以及竞赛经历。在他高二的时候,就应邀成为6个旷视公司联合创始人之一。也就是说,他的大学是在半工半读的情况下进行的,可能很多同学又要说,那么,他能学好吗?会不会荒废了学业呢?牛人不是能够用我们的常人思维揣测明白的,他不光没有荒废学业,并且他的成绩一直在“天才少年”云集的“姚班”常年保持第一。就这样,在2007年毕业以后,本可以有更好选择的他,没有像其他毕业生一样继续深造,继而选择了在参与成立不久的旷视公司工作,为AI研究添砖加瓦。范浩强在工作期间,他带领团队创办旷视研究院,他作为资深算法研究员,从公司刚成立一切全靠摸索到今天成为被MIT TR评为全球50大最聪明公司之一。他以算法总监的身份带领几百人一路摸爬滚打,在AI界不断展露头角,从跟跑者到引领者,特别是在人脸识别等视觉算法处理上。在国际上AI图像处理相关大赛中不断收斩奖牌。这些比赛中最重量级的一个比赛要数全球计算机视觉顶级会议(CVPR ),范浩强带领的旷视研究院也是这个大赛的常客。并且他还曾经作为这个大赛的颁奖嘉宾为获奖者颁奖。下面我们简单介绍下这个竞赛有多重量级。CVPR是科技圈学术类会议的一个典型代表——没有太多聚光灯但是会上所讨论的都是足以在未来改变世界的技术,这个舞台也是当今在计算机视觉领域最高级别的会议,CV界的奥斯卡。CVPR历年的Best paper获得者平均年龄超过45岁,这些站在舞台上的佼佼者或是已经在业界享有盛誉的名人,或是在高校中完成多项重大科研项目的教授。但是,曾经还是一名来自中国的大二学生范浩强就作为颁奖嘉宾为这些年龄超过45岁的“叔叔”级别的最佳论文奖得主,也是行业内佼佼者颁奖。这也在侧面反映了范浩强带领团队在CVPR界的地位与认可度。相信这也是代表中国在AI视觉界的一种不可撼动的地位。右二为CVPR颁奖嘉宾范浩强这不,在刚刚过去的全球计算机视觉顶级会议 CVPR 2019 上,依托于范浩强带领的团队自主研发的深度学习框架 Brain++,旷视一举拿下 6 项冠军,并且涵盖的领域非常广泛,主要有自动驾驶、新零售、智能手机、3D 等众多领域等。而此时的旷视也早已经不是7年前那个在摸索中前进的公司,早已经不断在AI领域取得了突破,主要围绕核心的 AI 算法能力和城市大脑、供应链大脑、个人设备大脑三大 IoT 场景,旷视推出了一系列软硬结合的解决方案并得到了市场的广泛认可。而让旷视研究院算法总监范浩强最有底气的就是他组建的这个团队,因为这个团队的数百个成员85%都是来自国内Top10高校70个以上的奥赛金牌得主。所以可以说,这是一个“天才”团队,人才辈出,未来的成就不可限量。希望这个“天才”团队在即是“实干家”又是好朋友还是好领导的范浩强带领下,不断在AI界有所突破,继续担当领跑者。旷视科技视觉AI下面,给大家透漏一个小秘密,古往今来,作为“天才们”,或多或少都有点不为人所知的“怪癖”。比如,特别不喜欢睡觉的画家达芬奇,为此还特意研究了“多相睡眠法”,什么是多相睡眠法呢?就是为了看起来没睡觉,一天睡无数次觉吧,天才就是天才,这样就不会将睡觉时间集中在一个时间段,看起来就好像从来不睡觉一样。还比如,法国著名作曲家埃里克·萨蒂也有个“怪癖”,他只吃白色食物,比如鸡蛋、糖、磨碎的骨头、盐、椰子、米之类。不光如此,他连时间都准时到“变态”,就差到秒了。比如,他规定自己在7点18分起床,中午12点11分准时吃午饭。晚上7点16分吃晚饭,10点37分睡觉,我想问有多少人能够做到,难怪我们成不了天才。而这位清华大学奇才,范浩强也有个不能算作“怪癖”的爱好,那就是“撸猫”,当然作为随时有可能24小时上班的程序员,不大可能有时间去自己养猫自己“撸”,所以他注定要成为一名云吸猫重度患者。范浩强与猫所以,他只能“撸”别人的猫,但是,哪有那么多猫给他“撸”呢,他想了一个绝好的办法,那就是在他面试招聘新人的时候,对于养猫的应聘者更加“青睐”,只为有猫可“撸”。看来,想去旷视公司上班,能够加入范浩强团队,养一只可爱又好看的猫是一个不二法宝,面试的时候,当范大佬问“你有什么优势的时候”,你以迅雷不及掩耳之势掏出怀里的小猫咪。范大佬定睛一看,我的乖乖,天下竟有此等好看的猫,顺势将猫抱到怀里,头都不回的对你说:“你走吧,猫留下,记得明天来上班。”(以上故事纯属虚构,但是范大神爱猫是公开的事实)最后,我想说的是,通过文章中的范浩强从对数学感兴趣到参加IO竞赛,再到成为计算机算法资深研究员,引领AI视觉界。一切看似不可思议,又那么理所应当。这一切都归功于两个字“兴趣”,很多人一事无成,也许就是因为没有找到属于自己的那个由热爱到狂热的兴趣吧。毕竟,从感兴趣到喜爱,再到狂热,才是我们走向卓越的必经之路。(文章中图片来源于网络,侵删)

京子

只有算法被研究和验证过了,才能真正开始进入实践阶段

最重要的转折是:虎扑等一系列名不见经传的草根网站,从这次淘宝刘强东和阿里巴巴主推的人工智能战略,似乎已经准备以它们的名义入局。正如上文所述,阿里一直主推的人工智能全产业链,主要分为机器学习、数据挖掘、人工智能云、大数据、语音识别、图像识别等等。淘宝一直实用云计算,也已经将自己的大数据业务分离出来,独立为某一个公司。同时阿里也从腾讯身上购买了一系列的云计算服务。目前云计算在国内全面布局,腾讯虽不至于忽略,但自己建有云计算高地。所以,在我看来,阿里真正的战略大家注意到了。阿里不靠像谷歌一样在人工智能方面布局下大血本,而是用云计算、大数据等新兴技术一系列产业化而非名企入局,似乎这是一个趋势。作为国内互联网的领军人物,阿里从来不是轻易喊停的那一方。阿里的战略主要是取得未来。2014年阿里开始把最重要的人工智能业务独立出来,在数字经济投入巨资。从这个时点看,阿里的战略布局还是非常明晰的。核心在三点:数字经济、智能经济和ai产业。这三点也正是马云不遗余力提的东西。下面逐个进行解读。为什么是2018年阿里又一次投入巨资布局人工智能?中国互联网巨头只要与人工智能打交道,便要布局人工智能。这是无解的:现在是移动互联网的天下,而移动互联网在云时代以后已经转向以大数据和人工智能为主的智能经济时代。人工智能为什么智能经济时代才是他们的机会呢?可以看到,不光是阿里,华为、腾讯、百度也都纷纷在喊出智能化的口号。它们正在谋划一场进军人工智能的大战。我预测其他互联网巨头也会跟进。所以,2018年阿里大规模布局人工智能似乎是必然。阿里布局人工智能到底在布局什么?我估计,阿里布局的主要是算法。算法实质就是基于用户上的行为分析,利用机器学习、人工智能,深度挖掘用户上的行为变化。他们是这样解释算法,人工智能能深度挖掘的部分是用户上行为的轨迹、以及算法的深度挖掘算法是怎么做的呢?只有算法被研究和验证过了,才能真正开始进入实践阶段。在对算法的理解层面,不同的公司有差异。有些公司简单了解下就已经到实践阶段了。有些公司可能还要简单了解下,才能找到算法研究的突破点。具体怎么做?机器学习和算法工程师是核心。图像识别在模式识别中属于一个宽领域,而实践领域,如果谈到深度学习、语言识别、图像识别,大家第一时间想到的模式识别。而实践领域,比如人工智能、智能设备应用,大家想到的都是深度学习。

红灯笼

ai对算法和计算机编程能力要求比较高,也有纯算法领域的研究

大数据和ai是三个不同的范畴和学科,所以有交叉学科的研究方向,比如机器学习和数据挖掘,可以在一个领域中考虑数据挖掘。大数据相对来说开放程度高一些,所以不用局限于统计学的知识,比如你想做算法的工作,至少你的数学功底和算法的基础还是要有的,至于如何进行算法的实现,肯定还是具体业务需求和研究方向决定的。而ai的范畴就太大了,可以说这是一门完整的学科,其中包括机器学习,深度学习,无监督学习,强化学习,甚至你想专注于机器学习领域,还可以细分图像,语音,和计算机视觉等等。ai对算法和计算机编程能力要求比较高,也有纯算法领域的研究,可以考虑在ai研究机构,互联网公司或者其他可能的研究机构。总的来说这三个领域都会有一些交叉的东西,当然,你作为大数据和ai研究生如果能把大数据学好的话,以后从事这些领域的工作时就很强大了。考研可能会涉及大数据方向,你要是数学很好,计算机也还可以,可以考虑大数据方向,计算机可以先看看深度学习的书。还是数据清洗与挖掘,大数据,数据挖掘等等方向,至于那些高大上的新的方向,大数据,机器学习,生物信息,统计学习等等,没有编程基础的话很难。那个最前端,你就拿bat来说吧,大数据就是去找合适的python或者php代码拼,实现你想实现的功能,比如语音识别,机器翻译,图像识别,ai推荐这种类型的。机器学习就是人工智能算法这些可以从现有的数据或者公开的数据集上学习,从大量数据上学习,机器学习得到的是特征。但特征不是简单的你画三根线把yuzhu这一个点代入函数就能变成yuzhu这样的直接数字。至于所谓的前端其实不过是一种更加接近人工智能更加接近直接逻辑思维的人工程语言,把那个三根线代入后呈现出来也是可以的。大数据是一个多元化的学科,这类学科一般归类于工科专业,一般把他归为nlp这类学科,即大数据处理,web开发,人工智能。大数据肯定是三个里面最容易跟数据搭上边的,但是大数据毕竟是新兴的学科,学科内部也有很多细分方向的。建议不如先去好好了解下不同方向的区别。先提前想好自己想从事的研究方向再开始学习。大数据方向的研究一般分大数据系统集成,大数据存储,大数据可视化,人工智能,智能算法,数据挖掘,数据结构,数据分析这些。想好自己要学什么大数据最容易和数据沾边,但你要学好数据挖掘,统计,机器学习,应该有一定的编程基础,最好需要一点点java知识,反正本科还是比较好过的。大数据就业前景广阔。要做大数据,建议学习好高数,线代,信号。

及席

了解算法的前世今生

一、中国算法的前世中国古代数学是以创造算法特别是各种解方程的算法为主线。从线性方程组到高次多项式方程,乃至不定方程,中国古代数学家创造了一系列先进的算法(中国数学家称之为“术”),他们用这些算法去求解相应类型的代数方程,从而解决导致这些方程的各种各样的科学和实际问题。特别是,几何问题也归结为代数方程,然后用程式化的算法来求解。因此,中国古代数学具有明显的算法化、机械化的特征。1、线性方程组与“方程术”中国古代最重要的数学经典《九章算术》(约公元前2世纪)卷8的“方程术”,是解线性方程组的算法。2、高次多项式方程与“正负开方术”《九章算术》卷4中有“开方术”和“开立方术”。《九章算术》中的这些算法后来逐步推广到开更高次方的情形,并且在宋元时代发展为一般高次多项式方程的数值求解。秦九韶是这方面的集大成者,他在《数书九章》(1247年)一书中给出了高次多项式方程数值解的完整算法,即他所称的“正负开方术”。3、多元高次方程组与“四元术”历史上最早对多元高次方程组作出系统处理的是中国元代数学家朱世杰。朱世杰的《四元玉鉴》(1303年)一书中涉及的高次方程达到了4个未知数。朱世杰用“四元术”来解这些方程。“四元术”首先是以“天”、“地”、“人”、“物”来表示不同的未知数,同时建立起方程式,然后用顺序消元的一般方法解出方程。4、一次同余方程组与“中国剩余定理”中国古代数学家出于历法计算的需要,很早就开始研究形如:X≡Ri (mod ai) i=1,2,...,n (1), (其中ai 是两两互素的整数)的一次同余方程组求解问题。公元4世纪的《孙子算经》中已有相当于求解下列一次同余组的著名的“孙子问题”:X≡2(mod3) ≡3(mod5) ≡2(mod7)《孙子算经》作者给出的解法,引导了宋代秦九韶求解一次同余组的一般算法——“大衍求一术”。现代文献中通常把这种一般算法称为“中国剩余理”。5、插值法与“招差术”早从东汉时期起,学者们就惯用插值法来推算日月五星的运动。起初是简单的一次内插法,隋唐时期出现二次插值法(如一行《大衍历》,727年)。由于天体运动的加速度也不均匀,二次插值仍不够精密。随着历法的进步,到了宋元时代,便产生了三次内插法(郭守敬《授时历》,1280年)。在此基础上,数学家朱世杰更创造出一般高次内插公式,即他所说的“招差术”。二、中国算法的近代数学今生古代与中世纪中国数学家创造的算法,有许多即使按现代标准衡量也达到了很高的水平。这些算法所表达的数学真理,有的在欧洲直到18世纪以后依赖近代数学工具才重新获得(如前面提到的高次代数方程数值求解的秦九韶程序,与1819年英国数学家W. 霍纳重新导出的“霍纳算法”基本一致;多元高次方程组的系统研究在欧洲也要到18世纪末才开始在E. 别朱等人的著作中出现;解一次同余组的剩余定理则由欧拉与高斯分别独立重新获得;至于朱世杰的高次内插公式,实质上已与现在通用的牛顿-格列高里公式相一致)。这些算法的结构,其复杂程度也是惊人的。如对秦九韶“大衍求一术”和“正负开方术”的分析表明,这些算法的计算程序,包含了现代计算机语言中构造非平易算法的基本要素与基本结构。这类复杂的算法,很难再仅仅被看作是简单的经验法则了,而是高度的概括思维能力的产物,这种能力与欧几里得几何的演绎思维风格截然不同,但却在数学的发展中起着完全可与之相媲美的作用。这次分享结束,欢迎留言、收藏、分享、关注!

怪哉

如何不让算法“算计”消费者?专家:可进行反制措施算法研究

来源:中国青年报原标题:如何不让算法“算计”消费者数字经济时代,看不见摸不到的算法时刻左右消费者的选择。近年来,随着互联网平台经济的快速发展,从网络购物、交通出行、旅游住宿、订餐外卖到网络游戏等生活消费领域,都出现了大型的互联网平台企业。一些平台通过大数据、人工智能等手段为消费者提供了更丰富的产品或服务,为社会创造了价值。但与此同时,也存在一些侵害消费者权益行为:大数据杀熟、网络游戏抽奖概率不明、网络直播推送违反法律规定内容、刷好评隐差评……这些问题的背后,是不公平的算法技术对消费者的“算计”。在大数据杀熟上消费者需要集体救济机制2020年,安徽省一家网络科技有限公司在一年内被大量消费者投诉,有关部门接到投诉举报953件。其中,反映该公司在网络游戏抽奖概率及规则设置上存在问题的举报数量最多,占总数的40.8%。安徽省消费者权益保护委员会在调查时发现,对于抽奖概率的合法合规问题并不好判断。当地消保委组织召开了市区两级市场监管部门、文旅部门、公安部门等相关部门的联合处理推进会,共同对这家公司存在的概率等问题进行调查核实。因为对概率规则等问题缺乏专业的认定能力,找不到权威第三方机构进行认定,调查受到一定阻碍。“这个问题目前也没有得到很好的解决。”在日前中国消费者协会(以下简称“中消协”)举办的网络消费领域算法规制与消费者保护座谈会上,安徽省消费者权益保护委员会秘书长丁涛正苦恼于如何找到解决办法。抽奖概率的背后包含着一套算法的执行。中消协根据消费者投诉、有关调查和相关报道,归纳了六种当前网络领域涉及消费者权益的算法应用问题,包括推荐算法、价格算法、评价算法、排名算法、概率算法和流量算法。其中,概率算法的问题体现在:一些线上经营者开展有奖销售、抽奖兑换,特别是部分网络游戏公司经常性推送游戏道具抽奖活动,虽然公示了中奖(掉落)概率,但是其算法程序不透明,实际中奖概率缺乏管控,屡遭消费者诟病。在北京市消费者协会副秘书长陈凤翔看来,算法本质是互联网的一种编程技术,这种编程技术有一定的人为参与和输入,有的编程者不懂得法律,编制过程中侵害消费者权利。北京计算机学会数字经济专委会秘书长王娟前不久在乘坐网约车时发现,当车辆驶进日常她很熟悉的路线时,网约车平台导航却给出一条又堵又长的路线。中国政法大学副校长时建中也有类似遭遇,在他看来,平台导航给出一条绕远的行驶路线,算法背后存在某种动机,但消费者很难取证,有时也没有办法保存相关证据。“大数据一旦杀熟,针对的是该种消费模式下的所有消费者,而不是针对具体的消费者。”时建中认为,在大数据杀熟问题上的消费者权益保护,更需要集体救济机制。应针对有垄断行为的企业进行反制措施的算法研究“十四五”规划中提出,改善消费环境,强化消费者权益保护。在对外经济贸易大学法学院教授苏号朋看来,不公平的算法对消费者所造成的侵害,体现在三方面——公平交易权的侵害、选择权的侵害和知情权的侵害。他认为,在特定领域,如侵害消费者权益的“二选一”问题、大数据杀熟问题上,可以通过加强对个案的监管,引导更多企业在算法领域提高消费者保护水平。此外,算法在某种程度上看也是商家垄断的一种权利,可以考虑设置权限,从技术上让消费者有权关闭算法,并且将这样一种权利在法律中作出规定,从技术角度实现商家和消费者之间的平衡。在清华大学法学院副院长、教授程啸看来,维护消费者权益,很多问题可以通过技术解决。如针对有市场垄断行为的企业,进行反制措施的算法研究,“用算法针对算法,算法之间就会产生相互的竞争关系,从而重塑市场竞争机制”。对于侵害消费者权益的算法,他还建议,要采取事先预防措施。针对大数据杀熟、价格歧视类的问题,监管部门可以要求平台标识出对用户所显示的定价,是否为针对消费者个人推送的个性化定价。北京工商大学法学院教授、商法研究中心主任吕来明指出,提高监管技术水平已经迫在眉睫。但对于算法的规制,是事前监管还是事中、事后监管,要不要进行伦理审查,目前社会上还存在分歧。在他看来,首先应确立一个原则,在事前规范上或者事中规范上,对于算法的目标进行规制,同时要进行伦理审查。但也要对不同的算法,进行分层监管,从而确定不同的监管等级和尺度。中消协指出,如果任由不公平的算法应用无序发展,一方面不利于市场经济的公平有序竞争,不利于经济可持续发展;另一方面也会使消费者面临数据算法压榨,成为技术欺凌的对象,甚至被算法扭曲价值取向和道德观念,沦为平台经营者的掌中“玩物”。“算法应用不公针对的是普遍的社会大众,每个人都可能成为潜在的受害者。”中消协副秘书长栗元广提出,下一步应加强算法应用的有效规制。“在个人信息保护法、反垄断法、反不正当竞争法、价格法等相关法律中,建议增加算法应用的相关规定。”栗元广建议,国家应设立算法伦理专门机构,负责算法应用伦理、规则、标准制定,不公平算法应用调查、处理等,并指定相关政府部门负责,加强对算法应用的有效监管。同时,应明确经营者使用算法应做到可知、可查、可逆。一旦发生争议,负有向有关行政部门、司法机关、第三方机构提供算法、后台数据、相关资料及进行说明的义务,做到算法应用的可验证、可解释、可追责,强化算法实施方的举证责任,明确其伪造、篡改证据的责任和后果,解决消费者举证难、鉴定难的问题。“要加强监管协作和机制建设。”栗元广指出,互联网领域算法应用十分广泛,建议有关行政部门加强相互协调,细化监管职责;完善执法依据,做好规章废改衔接;加强对算法应用的分级标识和分类管理,对涉及公共利益、生命健康、财产权利等的算法应用强化监管,对具有市场支配地位的平台经营者的算法应用强化监管,对涉及价值观、道德观,特别是未成年人教育的算法应用强化监管。栗元广建议,应建立算法投诉审评机制,保障消费者和社会各界的投诉、监督权,“培育第三方技术鉴定机构,强化对算法应用的技术审核力量”。同时,栗元广认为,有关司法机关应加强对算法应用案件的分析研究,推动出台有关司法解释,加强对算法应用问题的实质审查,通过司法判例强化对消费者权益的保护。

觉性

数据和算法研究学习四大名著、唐诗宋词

作为一名热爱古典文化的数据算法行业从业者, 我建立了“数读中外经典名著“圈子,旨在用数据和算法解读唐诗宋词、四大名著、《论语》、《诗经》、金庸作品、莎士比亚作品等中外经典名家名著,并且把分析结果通过生动、记忆性非常强的图表呈现在圈子里,最后制作成可以反复使用的工具可以随时查询使用,此外在2020年6月初会做成《数据读唐诗宋词》视频课程。1、四大名著章节情节内容概况工具:基于自然语言处理算法将名著原文按照章节概况出核心内容,在阅读前和阅读后,都能快速帮助读者理解和记忆。2、名著人物关系挖掘工具:基于社区发现算法和自然语言处理技术,匹配和抽取人物关系,制作成动态的可以筛选过滤的人物关系挖掘工具,查询作品中人物联络情况。3、《三国演义》人物生平事件查询工具:基于自然语言处理技术模型,对原文做大量的清洗和匹配,做成该工具,通过这个工具,可以快速查询人物的简介和生平时间事件,对阅读和理解数百万字的名著是非常有帮助的。4、唐诗宋词、《诗经》、《论语》等古典文学智能翻译工具:基于古汉语语料库和自然语言处理算法,智能地把晦涩难懂的语句翻译成通俗易懂的现代白话文,提升阅读和理解效率,极大降低对古典文学的学习门槛。5、唐诗宋词作者生平轨迹查询工具:通过对唐诗宋词作品和文献资料的数据挖掘和算法提取,得到了作者历史的生平轨迹以及每个轨迹对应的作品,把作品和作者经历结合起来,更加了解作品的深意。6、智能飞花令工具:除了实现根据关键词筛选诗句的功能外,还实现了基于算法模型的诗句之间情感相似、语义相似以及场景相似功能,满足了更高级别的飞花令功能。7、成语查询与分析工具:根据关键词出现的位置来查询成语,会显示出成语的读音和详细信息。之后还会陆续制作完成文言文学习工具、文章背诵工具、偏旁部首工具、词语语义分析工具等数十款工具

蓬户不完

腾讯算法高级研究员陈松坚:智能问答技术及其应用

随着人工智能的飞速发展以及广泛落地应用,越来越多的设备将会被植入智能问答技术,人机交互场景随处可见,智能问答在未来将会成为一个非常重要的入口。腾讯小知凭借着业界领先的智能AI引擎算法和海量大数据仓库,已将智能问答技术落地实施,并且经过大量的业务考验和优化,知识点匹配度和准确率都已达到90%以上,在2018 年 GITC 全球互联网技术大会上,腾讯小知荣获年度互联网最具价值产品奖。腾讯小知算法负责人陈松坚也在会场发表了关于智能问答技术原理及其在To B场景下的应用的专题演讲,从自己的角度为我们展现智能问答技术的最新成果。他首先从智能问答是什么,为什么和怎么做的三个问题出发,阐明了他对当前智能问答技术的定位和价值,首先,现阶段的智能问答是信息检索技术的升级,是量变而未达到质变。但是无论在To B还是To C的场景下,当前的技术都能够切实解决一些用户的痛点,提升用户体验,是亟待推进和充满想象的方向。在回答怎么做这个问题时,他详细介绍了几种不同的问答机器人的实现路径,包括单轮问答机器人,多轮问答机器人及阅读理解机器人。其中重点阐述了单轮问答机器人的实现原理,包括字面匹配,词向量匹配,深度语义匹配,迁移学习等技术。此后他还分享了小知团队将上述技术产品化的经验,包括智能客服机器人和电话机器人两大块,主要分享了当前产品的形态,亮点和实际项目中取得的一些成果。最后,他简单总结了小知目前完成的工作以及就智能问答的发展提出了自己的几点看法。--------------------------------------------------------------以下是演讲稿全文:各位下午好,很高兴今天能在这里给大家做分享报告。先介绍一下,我们腾讯小知是致力于为政府和各行业提供一揽子智能问答解决方案的团队,目前已经落地的包括基于文本的智能客服机器人和基于语音的电话机器人等。在大多数人的认知里,智能问答很可能是以上的3个印象,2011年打败了人类取得问答竞赛冠军的waston;2017年被沙特授予公民身份的机器人sofia;更为大家熟知的钢铁侠中的机器人管家jarvis。在大家心目中,智能就意味着能够像真人一样交流。然而作为从业者,很遗憾地告诉大家,目前的技术还远没有达到这个目标,我认为本质上目前的智能问答技术是对信息检索技术的一次升级,是量变而未到质变。这个皇冠上的明珠还等待我们去摘取。既然问答技术还不成熟,那为什么还要投身到这个领域呢。我想从To B和To C两个角度去回答。对企业来讲,当前的问答技术虽然无法解答复杂的咨询,但是大部分的简单的头部问题是可以比较好的解答的。从本轮AI大潮NLP赛道的几名种子选手都从智能客服这个方向切入就可以看出企业是确实存在对智能问答的刚性需求。而对普通用户来讲,一方面siri等语音助手每天都在为用户提供便捷的交互界面,另一方面像amazon echo这一类的智能家居产品也逐步进入千家万户,成为物联网生态的中心入口之一,这便是智能问答的价值所在。那如何实现智能问答机器人呢?我们先来看最基本的单轮问答机器人的实现原理。熟悉搜索引擎的朋友会发现这个架构跟搜索引擎的很类似。单轮问答一般来说就是FAQ问答,是基于业务问答对组成的问答库进行检索匹配。其中FAQ问题集包含多个相似问法供用户问题去匹配。预处理阶段一般会进行文本纠错,标准化和底层NLP特征提取;召回阶段会在倒排索引中召回若干个候选问题(粗排),而最后的匹配阶段会基于各种模型进行匹配打分并返回得分最高的结果(精排)。匹配阶段还会引入其他模块,如知识图谱和拒识模型,目的是辅助提升匹配的最终准确率。retrieval中的匹配可以看做是naive solution,词袋+VSM, 筛选候选够用了,但是精排需要更精致的策略,第一,要利用监督信息做拟合,我们构建基于问题对的训练语料,拟合是否匹配这个二分类目标。第二,特征上抛弃稀疏的词袋模型,而是构造各种相似度来做base scorer,然后利用非线性的抗噪能力强的xgboost来做融合,比如我们用到词bigram, 字bigram, 核心词,名词等特征集合的相似度。这种方法的优缺点是一体的,由于模型只学习字面相似的特征,因此不受领域影响,通用性强,适合用在冷启动阶段;但也因为只考虑字面相似,无法处理更深层的语义匹配。那如何度量语义的相似呢。词向量技术的兴起是语义匹配的前提,所谓词向量,是将孤立的传统的token表示映射到相互关联的向量空间中,这种关联性,或者说是相似性,是通过词语的上下文的来描述的。也就是说,上下文越相似的词语,他们的语义就越相似,词向量的欧式距离就越近。这是很容易理解的,更妙的是,通过对向量进行简单加减运算,能够呈现出概念的关系,比如king-man+woman的结果非常接近于queen, 因此说明词向量能够一定程度刻画语义。那对句子如何做向量表示呢?一个简单的想法是直接求和平均,WMD是另一个比较有意思且有效的做法,他将计算句子到句子的相似度建模成一个运输的问题,把句子p的各个词,运输到q的各个词上,也可以说是变换;运输成本是词向量的cosine相似度,而要运输的是各个词在句子中的权重,用线性规划求解一个最优解,即为p到q的距离。另外还有个有效的方法是SIF,思路是做词向量加权求和,但是突显出句子中非通用的部分,即权重用词频倒数来计算权重,实验效果也很不错。上面的方法有一个问题就是没有利用有监督信息,所以效果有明显的天花板。下面介绍这个工作是基于深层网络做有监督学习的匹配的,做法也比较简单,首先把句子文本用one-hot编码,假如词典大小是500K,那编码完长度就是500K维,其实等于是词袋模型,然后输入到一个多层的神经网络去学习,最终得到一个128维的向量作为句子的语义表示,然后用cosine计算两个句子与文档的相似度作为模型输出。这个方法其实是将高维稀疏的token特征映射到低维语义空间,跟词向量的思路很类似,只不过训练目标不同,并且这里使用了深层网络结构。上面工作的问题是对句子的输入进行建模时还是词袋模型的思路,没有考虑词的位置和顺序信息,因此我们需要考虑引入特征提取能力更强的网络单元。先介绍左边这位大名鼎鼎CNN, 卷积神经网络,原来是图像领域上的关键技术,通过不同的卷积核用来处理邻近区块信息提取。就好比一个人透过各种不同的过滤镜片逐块逐块地观察一副图片,所谓横看成岭侧成峰,关注到不同的影像然后记忆下来,再用这些不同的影像来对原始图片做表达,有点类似把信息分出了多个层次,显然鲁棒性更好。移植至到NLP上,CNN可以用来捕捉局部上下文的信息,如左边这个例子,CNN观察范围为3,不同的卷积核关注不同的词语组合,然后再通过最大池化选出关注度最高的部分,完成一次特征抽取过程。但是CNN对上下文的处理能力依赖于窗口大小,远距离就没办法处理了,因此要考虑另一种网络单元RNN,这种单元是专门为时序模型量身打造的,简单来说,每一时刻t上的隐藏状态,或者说第t个词上的语义编码,都由两个输入共同决定,即上一时刻的隐藏状态和当前时刻的原始输入,而为了解决远距离传递导致的梯度消失和梯度爆炸等问题,RNN有一些变种结构来应对,比如 LSTM和GRU等。CNN和RNN都是对原始输入进行语义编码的基本单元,编码后的向量就可以接入多层感知机进行相似度计算,如果是直接计算cosine相似度,那就是dssm的升级版,而更常见的做法是把两个句子的编码向量拼接在一起,再经过一个多层感知机计算相似度,而这种方法统称为表达式建模;另一种方案考虑到两个句子之间的交互信息对学习他们是否匹配显然更为重要,这一类方案被称为交互式建模,右边是一个典型的例子,他最大的不同是首先对两个句子的所有窗口组合进行拼接和卷积,得到交互信息。然后再进行多次卷积和池化得到表示。其他的交互方式还包括编码之后,进行交互操作,如作差,点乘等,还有计算attention表示,也是常见的交互方式。下面介绍我们的方案,跟上面介绍的模型相比,我们的方案主要做了两处改动,一个是使用了稠密连接的网络结构,让rnn层的输入和输出拼接在一起做为下一层的输入,第二个是混合注意力机制,即在计算attention向量进行交互式建模的基础上,增加self-attention向量计算,然后把两个attention向量经过门机制进行融合,这样做一方面引入了问句间的交互信息,同时又增强了对自身的表达建模。上面的模型是比较复杂的模型,参数量有5.8M。在实际中应用中训练语料会严重不足,为了解决这个问题,我们引入了迁移学习的策略。首先第一种是多任务联合学习,比如在拟合两个问句是否匹配的同时,也对问句进行分类预测;另外还可以同时对匹配的问题对做seq2seq的翻译模型训练。这两个策略都证明能有效提升准确率。而另一个思路更加直观,即引入其他领域的语料,所谓多语料迁移。Fine-tune即参数微调是其中一种做法,即先用通用语料训练网络,固定底层表达层的参数,然后再使用领域语料调整上层参数;另一种思路参考了对抗学习的思想,即引入一个新的任务“混淆分类器”去判别当前样本是来自源语料还是目标语料,通过在损失函数中增加反向的混淆分类损失项,让混淆分类器尽可能地无法区分样本的来源,从而保证共享了参数的表达网络能够学习到两部分语料中共性的部分。以上的介绍都是为了完成一个基本的单轮对话机器人,而实际应用中,往往存在需要需要交互的场景,比如查询社保余额,就需要用户提供指定信息,如姓名,身份证号,手机号等。这种是所谓任务导向型机器人,而另一种,基于知识图谱的机器人也往往会涉及到多轮交互。这里简单介绍一下多轮对话机器人的架构,整体上是一个对话管理系统,总的来说是管理会话状态,包含4个模块,分别是输入部分:自然语言理解模块NLU,负责意图识别和抽取槽位实体,比如这里匹配到了意图是查询社保余额,抽取到了社保号1234。得到的意图和槽位值会送入到对话状态追踪模块,DST,他负责会话状态的更新,形式化来说是一个函数,输入是当前状态s和当前的query经过NLU处理过得到的意图和槽位值q, 输出新的状态s‘,下一步是把s’送入DPL,对话策略模块,这个模块是根据新的状态s‘输出行动a,通常这个决策选择会依赖于一个外部数据库或知识图谱,最后,由输出部分,自然语言生成模块NLG负责将行动转换为自然语言文本,返回给用户。以上是多轮对话的原理框架,可以用不同的方式实现,近年来研究的热点是所谓end-to-end的神经网络模型,希望可以利用神经网络的语义编码能力和深层网络的堆叠实现端到端学习,减少各个模块的拟合bias导致的损失。但实用中我们并不会真正实现输入到输出的end-to-end学习,主要是因为模型深度过深不且多轮对话的语料非常欠缺,模型不好训练。实际中是分开各自的模块进行训练的,比如NLU中的槽位抽取就可以用基于神经网络的序列标注模型来建模,意图识别则可以通过之前的语义匹配模型或者分类模型来做都可以,NLG则是用seq2seq的翻译模型来训练,这样做比较灵活。而在多轮对话中比较受关注的是对话状态和策略的建模,做法有多种,比如对上一次的agent输出,本次的用户输入,当前的状态下可用的数据集合一起进行编码,然后输入到一个神经网络中学习action的选择,即policy learning,这里除了使用有监督学习,还可以进一步使用强化学习的技术,即构造一个用户模拟器,让agent跟他不断交互,根据交互是否完成任务和交互轮数来给agent不同的奖励和惩罚,从而最终学习出高成功率的对话策略。这部分的内容也特别有意思,希望以后可以单独展开来说。前面提到的单轮FAQ机器人,有一个问题是问答准确率依赖于问答库的质量,而问答库的构建耗时费力,所以针对数据较大的非结构化文档,如果可以直接从中抽取答案,是非常理想的做法。比如斯坦佛大学开源的drQA,就是基于wikipedia的语料做的一个开放域上的问答机器人,我们来看看这种阅读理解机器人的架构示意,他也是基于检索重排的思路,首先把可能的文段从语料库中摘取出来,然后送入阅读理解模型进行答案定位,打分,排序和选择得分最高的答案。阅读理解模型与匹配模型是类似的,需要先对问题和候选文段进行编码表示,不同之处在于最终预测的目标是答案的起始和结束位置。我所在的团队在去年,在阅读理解的权威公开测评Squad v1中取得过第一的成绩,同时参加这个测评的包括了google, facebook, 微软,阿里idst, 科大讯飞等国内外同行。说明业界对这种技术还是非常看重的。下面分享小知在把以上技术落地产品化的经验。首先我们来看看小知的整体架构图,核心引擎有两部分,一块是上面重点阐述的深度语义匹配模型,另一块是本次分享没有展开的知识图谱引擎,在此之上,我们构建了FAQ机器人,多轮会话机器人(任务机器人),闲聊机器人等。以下是我们单轮和多轮机器人的示例。在我们实际的落地项目中,得益于深度迁移模型的语义匹配能力和行业知识图谱的的精准匹配和辅助,小知机器人能够做到95%左右的问答准确率,并且节省了50%以上的服务人力,切实为政府和企业提升效率和降低成本。在智能客服的基础上,我们又打造了基于语音的电话机器人,力主融合智能客服,人工在线客服,工单系统和电话机器人,为客户打造从售前售中售后的整体解决方案。以下是电话机器人的整体架构图,核心是自然语言理解NLU模块,负责识别用户提问意图提取相关实体。根据NLU输出的结果,内置的对话管理引擎会进行流程状态流转和跟踪。另外,ASR语音识别和TTS语音合成是不可或缺的重要服务,这三个模块相互协作,共同完成与用户的交互。最后对智能问答的未来发展提几点我的看法。目前学术界比较公认的一个方向是,需要更有机地结合模型和规则,而在问答领域,规则的一大组成部分就是知识图谱,包括开放领域的知识图谱和专业领域知识图谱。而更进一步地,我们需要研究带有推理性质的事理型知识图谱去描述领域内的规则和知识,让机器人能够处理带有复杂条件的问题,提供更智能的回复。在我看来,智能问答的一个突破口就在于解决以上三个问题。以上就是今天分享的内容,谢谢大家。主讲人介绍:陈松坚,腾讯数据平台部算法高级研究员,有着8 年的 NLP 研发经验,2017 年加入腾讯 TEG 数据平台部,负责智能客服产品腾讯小知的算法规划和落地。负责过多个智能客服项目,对封闭领域的智能问答有丰富的实战经验。

閟宮

深化新媒体时代智能算法研究

随着信息化时代的到来,以智能算法为基础的内容平台不断兴起。智能算法的优化,能够使人们在庞大的信息资源中迅速找到所需信息,帮助人们提高工作效率。针对新闻传播学界如何看待智能算法的发展及作用,记者采访了相关学者。 开启认知新机制当下,如何在有限的时间和精力下挑选出对自己有用的信息,成为人们关注的问题。北京师范大学新闻传播学院执行院长喻国明表示,智能算法是对于信息和人匹配的算法型信息分发模式。算法是互联网信息分发平台实现传播效能最重要的工具。作为一种“闯入”信息传播实践的新生产力量,算法型信息推荐技术实现了信息生产与传播范式的智能化转向,同时带来了用户价值主导下的场景化适配,其发展与变化是一种重塑传播规则、改变人们认知的全新机制设计。中国传媒大学受众研究中心主任刘燕南表示,算法推荐是以受众为中心的内容推荐机制,所有媒介技术都在朝着不断匹配人们的认知心理与认知行为的方向演进,以更好地适应人们的媒介接触与使用习惯。算法推荐并非推荐机制的代名词,热搜、排名等都属于推荐机制,但是算法推荐更进一步,它直接把“你和你喜欢的内容”相匹配,智能化地打通连接受众的“最后一公里”,这是媒介发展人性化趋势的一大体现,受众从被动的接受者转变成为主动的参与者。信息化时代最大的变化是信息生产权和分发权的去中心化。中国人民大学新闻与社会发展研究中心副主任李彪表示,随着自媒体时代来临,每个人甚至机器、算法都可能成为信息传播的节点,信息的生产和分发越来越呈现出智能化和精准化的特点。智能算法催生了媒介生产的专业化和深度化,改变了以往粗放型的新闻生产模式,提升了媒介的传播效率。此外,算法推送使受众可以随时看到自己喜欢的信息,降低了信息获取成本,提高了整个社会的信息流动效率。打破“信息茧房”“信息茧房”是由哈佛大学教授凯斯·桑斯坦在2001年提出的假说,认为社交媒体的算法推荐功能带来信息过滤效果,有可能造成用户的兴趣和见识窄化。对此,喻国明表示,从逻辑上讲,这一假说成立的前提是,人们喜欢看什么,算法就只给他们推送什么。事实上,算法没有好恶,它虽然能判断人们的兴趣爱好,但无法判断人们的观点和态度。因此,它会给人们推荐正反两方面的文章。与订阅和关注这类高度认同的信息来源相比,算法少了人工干涉,反而能帮助人们高效地接受多元化的信息。而且,人们除了被动接受平台推送的信息和观点外,还可以用搜索功能主动探索求证来形成自己的认知,主动打破“茧房”隐患。在刘燕南看来,“信息茧房”更多地是从技术线性出发得出的一种直觉性想象,迄今仍然是一个未经证实的假说,在概念上和学理上都有待进一步考察。媒介供给在宏观、中观和微观层面都在丰富化、多元化,个人选择未必会局限于某个单一信息源,或仅仅接受某一类信息。相反,受益于虚拟信道的超便捷性和跨时空性,人们更有可能拥有一份比以往任何时候都更具多样性的媒介消费菜单。算法推荐未必一定会导致“信息茧房”现象。清华大学新闻与传播学院教授陈昌凤表示,事实上,智能算法有两种路径可以降低“信息茧房”的可能性,一是通过强化个性化来有效提升多样性,即智能算法实际上具有增加内容多样性和缩小内容范围的双向潜力,能有效提升新闻多样性;二是使个性化推荐系统的使用者意识到未知,也就是将被过滤掉的信息提示给用户,使用户意识到还有更丰富的新闻可供选择。算法不仅是一种技术或工具,更具有文化意义和价值观指向,对我们的日常生活产生持续且密切的影响。建立智能算法基本价值观“社交媒体的算法逻辑、推送逻辑将深刻影响新闻业的发展。”陈昌凤称,将算法智能地运用于新闻业,通过算法推荐逻辑,协同内容算法、过滤算法和主题建模等方法影响新闻的供给和分发渠道,进而改造生产逻辑并最终打造出智能新闻。喻国明指出,算法推送是有效内容传播的趋势。算法需要跨越工程传播的伦理困境,从更复杂的人类传播层面优化设计,建立以人为本、以影响力为追求、以结构建设为入口、以公共性为底线的基本价值观。刘燕南谈到,着眼当下的媒介融合,以数据为基础的算法不断迭代、优化,数据的全量、多角度、多维度科学的融合以及算法的调适,才是未来努力的方向。算法是在与人的不断互动中前进的,每一步都需要谨慎把握算法迭代的方向。在李彪看来,智能算法目前的发展还不够全面,除推送订阅内容外,对受众的情感需求、综合需求还不能有效满足。同时,媒介组织须以正确的价值观为导向,加强对算法的引导和完善。来源:中国社会科学网-中国社会科学报 作者:段丹洁欢迎关注中国社会科学网微信公众号 cssn_cn,获取更多学术资讯。

红海龟

算法是个什么鬼?其实很简单!

在数学和计算机科学中,算法是解决一类问题的明确说明。算法可以执行计算、数据处理、自动推理和其他任务。作为一种有效的方法,一种算法可以在有限的空间和时间内,用一种定义良好的形式语言表示,用于计算一个函数从初始状态和初始输入(可能为空)开始,指令描述了一种计算,当执行时,通过有限个定义进行计算,最终产生“输出”,并最终在结束状态终止。从一个状态到下一个状态的转换不一定是确定性的;一些被称为随机化算法的算法结合了随机输入。算法的概念已经存在了几个世纪。希腊数学家使用埃拉托斯滕斯筛中的算法来寻找素数,使用欧几里得算法来寻找两个数的最大公约数。单词algorithm本身源自9世纪的数学家。部分形式化成为现代算法的概念始于试图解决由大卫希尔伯特在1928年提出的Entscheingsproblem(决策问题)。后来的形式化是试图定义“有效的可计算性”或“有效的方法”。这些形式化包括1930、1934和1935年的G_del–Herbrand–Kleene递归函数、1936年的Alonzo Church的lambda微积分、1936年的Emil Post公式1以及1936-37和1939年的Alan Turing机器。缘起“算法”一词的词源于将穆罕默德伊本穆萨的名字拉丁化,这是到Algorismus的第一步,他是波斯数学家、天文学家、地理学家和学者。大约825年,al-khwarizmi写了一篇关于印度教-阿拉伯数字系统的阿拉伯语论文,在12世纪被翻译成拉丁语,标题为algoritmi de numero indorum。这个标题的意思是“印地安人的数字上的算法”,其中“算法”是翻译al-khwarizmi名字的拉丁化。选择他的名字,简单的意思是“十进制数字系统”。15世纪,在希腊语单词“算术”的影响下,拉丁语单词改为algorithmus,相应的英语术语“算法”在17世纪首次得到证实;19世纪引入了现代意义。在英语中,它最初在1230年被使用,然后在1391年被使用。英语采用了法语术语,但直到19世纪末,“算法”才有了现代英语的含义。这个词的另一个早期用法是1240年,在亚历山大德维尔迪欧撰写的名为《卡门·德阿尔戈里斯莫》的手册中。由此开始:算法主义是目前我们使用印度数字2乘以5的艺术。这首诗有几百行长,总结了印度骰子,塔利布斯印度语,或印度数字的新风格计算的艺术。非正式定义非正式的定义可以是“一组精确定义操作序列的规则”。包括所有计算机程序,包括不执行数值计算的程序。通常,程序只有在最终停止时才是一种算法。一个典型的算法例子是欧几里得算法,用于确定两个整数的最大公因数;后面的章节例子描述了这个算法(还有其他的例子)。Boolos,Jeffrey&1974,1999在以下引文中提供了该词的非正式含义:没有人能写得足够快、足够长或足够小(“越来越小,没有限制……你应该试着写在分子、原子、电子上”),列出一个可枚举的无限集合的所有成员,用一些符号一个接一个地写下他们的名字。但是人类可以做同样有用的事情,在某些可枚举的无限集合的情况下:他们可以给出明确的指令来确定集合的第n个成员,对于任意有限的n。这些指令要非常明确地给出,在某种形式下,它们可以被一台计算机跟随,或者由一个能够驾驶汽车的人跟随。只对符号进行非常基本的运算。“可枚举无限集”是其元素可以与整数一一对应的集合。因此,Boolos和Jeffrey说,一个算法暗示了一个过程的指令,该过程从一个或多个任意的“输入”整数“创建”输出整数,理论上,这些整数可以任意大。因此,一个算法可以是一个代数方程,例如y=m+n——两个任意的“输入变量”m和n,它们产生一个输出y。但是,不同作者试图定义这个概念,表明这个词的含义远不止这个,它的顺序是(例如加法):精确的指令(用“计算机”所理解的语言表示)。对于一个快速、高效、良好的过程,该过程规定了“计算机”的“移动”(机器或人,具有必要的内部信息和能力)。查找、解码,然后处理任意输入整数/符号m和n、符号+和=…以及“有效地”在“合理的”时间内,在指定的地点,以指定的格式,产生个整数y。算法的概念也被用来定义可判定性的概念。这个概念对于解释正式系统是如何从一组小的公理和规则开始形成的至关重要。在逻辑上,一个算法需要完成的时间是无法测量的,因为它显然与我们习惯的物理维度无关。由于这些不确定性,即正在进行的工作的特征,导致算法定义不可用,既适合具体(在某种意义上)又适合术语的抽象用法。形式化算法对于计算机处理数据的方式至关重要。许多计算机程序都包含详细说明计算机执行特定任务(按特定顺序)应执行的特定指令的算法,例如计算员工工资或打印学生报告卡。因此,一个算法可以被认为是任何可以被图灵完整系统模拟的操作序列。主张这篇论文的作者包括明斯基(1967年)、萨维奇(1987年)和古列维奇(2000年):明斯基:“但我们也会保持,图灵……任何可以“自然”被称为有效的过程,实际上都可以通过(简单的)机器来实现。虽然这看起来很极端,但争论…对它有利是很难反驳的。古列维奇:“…图灵支持他的论文的非正式论点证明了一个更强有力的论点:每种算法都可以被图灵机器模拟……根据Savage,算法是由图灵机定义的计算过程。通常,当算法与处理信息相关联时,可以从输入源读取数据,写入输出设备,并存储数据以进行进一步处理。存储的数据被视为执行算法的实体的内部状态的一部分。实际上,状态存储在一个或多个数据结构中。对于某些这样的计算过程,必须严格定义算法:以它在所有可能出现的情况下应用的方式指定。也就是说,任何有条件的步骤都必须系统地逐个处理;每种情况的标准必须是明确的(并且是可计算的)。由于算法是精确步骤的精确列表,因此计算顺序对算法的运行始终至关重要。通常假定指令被明确地列出,并且被描述为“从上到下”的开始,这是一种更正式地由控制流描述的思想。到目前为止,对算法形式化的讨论假定了命令式编程的前提。这是最常见的概念,它试图用离散的“机械”的方式来描述一个任务。对于这种形式化算法的概念来说,唯一的一点就是赋值操作,即设置变量的值。它源于“记忆”作为草稿的直觉。下面有这样一个例子。有关构成算法的其他概念,请参阅函数编程和逻辑编程。表示算法算法可以用多种符号表示,包括自然语言、伪代码、流程图、Drakon图、编程语言或控制表(由译员处理)。算法的自然语言表达往往是冗长和模棱两可的,很少用于复杂或技术算法。伪代码、流程图、drakon图和控制表是表示算法的结构化方法,避免了自然语言语句中常见的许多不明确之处。编程语言主要用于以计算机可以执行的形式表示算法,但通常用作定义或记录算法的方法。有各种各样的表示可能,人们可以将给定的图灵机程序表示为一系列机器表(更多见有限状态机、状态转换表和控制表)、流程图和drakon图(更多见状态图)或称为“q集”的基本机器代码或汇编代码的形式。算法的表示可分为图灵机器描述的三个可接受级别:高级描述“忽略实现细节。在这个层次上,我们不需要提及机器如何管理其磁带或磁头。”实现描述“用于定义图灵机使用其头部的方式以及在磁带上存储数据的方式。在这个层次上,我们不提供状态或过渡函数的细节。”正式描述最详细的“最低级别”给出了图灵机的“状态表”。有关所有三个级别中描述的简单算法“添加m+n”的示例,请参见算法示例。设计算法设计是指求解问题的一种方法或数学过程以及工程算法。算法的设计是运筹学许多解理论的一部分,如动态规划、分治等。设计和实现算法设计的技术也称为算法设计模式,例如模板方法模式和装饰器模式。算法设计的一个最重要的方面是创建一个具有高效运行时的算法,也称为大O。算法开发的典型步骤:问题定义模型的开发算法说明设计算法检查算法的正确性算法分析算法的实现程序测试文件准备实现大多数算法都是作为计算机程序来实现的。然而,算法也可以通过其他方式实现,例如在生物神经网络(例如,人脑实现算法或昆虫寻找食物)、电路或机械装置中。计算机算法在计算机系统中,算法基本上是软件开发人员在软件中编写的逻辑实例,对于预期的“目标”计算机从给定的(可能为空)输入产生输出是有效的。即使是在旧硬件中运行的优化算法,也会比在更高效的硬件中运行的非最优(时间复杂度更高)算法产生更快的结果;这就是为什么算法(如计算机硬件)被视为技术的原因。“优雅”(紧凑)程序,“良好”(快速)程序:在克努斯非正式地出现“简单和优雅”的概念,如此:Knuth:“……我们需要一些定义松散的美学意义上的好算法。一个标准…是执行算法所用的时间长度…其他标准包括算法对计算机的适应性、简单性和优雅性等。Chaitin:“……一个程序是“优雅的”,我的意思是它是产生输出的最小可能的程序。在他的定义前加了一句话:“我将向你展示,你无法证明一个程序是‘优雅的’”——这样的证明可以解决停顿问题(同上)。算法与可由算法计算的函数:对于给定的函数,可能存在多个算法。这是真的,即使没有扩展可供程序员使用的指令集。罗杰斯观察到“这是…重要的是要区分算法的概念,即过程和可由算法计算的函数的概念,即由过程生成的映射。同一个函数可能有几个不同的算法。不幸的是,在好(速度)和优雅(紧凑)之间可能存在一种权衡——一个优雅的程序可能需要更多的步骤来完成计算,而不是一个不那么优雅的程序。下面是一个使用欧几里得算法的例子。计算模型:计算机是一种受限制的机器,是一种盲目遵循其指令的“离散确定性机械装置”。不可区分的计数器代理和相对于代理的能力有效的指令列表。明斯基在他的“非常简单的可计算性基础”中描述了兰贝克的“算盘”模型的一个更为契合的变体。除了停止之外,明斯基的机器还包括三种分配操作:零(例如,被0:L←0替换的位置的内容)、继承者(例如,L←L+1)和减量(例如,L←L1)。程序员很少需要用如此有限的指令集编写“代码”。但明斯基(和梅尔扎克和兰贝克一样)表明,他的机器只有四种基本类型的指令:条件goto、无条件goto、分配/替换/替换和停止。模拟算法:计算机(Computor)语言:Knuth建议读者“学习算法的最佳方法是尝试它”。…立即拿笔和纸做一个例子,但模拟或执行真实的东西呢?程序员必须将算法翻译成模拟器/计算机/计算机可以有效执行的语言。斯通举了一个例子:当计算二次方程的根时,计算机必须知道如何取平方根。如果不这样做,那么算法必须提供一组规则来提取平方根,才能有效地发挥作用。这意味着程序员必须知道相对于目标计算代理(计算机/计算机)有效的“语言”。但是模拟应该使用什么模型呢?vanEmdeBoas观察到,“即使我们把复杂性理论建立在抽象的基础上而不是具体的机器上,模型选择的任意性仍然存在。此时,模拟的概念进入了,当测量速度时,指令集很重要。例如,欧几里得算法中计算余数的子程序执行速度要快得多,如果程序员有一个“模”指令,而不仅仅是减法(或者更糟的是:只有明斯基的“减法”)。结构化编程、规范结构:根据丘奇-图灵理论,任何算法都可以通过已知图灵完备的模型来计算,并且根据明斯基的演示,图灵完备只需要四种指令类型:条件goto、无条件goto、赋值、停止。Kemeny和Kurtz观察到,虽然无条件goto和有条件if-then goto的“无纪律”使用会导致“意大利面条代码”,但是程序员可以只使用这些指令编写结构化程序;另一方面,“用结构化语言编写结构化差的程序也可能,而且不太难。” Tausworthe增加了三个规范结构:序列、if-then-else和while-do,还有两个:do-while和case。结构化程序的另一个好处是,它使用数学归纳法来证明正确性。标准流程图符号:图形辅助工具称为流程图,提供了描述和记录算法(以及一个计算机程序)的方法。就像minsky机器的程序流程一样,流程图总是从页面的顶部开始向下。它的主要符号只有四个:显示程序流的定向箭头、矩形(序列、GoTo)、菱形(if-then-else)和点(或tie)。标准结构由这些原始形状构成。子结构可以“嵌套”成矩形,但前提是上部结构只有一个出口。符号及其用于构建规范结构的用途如图所示。例子算法示例最简单的算法之一是在随机顺序的数字列表中找到最大的数字。找到解决方案需要查看列表中的每个数字。由此得出一个简单的算法,可以用英语散文的高级描述来说明,如下所示:高层次的描述:如果集合中没有数字,则没有最高数字。假设集合中的第一个数字是集合中最大的数字。对于集合中的每个剩余数字:如果此数字大于当前最大数字,则将此数字视为集合中的最大数字。当集合中没有要迭代的数字时,请将当前最大的数字视为集合中最大的数字。(准)形式描述:用散文写,但更接近于计算机程序的高级语言,以下是用伪代码或pidgin代码对算法进行更正式的编码:“←”表示分配。例如,“最大←项”是指最大值的值变化到项的值。“返回”终止算法并输出以下值。欧几里得算法欧几里得计算两个数的最大公约数(gcd)的算法在其元素的第七卷(“初等数理论”)中出现。欧几里得提出了这样一个问题:“给定两个数互不相乘,以找到它们的最大公约数。”他定义“一个由单位组成的多个数”:一个计数数,一个不包括零的正整数。“测量”是将较短的测量长度s沿较长的长度l连续放置(q次),直到剩余部分r小于较短的长度。在现代词汇中,余数r=lq×s,q是商,或余数r是“模”,即除法后剩余的整数分数部分。为了使欧几里得方法成功,起始长度必须满足两个要求:长度不能为零,并且减法必须是“适当的”;即,测试必须保证两个数字中较小的数字从较大的数字中减去(或者,两个数字可以相等,以便减法得出零)。欧几里得的原始证明又增加了第三个要求:两个长度不能是素数。欧几里得规定了这一点,这样他就可以建立一个约简和荒谬的证据,证明两个数字的共同度量实际上是最大的。虽然尼科马丘斯的算法与欧几里得的算法相同,但当这些数字互为素数时,就产生了它们共同度量的数字“1”。所以,准确地说,下面的算法确实是尼科马丘斯的算法。欧几里得算法的计算机语言执行欧几里得算法只需要几个指令类型:一些逻辑测试(条件goto)、无条件goto、赋值(替换)和减法。位置用大写字母表示,例如S、A等。一个地点的不同数量(数字)用小写字母书写,并且(通常)与该地点的名称相关。例如,起始位置L可能包含数字L=3009。欧几里得算法的一个差程序以下算法的框架是Knuth的Euclid’s和Nicomachus的四步版本,但它不是使用除法来查找余数,而是使用剩余长度r中较短长度s的连续减法,直到r小于s。用粗体显示的高级描述改编自Knuth 1973:2-4:INPUT:E0:确保R≥SE1:[求余数]:直到R中剩余的长度r小于S中较短的长度s,重复地从R中剩余的长度r中减去S中的测量数字s。E2:[余数是零吗?]:(i)最后一个度量精确,r中的余数为零,程序可以停止,要么(ii)算法必须继续:最后一个度量在r中留下的余数小于s中的度量数。E3:【交换S和R】:欧几里得算法的核心。使用余数r来测量以前较小的数s;l用作临时位置。OUTPUT:欧几里得算法的一个好程序以下版本的欧几里得算法只需要六个核心指令就可以完成“不雅”的十三个指令;更糟的是,“不雅”需要更多类型的指令。在本文的顶部可以找到“优雅”的流程图。在(非结构化)基本语言中,步骤是编号的,指令let[]=[]是用←符号表示的赋值指令。“优雅”是如何工作的:代替外部的“欧几里得循环”,“优雅”在两个“CO循环”之间来回移动,A>B循环计算A←AB,A B≤A循环计算B←BA。这是因为,当minutend m最后小于或等于subtrahend s(difference=minutendsubtrahend)时,minutend可以变为s(新的测量长度),副斜线可以变为新的r(要测量的长度);换句话说,减法的“意义”相反。以下版本可用于面向对象的语言:检查欧几里得算法算法是否按照作者的要求执行?一些测试用例通常对核心功能有一定的信心。但测试是不够的。对于测试用例,一个源代码使用3009和884。Knuth建议40902,24140。另一个有趣的例子是两个相对质数14157和5950。但是“例外情况”必须被识别和测试。当r>s,s>r,r=s时,“烂代码”会正常运行吗?“优雅”同上:b>a,a>b,a=b?(对所有人都是)。当一个数字为零,两个数字都为零时会发生什么?(“烂代码”在所有情况下永远计算;“优雅”在a=0时永远计算。)如果输入负数会发生什么?分数?如果输入的数字,即由算法/程序计算的函数的域,只包含正整数(包括零),则在零处的失败表示算法(以及实例化它的程序)是一个部分函数而不是一个总函数。一个值得注意的失败由于例外是阿里安5号飞行501火箭失败(1996年6月4日)。欧几里得算法的测量与改进优雅(紧凑)与善良(速度):只有六个核心指令,“优雅”是明显的赢家,而“不雅”是13个指令。然而,“不雅”的速度更快(它以更少的步骤到达停止)。算法分析指出了这种情况的原因:“Elegant”在每个减法循环中执行两个条件测试,而“Elegant”只执行一个条件测试。由于算法(通常)需要许多循环通过,所以在执行“b=0”时平均要浪费很多时间。仅在计算余数后才需要的测试。算法可以改进吗?:一旦程序员判断一个程序“合适”和“有效”——也就是说,它计算出作者想要的函数,那么问题就变成了,它能被改进吗?通过消除五个步骤,可以提高“不雅”的紧凑性。但是Chaitin证明了压缩算法不能用广义算法实现自动化;相反,它只能用启发式的方法实现,即通过穷尽搜索(在繁忙的海狸身上找到的例子)、试错、聪明、洞察力、归纳推理的应用等。观察到步骤4、5和6在步骤11、12和6中重复。这些步骤以及步骤2和3可以被消除。这将核心指令的数量从13个减少到了8个,这使得它在9个步骤中“比”优雅“更优雅”。移动“b=0”可以提高“优雅”的速度。在两个减法循环之外进行测试。此更改需要添加三个指令(b=0?A=0?GOTO)。现在,“优雅”计算示例数更快;对于任何给定的a、b和r、s,是否总是这样,都需要进行详细的分析。算法分析通常重要的是要知道给定算法理论上需要多少特定资源(如时间或存储)。已经开发了用于分析算法以获得定量答案(估计值)的方法;例如,上述排序算法的时间要求为o(n),使用n作为列表长度的大o符号。在任何时候,算法只需要记住两个值:迄今为止发现的最大值,以及它在输入列表中的当前位置。因此,如果不计算存储输入数字所需的空间,则称其具有O(1)的空间要求;如果计算输入数字,则称其具有O(n)的空间要求。不同的算法可以用不同的指令集在比其他算法更少或更多的时间、空间或“努力”内完成相同的任务。例如,当用于排序列表或数组上的表查找时,二进制搜索算法(具有cost o(log n))优于顺序搜索(cost o(n))。形式与经验对算法的分析和研究是计算机科学的一门学科,通常是抽象地实践,而不使用特定的编程语言或实现。从这个意义上讲,算法分析与其他数学学科相似,因为它关注算法的基本属性,而不是任何特定实现的细节。通常,伪代码用于分析,因为它是最简单和最一般的表示。然而,最终,大多数算法通常在特定的硬件/软件平台上实现,它们的算法效率最终通过实际代码进行测试。对于“一次性”问题的解决,特定算法的效率可能不会产生重大后果(除非n非常大),但对于设计用于快速交互、商业或长寿命科学应用的算法,这可能是至关重要的。从小n到大n的缩放经常暴露出效率低下的算法,否则是良性的。经验测试很有用,因为它可能揭示影响性能的意外交互作用。基准点可用于比较程序优化前后的潜在改进与程序优化后的算法。然而,经验检验不能取代正式的分析,以公平的方式进行分析也不容易。执行效率为了说明即使在成熟的算法中也可能有潜在的改进,最近一项与FFT算法(在图像处理领域中大量使用)相关的重大创新可以将处理时间缩短1000倍,用于医疗成像等应用。一般来说,速度的改进取决于这一问题在实际应用中非常普遍。这种规模的加速使计算机设备能够广泛地利用图像处理(如数码相机和医疗设备)来降低功耗。分类对算法进行分类有多种方法,每种方法都有其自身的优点。按实现类型递归递归算法是一种反复调用(引用)自身的算法,直到某个条件(也称为终止条件)匹配为止,这是函数编程常用的方法。迭代算法使用循环这样的重复构造,有时使用堆栈这样的额外数据结构来解决给定的问题。有些问题很自然地适合于一种实现或另一种实现。例如,使用递归实现可以很好地理解汉内塔。每一个递归版本都有一个等价的(但可能或多或少复杂)迭代版本,反之亦然。逻辑一个算法可以被看作是受控逻辑推理。这个概念可以表示为:算法=逻辑+控制。逻辑组件表示可用于计算的公理,而控制组件决定对公理应用推导的方式。这是逻辑编程范式的基础。在纯逻辑编程语言中,控制组件是固定的,算法是通过只提供逻辑组件来指定的。这种方法的吸引力在于优雅的语义:公理的变化会在算法中产生定义明确的变化。串行、并行或分布式通常讨论算法时假定计算机一次执行一条算法指令。这些计算机有时被称为串行计算机。为这种环境设计的算法称为串行算法,而不是并行算法或分布式算法。并行算法利用计算机体系结构,其中多个处理器可以同时处理一个问题,而分布式算法则利用与计算机网络连接的多台计算机。并行或分布式算法将问题划分为更对称或不对称的子问题,并将结果收集在一起。这种算法的资源消耗不仅是每个处理器上的处理器周期,而且是处理器之间的通信开销。一些排序算法可以有效地并行化,但是它们的通信开销很高。迭代算法通常是可并行的。有些问题没有并行算法,称为固有的串行问题。确定性或非确定性确定性算法在算法的每一步都用精确的决策来解决问题,而非确定性算法则是通过猜测来解决问题,尽管典型的猜测是通过启发式更精确地进行的。精确或近似当许多算法达到精确解时,近似算法寻求更接近真实解的近似。近似可以通过使用确定性策略或随机策略来实现。这种算法对许多困难问题都有实用价值。近似算法的一个例子是背包问题,其中有一组给定的项目。它的目标是包装背包以获得最大的总价值。每件物品都有一定的重量和价值。可携带的总重量不超过某个固定数字x。因此,解决方案必须考虑物品的重量及其值。量子算法它们运行在一个现实的量子计算模型上。这个术语通常用于那些看似固有量子的算法,或使用量子计算的一些基本特征,如量子叠加或量子纠缠。按设计范式对算法进行分类的另一种方法是通过它们的设计方法或范式。有一定数量的范例,每一个都不同。此外,这些类别中的每一个都包含许多不同类型的算法。一些常见的范例是:暴力或全部搜索这是一种幼稚的方法,尝试各种可能的解决方案,看看哪一个是最好的。分而治之分而治之的算法反复地将一个问题的实例减少到同一个问题的一个或多个较小实例(通常是递归的),直到这些实例足够小,可以轻松解决为止。分而治之的一个例子就是合并排序。在将数据分割成段后,可以对每个数据段进行排序,通过合并段,可以在征服阶段获得整个数据的排序。分而治之的一个更简单的变体被称为减少和征服算法,它解决一个相同的子问题,并使用这个子问题的解决方案来解决更大的问题。分而治之将问题划分为多个子问题,因此征服阶段比减少和征服算法更为复杂。减少和征服算法的一个例子是二进制搜索算法。搜索和枚举许多问题(如下棋)可以被建模为图上的问题。图搜索算法指定了围绕图移动的规则,对于此类问题非常有用。这一类还包括搜索算法、分支和绑定枚举以及回溯。随机算法这种算法随机(或伪随机)做出一些选择。对于那些无法找到精确解的问题,它们可以非常有用地找到近似解(参见下面的启发式方法)。对于其中一些问题,我们知道最快的近似值必须包含一些随机性。对于某些问题,具有多项式时间复杂度的随机算法是否可以是最快的算法,这是一个开放的问题,称为p对np问题。这种算法有两大类:蒙特卡罗算法返回正确答案的概率很高。例如,rp是以多项式时间运行的子类。拉斯维加斯算法总是返回正确的答案,但它们的运行时间只是概率限制的,例如ZPP。降低复杂性这项技术涉及到通过将一个困难问题转化为我们(希望)有渐近最优算法的更为知名的问题来解决它。其目的是找到一种简化算法,其复杂度不受生成的简化算法的控制。例如,一种用于在未排序列表中查找中间值的选择算法,首先对列表(昂贵部分)进行排序,然后拉出排序列表中的中间元素(便宜部分)。这种技术也被称为转换和征服。回溯在这种方法中,当确定多个解决方案无法生成有效的完整解决方案时放弃它们,并将逐步构建多个解决方案。优化问题对于优化问题,有一个更具体的算法分类;针对此类问题的算法可以分为上述一个或多个一般类别,也可以分为以下类别之一:线性规划在寻找线性等式和不等式约束下的线性函数的最优解时,问题的约束可以直接用于产生最优解。有一些算法可以解决这类问题,例如流行的单纯形算法。可以用线性规划解决的问题包括有向图的最大流问题。如果一个问题另外要求一个或多个未知数必须是整数,那么它将被分类为整数编程。如果可以证明整数值的所有限制都是表面的,即解满足这些限制,那么线性规划算法就可以解决这一问题。在一般情况下,根据问题的难度,使用专门的算法或找到近似解的算法。动态规划当一个问题显示最优子结构时,意味着可以从子问题的最优解和重叠子问题的最优解构造出一个问题的最优解,这意味着相同的子问题被用于解决许多不同的问题实例,一种称为动态规划的更快方法避免了重新计算已经存在的解。已经计算出来了。例如,Floyd–Warshall算法,通过使用从所有相邻顶点到目标的最短路径,可以找到从加权图中的顶点到目标的最短路径。动态编程和记忆化结合在一起。动态规划与分而治之的主要区别在于,子问题在分而治之中或多或少是独立的,而在动态规划中,子问题是重叠的。动态编程和直接递归的区别在于递归调用的缓存或内存化。当子问题是独立的,没有重复的时候,记忆没有帮助,因此动态编程不是所有复杂问题的解决方案。通过使用memoization或维护已经解决的子问题表,动态规划将许多问题的指数性质降低到多项式复杂性。贪婪算法贪婪算法类似于动态编程算法,它通过检查子结构来工作,在这种情况下,不是问题而是给定的解决方案。这种算法从一些可能给出或以某种方式构造的解开始,并通过做一些小的修改来改进它。对于某些问题,它们可以找到最优解,而对于其他问题,它们则停留在局部最优解,也就是说,在算法无法改进但不是最优的解上。贪婪算法最常用的用途是寻找最小生成树,在那里用这种方法可以找到最优解。哈夫曼树、克鲁斯卡尔、普里姆、索林都是贪婪的算法,可以解决这个优化问题。启发算法在优化问题中,启发式算法可用于在无法找到最优解的情况下找到接近最优解的解。这些算法的工作原理是,随着算法的发展,越来越接近最优解。原则上,如果运行无限长的时间,他们会找到最优解。它们的优点是在相对较短的时间内可以找到一个非常接近最优解的解。这些算法包括局部搜索、禁忌搜索、模拟退火和遗传算法。其中一些算法,如模拟退火算法,是非确定性算法,而另一些算法,如禁忌搜索算法,则是确定性算法。当已知非最优解的误差界时,该算法又被进一步分类为近似算法。按研究领域每个科学领域都有自己的问题,需要有效的算法。一个领域的相关问题经常一起研究。一些示例类包括搜索算法、排序算法、合并算法、数字算法、图形算法、字符串算法、计算几何算法、组合算法、医学算法、机器学习、密码学、数据压缩算法和解析技术。领域往往相互重叠,一个领域中的算法改进可能会改善另一个领域(有时完全不相关)。例如,动态规划是为了优化工业中的资源消耗而发明的,但现在已用于解决许多领域的广泛问题。按复杂性与输入大小相比,算法可以按需要完成的时间量分类:恒定时间:如果算法所需的时间相同,则不考虑输入大小。例如,对数组元素的访问。线性时间:如果时间与输入大小成比例。例如,列表的遍历。对数时间:如果时间是输入大小的对数函数。例如二进制搜索算法。多项式时间:如果时间是输入大小的幂。例如,气泡排序算法具有二次时间复杂性。指数时间:如果时间是输入大小的指数函数。例如,暴力搜索。有些问题可能有多个复杂度不同的算法,而其他问题可能没有算法或已知的高效算法。还有一些问题到其他问题的映射。基于此,基于最优算法的复杂性,将问题本身进行分类,而不是将算法分为等价类更为合适。连续算法形容词“continuous”应用于“algorithm”一词时可以表示:一种对表示连续量的数据进行运算的算法,即使该数据由离散近似表示,这种算法也在数值分析中进行研究;或一种微分方程形式的算法,在模拟计算机上连续地对数据进行运算。法律问题算法本身通常不具有专利权。在美国,仅由抽象概念、数字或信号的简单操作组成的主张不构成“过程”(USPTO 2006),因此算法不具有专利权(如Gottschalk v.Benson)。然而,算法的实际应用有时是可申请专利的。例如,在Diamond v.Diehr中,应用简单反馈算法帮助合成橡胶固化被认为是可申请专利的。软件专利是一个极具争议的领域,涉及算法的专利备受批评,尤其是数据压缩算法,如Unisys的LZW专利。此外,一些加密算法有导出限制。算法的发展古代近东古希腊使用了算法。两个例子是埃拉托斯坦的筛子,这是尼科马克《算术导论》中描述的:Ch9.2和欧几里得算法,这是在欧几里得元素(约公元前300年)中首次描述的。Ch9.1巴比伦粘土片描述和使用算法程序来计算重要天文事件的时间和地点。离散和可分辨符号理货记号:为了记录他们的羊群、他们的粮食袋和他们的钱,古人使用理货:在木棍上堆积石头或留下记号,或在粘土中制作离散的符号。通过巴比伦和埃及对标记和符号的使用,最终罗马数字和算盘得以发展(Dilson,第16-41页)。在图灵机器和后图灵机器计算中使用的一元数字系统算法中,计数标记突出显示。作为数字“占位符”的符号处理:代数古希腊几何学家(欧几里得算法)、印度数学家布拉马库塔(Brahmagupta)和波斯数学家阿尔赫瓦里兹米(Algorism和Algorithmi是从他们的名字衍生而来)以及西欧数学家的工作最终达到了莱布尼兹的微积分比率(ca 1680)的概念:莱布尼兹提出了逻辑代数,这是一种代数,它规定了用普通代数规定数字运算规则的方式来处理逻辑概念的规则。具有离散状态的机械装置博尔特认为重量驱动的钟的发明是“关键发明[中世纪的欧洲]”,特别是边缘逃逸为我们提供了一个机械钟的滴答声。从13世纪开始,精确的自动机器”。立即导致了“机械自动化”,最终导致了“计算机器”—19世纪中叶查尔斯·巴贝奇和艾达·洛维拉斯伯爵夫人的差分引擎和分析引擎。作为计算机巴贝奇的分析引擎,第一台设备被认为是一台真正的图灵完整的计算机,而不仅仅是一台计算器,因此有时也被称为“历史上的第一个程序员”,尽管巴贝奇的第二台设备的完整实现在她有生之年之后才得以实现。逻辑机器1870年——斯坦利·杰文斯(Stanley Jevons)的“逻辑算盘”和“逻辑机器”:技术问题是当以类似于现在所称的卡诺图的形式呈现时,减少布尔方程。Jevons(1880)首先描述了一个简单的“算盘”,它是一种用别针装饰的木头滑片,其设计使任何部分或类别的[逻辑]组合都能被机械地挑选出来。然而,最近,我把这个系统简化成一个完全机械的形式,从而把整个间接的推理过程体现在所谓的逻辑机器上:“他的机器配备了“某些可移动的木杆”和“脚上有21个键,如钢琴的键等等”。用这台机器,他可以分析“三段论或任何其他简单的逻辑论证”。1870年,他在英国皇家学会的研究员面前展示了这台机器。然而,另一位逻辑学家约翰·文恩(JohnVenn)在1881年的《符号逻辑》(Symbolic Logic)一书中,却对这一努力的目光:“我对有时被称为逻辑机器的东西的兴趣和重要性没有很高的估计……在我看来,目前已知的或可能被发现的任何发明都不应该被称为逻辑机器”,请参阅算法特征。但不甘示弱,他也提出了“一个计划,有点类似,我理解,以教授的算盘,对应于Jevons教授的逻辑机,可以描述以下发明。我宁愿称之为一个逻辑图机器。但我认为,它可以完全完成任何逻辑机器所能合理预期的一切工作。提花织机、Hollerith穿孔卡片、电报和电话——机电继电器:Bell和Newell(1971年)指出,提花织机(1801年)、Hollerith卡片的前身(穿孔卡片,1887年)和“电话交换技术”是导致第一台计算机发展的一棵树的根。电报,电话的前身,在全世界使用,它的离散和可区分的字母编码作为“点和破折号”一个共同的声音。到19世纪末,售票机磁带(约1870年代)开始使用,1890年美国人口普查中使用的是霍利斯卡。然后电传打字机(约1910年)带着穿孔纸,在磁带上使用波特码。机电式继电器的电话交换网络(发明于1835年)是数字加法装置的发明者乔治·斯蒂比茨(1937年)的工作的基础。当他在贝尔实验室工作时,他观察到机械计算器与齿轮的“繁重”使用。他在1937年的一个晚上回家,打算测试他的想法…修补工作结束后,Stibitz构建了一个二进制添加设备。Davis(2000)观察了机电式继电器的特殊重要性(其两个“二进制状态”打开和关闭):只有从20世纪30年代开始,随着使用电气继电器的机电计算器的发展,机器的制造才有了巴贝奇预想的范围。19世纪到20世纪中叶的数学符号和规则:在快速连续的过程中,乔治·布尔(1847、1854)、戈特洛布·弗雷格(1879)和朱塞佩·皮诺(1888-1889)的数学将算术简化为一系列由规则操纵的符号。皮亚诺的算术原理,由一种新方法(1888年)提出,是“在符号语言中对数学公理化的第一次尝试”。但是海耶诺特给了弗雷格(1879)这个荣誉:弗雷格的“也许是有史以来最重要的逻辑著作”。…其中我们看到一种“公式语言”,即一种语言特征,一种用特殊符号书写的语言,“纯粹的思想”,即没有修辞修饰…由特定的符号构成,这些符号按照明确的规则进行操作。弗雷格的作品在《数学原理》(1910-1913)中被阿尔弗雷德·诺斯怀特黑德和伯特兰·罗素进一步简化和放大。悖论:同时,文献中出现了许多令人不安的悖论,特别是布阿里-富蒂悖论(1897年)、拉塞尔悖论(1902-03年)和理查德悖论。由此产生的考虑导致了Kurt G_del的论文(1931年),他特别引用了骗子悖论,它完全降低了递归的数字。有效可计算性:为了解决希尔伯特在1928年精确定义的EntscheingsProblem问题,数学家首先着手定义“有效方法”或“有效计算”或“有效可计算性”(即成功的计算)的含义。随后,出现了以下内容:阿隆佐·丘奇(Alonzo Church)、斯蒂芬·克莱恩(Stephen Kleene)和J.B.罗瑟(J.B.Rosser)的《λ-微积分》(λ-微积分):根据雅克·赫伯兰(Jacques Herbrand)的建议(参见1934年G·戴尔普林斯顿(Princeton)的演讲)和克莱恩(Kleene)随后的简化,对“一般递归”(Entschei)进行了精细的定义。问题是无法解决的,埃米尔·波斯特把有效的可计算性定义为一个工人在不经意地遵循一系列指示的情况下,在一系列房间里左右移动,或者在那里标记或擦除一张纸,或者观察纸,并对下一条指示作出“是”或“否”的决定。ungsproblem是无法解决的,因为他使用了他的“A-[自动-]机器”——实际上几乎等同于波斯特的“公式”,J.Barkley Rosser对“有效方法”的定义,即“机器”。S.C.Kleene提出了“教会论文”的前身,他称之为“论文一”,几年后,Kleene将他的论文重命名为“教会论文”。并提出了”图灵论文”。埃米尔(1936年)和阿兰·图灵(1936-1939)Emil Post(1936)将“计算机”(人类)的行为描述如下:“…涉及两个概念:一个符号空间的概念,在该空间中执行从问题到答案的工作,以及一组固定不变的方向。他的符号空间是:“双向无限的空间或盒子序列…问题解决者或工作人员将在这个符号空间中移动和工作,能够一次只在一个框中移动和工作……一个框只允许有两种可能的条件,即空的或没有标记的,并且其中只有一个标记,例如垂直笔画。“一个盒子被挑出来称为起点。…一个特定的问题是由有限数量的框(即输入框)以符号形式给出,并用笔画进行标记。同样地,答案[即输出]将以符号形式通过这样一个标记框的配置给出…“适用于一般问题的一组指导方针在应用于每个特定问题时会建立一个确定性过程。此过程仅在到达(c)型方向[即停止]时终止。更多信息请参见后转向机。阿兰·图灵的作品早于斯蒂比茨(1937年);斯蒂比茨是否知道图灵的作品还不得而知。图灵的传记作者相信图灵使用一种类似打字机的模型是出于年轻人的兴趣:“艾伦小时候就梦想着发明打字机;图灵夫人有一台打字机,他很可能从问自己把打字机称为‘机械’是什么意思开始。”考虑到摩尔斯电码和电报的流行,蒂克克尔磁带机和电传打字机,我们可能猜测所有的影响。图灵他的计算模型现在被称为图灵机器,正如波斯特所做的那样,开始分析一台人类计算机,他将其简化为一组简单的基本运动和“精神状态”。但他继续向前一步,创建了一个机器作为计算数字的模型。计算通常是通过在纸上写一些符号来完成的。我们可以假设这篇论文像孩子的算术书一样被分成正方形……然后我假设计算是在一维的纸上进行的,也就是说,在被分成正方形的磁带上进行的。我还要假设,可以印刷的符号数量是有限的…计算机在任何时刻的行为都是由他所观察到的符号和他在那一时刻的“精神状态”决定的。我们可以假设有一个b与符号或正方形的数量绑定,计算机可以在一个时刻观察到。如果他想观察更多,他必须使用连续的观察。我们还将假设需要考虑的心理状态的数量是有限的…“让我们想象一下,计算机执行的操作被分割成‘简单操作’,这些操作非常简单,不容易想象它们被进一步分割。”图灵的约化得到以下结果:“因此,简单的操作必须包括:“(a)观察到的一个方块上符号的变化“(b)观察到的其中一个正方形变为之前观察到的其中一个正方形的L平方内的另一个正方形。“这可能是因为其中的一些变化必然会引起精神状态的变化。因此,最一般的单一操作必须视为以下操作之一:“(a)符号可能发生的变化(a)以及思想状态可能发生的变化。(b)观察到的正方形可能发生的变化(b),以及可能的精神状态变化。“我们现在可以建造一台机器来完成这台计算机的工作。”几年后,图灵用这种有力的表达扩展了他的分析(论文,定义):如果一个函数的值可以通过某种纯粹的机械过程找到,那么它被称为“有效可计算的”。虽然很容易直观地理解这个概念,但还是需要有一些更明确的、数学上可表达的定义。我们可以从字面上理解这句话,通过一个纯粹的机械过程来理解,这个过程可以通过一台机器来实现。可以用某种正常形式对这些机器的结构进行数学描述。这些思想的发展导致了作者对可计算函数的定义,以及对可计算性的识别与有效的可计算性。我们将使用表达式“可计算函数”来表示机器可计算的函数,并且我们让“有效可计算”指的是直观的概念,而不需要对这些定义中的任何一个进行特别的识别。”Rosser(1939年)和S.C.克林(1943年)J.Barkley Rosser以以下方式定义了“有效方法”:“有效方法”在这里是一种相当特殊的方法,它的每一步都是精确确定的,并且一定会以有限的步骤产生答案。有了这个特殊的含义,迄今为止已经给出了三种不同的精确定义。其中最简单的陈述(由于post和turing)基本上是说,如果一个人能制造出一台机器,在没有人为干预的情况下解决集合的任何问题,除了插入问题和(稍后)阅读答案,就存在解决某些问题的有效方法。这三个定义都是等价的,所以使用哪一个并不重要。此外,这三者都是等价的,这是证明任何一个的正确性的有力论据。”(罗瑟1939:225-226)Rosser的脚注5引用了Church和Kleene的著作及其对λ-可定义性的定义,特别是Church在他的初等数理论的一个无法解决的问题(1936)中对它的使用;Herbrand和G_del及其对递归的使用,特别是G_del在他著名的论文中对形式上不可决定的pri命题的使用。NCPIA Mathematica和相关系统I(1931);以及Post(1936)和Turing(1936-37)在其计算机制模型中。史蒂芬C克莱恩把他现在著名的“论文一”定义为教会图灵论文。但他是在以下情况下做的(原文中的粗体字):“12。算法理论…在建立一个完整的算法理论时,我们要做的是描述一个过程,该过程对于独立变量的每一组值都是可执行的,该过程必然终止,并且以这样的方式,从结果中我们可以看到一个明确的答案,“是”或“否”,对于问题,“谓词值是真的吗?”(克莱恩1943:273)1950年以后的历史许多努力都是为了进一步完善“算法”的定义,由于围绕数学(特别是丘奇-图灵理论)和思想哲学(特别是关于人工智能的争论)的问题,活动正在进行中。有关更多信息,请参见算法特征化。