循序渐进还是精益求精?在线贝叶斯的启示

我们在上一篇文章中提到了在线贝叶斯估计,在本章中,我们将讨论在线贝叶斯估计中体现的重要思想:我们应该力求完美,而不是循序渐进。

在上一章中,我们第一次提到了在线贝叶斯估计的概念:当证据不断到来时,贝叶斯估计并不是等到所有证据都来了,才根据所有收集到的观测值计算后验概率。相反,我们开始根据少量证据计算一个概率,然后在每次获得新的观察值时,使用这个观察值来调整之前的估计值。

以从沸腾的房间取水为例。你进入开水间打开水,你想知道水是否开了。在这个过程中,你实际上是一步一步地获取证据,并用它来更新你之前的猜测:

这种情况下,观察是源源不断的。在线贝叶斯估计允许我们估计最终的后验概率,而不需要等待所有可能的观察值,但是可以

贝叶斯在线估计算法的核心和很多在线算法是一样的。在线算法的核心步骤包括以下内容:

在线算法的对立面叫做离线算法。离线算法也叫批处理算法。离线算法总是将新数据添加到以前的数据中来重新计算结果。比如一开始,你有100个数据,你用这批数据得到一个结果。当您有65,438+000个新数据时,您需要将65,438+000个数据与原始的65,438+000个数据合并,并用200个数据重新计算结果。这是离线算法。

在线算法和离线算法最大的区别是不需要重新计算,而是在之前的计算结果上进行调整:在得到新的100数据之前,之前的计算结果用100数据进行更新,更新后的结果与用200个数据重新计算的结果相同。所以在线算法和离线算法最大的区别不在于数据是不是一个一个来的,而在于是否需要在原来的基础上重新计算或者更新。

在线算法示例:求平均值

我们用一个例子来说明在线算法和离线算法的区别。如果给你100个数字,从x1,x2,...,x100,很容易问出它们的平均值:

这个方法就是把所有的100个x都拿到一起算。这是离线算法。

以及在线算法是如何计算的?

此平均值是基于所有当前数据(只有一个x1)计算的。

也就是说,从最初的估计

出发,

这是求平均值的在线算法。

与离线算法相比,在线算法有三大优势:

不仅如此,在线贝叶斯,甚至所有的在线算法都体现了一种精益求精的思想:一开始,我们不求完美,先得到一个结果;在这个结果的基础上,我们不断地接受新的信息来改进原来的结果,以达到我们所追求的最优目标。

这种精益求精的思想体现在很多领域。举几个例子。

例1:函数极值的数值解法

当我们在高中时,我们学会了寻找一个函数的最大值或最小值。我记得最常用的方法是求导法。我们取函数表达式的导数,使之为0,建立方程。方程的解就是这个函数的极值。

例如,对于函数

一般来说,这个函数的导数是

设导数为0,即

解析解的反义词是数值解。数值解法的核心思想是力求完美。我们用下图来解释一下。图中蓝色曲线是这个函数y的表达式,我们要找到这个函数最大值对应的x的位置(红点处)。

求数值解有以下步骤:

我们可以发现,求数值解的思路并不是试图一次找到函数最优值的位置,而是一步步逼近最优值。这就是卓越的理念。

而我们刚才的解析求解法就是根据公式严格推导出来的。这个方法最好用成语循序渐进来描述。与力求完美相比,步步为营有两个缺点:(1)你永远不知道答案,直到你知道最后一步,哪怕是一个粗略的答案;(2)一旦任何一步出了问题,最终的结果都会是错误的。

从这个角度来说,初中和高中最后几道大题都是一步一步来的:你在提出最终结果之前不知道自己证明的是对还是错,一旦中间任何一步错了,就无法得到正确的结果。

示例2:项目管理中的敏捷模型

熟悉项目管理的人都知道,项目管理有两种不同的模式。第一个模型是瀑布模型。瀑布模型将系统的开发分为几个阶段,包括需求分析、设计、实现和发布。每个阶段都有相应的管理和控制,因此可以有效地保证系统的质量。瀑布模型如下图的上半部分所示。我们可以看到,瀑布模型中的每一个阶段都有一个固定的相互连接的顺序,就像瀑布流水,一步一步的落下。

然而,使用瀑布模型来管理项目有两个重要的缺点:

瀑布模型的对立面是敏捷模型。敏捷模型如上图的下半部分所示。我们可以看到,在使用敏捷模型开发一个项目时,整个开发工作被组织为一系列短期的快速迭代。每次迭代包括需求分析、设计、实现和测试,并通过客户反馈进行持续改进,直到满足最终需求。

与瀑布模型相比,用敏捷模型开发的突出优点是

这里说的瀑布模型和敏捷模型,类似于我们刚才说的函数极值的解析解和数值解!瀑布模型和解析解都采用‘循序渐进’的思想,敏捷模型和数值解对应的是‘精益求精’的思想。

例3:最简单可行的产品

很多年前,我和同事去和一家私企的老总谈项目合作。这家公司是国内做高压电线自动检测最好的公司。简单来说,他们做了一个装置,可以在高压电力线上粘一根长杆,然后实时检测输电线路是否正常工作。一天晚上吃饭的时候,CEO跟我聊起他们的发展思路,他是这么说的:

像我们这样的小公司,产品开发不可能一步到位,尤其是科技含量高的产品。一开始,我们必须做出一个不完美但可用的产品。这样我们心里就有底了。然后拿到现场使用。部署后,工程师会告诉我们很多设计之初意想不到的问题,用户会给我们提供更多的需求。我们将在这些基础上逐步改进。虽然我们这个产品的功能现在看起来这么美,但是第一代产品刚出来的时候问题很多。

这么多年过去了,我还记得很清楚,他说的是不完美但可用的产品概念。后来才知道,这就是你们说的最小可行积(MVP)。严格来说,MVP指的是一些功能只是让设计师表达核心设计理念的产品。设计师可以通过验证来学习,根据用户的反馈来了解更多的用法,继续开发这个产品。

我在香港比尔德理工学院的网站(/mvp/)上看到了下面这个例子。

市场的反应往往是不可预测的。尤其是初创企业。想象一下,当你投入大量的资源、金钱和时间,请了一个团队开发一个APP//平台,推出市场后发现没人用,那绝对是难受的。

解决这个‘推出市场后没人用的问题’最好的办法就是MVP。与其花大量资源去开发一个他们认为会成功的完美产品,创业者还不如用最快的方法,用最少最基本的功能,打造一个‘半成品’。先把这个‘半成品’推向市场,看看市场反应如何。

有很多非常成功的初创企业都是遵循MVP精神的。Groupon这种市值上亿美元的公司,就是MVP的好例子。

创始人安德鲁·梅森(Andrew Mason)在Groupon早期建立了一个简单的WordPress博客,而不是花费资源建立一个‘完美的团购系统’。这个博客定期发布一些关于店铺折扣的文章,折扣只是手工一个一个的发邮件给参与者!后来,他发现这个发布商店优惠文章的博客非常受欢迎,于是安德鲁决定这个想法有市场,然后他开始组织团队开发这个团购系统。

上一个例子中的敏捷模型实际上是试图首先启动一个MVP。MVP引入后,开发者可以根据用户或用户的反馈进一步了解使用情况,并在之前版本的基础上根据实际情况继续改进。

MVP和刚才说的敏捷模式,其实和最近互联网行业推出产品的基本做法一模一样,就是小步快跑,快速迭代。

小步快跑,快速迭代,就是不要想着一次发好产品,而是通过快速迭代来更新,保证每一小步都跑得很快。快速迭代理念支撑的产品开发是一个‘在线-反馈-修改-在线’的过程。一开始要允许不完美,但是通过快速迭代逐渐接近完美。每天能发现一两个小问题并改正,不到一年产品就打磨好了。

另一方面,如果你总是在一开始就努力做全面的布局,每一步都努力做到完美,否则就走不下去。问题是一旦一开始没有考虑或者没有考虑到某一点,到最后一步才发现问题,重新开始的成本和时间成本就太昂贵了。

凯文吗?凯利在他的畅销书《失控》中,有过这样一段话:

例4:用卓越方法写论文

在香港理工大学期间,我听到一位我非常钦佩的老师来到小组,与学生分享如何撰写学术论文。

他告诉我们写论文有两种方案。第一种方案是延迟写作,等想法想好了,模拟做好了,等实验完成,材料都拿到了再开始写。在写的过程中,按照自然的顺序逐章润色,写完一章,再写下一章。

第二个方案是有一点点想法就开始写,甚至这个想法不需要很好。写作过程中,不要打磨语法,最快的时间写出初稿。初稿写好之后,拿给身边的人看,让他们发表意见。然后就知道这篇文章的思路有什么漏洞,如何改进等等。然后,文章以‘快速迭代’的方式修改了很多次。每次修改的时候都会完善思路,模拟,实验,修改语法,这样才能最终打磨文章。

老师说一定要用第二种方法写文章。

现在看来应该是。如果按照第一种方案写文章,可能永远写不出论文。原因是(1)只有你写完了,别人才能给你意见。一旦发现某个观点可以采纳,可能需要重新做实验,做模拟,重新开始,导致时间消耗太长。(2)在写文章的过程中,如果你一章一章的仔细打磨,你可能会发现,后面写的时候,因为需要修改思路或者模拟,前面的很多部分都需要重写,这些精心打磨的部分都浪费了。

其实不仅仅是写科技论文,我觉得这个方法可以用来写任何文章。脸书人工智能研究所智能围棋项目负责人、网络著名科学棋手田远东,在其知乎专栏发表的一篇文章《碎片化时代如何读写》中写下了如下一段话:

这个办法,其实就是尽快写一个MVP,然后迭代完善。从这个意义上来说,一开始快速完成一个MVP比长时间完美完成一个产品重要得多,这也印证了这句格言:

完成比完美更好。

在前面的例子中,我们谈到了用卓越的思想开发产品和写文章的好处。你应该能明白,用精益求精的思想的好处是,后端的用户(或者开发者自己)可以快速得到反馈,快速完成迭代升级。

其实不管开发商能不能完成项目,用精益求精的思想做项目有两个好处。

第一个好处就是安心!在之前的‘例3:最简单可行的产品’中,这可以从CEO对我说的一段话中体现出来:一开始,我们必须做出一个不完美但可用的产品。这样我们心里就有底了。

我心里有底,就是安心。至少在方案上,这个方案是可行的。开发者需要做的是改进这个可行的方案。即使有任何改进不成功,只要退回原版本,至少这个版本可以工作!相反,一步一步做项目,到最后一步才知道这个产品能不能用,压力很大!一旦你不能工作,你可能需要重新开始。这就是优于步步的优势。

第二个好处是即时反馈多。开发者以精益求精的方式提升MVP,每一次提升成功,完成时其实都能获得成就感。一旦获得这种成就感,开发者就迫不及待地投入到下一个小目标中,进一步完善当前版本。

上课的时候我问了学生一个问题。为什么坚持自习不到1小时就要休息,却可以通宵打游戏?

原因是学习的反馈链很长,玩游戏可以得到即时反馈。

《游戏改变世界》这本书揭示了人类会被游戏吸引的深层机制:即时反馈。游戏开发者对此心知肚明。你在游戏中做的任何事情都会立即以视觉和数字的形式显示出来。

不要小看每次怪物脑袋里飞出的数字,不要小看招式的音效,不要小看伤血的红字和附魔的蓝字。它们都为玩家提供了最直观和即时的反馈。

你清楚的知道,如果这次杀死怪物,一定会获得经验值,有机会获得一些宝物。其实及时的反馈让你清楚的知道,你的每一次操作都是有回报的,回报就是操作完成的时候!这就是我们可以通宵玩游戏的原因。

与现实生活中的学习相比,则相反。今天你辛辛苦苦背了50个单词,几乎看不到立竿见影的效果:以前的英文书你还是看不懂,以前听不懂的英语电台你还是听不懂。只有坚持多年,你才会突然发现你的英语水平提高了。但是这个反馈链太长了。

包括英语在内的很多学科,甚至很多技能都有很长的反馈链。比如小提琴和二胡。直到你练的很久很无聊,你弹的声音才不会让人想马上赶你走。他们的努力得不到立竿见影的反馈,这是很多人无法静下心来学习的主要原因。

不禁想起左小祖舟唱的那首《交作业》。

天啊,这个反馈链这么长,回报充满了这么多不确定性。难怪没有交作业的动力。。。。

怎么破?其实核心在于如何缩短这个反馈链。比如背单词的时候,可以引入一个奖励机制或者自我成就机制,比如每完成一个50字的任务就给自己一个奖励,或者在自己完成的任务清单上打一个重重的勾!

另一方面,我们需要训练自己延迟满足的能力。延迟满足是一种克服当前困难,获得长远利益的能力。通俗地说,就是砂砾。毅力和耐力对一个人来说极其重要。

我们今天的收获是: