
1. 当算法开始替我们决定明天我却越来越不安这一两年我明显感觉到一个变化身边几乎所有App都在做同一件事——预测。刷短视频算法预测你下一秒想看什么打开购物软件算法预测你的消费欲望甚至新闻客户端都在预测你关心什么、愤怒什么、愿意为什么停留更久。再往深了说还有健康监测手表预测你的睡眠和压力理财软件预测市场走势招聘网站预测你的职业路径。算法试图把未来打包成一份精确的说明书塞到你手里。作为一个常年和数据打交道的人我理解这种趋势背后的逻辑。机器学习算法、深度学习算法、强化学习算法本质上都在做一件事从历史数据中提取规律然后外推到明天。推荐系统是最典型的例子——它把你过去的行为当作训练集建立一个你接下来可能喜欢什么的模型然后不断用新数据修正。这套机制确实高效也让很多产品的体验变得极其顺滑。但问题在于当预测算法从提供便利变成替你做决定当我们的时间线被安排得明明白白、每个选择都被模型预先筛过一遍我开始产生一种隐约的抗拒。这种感觉不好描述直到某天傍晚我在小区绿化带里看到一只松鼠。它嘴里塞满橡果腮帮子鼓鼓的爬到树杈上把果子一个个藏进树洞里又跑下来继续找。它没有计算冬天还有多少天没有评估果子的热量值分布甚至没有给自己的行为做一个投资回报率分析。它就是藏把当下能找到的每一颗果子安放妥帖。那一刻我突然明白我对算法的抗拒感来自哪里——算法一直在试图预测未来而我只想像松鼠一样把当下藏好。松鼠的行为模式和算法思维形成了非常鲜明的对照。算法追求的是全局最优解松鼠做的却是局部满意解算法试图用海量数据推演变幻莫测的明天松鼠只用最简单的策略应对必然到来的冬天。今天这篇文章我想把这个对照拆开揉碎了聊一聊。我会从算法世界的几个底层特性出发谈谈为什么预测未来这件事本身存在天花板又为什么藏好当下这种看起来不够聪明的策略反而是普通人对抗不确定性最稳的那条路。适合正在被各种算法焦虑裹挟的从业者也适合每一个觉得生活被算得太满的人。2. 我眼中的算法预测有一个绕不过去的总前提很多人对算法预测的信任建立在一个模糊的信念上数据足够多、模型足够强未来就足够可预测。这个信念不能说完全错但至少被简化了。算法预测能成立是需要前置条件的而这些条件在真实世界里往往千疮百孔。2.1 预测算法最核心的假设未来会重复过去几乎所有预测型算法从线性回归到深度神经网络都有一个隐性的共同假设——历史数据中蕴含的规律在未来依然成立。统计学里把它称为平稳性假设机器学习里叫独立同分布假设。换句话说模型之所以敢预测明天是因为它见过足够多昨天默认明天的世界和昨天相似。这个假设在封闭系统里成立。比如你写了一个冒泡排序算法的C实现输入一组乱序数组算法可以非常确定地告诉你多少轮之后数组会变有序。因为排序算法的执行环境是确定的时间复杂度和数据规模的关系是可解析的。但现实世界是开放系统尤其是涉及人的行为、社会情绪、商业环境的时候变量之间根本不存在稳定不变的规律。今天有效的相关性明天可能彻底失效。举个例子。2020年之前几乎所有旅游平台的推荐算法都是用历史出行数据训练出来的。但谁能想到一场突如其来的变化让整个旅游业的数据分布瞬间断裂此前学到的规律全部失效模型输出的预测结果变成了彻头彻尾的噪声。这不是算法工程师的失误而是世界的本质属性——非平稳。你在今天训练的模型永远是在拟合过去而未来并不保证延续。2.2 数据只是历史的投影不是未来的蓝图第二个前提是过去的数据足够完整地代表真实世界。但这个前提也很脆弱。数据在采集的时候就被筛选过你看到的推荐记录只是用户真实行为中很小的一部分数据在标注的时候就被污染过人对标签的理解存在偏差数据在存储的时候就被清洗过异常值和缺失值已经被静默处理。这些环节叠加起来模型学习到的并非真实世界的规律而是数据采集流程的规律。就像你用一堆积木搭了一个城堡然后拍了一张照片根据照片里的像素去推断城堡的结构。照片固然包含了大量信息但光影、角度、遮挡都让像素和实物之间存在系统性偏差。算法预测未来的时候用的恰恰是这种带偏差的照片级数据。所以我一直觉得预测算法给我们的不是未来的地图而是一张过去的高清照片。照片很清晰细节很丰富但它永远是静止的、局部的、经过取景框裁剪的。用这样的素材去规划明天本质上是一种高级的刻舟求剑。2.3 预测得越精确系统越脆弱还有一层容易被忽略的隐患当一个预测模型被大规模应用之后它的预测行为本身会改变系统的走向从而让预测失效。这在算法领域有个专门的说法叫自我实现预言或者对抗性动态。比如一个短视频平台预测你爱看某类内容于是拼命给你推你的确看了很多然后模型进一步强化你喜欢的判断推得更多。到最后你会发现自己看到的已经不是世界的真实样子而是算法根据你的偏好创造的一个信息茧房。这个茧房里的数据反过来又成为模型的训练数据形成一个闭环。这个时候所有基于这个闭环数据的精准预测都只是在一个不断缩小的回声室里打转。松鼠从来不干这种事。它不会因为昨天在某棵树下找到了果子就断定这棵树明年还会结果。它也不会把自己藏在树洞里的果子作为之前成功过的证据然后加大在那片区域的搜索力度。它每个秋天都重新去找每个树洞都分散存放。这种看似低效的策略反而让它的生存系统具备了极强的鲁棒性——就算某棵树被砍了、某个树洞被别的动物掏了它还有其他的储备不至于饿死。3. 从A*到模拟退火算法自己也在教我们敬畏未来如果你觉得上面这些说法只是空泛的哲学探讨那我换一个更硬核的角度——算法设计领域里那些被反复验证过的经典结论其实早就告诉我们预测完美未来有多难了。这些结论不是鸡汤是数学和工程实践反复打磨之后留下的东西。3.1 过拟合当你过于努力地拟合过去你就看不见未来了机器学习里有一个非常基础也极其致命的坑——过拟合。所谓过拟合就是模型在训练数据上表现极好准确率逼近百分之百但一到新数据上就溃不成军。原因很简单模型把训练数据里的噪声和偶然细节也当成规律学进去了它的复杂度已经超过了真实规律本身的复杂度变成了一个死记硬背的机器。我见过太多人活成过拟合状态。他们太善于总结过去的经验把某一次成功的原因归结为某个细节于是拼命优化这个细节。结果环境一变原来的最优解变成了彻底的错误。这不怪他们因为人脑天然追求确定性我们喜欢一招鲜吃遍天的规律总结喜欢把自己的人生建模成一套可以复用的方法论。但真实世界最不缺的就是干净利落的规律它充斥着噪声和偶然。松鼠就很会避免过拟合。它从不在同一个地方藏完所有果子也不会因为某个地点曾经藏过十颗果子就坚持只在那里藏。它的策略是分散存放每颗果子都独立判断。这样即便某个地点的训练数据出了问题损失也只是局部的一小部分不会影响整条生命线。3.2 全局最优是奢侈品局部最优才是日常再谈谈优化算法。粒子群算法、模拟退火算法、遗传算法这些启发式优化算法的诞生本身就是人类对找不到全局最优解这一事实的妥协。现实世界里的很多问题搜索空间庞大到无法穷举全局最优解存在于理论上但实际计算时根本不可能触及。所以工程师们设计出一类算法它们不追求全局最优而是接受足够好的局部最优解。模拟退火算法的思想很有启发性——它受到金属退火过程的启发。在高温阶段系统有很高的随机性允许接受比当前状态更差的解从而跳出局部最优的陷阱随着温度降低接受劣质解的概率逐渐减小系统慢慢收敛到某个较优状态。这个机制里有两点特别有智慧第一它承认当前看起来最好的不一定是真正最好的所以需要不确定性来扰动第二它接受最终得到的是较优解而非最优解因为对大多数实际问题来说够好就已经足够了。把这种思维放到个人生活里你会发现很多焦虑是不必要的。我们总想通过算法预测找到人生的最优路径想精确计算出哪个选择在未来五年回报最高。但正如模拟退火揭示的那样这类全局最优解在复杂的现实环境中基本是算不出来的。你能做的是在当下可选的范围内选一个足够好的方向然后边走边调整。松鼠就是这么干的——它不需要知道整个森林里哪棵树结的果子最甜只需要在附近找到足够多的好果子藏够过冬的存量就行了。3.3 启发函数再好也要一步一个脚印地走A算法是我个人非常喜欢的一个寻路算法。它的核心思想是在搜索路径时用一个启发函数来估计从当前节点到终点的剩余距离从而引导搜索方向避免盲目探索。启发函数设计得好搜索效率可以大幅提升设计得不好也可能把搜索引向错误的方向。所以A算法里有一个关键要求启发函数必须满足可采纳性——它估计的代价不能超过真实代价否则算法会得到一个次优路径。把这个思想放到预测未来的语境里你会发现一个有意思的隐喻A*算法虽然会参考启发函数的估计但它的搜索过程仍然是一步一步走出来的每走一步都会更新当前节点的真实代价绝不会仅仅依赖全局估计就跳过中间路径。换句话说算法自己都知道再好的未来估计也代替不了此刻脚下这一步的实际推进。反观我们很多人却总想跳过低效的当下直接扑向预测中的美好未来。稍微对照一下就会发现这种思维连A*算法都不如。好的预测应该是指导你迈出下一步的路标而不是让你一屁股坐到终点站的传送门。4. 像松鼠一样藏好当下一套更稳的日常策略聊了这么多算法原理是时候说回正题了——到底什么叫像松鼠一样藏好当下如果把藏当下拆解成一套可执行的日常策略它的核心可以归纳为降低预测依赖、增加冗余储备、优化局部动作。4.1 降低预测依赖别让推荐算法替你划重点我自己试过一段时间的信息戒断实验。具体做法很简单把手机里所有App的个性化推荐都关掉改为手动搜索、手动关注、手动订阅。刚开始非常不适因为信息获取效率断崖式下降。以前是打开App就有算法喂给你的内容现在得自己花时间去挑、去筛、去判断。但坚持了两个月之后我体会到明显的回报。第一信息的主权感回来了。同样一条新闻或者一个技术观点算法推荐给我的版本和它不想让我看到的部分会形成一个认知缺口。当我主动搜索时这个缺口被自己补上了。第二焦虑感降低了。推荐算法本质上是在做注意力拍卖它把最刺激、最能唤起情绪的内容推到你眼前因为它预测这样的内容能让你停留更久。但停留更久不等于更有价值。关掉推荐之后我发现自己对热门话题的敏感度下降了同时对真正关心的问题的专注度上升了。如果你也想试试降低预测依赖我建议不用一刀切可以先从三个场景入手把短视频App的推荐页换成关注页、把新闻App的推送通知全部关掉、把购物App的猜你喜欢从首页移除。坚持一周你会明显感受到注意力的冗余空间回来了——就像松鼠的树洞里多出了几个空位可以放自己真正选的果子而不是算法硬塞给你的果子。4.2 增加冗余储备为自己建立离线缓存区计算机系统设计里有个经典原则——缓存。凡是频繁读取的数据都会在本地留一份副本避免每次都去远端请求。缓存的存在本质上是用空间换时间用冗余换稳定。这个思路映射到个人生活里就是建立自己的能力缓存区和资源缓存区。什么叫能力缓存区就是那些和当下主线任务无关但关键时刻能救命的技能。比如一个算法工程师除了熟练调参、训练模型是否具备手工特征工程的能力是否理解数据清洗背后的各种边界条件是否有能力用最朴素的规则系统快速搭一个baseline这些能力在平时看起来不够高级但在数据稀缺、算力受限、模型失效的时刻它们是可以直接从本地调用的缓存。松鼠不会在秋天只练爬树摘果这一个技能它还会磨牙、会辨认天敌、会给多个树洞做标记——这些都是它的能力缓存。资源缓存区则是更显性的东西——存款、人脉、知识库、好的睡眠、规律的运动习惯。这些东西不会立刻转化为某个预测模型的输出但它们构成了你对抗不确定性的基本盘。当算法预测失灵、计划被打乱、环境突变的时候缓存越厚你的容错空间就越大就越不需要在慌乱中做出糟糕的决策。我给自己定的红线是每月工资到账后先存一笔固定比例的钱雷打不动。这笔钱不用于任何消费纯粹是一张不可预测日的通行证。从算法视角看这笔钱的机会成本可能很高不能拿去投资理财滚动增值但从松鼠视角看树洞里必须先有粮心里才不慌。4.3 优化局部动作把下一步走好而不是把终点算完美控制论里有一个非常基本但极其重要的算法——PID控制算法。它的核心思想是根据当前误差、误差的累积和误差的变化趋势计算出一个控制量去调整系统的输出。PID算法不预测遥远的未来它只关心此刻的偏差然后做一个局部的、即时的修正。这个算法在工业控制领域用得极广温度控制、速度调节、自动驾驶的辅助系统里都有它的身影。PID算法最让我感慨的地方是它的即时性。它不需要知道目标值什么时候达到也不需要计算到达目标的最优路径它只是持续地做三件事看现在差多少看以前差了多少看差的变化快不快。基于这三个指标给出一个当下最合理的调整量。然后循环往复。普通人面对生活时也可以采用类似的控制策略。与其花大量时间去做一个长达五年的人生预测模型不如建立一个季度检视-月计划-日执行的即时反馈循环。每天睡前问自己三个问题今天的方向偏了吗最近的偏差在累积吗变化的速度是减缓还是加速了然后基于答案做微调。这种局部优化看起来不像全局规划那么雄心勃勃但它胜在稳定、可持续、随时可纠错。很多搞算法的朋友可能会觉得这种策略太没有想象力了。但你想过没有那些看似酷炫的全局最优方案往往需要精确的未来预测做支撑。而一旦预测偏差超过容忍范围全局方案就会迅速崩塌。反而是PID式的局部控制无论环境怎么变都能稳住基本盘并在适应中一点一点逼近目标。松鼠的每一个藏果动作都是典型的PID行为——它看到一颗果子决定藏起来然后继续找下一颗反复执行。没有宏伟蓝图但一个冬天过去了它活下来了。5. 不是全盘否定算法信任模型与信任直觉的边界写了这么多像松鼠一样并不是想说算法预测是坏东西更不是要大家退回原始社会远离科技。这样非黑即白的态度本身就很不算法——真正的算法工程师都懂得任何一个工具都有适用的边界条件。抛开边界谈性能那是外行才干的事。5.1 确定性强的领域请放心交给算法有些场景下算法预测是极其可靠的因为我们面对的几乎是封闭系统。比如气象台用数值模型预测24小时内的天气准确率相当高因为大气动力学有清晰的物理方程约束比如用深度学习算法做图像分类在已有海量标准数据集的领域如垃圾邮件识别模型的判断稳定可靠再比如经典排序算法的时间复杂度无论是快速排序还是归并排序复杂度分析是数学定理级别的确定结果不需要概率解释。在这些领域大胆用算法预测比你拍脑袋靠谱得多。我们反对的从来不是算法本身而是把算法预测无边界地滥用在开放、非平稳、反馈复杂的系统里。认清这个边界你才能真正享受算法带来的红利又不会被它的幻觉反噬。5.2 高不确定的场景请练习放下模型反过来当面对的对象涉及复杂的人类意图、情绪、关系、创造力或者系统环境高度开放、快速变化的时候算法的预测能力会急剧下降。这不是说模型不够好而是问题的本质决定了它不适合被建模。你要是让算法预测一个人两年后会不会喜欢现在这个工作它给出的置信区间宽到没有参考意义。这种时候我更愿意相信松鼠式的直觉和就地应变。什么叫就地应变就是把手头的事情做好把眼下的关系维护好把这一周能掌握的知识学扎实把这一顿能做的饭做香。这些动作不需要预测未来它们本身就是最好的对未来的投资——因为未来是由这些当下堆积出来的而不是由一个精确的数学模型浇筑出来的。我个人的判断标准是当一个问题可以通过明确反馈迅速验证时信任算法当一个问题几乎没有反馈或反馈周期极长时信任直觉和健康的储蓄策略。前者的典型例子是天气预报和代码调试后者的典型例子是职业选择和环境变化应对。用这个标准去校准你的决策逻辑你会发现生活一下子清爽很多。5.3 给自己留一个永不联网的时间片最后我想和你分享一个非常具体的实践技巧。无论你有多么依赖算法工具我强烈建议你每天留出一个固定的、完全不被推荐系统触碰的时间片——不需要很长半小时就够。在这个时间里不做任何浏览不听任何个性化推荐不看任何榜单和热搜。可以散步、冥想、写日记或者单纯地发呆。这个时间片的意义相当于计算机里的离线模式。它让系统暂时脱离云端回到本地运行。你会重新启动自己内置的、被长期搁置的感知能力——比如你真正喜欢什么、真正需要什么、最近有哪些情绪被算法忽略了。这些信号在平时可能完全淹没在信息流里但当你不联网的时候它们会慢慢浮出来。我第一次尝试这个做法的时候非常不习惯总觉得空出来的半小时应该用来做点有用的事。但坚持了一两个月我发现那个时间片里冒出来的思路和想法往往比我在网上精心挑选内容时更有价值。就像松鼠在藏完果子之后趴在树枝上发一会儿呆——它对森林的感知不依赖于任何预测模型而是来自长期的、安静的、直接的接触。这种接触恰恰是算法无法替代的。6. 我给自己写的松鼠主义算法伪代码文章写到这里我不太想用传统的总结来收尾因为这种话题一旦开始总而言之就失去了原本的张力。我更愿意把一个真正有用的东西留给你——我给自己设计的一套松鼠主义决策模型严格来说它不是传统意义上的算法而是把算法思维和松鼠行为融合起来的一套生活策略。# squirrel_mode.py - 个人生活控制策略 # 核心思想不追求全局最优预测只保证当下的局部优化与冗余储备 def 每天(): 上午先做最重要的那件事优先级最高不被信息流干扰 中午留30分钟离线时间不刷手机不看推荐 下午遇到新信息时问自己三个问题——它预测的是什么 它可靠吗如果预测错了我的损失是多少 晚上复盘今天的3个偏差调整明天的1个动作 def 面对新机会(): 评估条件 1. 最坏情况我能承受吗 # 模拟退火先看风险下限 2. 这个选择是否增加我的缓存储备 # 松鼠视角粮仓 3. 如果两年后回看这个选择还成立吗 # 反过拟合避免死记当下 全部通过才考虑投入 def 面对不确定(): 不试图精确预测而是设置冗余度 - 财务上保持6个月以上的固定支出存款 - 技能上每年学一个与主线无关的小技能 - 关系上定期维护那些没有功利回报的朋友 - 心态上接受结果低于预期但不接受自己停止行动 def 拒绝(): 所有让你必须现在决定否则就来不及了的场景默认拒绝。 因为真正的机会不会只出现一次。 # 这是松鼠的智慧大树年年结果不必为一颗果子冒险 while 活着: 每天() 面对新机会() 面对不确定() 拒绝() # 无限循环正是生活的本质这套伪代码谈不上严谨它更像是一个提醒。提醒我也提醒正在读这篇文章的你算法可以在很多事情上帮助我们但它永远替代不了一种能力——在当下这片具体的森林里辨认哪颗果子是好的、哪个树洞是安全的、哪条路是可以一步步走通的。说到底我羡慕松鼠什么呢不是它的囤积欲也不只是它的未雨绸缪。我羡慕的是那种对未来的适当钝感——它不需要在秋天就精确地知道冬天哪天到来、气温会降到几度、自己需要多少卡路里才能存活。它只需要知道冬天一定会来而自己此刻能做的就是多藏一颗是一颗。这种多藏一颗是一颗的朴素信念比任何精细的预测模型都更能让人在变幻莫测的世界里站稳脚跟。它不承诺最好的未来但它确保你不会在冬天饿死。而只要活过冬天春天自然会告诉你下一步该往哪里去。我还在学习这种松鼠式的从容。这几年算法越来越聪明预测越来越精准但我知道真正让我安睡到天亮的从来不是哪条算法推送的明日运势而是今天实实在在做好的事、攒下的钱、练熟的本事、温热的关系。它们不会出现在任何预测模型里但它们才是我的树洞。