什么时候必须先下山(When you have to go downhill first)
2026-08-15 · 适应与演化
「每一步都比上一步好」听起来是最稳妥的做事方式。而在一整类问题里,它恰恰是唯一能保证你到不了最好位置的做法——不是因为你走得不够久,是因为你走对了。
你大概经历过这样的事:想换个方向,结果发现新方向头半年干什么都不顺,比原来差远了。于是你退回去了。或者一个用了很多年的工具,明知道有更好的替代品,但一换就得重学,短期内产出直接掉一截,所以年年都说明年换。
常见的解释是意志力不够、或者沉没成本作祟。这些当然存在,但它们把一个结构问题说成了心理问题。真实的情况更冷硬一点:在很多系统里,从一个好位置去往一个更好的位置,中间必然要经过一段更差的地方。这不是运气不好,是这类问题的形状决定的。而"每一步都要比上一步好"这条看起来无可指摘的规矩,正是把你钉在原地的那颗钉子。
上一期讲的是怎么把一群主体放进电脑里跑起来(基于主体建模)。本期换个角度看同一件事:这些主体是在什么样的地形上搜索?地形的形状——有几个山头、山头之间隔多深的谷——决定了"努力改进"这件事到底管不管用。这是接下来几期(演化博弈、共演化)共用的底图。
1932 年,遗传学家 Sewall Wright 想解释一件事:物种为什么不是简单地朝"最优"直线前进。他画了一张后来传遍所有学科的图——把每一种可能的基因组合摆在平面上,把这种组合的繁殖成功率画成高度。地形就这么出来了。他管它叫适应性景观(fitness landscape),高度那个量叫适应度(fitness)。
这张图的力气不在"山"这个比喻,在它强迫你把三件本来含糊的事说清楚:
第一,什么算一个"位置"。一个位置就是一整套配置:生物学里是全套基因,做产品时是全套设计选择,写代码时是当前这版架构。第二,什么算"相邻"。这一条最容易被跳过,却最要命——它规定了你一步能走多远。生物学里通常是"改一个碱基",组织里可能是"改一条流程"。第三,高度是什么。某个可以比大小的量:繁殖成功率、利润、通过的测试数。
三件事定下来,一个动作就有了名字:站在当前位置,看看所有邻居,谁比我高就搬过去,没有比我高的就停。这叫爬山法(hill climbing)。绝大多数"持续改进"的做法,剥到底就是它。
图里只有三个开关,就已经出现了那个要命的现象:从 000 一路往高处走,你会稳稳地停在 011(高度 .71),而全场最高的是 110(.83)。你没走错任何一步,每一步都是当时可选项里最好的。把你挡在外面的不是失误,是"每一步都不许变差"这条规矩本身。
EN A fitness landscape makes three vague things explicit: what counts as a position (a full configuration), what counts as a neighbour (how far one step reaches), and what counts as height (some comparable quantity). Once those are fixed, "continuous improvement" has a precise name — hill climbing — and its failure mode becomes visible even on a three-switch example.
上面那个 011 有个正式名字:局部最优(local optimum)——所有邻居都不比它高的位置。全场真正的最高点叫全局最优(global optimum)。一张地形上局部最优可以有很多个,全局最优只有一个。
局部最优的性质里,最需要盯住的是这一条:站在局部最优上,你从本地信息里看不出自己是不是全局最优。两者的本地感受完全一样——环顾四周,都往下。想知道差别,你要么得看到远处,要么得先走下去试试。
于是"从这里到更好的地方"这件事,就有了一个可以量化的代价。它是两个数:谷底有多深(最差的时候比现在低多少),和谷底有多长(要在低于现状的地方待多久)。这两个数跟"新方案好不好"完全无关——一个明显更优的方案,可能有一道又深又长的谷;一个只好一点点的方案,可能一步就跨过去。
把这两个数拆开看,很多"改革失败"的故事立刻换了一种读法。多数改革不是死在方案上,是死在谷底期的授权不够长——发起改革的人拿到的耐心,比谷底短。而从外面看,谷底期的表现是实实在在的变差,于是"这个方向不行"这个结论,在数据上完全站得住。
启动任何"换一套做法"的事之前,先把两个数写下来:谷底深度(最差的时候比现在低多少,用你已经在看的那个指标)和谷底时长(多久能回到现状水平)。然后问一句:这两个数拿得到授权吗?拿不到就别启动——改做平移:在不拆掉现有系统的前提下另起一条并行的线,等它自己爬过现状水平线再切换。谷底期最常见的死法不是方案错,是中途被自己的月度指标掐掉。
EN A local optimum is indistinguishable from a global one using local information alone — from either, every neighbour looks worse. The cost of moving between them is two numbers: how deep the valley is and how long it lasts. Both are properties of the route, not of the destination, and most reforms die because the mandate is shorter than the valley.
下一个问题就自然了:为什么有的地形只有一个山头(那爬山法就够用了),有的却山头林立?地形的崎岖度(ruggedness)由什么决定?
1987 年,Stuart Kauffman 和 Simon Levin 给了一个干净得出奇的答案 → 参考 · 圣塔菲学派。他们造了一个只有两个旋钮的玩具模型,叫 NK 模型 → 参考 · NK 适应性景观:
N 是系统里有几个部件(比如 20 个开关)。K 是每个部件的好坏取决于另外几个部件的状态。就这两个数。K 就是"相互依赖的程度"。
结论惊人地整齐。K = 0 时,每个部件各管各的,你可以一个一个地把它们调到最好,互不干扰——地形只有一个山头,任何爬山路径都能到顶。K 越大,改动一个部件就会连带打乱越多别的部件的贡献,山头就越多、越尖、越互相隔开。当 K 达到最大(每个部件都依赖所有其他部件),地形彻底随机:局部最优的个数变成 2ᴺ⁄(N+1) 这么多——N=20 的时候就是约五万个。
这件事的分量在于:崎岖度不是命,是你系统架构的一个后果。"我们这儿一动就出事、渐进改进完全没用"——这句抱怨通常被理解为团队能力或者士气问题,但它更可能是一个可测的结构参数在说话。而结构参数是可以改的:拆依赖、定接口、把互相纠缠的部件分开——这些动作不直接提升任何指标,它们做的是把地形抹平,让后面每一次小改进重新变得有效。这与第 3 期讲的"近可分解性"是同一件事的两面:模块化的系统之所以活得下去,是因为它给自己造了一张不那么崎岖的地形。
当"小步优化不管用了",先别加人加时间——先量 K。具体做法:把你要改的东西拆成部件清单,对每个部件问"改它会波及几个别的部件",取平均。平均波及数大于 2、3 之后,任何单点优化都会被别处的退化抵消掉,努力和结果之间的关系会肉眼可见地变弱。这时该做的是解耦(定接口、拆依赖、砍掉跨模块的隐式假设),而不是优化。解耦本身不涨任何指标——它涨的是"以后每一次优化的有效率"。
EN Kauffman and Levin's NK model has two knobs: N components, and K — how many other components each one's contribution depends on. At K=0 the landscape has a single peak; as K rises, peaks multiply, reaching 2^N/(N+1) local optima when every component depends on every other. Ruggedness is therefore a consequence of coupling, and coupling is often something you can change.
既然纯爬山会卡住,那就得允许偶尔往下走。但如果一直往下走,你就只是在乱逛,永远不收敛。这个两难有个名字:探索与利用(exploration vs exploitation)——去看看别处,还是把手里这块地挖深。
最漂亮的解法来自 1983 年三位 IBM 研究者(Kirkpatrick、Gelatt、Vecchi):模拟退火(simulated annealing)。做法是给"接受一个更差的位置"加一个概率,这个概率由一个叫温度的参数控制。温度高时,你相当乐意往下走,因此在整个地形上到处跑;温度低时,你几乎只接受上坡。然后让温度随时间慢慢降下来。
名字来自冶金:金属缓慢冷却时原子有时间排进低能量的规整结构,淬火(骤冷)则把它们冻在乱七八糟的位置上。关键不在"允许变差"这四个字,在降温表——什么时候、以多快的速度收掉容错。
同一个思路在别的地方长出别的形状。→ 参考 · 遗传算法不靠温度,靠重组:把两个各自不错的配置各取一半拼起来,一步跳到很远的地方——相当于换了一套"相邻"的定义,原来隔着深谷的两个山头可能一步就到。多臂老虎机(multi-armed bandit)问题则把这件事收缩到最纯粹的形式:手上有几台老虎机,不知道哪台更好,每一次拉杆都是在"再试试那台没怎么试过的"和"继续拉目前最好的那台"之间选。数学上有一个反复出现的结论:探索的最优比例随着"你还要玩多少轮"上升——剩下的时间越长,越该探索。所以同一个人在同一件事上,年初和年末该有不同的探索比例,这不是心态问题,是算出来的。
把探索写成预算和降温表,不要写成态度。三件具体的事:① 固定一个比例(比如 20% 的时间/资金)投给"和现有做法不相关"的方向;② 给这部分单独设考核口径——考核它排除了多少个方向,不考核它的收益,因为探索的产出本来就是信息不是收益;③ 事先写下降温表:哪个时间点起不再开新方向、把资源收回来。没有第三条的"保持开放"会一直高温、永不收敛;没有第二条的探索预算会在第一个季度被主线的指标同化掉。
EN Pure hill climbing gets stuck; pure wandering never settles. Simulated annealing resolves this with a temperature that controls how willingly you accept a worse position, then lowers it over time — the designed object is the cooling schedule, not the willingness itself. Bandit theory adds a quantitative rule: the optimal share of exploration rises with how many rounds you have left.
适应性景观是复杂性科学里最好用、也最容易被用歪的一张图。它的问题不在于错,在于那张三维小山丘的画面太顺眼了,顺眼到你会忘记它省略了什么。
第一,维度是骗人的。画在纸上的地形只有两个横向自由度,所以每个点只有前后左右几个邻居,山与山之间必然隔着谷。真实的配置空间不是这样:20 个开关就有 20 个方向的邻居,一百万个位置。而在高维空间里,"被谷完全包围"这件事会变得罕见——你往往能找到一条几乎不下降的山脊绕过去。演化生物学家 Sergey Gavrilets 把这个图景叫多孔景观(holey landscape):高适应度的区域在高维里连成一张贯通的网,物种可以一路不下山地分化开。这直接削弱了 Wright 当年那个"必须靠小种群随机漂变跨过谷"的经典论证。
第二,地形本身不是死的。NK 模型跑之前就把所有位置的高度定死了。现实中,别人也在动:你爬到的那个山头,会因为竞争者、监管、客户口味的变化而塌下去,也可能因为别人开辟的路而升起来。这叫共演化(coevolution,第 31 期的正题)。地形一旦会动,"到达最优"就不再是目标,"移动速度"和"到山脊的距离"才是。这也是为什么"我们已经做到行业最好"这句话不含任何关于明年的信息。
第三,高度未必存在。景观假设有一个可以比大小的标量。现实里的"好"通常是几个不通约的东西:快和稳、增长和利润、覆盖和精度。多目标问题里根本没有"最高点",只有一整片谁也不比谁全面更好的解(帕累托前沿,Pareto front)。硬压成一个数——"综合得分"——不是把问题解决了,是把权重的选择藏进了公式里。
第四,历史上这张图本身就有争议。科学史学者 William Provine 在 1986 年指出,Wright 的那几张地形图其实混用了两套互不兼容的坐标(基因型的空间 vs 基因频率的空间),作为数学对象站不住。这不妨碍它作为思考工具好用,但它提醒一件事:这是一个比喻的可视化,不是一个可以往里代数字的模型。凡是听到"我们处在适应性景观的某个局部最优"这种说法,先问一句:你的邻域是怎么定义的、高度是哪个量?答不上来,这句话就只是"我们卡住了"的一种更贵的说法。
顺带说清一件容易混的事:崎岖度也不是地形单方面的属性,它是地形和走法的联合属性。同一批配置,如果你允许"一次改一位",可能崎岖不堪;允许"交换两个模块",山头就少了一大半。所以卡住的时候还有第三个选项——既不是更努力,也不是先下山,而是换一套走法。
用"局部最优"给自己的处境定性之前,把三个空填掉:邻域(一步能改什么)、高度(哪一个具体指标)、地形会不会动(多久重估一次)。三个都填得出,"先下山"才是一个可执行的判断;填不出就别用这套词——那时它不解释任何东西,只是给"我们卡住了"配了一张好看的图。另外,卡住时按这个顺序试:先看能不能换邻域(换走法、换工具、跨界重组),再考虑跳谷底——换邻域通常便宜得多。
EN Four limits. Low-dimensional pictures manufacture valleys that high-dimensional spaces often route around (Gavrilets' holey landscapes). NK landscapes are static while real ones move under coevolution. Multi-objective problems have no single height at all. And Provine showed Wright's original diagrams conflated two incompatible coordinate systems — it is a visualisation of a metaphor, not a model you can put numbers into.
不是,但它的适用范围比通常以为的窄。关键在于你的邻域有多丰富:生物演化里可动的位点成千上万,所以绕路的机会多;而一个组织能同时改的东西往往只有两三样,有效维度极低,谷就是真的谷。所以判据不是"这个系统复杂不复杂",是"我一步能同时改几件事"。这也解释了为什么同一个转型,在能同时动人事、流程与激励的时候是斜坡,在只能动一样的时候是悬崖。
没有一个普适的最优比例——多臂老虎机的最优探索率依赖于剩余轮数、回报的方差、以及切换成本,这三样每个场景都不同。固定比例的价值不在于它最优,在于它把一个会被临时压力吃掉的东西变成了默认值。真正该较真的不是比例的数值,是有没有单独的考核口径和明确的降温时点;没有这两样,写多少比例都会在第一个紧张的季度归零。
本期的机制帮不上忙——景观的形状在事后才看得清,这是它诚实的地方。能做的是事前把判据写死:启动时就写下预期的谷底深度与时长,以及一个反驳条件(如果到 X 时间还没出现 Y 迹象,就撤)。区别不在于你能否预知,在于撤退的标准是在谷底之前定的还是在谷底之中定的——在谷底之中,任何标准都会被当时的痛苦重写。
有,而且不小。降 K 意味着放弃部件之间的协同——高度定制、深度耦合的方案在自己那个峰上往往比模块化方案更高。所以这是一笔明确的交易:用峰的高度换取地形的平滑。当环境稳定、目标明确时,耦合的方案更划算;当地形本身会动、需要频繁重找方向时,平滑才值钱。把它当成一条永远正确的原则,就会在该深耕的时候一直在拆积木。
它意味着卡住的时候有一个常被忽略的第三选项。除了更努力(同一走法)和跳谷底(承受代价),还可以换邻域:换工具、换协作方式、引入一个能一次改动多个部件的手段(比如遗传算法里的重组,或者组织里的"整建制换一个团队来做")。换邻域的成本通常远低于跳谷,但它需要先意识到"一步能改什么"是个可以设计的东西,而不是给定的约束。