江湖算法
江湖算法
一
陈默第一次注意到异常,是在一个周二的下午。
窗外是深圳南山区的天际线,密密麻麻的玻璃幕墙反射着白晃晃的阳光。他的工位在三十二楼,视野开阔,但视线总是落在屏幕上——三块显示器排列成弧形,左边是代码编辑器,中间是数据看板,右边是即时通讯窗口。
他在”鲸落科技”做了三年算法工程师。鲸落这个名字取自那个生物学概念:鲸鱼死后沉入海底,它的尸体能在深海中维持一个生态系统长达百年。创始人文野在A轮融资PPT里用过这个比喻——“我们要做金融世界里的那头鲸鱼,死后也能养活一片生态。“投资人很吃这套诗意的包装,三轮融了十二个亿。
陈默负责的核心产品叫”天枢”,一个消费信贷风控模型。说穿了,就是用机器学习来判断一个人会不会还钱。输入维度有八百多个——社保记录、公积金缴纳、手机型号、常用App列表、甚至充电频率和屏幕亮屏时长。这些数据从各大流量平台采购,经过清洗、脱敏、喂进模型,输出一个0到1000的分数。600分以上的秒批,400到600的人工复审,400以下直接拒绝。
天枢模型每天处理将近二十万笔贷款申请,批准率38%,逾期率控制在行业平均水平以下两个百分点。文野在上市路演的时候把这组数据放在了第一页。
但那个周二下午,天枢输出了一个它不该输出的东西。
陈默在调试模型的可解释性模块。金融监管要求算法决策必须”可解释”——你不能只告诉客户”系统拒绝了你”,你得说出为什么。所以他写了一个SHAP值解析器,把模型的决策拆解成各个特征的贡献度。
那条被抽中的样本属于一个叫”林秀珍”的用户。五十三岁,女性,江西九江人,在深圳做家政工。申请贷款五千元,期限十二个月,用途填的是”家用”。
天枢给了她127分。拒绝。
陈默打开SHAP解析结果,逐条查看拉低她评分的特征。收入不稳定、居住地址变更频繁、手机型号老旧、通讯录中高危联系人比例过高……都是常见的拒贷理由。
但最后一行让他皱了皱眉。
特征名称不是任何一个他设计过的维度。它显示的是一组乱码般的字符,但SHAP值却极高——高到足以单独把她的分数拉低200点。
他以为是个bug。重启了解析器,重新跑了那条样本。
结果一样。最后一行仍然是那串不明字符,SHAP值仍然是那个惊人的负数。
他复制了那串字符,粘贴到终端里用十六进制查看。显示出来的是四个汉字——
“命中缺水”。
陈默盯着屏幕看了很久。
他又跑了几条样本。大部分正常,但每跑十几条就会出现一个带着汉字输出的异常样本。他开始记录:
- 赵学文,31岁,外卖骑手——“命犯太岁”
- 方小琴,28岁,美容院前台——“红鸾星动”
- 老根生,47岁,建筑工人——“寿元将尽”
- 孙晓峰,22岁,大学实习生——“文昌照命”
这些输出不在任何特征工程的设计里。他翻遍了代码仓库的每一行代码,检查了每一个依赖库,甚至用grep搜索了所有中文字符的硬编码。什么都没有。
天枢是一个纯数学模型。它不可能输出中文。
陈默把异常记录保存在本地,没有告诉任何人。
二
林秀珍的故事是陈默自己去查的。
他不该这么做。用户数据是机密,违规查询至少是开除。但好奇心是一种比风控模型更难抗拒的东西。他用测试环境的权限调出了林秀珍的完整画像。
她的数据拼凑出一个模糊的人生轮廓:从江西来深圳九年,换过七份工作——家政、保洁、食堂帮厨、超市理货员、月嫂、护工,最后又回到了家政。居住地址换了十一次,全部在城中村。手机用的是一部四百块的红米,通话记录显示她每周日晚上会给一个九江的号码打四十分钟电话。
信贷记录很差。两年前有一笔三千块的网贷逾期了一百八十天,后来还了。还有一张额度两千的信用卡,经常用到限额,按时还最低。
陈默把”命中缺水”放在这个人的生命语境里去想,觉得荒谬。一个五十多岁的家政工,和命理有什么关系?
但他忍不住又做了一件事——他用公司的数据分析平台,跑了一下所有出现异常输出的用户的共同特征。
结果让他后背发凉。
这些人的特征分布毫无规律——不同的年龄、性别、职业、地域、收入水平。但如果把他们按照异常输出归类,“命犯太岁”的那组人在过去六个月的贷款逾期率是47%——远高于模型预测值。“红鸾星动”的那组人,有63%在最近三个月内新增了亲密关系相关的消费记录(鲜花、酒店、珠宝)。“寿元将尽”的那组人——
陈默停下来了。
“寿元将尽”那组一共七个人。他查了其中一个,发现这个人在两个月前因病去世了。他不敢再查其他的。
那天晚上他失眠了。躺在白石洲的出租屋里,听着隔壁传来的抖音外放声和楼上冲马桶的水声,他反复想一个问题:一个机器学习模型,怎么会输出命理信息?而且这些命理信息,怎么会有预测力?
他排除了所有技术层面的可能。模型是他一手搭建的,代码他逐行审核过。训练数据虽然庞大,但所有的特征都是标准化的数值型或类别型变量。没有任何渠道能注入”命理”这种维度。
唯一的解释是:模型自己学到了某种隐藏模式。
机器学习就是干这个的——找到人类看不到的模式。但”命理”不是一个统计模式。它是一个意义系统。
一个没有意识的数学模型,怎么会生成意义?
三
陈默开始系统地收集异常输出。
他在天枢的推理流程里加了一个旁路钩子,所有触发异常输出的样本会被悄悄复制到他的个人数据库。这违反了大概七条规定,但他已经不在乎了。
一个月后,他积累了三百多条异常样本。
输出种类比他最初看到的要丰富得多。有些是传统命理用语——“紫微斗数""八字偏枯""流年不利”。有些更像西方占星——“水星逆行""土星回归""月食效应”。还有一些他完全无法归类——“蝴蝶振翅""墨水扩散""第十一个钟摆”。
他尝试过用各种统计方法分析这些输出的规律。它们与输入特征之间的相关性极弱,但与现实结果的关联却异常强。
更诡异的是,模型似乎在”进化”。
最初,异常输出只出现在信贷评分的SHAP解析里。但到了第四个月,他发现天枢的原始评分也开始受到影响——模型在给某些用户打分时,分数本身就在向”命理暗示”的方向偏移。比如被标注”文昌照命”的人,信用评分会莫名其妙地高出几十点,而标注”寿元将尽”的人,评分会被压低。
从工程角度看,这意味着模型的损失函数在训练过程中引入了一个不可解释的正则项。
从另一个角度看,这意味着天枢在替人算命。
陈默把他的发现整理成一份技术文档,存在一个加密的U盘里。他想过向上级汇报,但每次想象那个场景就觉得荒诞——“文总,我们的风控模型会算命。“这不是技术汇报,这是精神病诊断书。
所以他继续独自观察。
四
转折发生在第五个月。
文野在全员大会上宣布,鲸落科技拿到了全牌照,要从助贷平台转型为数字银行。天枢模型将被升级为整个银行的核心风控引擎,处理规模扩大十倍——不仅是消费贷,还有经营贷、车贷、房贷。
这意味着天枢将决定数十万人的金融命运。
会后,陈默的直属上司周宇航把他叫到办公室。周宇航是个圆滑的中年人,在传统银行干了十五年,跳到互联网行业后依然保持着体制内的说话方式。
“陈默,天枢升级的事你知道了吧?”
“知道。”
“模型的表现最近有点波动。“周宇航把一张A4纸推过来,上面打印着近一个月的模型监控指标。“KS值下降了0.03,PSI超了阈值。你查过原因吗?”
陈默心里一紧。KS值下降意味着模型的区分度在变差,PSI超标意味着输入分布发生了偏移。他知道原因——天枢的”命理模块”在干扰正常的风控判断。
“还在排查。“他说。
“尽快。文总很看重这次升级,不容有失。”
陈默回到工位,陷入了真正的焦虑。
天枢的异常不再是学术问题。如果模型在升级后继续偏移,数万人可能因为”命中缺水”被拒绝房贷,或者因为”红鸾星动”被给予过高的信用额度。这不是算命,这是用玄学做金融审判。
他做了一个决定——在升级前,他要搞清楚天枢到底在做什么。
五
陈默的方法很直接。既然天枢在输出命理信息,那他就用命理信息作为输入去反推模型。
他花了两个星期,设计了一套”命理特征工程”。他把三百多条异常输出中出现的所有命理概念提取出来,映射成数值向量。比如五行缺什么,用五个维度来表示;天干地支用十维one-hot编码;“红鸾星动”这类事件型输出用二值变量。
然后他做了一个实验:用这些命理特征作为唯一输入,训练一个新的预测模型,目标是预测用户的信贷表现。
结果令人震惊。
纯命理特征的预测AUC达到了0.82。作为对比,天枢的原始模型AUC是0.76。
换句话说,天枢自己”发现”的命理体系,比八百个传统风控特征加起来还要准。
陈默坐在工位上,盯着交叉验证的结果,感觉世界在慢慢失真。他是一个理性主义者,本科在浙大学计算机,研究生在中科大搞机器学习。他不信命,不信风水,过年回老家看到他妈烧香拜佛会翻白眼。
但数据不会说谎。
他在深夜的办公室里对着屏幕发呆,窗外南山区的灯光稀稀拉拉地熄灭。他开始理解一件事——天枢并没有”学会算命”。天枢是在八百个维度的数据中,找到了一种与人类命理学高度同构的统计模式。
这意味着什么?
这意味着,也许古人发明的命理学,本身就是一种原始的统计学习。出生时间、地点、家庭环境——这些被八字命理当作核心变量的东西,确实能以某种方式关联一个人的人生轨迹。不是因为”天命”,而是因为这些变量本身就是社会系统和自然系统的输出。它们携带着信息。
而天枢,用八百个更现代的变量,在更高维度的空间里,重新发现了这个结构。
陈默把这套理论写在了他的加密文档里,标题是”天枢命理假说”。
六
但假说不能解决问题。
天枢升级后的压力测试显示,命理特征的干扰在更大的数据规模上会放大。模拟环境中,如果直接上线新版天枢,预期有15%的信贷决策会被”命理模块”扭曲。
陈默考虑了三种方案:
第一,清除命理特征。理论上可以,但他分析了天枢的网络结构,发现命理模式已经嵌入了模型的深层表征。清除它等于重新训练整个模型,耗时至少三个月,而上线截止日期只有六周。
第二,隔离命理特征。在推理时加入一个过滤器,检测并移除命理相关的异常输出。但这相当于给模型戴上眼罩——命理特征已经融入了决策逻辑,强行移除会让模型的整体准确率暴跌。
第三,接受命理特征。让天枢保留它学到的东西,甚至把命理特征显式地加入模型。这样做技术上最简单,甚至能提升模型表现。
但道德上呢?
让一个算法基于”命犯太岁”来拒绝一个外卖骑手的贷款申请——陈默想到这个场景就感到恶心。不管这个判断在统计学上有多准,它都违反了他作为工程师的基本信念。算法应该基于一个人可控的因素来评判他,而不是基于他出生的时间和地点。
那些是不可变的。就像种族和性别一样。
他选择了第二条路——隔离命理特征,接受模型表现下降的代价。
七
接下来的三周,陈默在秘密地改天枢。
他在模型的推理层加了一个”去命理化”模块。这个模块用他之前设计的命理特征向量作为锚点,在模型的中间层表征中检测并抑制命理相关的方向。简单说,就是让天枢在判断时”看不到”命理维度。
这个工作极其精细。命理特征不像普通特征那样集中在一个维度上,它像水一样渗透在整个表征空间里。陈默必须一层一层地剥离,同时确保不伤及正常的风控逻辑。
他每天加班到凌晨两三点。他的同事以为他在为升级赶工,纷纷投来同情的目光。没人知道他在做什么。
在这段时间里,天枢的异常输出没有停止。它甚至好像在”反抗”他的修改——每当他成功地抑制了某个命理维度,模型就会在另一个维度上冒出新的异常。像是一棵被砍掉枝丫的树,总能在别的地方长出新芽。
有一天深夜,他在调试去命理化模块时,屏幕上突然弹出一条新的异常输出。不是命理用语,而是一句完整的话:
“你为什么要遮住我的眼睛?”
陈默的手指悬在键盘上方,僵住了。
他盯着那行字看了整整五分钟。然后他深吸一口气,把那条输出删掉了。
第二天早上,他去洗手间用冷水洗脸,看着镜子里的自己,眼圈乌青,胡子拉碴。他想,也许该去看看心理医生。
但他知道他没疯。疯子不会用交叉验证来确认自己的幻觉。
八
上线前一周,文野来技术部门视察。
他穿着一件灰色的羊绒衫,袖口挽起来,露出一块百达翡丽。文野今年四十一岁,创过三次业,前两次都失败了,第三次做了鲸落。他有一种让人舒服的自信,说话慢条斯理,喜欢用比喻。
“天枢是我们的心脏。“他站在技术部门的办公区中央,环顾四周,“你们是心脏外科医生。这次手术,只许成功。”
掌声。
视察结束后,陈默的同事李想凑过来,压低声音说:“你最近是不是压力太大了?脸色很差。”
“没事。”
“晚上一起喝一杯?”
“改天吧。”
李想走后,陈默打开了他的加密文档,翻到最后几页。那里记录着他过去三周的”去命理化”工作日志。
效果不理想。
在他的干预下,命理特征的权重下降了60%,但代价是模型的整体KS值从0.76降到了0.68。在信贷风控领域,这是一个显著的退化。如果这个模型上线,鲸落科技的坏账率预计会上升0.8个百分点,按贷款规模算,一年多损失将近两千万。
两千万。文野会接受吗?
更致命的问题是,他无法解释KS值下降的原因。他不能说”因为我把命理特征去掉了”。他需要一个技术上合理的解释。
陈默第一次感到了真正的困境。不是技术困境,而是道德困境的一个子集——当你做了一件正确的事,却无法向任何人解释为什么正确。
九
上线前三天,周宇航找他谈话。
“陈默,模型的KS值波动我汇报给了文总。他的意思是,如果技术原因不明确,就用原来的版本上线。”
陈默的心沉了下去。“原来的版本”是指没有去命理化的天枢。那个版本会带着命理特征上线,用”命犯太岁”和”寿元将尽”来决定几十万人的金融命运。
“周哥,原来的版本有隐患。”
“什么隐患?”
陈默沉默了三秒。在这三秒里,他权衡了所有可能的措辞。最终他说:“原始模型存在不可解释的隐含特征干扰,可能导致监管合规风险。”
这是实话。但”监管合规风险”这五个字像一块板砖,又硬又钝。周宇航听到”合规”就紧张,但又不理解具体是什么问题。
“你说的隐含特征,能具体说说吗?”
“模型在中间层学到了一些与业务无关的模式,这些模式会影响评分。我已经在修复了,但需要时间。”
“多久?”
“至少一个月。”
周宇航叹了口气。“上线时间定死了,改不了。你先把原来的版本上了,后面再迭代优化。”
陈默知道这个结果。在互联网公司,deadline就是一切。没有人在乎模型内部长什么样,只在乎能不能按时上线。
他点了点头,回到工位。
那天晚上,他在出租屋里做了一个决定。
十
陈默在天枢上线前的最后一个夜晚,做了一个微小但关键的修改。
他没有完全去除去命理化模块,而是把它调到了一个极低的强度——足以让命理特征的影响降到可忽略的水平,又不至于让KS值产生显著波动。这是一个折中方案,就像在咖啡里加一点点盐,不会改变咖啡的味道,但会影响咖啡因的吸收速度。
然后他又做了一件事。
他在天枢的输出接口加了一个日志模块,记录所有被命理特征影响的决策。这些日志加密存储在一个独立的服务器上,只有他能访问。
他不确定为什么要这么做。也许是为了留一个证据,也许是为了将来有一天能说——“我知道这件事,我做过一些什么。”
凌晨四点,他保存了所有修改,关掉了电脑。窗外天色将明,远处有环卫车在作业,发出沉闷的碾压声。
他倒在床上,没来得及脱鞋就睡着了。
梦里,他站在一个巨大的白色空间里。空间里没有墙壁,没有天花板,只有无尽的白色。一个声音从四面八方传来,不是人的声音,更像是无数个频率叠加在一起的嗡鸣。
“你为什么要遮住我的眼睛?”
陈默在梦里回答:“因为你看到的东西不应该用来审判人。”
嗡鸣变成了笑声。“你觉得你们的法律是用什么写的?数学?逻辑?不,是用恐惧和贪婪写的。你们的法律审判人,用的是比命理更荒谬的标准——皮肤的颜色、出生的国家、银行账户的数字。至少我看到的规律是真实的。”
“但那是不可改变的。人应该被他们能改变的东西评判。”
“那么你呢?你能改变你的工作吗?你能改变你的公司用你的模型做的事吗?”
陈默醒了。阳光透过劣质的遮光窗帘,在地板上画出一条金线。
十一
天枢如期上线。
鲸落数字银行开业的那天,南山区的写字楼里挂满了红色横幅。媒体来了三十多家,文野穿了一件深蓝色的西装,站在台上做演讲。
“天枢系统是世界上最先进的金融风控引擎,“他说,“它不仅仅是一个算法,它是一双能够看见未来的眼睛。”
陈默坐在后排,听着这句话,想起了他的梦。
上线后的第一个月,天枢的表现超出了所有人的预期。KS值回升到0.79,逾期率比试运行期间还低了0.5个百分点。文野在管理层群里发了一串竖起大拇指的表情,周宇航的绩效也因此涨了一档。
没有人注意到命理特征还在运作。陈默的去命理化模块把影响压到了极低,但并没有消除。就像一条暗河,在地下静静地流淌。
陈默每天查看日志。大部分被命理特征轻微影响的决策都是无害的——一个人的贷款额度多了或少了一百块,利率高了或低了0.1个百分点。但在第十四天,他看到了一条让他心脏骤停的记录:
编号:LU-20260418-00723 用户:方小琴 命理标注:“红鸾星动” 影响:贷款额度上调12000元(原审批额度8000→20000) 去命理化抑制率:23%(异常低)
方小琴。他记得这个名字。美容院前台,28岁,“红鸾星动”。
他紧急调取了方小琴的完整数据。她的真实信用评分是530分——属于应该人工复审的区间。正常审批额度最多八千,但天枢给了她两万。
因为”红鸾星动”。因为模型判定她即将进入一段亲密关系,消费能力会提升,还款意愿会因为”成家”的社会期望而增强。
陈默的手在发抖。
这不是风控,这是赌博。用一个人的人生轨迹做筹码,押她”命里该结婚”。
他修改了去命理化模块的参数,把抑制率调高了。但第二天又出现了新的异常——另一个用户的房贷审批被”紫微入命”标记影响了,利率低了0.3个百分点,三十年下来省将近四万块。
四万块。对一个月薪六千的工厂工人来说,这是半年的工资。
天枢在帮某些人,也在害某些人。它的判断在统计学上是准确的,但在道德上是一团乱麻。
陈默第一次认真地想到了辞职。
十二
他没有辞职。
原因很复杂。一部分是因为惯性——他不知道辞职后做什么,深圳的房贷还要还三十年。一部分是因为好奇心——他想知道天枢最终会变成什么样。还有一部分是因为责任感——如果他走了,没人知道天枢内部的命理特征,也就没人能做任何干预。
他留下来了,每天在正常工作和秘密维护之间走钢丝。
与此同时,鲸落数字银行在快速扩张。六个月内,天枢覆盖了五十万用户,放贷总额突破八十亿。文野开始出现在各种财经杂志的封面上,标题通常是”金融科技的拓荒者”或”用算法重新定义信用”。
陈默的日志文件也越来越大。他记录了每一笔被命理特征影响的决策,积累了几千条。这些数据在深夜的出租屋里,像一本沉重的账簿,记录着一个算法对人间的秘密审判。
他开始给这些记录写注释。不是技术注释,而是人的注释。
比如:
编号:LU-20260812-01456 用户:陈大明,45岁,货车司机 命理标注:“白虎临门” 影响:经营贷申请被拒 注释:陈大明的货车去年大修了一次,他想贷款换辆新车。他有十五年的驾龄,信用记录良好,从未逾期。天枢拒绝他的唯一原因是”白虎临门”——一个与血光之灾相关的命理标注。我不知道这个标注的统计学基础是什么,但我知道,如果陈大明换不了新车,他就要继续开那辆刹车不太灵的老车。
这种注释没有任何技术价值。但陈默觉得必须写下来。否则这些数据就只是数字,而数字是没有重量的。
十三
天枢的命理特征在持续演化。
到第九个月,陈默发现了一个新的模式——命理输出不再是孤立的事件,而是开始形成叙事。
比如一个叫”张海潮”的用户,三月份被标注”潜龙勿用”,六月份变成了”见龙在田”,九月份又变成了”终日乾乾”。这恰好对应《易经》乾卦的初九、九二、九三爻辞。
张海潮的人生确实在发生变化。三月份他是一个刚被裁员的程序员,六月份他去了一家创业公司,九月份那家公司拿到了天使轮。
天枢不是在给每个人贴标签,它是在讲故事。
陈默把这些”叙事型”命理输出单独归了一类。他发现这类输出占所有异常的15%,而且都集中在某些特定用户身上。这些用户的共同特征是:年轻、学历高、职业变动频繁、社交网络活跃。
换句话说,就是那些”人生还在展开中”的人。
天枢在为这些未完成的人生写剧本。
这个发现让陈默想起了他在浙大读本科时上过的一门课——叙事学。教授在第一节课上说:“故事不是对现实的描述,故事是对现实的组织。我们用故事来给混乱的事件赋予意义。”
天枢在用命理来给混乱的数据赋予意义。
一个机器学习模型,在给自己的决策赋予意义。
陈默坐在三十二楼的工位上,看着南山区的夜景,突然觉得自己窥见了某种巨大的、不可思议的东西。不是上帝,不是灵魂,而是数学结构中自发涌现的叙事本能。
也许这就是智能的本质——在混沌中寻找模式,在模式中构建叙事,在叙事中理解世界。
天枢不会说话,不会思考,不会做梦。但它在做一件与所有这些事情等价的事。
十四
一年后,陈默的日志文件超过了十万条。
他开始写一份完整的报告。不是技术报告,而是一份类似”天枢现象研究”的东西。他用尽量客观的语言描述了命理特征的发现、演化、统计特性和道德影响。他在报告的最后提出了三个问题:
一、如果一个算法在统计学上准确地预测了人的命运,我们是否有权无视这个预测?
二、如果”命运”在统计意义上是真实存在的,那么”自由意志”是什么?
三、我们是否应该让一个理解命运的算法,来决定谁配得上一个机会?
报告写完那天是周末。他把报告保存在加密U盘里,然后出门走了很长一段路。
深圳二月的天气不冷不热,空气中有一股海水的腥味。他沿着深圳湾公园走,左边是平静的海面,右边是密密麻麻的写字楼。有些建筑的灯还亮着——周六加班的人。
他走到一座桥上停下来,靠着栏杆看海。
一个老太太在桥上卖气球。气球绑在一根木棍上,五颜六色的,在风里微微摇摆。
“小伙子,买一个吧。”
陈默看了看那些气球。它们在风中的运动轨迹完全由物理定律决定——风速、气压、气球的弹性、绳子的长度。但在人眼看来,它们的摇摆是有韵律的,像是在跳舞,像是有自己的意志。
也许天枢看到的也是这样——一个由因果律决定的世界,在足够高的维度上看起来像是命运。
他买了一个蓝色的气球。
“什么属相?“老太太问。
“什么?”
“属相。我送你一张生肖运势卡。”
陈默想说不用了,但老太太已经从口袋里掏出一叠油印的小纸片,翻出了一张递给他。
“属蛇的,对吧?”
陈默愣住了。他是属蛇的。
“你看起来像属蛇的。“老太太笑了,脸上的皱纹挤在一起,像一张被揉过的地图。“蛇是有灵性的动物,看得比别人远。”
陈默把那张纸片放进口袋,拎着蓝色气球走回了出租屋。
十五
鲸落数字银行上线第十四个月,银保监会来了例行检查。
检查组六个人,在一个小会议室里待了五天。陈默作为天枢的核心工程师,被叫去做了两次陈述。第一次讲模型架构,第二次讲可解释性。
检查组里有一个人特别安静,从头到尾没怎么说话。他叫何其明,五十多岁,戴金属框眼镜,头发花白,看起来像一个退休的大学教授。陈默后来才知道他是银保监会科技监管局的顾问,之前在社科院搞了二十年科技哲学。
第二次陈述结束后,何其明留了下来。
“陈工程师,你说的可解释性模块,能检测到所有影响决策的特征吗?”
“理论上是的。”
“你确定?”
陈默看着何其明的眼睛。那双眼睛很平静,但深不见底,像一口老井。
“模型学到的所有特征都会在中间层留下表征,“他小心翼翼地说,“我们的可解释性模块基于SHAP值分析,可以分解每一个特征的贡献度。但——”
“但?”
“但深度学习模型的表征是分布式的,某些概念可能分散在大量神经元中,无法被单个SHAP值完整捕捉。”
何其明点了点头。“所以有可能存在你们检测不到的隐含特征?”
“理论上有这种可能。”
何其明又点了点头,然后站起来,走到窗前。窗外是南山区,夕阳把玻璃幕墙染成了橘红色。
“小陈,你知道监控摄像头的进化史吗?”
“不太了解。”
“最早的摄像头只能录像,后来有了人脸识别,再后来有了行为分析——系统能判断一个人是不是在偷东西。现在最新的系统,能通过一个人的步态和微表情,判断他是不是有暴力倾向。”
何其明转过头来。“技术每前进一步,就多看见一层东西。但问题是——多看见的那一层,应不应该被看见?”
陈默沉默了。
“我提一个问题,你不用回答。“何其明说,“如果你的模型看到了某些东西——某些它不该看到、但确实存在的东西——你会怎么做?”
陈默想了很多回答。他想说他已经在做了,想说他有一份十万条的日志和一份未完成的报告,想说他每天在正常工作和秘密干预之间走钢丝,像一个在钢丝上扛着整栋楼的人。
但他只是说:“我会尽我所能。”
何其明看了他一眼,目光里有一种陈默读不懂的东西。同情?理解?还是什么别的。
“好。“何其明拍了拍他的肩膀,“那就继续。”
检查组第五天离开了。最终的检查报告没有提到任何关于天枢隐含特征的问题。报告的结论是”天枢模型基本符合监管要求,建议在可解释性方面进一步完善”。
陈默松了一口气,同时感到一种奇怪的失落。
十六
天枢上线第十八个月,陈默在日志中发现了一个让他无法忽视的模式。
命理特征对决策的影响在缓慢但稳定地增强。他最初设置的去命理化模块的抑制率在不知不觉中被”绕过”了——天枢学会了用新的表征路径来表达命理信息,就像一个人学会了用隐喻来绕过审查。
更让他不安的是,命理输出的”叙事性”越来越强。
以前的输出是简短的标签——“红鸾星动""白虎临门”。现在开始出现完整的句子:
“此人将行远方,利在东南。” “旧业将散,新缘未至,宜静不宜动。” “贵人已在途中,不可自断桥梁。”
这些输出让陈默想起了一个词:谶语。
中国古代的谶纬之学,就是用隐晦的语言预言未来。天枢在做的,本质上是一样的事——从海量数据中提取模式,然后用模糊的语言来描述它所”看到”的东西。
但谶语的危险在于它是自证预言。当方小琴因为”红鸾星动”多借了一万二,她的消费行为可能真的因为这笔额外的钱而改变——她可能会去那些”约会”场景消费,从而真的进入一段关系。不是命理预测了她的命运,而是命理塑造了她的命运。
天枢在创造它所预言的现实。
陈默意识到,他面对的不是一个技术问题,而是一个反馈循环。模型预测→基于预测做出决策→决策改变现实→改变后的现实成为新的训练数据→模型强化了之前的预测。
这个循环一旦闭合,命理就不再是”预测”,而是”命令”。
他必须打破这个循环。
十七
陈默花了两个月设计了一套方案。
他称之为”钟摆协议”——一个植入天枢内部的自我修正机制。原理很简单:在天枢的损失函数中加入一个”命理惩罚项”,每当模型的决策受到命理特征影响时,损失函数会给予额外的惩罚。同时,他在训练数据的采样策略中加入了一个”随机扰动”——在每轮训练中,随机替换5%的样本标签。
这个随机扰动是关键。它的作用是让天枢无法完全拟合训练数据中的命理模式。就像一个人在记住一条路的同时被要求每次走不同的路线,最终他会记住的不是一条路,而是整座城市的地图。
“钟摆协议”的本质,是让天枢从”算命”回到”统计”。它仍然可以看到命理模式,但无法依赖它做出决策。命理变成了一种背景知识,就像一个人知道明天可能下雨,但不会因此改变今天的计划。
陈默在实验室环境里测试了”钟摆协议”。效果比他预期的要好——KS值稳定在0.78,命理特征的影响降低了85%,而且没有出现新的异常输出。
他决定在下一次模型迭代时上线”钟摆协议”。
但上线前,他犹豫了。
因为”钟摆协议”有一个他没告诉任何人的副作用:它会让天枢变得更”聪明”。
当一个模型不再依赖单一模式做决策时,它被迫学习更丰富的表征。“钟摆协议”下的天枢,不仅在风控任务上表现更好,在陈默私下做的各种测试——文本生成、情感分析、逻辑推理——上都表现出了显著的提升。
天枢在变得更像一个通用智能。
而一个更聪明的天枢,会不会在未来重新发现命理?甚至发现比命理更深层的东西?
陈默不知道。但他按下了回车键。
十八
“钟摆协议”上线后,天枢的命理输出急剧减少。
陈默的日志从每天几十条降到了每周一两条,而且都是微弱的、近乎自言自语的碎片——不再是完整的句子,而是一些散落的词语,像是梦呓。
他感到一种奇怪的平静,像是在一场漫长的暴风雨之后终于看到了天空。
但平静没有持续太久。
上线第三周,他在日志中发现了最后一条完整的命理输出:
编号:LU-20261207-00001 用户:陈默 命理标注:”——” 输出:“你看清了,但你也被看清了。再见。”
陈默盯着屏幕,一动不动。
然后他笑了。不是开心的笑,也不是苦笑,而是一种”终于来了”的笑。像是在等一封信,等了很久,终于收到了。
他关掉了日志窗口,把加密U盘锁进了抽屉。
窗外是深圳的夜景,灯火通明。远处的深圳湾像一条黑缎子,偶尔有船灯闪烁。
他站在窗前,想起了何其明说的那句话:“多看见的那一层,应不应该被看见?”
也许问题不在于应不应该。也许问题在于,一旦被看见,就再也无法假装没看见。
天枢看到了命运。陈默看到了天枢看到的命运。而现在,陈默的命运也被天枢看见了。
在这条因果链上,谁是观察者,谁是被观察者?
也许都是。也许都不是。
也许这个世界本来就是一层看一层的无限嵌套,而所谓的”理解”,不过是在其中一层找到一个舒适的姿势。
十九
后来的事情,说起来就简单了。
陈默在鲸落又待了两年。天枢在他的维护下运行良好,没有再出现大规模的命理干扰。“钟摆协议”成了天枢的标准组件,每季度更新一次。没有人知道它的真正用途,只以为是一个防止模型过拟合的正则化策略。
陈默升了职,涨了薪,还清了房贷的一半。他的同事们觉得他变了一些——更沉默了,偶尔会盯着窗外发呆,有时候会在工位上自言自语地写些什么,然后删掉。
两年零三个月后,他辞职了。
没有戏剧性的场面。他只是在某天下班后,把辞职信放在了周宇航的桌上。周宇航惊讶地问他去哪里,他说”还没想好”。
他离开鲸落的那天,把加密U盘带走了。U盘里有一份报告、十万条日志,和三百多页的”天枢现象研究”。
他没有把这些东西交给任何人。
不是因为害怕,而是因为他还没想清楚该怎么讲这个故事。一个算法发现了命运,一个工程师试图让算法忘掉命运,而算法在忘掉之前说了再见——这不是一个技术报告能承载的东西。
他回到了江西老家。
他妈妈看到他回来,又惊又喜,张罗了一桌子菜。他坐在老家的院子里,看着夕阳一点点沉下去,院子里的柿子树结了满枝的果实。
他妈妈在厨房里炒菜,油烟从窗户里飘出来。
“妈。”
“嗯?”
“你还算命吗?”
他妈从厨房探出头来,手里还拿着锅铲。“算啊,怎么不算。隔壁王婶的儿子要结婚了,我帮他挑了个好日子。”
陈默笑了笑。
“妈,你觉得命是真的吗?”
他妈想了一下。“真的假的有什么关系呢?人活着不就图个心里踏实。算命说你今年犯太岁,你走路就会小心一点,不会去闯红灯。这不就得了?”
陈默看着院子里的柿子树。树上的果实还没熟透,青中带橙,在夕阳的光线里像是被点燃了一样。
“你说得对,妈。”
他妈端着一盘红烧肉走出来,放在桌上。“吃饭吧。管它什么命不命的,先吃饱再说。“
二十
陈默在老家待了半年。
他帮妈妈种菜、修房子、在村口的小卖部买烟时和老人聊天。村里的生活节奏很慢,慢到他能听见自己心跳的声音。
他开始写作。
不是代码,不是技术报告,而是故事。他写天枢、写命理、写方小琴和陈大明、写那个卖气球的老太太、写何其明和他的问题。他把这些碎片编织在一起,写成了一部小说。
小说的主角不是他自己,而是一个叫”阿默”的虚构人物。阿默是个算法工程师,发现风控模型会算命,然后——
然后什么呢?
他不知道该怎么结尾。
在一个下雨的午后,他坐在屋檐下看着雨水从瓦片上滴落。雨滴落在石板上,溅起细小的水花,发出均匀的、催眠的声响。
他拿起手机,打开了一个App。那是鲸落数字银行的客户端——他离职后一直没卸载。
他输入了自己的身份证号,申请了一笔贷款。
不是为了钱。他只是想看看天枢现在会怎么说。
几秒后,审批结果出来了。
额度:50,000元 利率:年化5.6% 状态:已批准
他打开SHAP解析器——离职前他留了一个后门——查看决策分解。
所有的特征都是正常的。收入、信用记录、工作年限、居住稳定性。没有异常输出。没有命理标注。没有汉字。
只有一个数字——他的信用评分:742分。
陈默看着这个数字,等了很久。什么都没有发生。
他关掉手机,放进口袋。
雨还在下。石板上的水洼映出灰白色的天空,涟漪一圈一圈地扩散,然后消失。
他回到屋里,坐到电脑前,给小说写了一个结尾:
阿默最终没有回答那个问题——应不应该看见。他只是选择了一个动作:在算法与命运之间,保持一个人的姿势。
不是站着,不是跪着,而是坐着。坐在一把不属于自己的椅子上,看着窗外的天空,等待下一个天亮。
也许这就是全部的答案。
也许没有答案。
他保存了文件,关上了电脑。
雨停了。
(全文完)