当前位置: 积分机 >> 积分机优势 >> 数字化认知运转规则复杂的本质
“光子很轻易达到的光速,在人类看来却遥不可及;人类很简单的一个动作,在机器人看来却难以模仿。
复杂难以实现的“简单”是因为更复杂吗?
而事实上,我们所做的一切,仅仅只是在模仿自然的道路上走出的一小步。在还原世界真象、逼近物理极限上,科学技术哪怕只取得一点点进步,就已经是非常了不起的事情。
人类窥视到造物主的天机,不管是不是故意泄露给我们看的,也已经别无选择,循着指引找到答案吧”
常常有人觉得,自己做的业务并没有复杂度。
一家店每天卖一件衣服,确实没有复杂度,如果是一万件呢?一万件如果是一件一件按顺序卖,复杂度确实也不高,只是工作量大些。
但事实上这只是理想情况罢了。衣服试穿、查找商品、讨价还价、入库出库、退换货品、结账找零都是有可能并发的场景。多加些人恐怕不能够解决这些复杂问题,反而增加了管理难度,使用一些技术手段比如扫码枪、收银机等必不可少。
对于IT行业来说,复杂来自于业务种类多,数量多,响应时间快,稳定无差错,这些都是功能要求,复杂也来自于对性能无止境的追求。有时,技术正是来自于这些复杂业务,而我们也越来越依赖这些技术工具。
但是,所有的事情正在以肉眼可见的速度变得越来越复杂,人类的学习成本也越来越高。
那么到底是复杂成就了技术,还是技术造就了复杂?
复杂的定义
按照复杂学科的解说,一切的复杂起源于简单的叠加,真的如此吗?只怕是忽略了某些条件。
简单的叠加不是单一的线性叠加,形成复杂的基本条件是非线性叠加、受时间空间影响、对初始值敏感等等。
前面提到的“三体”运动,或许是某种代表,但这个复杂程度可能是我们认识问题的局限性带来的,也有可能是我们暂时还没有想到简单方法,说不定我们换一个角度、换一个维度、换一种建模方式就可以很方便的解决这个问题。
解决同样一个问题,相比于复杂解法,我们都倾向于相信简单的解法,简单会带来优雅。
光会走最短路径,我们会选最近的路,花最少的钱,用最简单直接的办法,我们总是从复杂中寻找简洁的美,而常常对世界的复杂多变视而不见,也正是这种对简洁的寻找给我们带来满足,带来快乐。
十四世纪已经有人总结了这样的规律,叫“奥卡姆剃刀原理”,这个原理是“如无必要,勿增实体”,后面我们还会讲到。
关于什么是复杂,先举个例子。抛开载体和时间不谈,一次传递消息总量=2N与分2次传递消息,每次传递N的效率是一样的,我们下意识地知道传递一条消息和两条消息肯定是不一样的,那么差异在哪里?
这里面涉及“还原论”和“整体论”。
还原论提倡“将复杂还原为简单,再从简单重建为复杂”,对以前的物理、化学等学科的发展有很大影响,比如生物分解为分子,分子再分解为原子等等,也是符合人的直观理解的。因为人天生就是喜欢简单,希望将复杂的东西简单化理解。
我们应该还记得微积分的公式教学在一定程度上也是利用的这个思想,分割后取近似值相加。
还原论有其局限性,比如将一个连续的运动分解为离散的、不连续的,忽略了整体和部分的层次差异,想简单的用部分的组合关系来解释整体的运动规律,就相当于是用横向坐标X的运动去计算纵向坐标Y的变化,对因果关系、自然规律的分析自然就偏向了“机械论”,所以有时甚至只能用“概率”来解释。
整体论的核心思想有点类似现在的“黑盒测试”。
将一个复杂的系统当成一个“黑盒”,不关心里面有哪些组件,我只关心什么样的输入会有什么样的输出,通过系统的运转来了解系统功能。
相对的,还原论就比较像软件测试的“白盒测试”。
对里面每个组件、部分的功能都要单独测试,还要测试各个部分的连接功能。
事实证明,“单元测试”和“集成测试”都必不可少。就像“还原论”和“整体论”,没有优劣之分,在做研究或者思考的时候,经常要将两种方法结合使用。
整体论和还原论的矛盾是在复杂度的理解上。
还原论认为“整体小于部分之和”,也就是类似搭积木,我们可以将一个柜子的积木拆掉,换成搭一个沙发。
整体论认为“整体大于部分之和”,在拆解积木的时候,必然丢失了某些整体的信息,比如能不能将一只动物打散为分子后再组合为别的动物呢?
看起来还原论认为分解-组合的过程是完全可逆的似乎更合理一些,但整体论可不这么认为。
有些科学家甚至都会走向还原论的极端,这里又一个物理神兽“麦克斯韦妖”出来了,这个神兽原本是为了对抗“熵增”定理而生的。
幻想这个小妖可以控制容器里一个小门,将热分子和冷分子分别赶到两边,这样就做出了一边热一边冷的永动机了。
这当然是个大脑构想的“思想实验”,麦克斯韦作为电磁理论的奠基人提出的这个问题不会那么简单,所以直到过了年,这个“麦克斯韦妖”的悖论才被证明。
很巧,证明的思路还是跟香农的信息论有关系,麦克斯韦妖需要观测、存储、删除单个分子的热值信息,而改变这个热值信息是需要消耗能量的,会引起熵增,增加的熵值正好等于香农定义的信息熵。
整体论和还原论看到的不一致,就是复杂。
复杂的度量
怎么来定义一个系统的复杂度?
目前对系统复杂度并没有一个明确的定义和度量方式,可以用对象的规模数量、系统的熵值、信息量、逻辑深度、形态维度等等来角度来考量。
我们知道一个封闭的系统是能量守恒的,但是却因为能量的流动,导致系统混乱度在增加,系统的熵也是在递增的。
复杂度与系统熵增总量成正比,又可以反应熵值变化的快慢程度。复杂度越高,熵变化越慢,反之复杂度越低,熵的变化就越快。
还是拿上面的热力学容器做例子,一边是度的热水,一边是0度的冷水,系统模型的复杂度低,中间部分冷热能量传导快,也就是熵增的快;如果容器两边水的温度慢慢均匀递减的,或者不那么均匀,那么整个系统冷热能量传导就会比较慢,熵增加的也慢。
如果我们认为处理复杂度就是一个处理熵的过程,那么似乎可以将系统复杂度与能量和熵值给关联起来,能量消耗的越多,熵增加的越慢,复杂度就越高。系统复杂度还跟参与的对象有关系。
先看一个简单的系统模型,这个系统的功能是对象A和对象B之间需要传输消息量为2N的一条消息:
第一种情况是A和B之间发送一个消息,消息量是2N;第二个情况是A和B之间分两次发送了消息,每个消息量是N;第三种情况是A和B中间需要有个C作为中间人,中继转发这个消息;
先看第一个系统需要消耗的能量:
系统1总能量=(A发送2N的能量)+(单次传输2N的能量)+(B接收2N的能量);
第二个系统需要消耗的能量:
系统2总能量=((A拆分2N为N的能量)加上2(A发送N的能量))+2(单次传输N的能量)+((B组合N为2N的能量)加上2(B接收N的能量));
第三个系统需要消耗的能量:
系统3总能量=(A发送2N的能量)+(单次传输2N的能量)+(C接收2N的能量)+(C发送2N的能量)+(单次传输2N的能量)+(B接收2N的能量);
假定处理、传输信息消耗的能量是线性相加的,那么:
能量差(系统2–系统1)=(A拆分2N为N的能量)+(B组合N为2N的能量);
能量差(系统3–系统1)=(C接收2N的能量)+(C发送2N的能量)+(单次传输2N的能量);
与我们的正常理解也一致:一句话直接当面讲最简单,要是拆成两句说,或者找别人来转述,总是会更费事。
系统2和系统3是用最简单的模型来展示复杂度的增加会在哪里呈现。
第一个是在信息的组合、拆分上。
比如我们看书,书的每一页就是内容的拆分,我们需要翻书才能将继续阅读书的后面内容,分页印刷和翻书就是一个组合拆分的消耗能量的过程,如果有书可以不用翻页而能从头看到尾,那该多好!
第二个是在消息的中继上。
中间人C甚至需要承担系统1的全部能量。《快乐大本营》的“心有灵犀”节目不知道大家看过没有,应该很多人都玩过,就是前面一个人比划,后面的人猜,猜出来再比划给后面的人,依次向后。所以中间的人消耗的能量最多,需要先猜,然后再比划。
在传递相同信息量的情况下,分批传输、分阶段传输都会增加额外的能量,导致熵增加的比较快,也就是提高了系统复杂度。
有没有方法可以优化系统2和系统3,减少复杂度或者降低能量消耗呢?
我们试着改造一下系统2和系统3,形成系统4:
系统4做了什么改造?
系统4的虚线框提供了一个功能模块M,毫无疑问,M模块是一个新技术。它的主要功能是将系统2和系统3相对于系统1增加的功能组合起来。
A只需要关心发2N消息给B,至于中间要不要拆分多条消息,由M模块的M1功能来实现;要不要由其他人转发,由M模块的M2功能来实现;B也只管收消息。
有没有减少复杂度,我认为是没有,只是将原有的系统2和系统3的复杂度转移到M隔离起来,这就是M这个新技术的作用。
复杂的来源
对复杂的定义和来源,目前众说纷纭,还无法在认识论上达到统一,从生物角度研究的生命复杂度的来源是进化或生长,因为生命系统可以自我复制、遗传、变异,其他系统是否也具备这样的属性呢?我们能不能借鉴生命系统来理解其他系统的复杂度?这个一直是哲学、复杂学研究、争论的话题。
古希腊哲学家赫拉克利特告诉我们:“人不可能两次踏进同一条河流”,我们的学习总是让“今天的我比昨天的我更好”,都是在说同一个道理:所有的事物都是在变化、发展、进化,前提是基于“昨天的我”,而并非是“新造一个我”。
兼容老版本让我们承担了多少历史的痛。
这是不是意味着其实世界是确定性的?只是因为我们掌握的信息太有限,观察到的信息被时间、空间所局限,所以无法对系统规律进行科学的描述。
我们知道对于逻辑斯蒂、斐波那契数列这样的递推公式来讲,只拿到中间任何一段是没有任何意义的,因为没有初始值就无法推导出真实的规律,也就无法推导下一个值。
我们对世界的理解只能基于假想实验、归纳总结和演绎推理,科学研究总是只有这么几种方法,这也就是我们为什么永远都期望可以寻找到“宇宙的起源”。
举一个数学上的经典例子:
把一个正整数代入多项式f(n)=n7-28n6+n5-n4+n3-n2+n-,我们总可以得到原来的正整数。那么可以证明:对于任意正整数n都有f(n)=n。
这是真的吗?显然,我们可以代入几个正整数看一看有什么结果。
当n=1时,我们得到f(1)=1-28+-+-+-=1,显然公式成立。如果我们代入n=2,计算结果为f(2)=27-28×26+×25-×24+×23-×22+×2-=2,这一次公式仍然成立。我们拿出计算器,验证一下f(3)=3,f(4)=4,f(5)=5,f(6)=6,甚至f(7)=7。
这个证明似乎是对的了。有些人,或许已经相信了。但是,它不是真的。
代入n=8时,我们得到f(8)=87-28×86+×85-×84+×83-×82+×8-=,结果不是我们期望的8。进一步的计算表明f(9)=,f(10)=,f(11)=,所以这个公式不仅失败了,而且错得离谱。对于由n=1,2,3,4,5,6,7时都为真得出n为任意正整数时都为真的猜测实际上是不正确的。
我们把下面这个表达式展开并合并同类项,就可以得到刚才讨论的多项式:
f(n)=n+[(n-1)(n-2)(n-3)(n-4)(n-5)(n-6)(n-7)]。
显然,对于n=1,项(n-1)为零,因此方括号中的所有乘积都为零;因此f(1)=1+0=1。如果n=2,那么n-2=0,所以f(2)=2+0=2。类似地,f(3)=3+0=3,一直到f(7)=7+0=7。但是这之后括号里的项不再是零,例如f(8)=8+7!=。
这引出下面这样一个富有挑战性的扩展命题。
假设我们引入g(n)=n+[(n-1)(n-2)(n-3)…(n-0000)],并猜测对于所有正整数n,有g(n)=n。
我们做乘法且合并g(n)的项,就得到一个一百万次的公式。通过与上面完全相同的推理,我们将发现g(1)=1,g(2)=2,一直到g(0000)=0000。
在发现了一百万个连续正确的证据之后,任何思维正常的人都会怀疑公式g(n)是否总是产生n。对于任何人——除了数学家之外,一百万次连续成功都等同于排除了所有值得怀疑的证明。然而,再接下来验证一下,g(0001)实际上等于0001+0000!,这个数非常大,显然超过0001。
我们对世界的认知,只是都在这一百万次验证之中吧?
所以爱因斯坦才说:“这个世界最不可理解的就是它竟然是可以理解的”。
复杂度如何变化
一个独立的系统,与外部没有任何能量交互,复杂度会变化吗?
我认为是不会变化的,就像宇宙发展的最终归宿一样,要么变成奇点,要么均匀分布。
如果宇宙是一个独立的系统的话,也不会有谁能加快或缩短这个进程。
当然有很多学术上认为我们包括所有的一切正是宇宙不对称的产物,所以宇宙必将走向奇点,然后再次大爆炸,但是为什么不对称的目前科学界还没有人可以讲的清楚。
把宇宙的起源和归宿先放在一边,回到我们对系统复杂度的问题上来。
系统自身的能量越多,与外部交换的能量越频繁,复杂度就会越高,其来源主要有两方面:
第一个是被动原因,为了适应外部的环境变化。
在这个情况的分析适合用整体论。面对外部不同的环境,系统会表现出不同的特性。
这里拿蚁群的行为举例就非常合适,蚁群在搬家建巢的时候的集体行为,在捕捉猎物时候的集体行为,甚至在洪水来的时候,蚁群还可以抱团过河,这些群体的复杂行为导致了在不同的环境下系统具有对外的不同特性,可能都是为了吸取外部系统能量,维持系统熵减的目的。
可以参考AdrianBejan在提出“构造定律”(constructallaw),讲的非常类似,他认为一个系统存在的前提是系统必须以最容易的方式与外界交换能量,同时将自身的能量消耗降到最低,进化也就是进行重组以便形成更高效的结构。当然这个理论还有很多缺陷和矛盾,也无法量化论证,所以并没有被大家所承认和肯定。
第二个是主动原因,系统为了对抗熵增做的组织结构优化调整。
这个情况适合用还原论分析。系统会将部分进行重新排列组合。
尽管最初的根因还是为了适应外部环境,但是一次的吃树叶不会导致长颈鹿脖子马上变长,偶尔锻炼一次我们的肌肉也不会马上增大。
生物进化的基础是基于“老版本”,组织结构不是新生长出来,而是在原有版本上“更新”。
我们不管是做组织调整、软件版本升级都是一样,升级老版本要考虑兼容性,说不定还要支持回退,所以升级比新建复杂多了。
再来看系统部分功能的升级会到什么程度。先来看摄像头,和我们的眼睛脖子一样,摄像头角度有度,跟我们眼睛一样,摄像头的旋转云台就跟我们的脖子一样,所以为什么摄像头不是度不旋转的?当然现在有类似的球机,几个摄像头拼起来的。我们的眼睛为什么不能进化为同时看上下左右?肯定是我们的大脑处理不过来。
在系统内部,复杂度作为调节能量交换、组织结构等行为的一个系统参数的参考,也是有限制的,复杂度的增长跟动物植物的生长一样,缓慢而不间断。
如何应对复杂
系统的复杂度是客观存在还是由我们认识的主观能动性决定的?
涉及到复杂的本质是存在论问题还是认知论问题,又是个哲学问题了。暂时我们就认为复杂度作为系统的一个客观存在的物理属性。
比如系统的组件部分就是很多,各个部分可能独立也可能有相互关联影响,系统也会随时间做非线性变化等等,大家对同一个系统复杂度的认知上很容易就可以达成一致。
流水线技术
比如流水线,很多人认为只是生产模式的变化,但是被公认为现代社会最伟大的技术发明之一。
流水线虽然最早不一定是在美国出现,但是福特的创始人亨利·福特是第一个把它实践并推广起来的。年,第一条流水线在高地工厂诞生,是汽车生产的一个里程碑时刻。
以前的汽车生产,是工人们将一个又一个的零件组装起来的,每个工人都必须要熟悉每个环节,哪个零件装在哪里,怎么装等等。
在使用了流水线后,每个人只需要复杂其中的一个环节,生产效率大大提高,福特车底盘的组装时间从12个小时降低为1个半小时。
当然现在流水线在一定程度上已经不是高产能的代表,而是变成了资本家剥削工人的象征,流水线上单调重复的劳动麻木了工人。
卓别林的《摩登时代》就讽刺了流水线对工人的迫害,当年也是轰动全球,引人深思。
流水线技术的核心功能是将复杂的制造过程拆解为一道道工序,再通过分工,使只具备简单技能的工人就能完成。
试想一下,一辆汽车有几千个零件,每个零件算一个安装动作至少也有几千个,还没有算上零件的搬运、拿取等动作,还有几千个工序的顺序,如果让一个人来完成整个汽车的安装,肯定是超级复杂难以完成的。
流水线抽取了原有存在于设计图纸、工艺说明、操作规范等内容,合并为管理“工序的顺序”这个独立功能,现在也可以称为“工艺路线”或者“工艺路径”。
将“工序的顺序”这个问题交给“流水线技术”去集中处理,没有减少复杂度,只是进行了复杂度“隔离”,也可以叫复杂度“转移”,也就是俗话说的“把专业的事情交给专业的人去做”。
流水线不是一个通用技术,在小作坊式生产就没有必要。需要有足够大的市场,才有提升产量的需求,提升产量会存在大量的重复劳动,所以才会对生产效率的提升有进一步要求。
用简单的数学知识更好理解,流水线对原有工艺的改造就是乘法分配律里面的“合并同类项”法则。
一辆车如果由a、b、c三个工序组成,生产N辆车需要的总工序是(a+b+c)xN,可以等于N个(a+b+c)相加,也可以等于Na+Nb+Nc。
需要注意的是,这里只能用加法不能用乘法。
对于我们人类而言,同一个数的累加总比不同的数相加计算起来要容易些,计算a+a+a比a+b+c要简单些。
从流水线这个例子可以看出,系统的复杂度是不能被消灭的。
应对复杂度的方法
我们作为系统外部观察者,可以在一定程度上通过一些手段更简单的认识一个复杂的系统。比如重新排列组合系统的部分,将实现相同功能的模块合并;将模块之间的组合关系统一管理,提供统一的通讯、控制等交互模式。
技术的主要功能正在于此:复杂度的识别、提取、隔离。
系统的管理,本质上也是一个复杂度再分配的手段。
联想到企业CIO的一个很重要的职责认知就是:通过数字化技术,将复杂度呈现出来,帮助企业管理人员更好的调节(包括了识别、提取、隔离)系统复杂度。
应对复杂度有多个解法,可以通过管理手段来实现,但是一般来说技术总是会参与其中。有三种方法:
模块组合:按照业务场景将一些关联业务模块组合起来,对外呈现为一个专业的领域、部门,提供统一服务;
功能下沉:将业务功能分解,抽象出例如资源类、引擎类、基础设施类等基本功能,作为公共支撑服务被其他功能所依赖;
流程重构:将业务功能分解后的共性或者相似的部分合并,作为一个新的模块独立提供功能。比如流水线,就是将工艺顺序和执行作为一个生产过程牵引模块。
这些都是程序猿常用手法,看起来格外亲切。
怎么来看效果?
主要看外部业务增加时,系统复杂度随之增加的分布情况。
比如复杂度增加是不是随着外部业务的增加呈现线性变化,资源类模块有没有受影响,业务流程有没有变化,等等。
具体表现为:
结构化。在高层次看是不是逻辑变简单了,业务流程是否清晰;
标准化。对于外部业务、需求的变化,是不是能很快按照既有流程分解为变化部分和不变部分,从而驱动实现;
单元化。复杂度模块的松耦合,模块内部的调整、替换不会影响整体业务流程;
成本化。不要兼容过多的“不明确”的复杂度,聚焦于现有的已经明确的复杂度问题。
对个人的启示
现在的社会、企业都是流水线式的生产活动,人类历史在不断走向工业化、自动化。
在流水线式的“打螺丝钉”工作上,人们从事的都是重复性的低价值劳动,从很早前我们就在猜测,有多少工作会被机器人、AI所取代,有多少人会因此而失业。
机器比人更擅长重复性工作,那么我们除了恐慌还能做什么呢?
回过头看一下自己的工作,是不是随时可以被取代、被“合并同类项”?
通过分析技术与复杂度的关系,我们可以得到哪些启示呢?
我们跟机器相比的优势是:我们人类可以自我进化,有思维,可以处理简单问题,也可以处理复杂问题,还有将复杂问题简单化的能力。
我们首先要提高对系统复杂度的认知。识别哪些复杂度是可以被降低的,哪些不可以;知道哪些技术可以用来转移复杂度;知道复杂度会带来哪些问题,怎么解决;知道什么样规模的系统应该有什么样程度的复杂度;
其次,我们要跟随系统的复杂度,向着复杂度增加的部分也就是新技术方向发展。人可以操作机器,更可以掌控复杂度。我们要做的是主动拥抱变化,甚至可以自己创造新技术来制定复杂度变化规则;
另外,还要扩展自己的复杂度,增加自己在系统内的复杂度占比。就算是简单工作,懂得越多也是越好,毕竟不可能所有的工作都被机器取代。日本的“精益”思想就要求流水线员工经常轮岗,掌握多种技能,一方面可以对产品生产有全局意识,另一方面也避免了工作的单调。
结论
1系统复杂度来源于外部,外部需求不复杂,也就没有复杂度;
2系统不变,那么有降低系统复杂度的地方,必然有增加系统复杂度的地方;
3通过组件模块的排列组合来调整复杂度的分布,是管理;
4帮助我们识别、提取复杂度,把复杂度转交给专业的模块集中处理,是技术。