从 Yoshua Bengio 的深度学习复兴中学到的教训:让神经网络可扩展的关键思想,以及何时值得在产品中使用 ML 的简单启发式建议。

早期的神经网络常在演示中看起来很棒,因为设置很干净。数据规模小、标签干净,测试用例也和模型见过的很相似。
真实的产品并非如此。你一旦上线,用户就会带来奇怪的输入、新话题、新语言、拼写错误、讽刺,以及随着时间变化的行为。一个在笔记本里 95% 准确的模型,如果那 5% 的失败代价高、令人困惑或难以发现,仍然会每天带来支持负担。
“在规模上”并不仅仅是“更多数据”或“更大的模型”。通常意味着要同时应对多重压力:更多请求(常常呈峰值)、更多边缘情况、更紧的延迟与成本限制、更高的可靠性预期,以及在世界变化时保持系统可用的需求。
这就是为什么过去的团队会避免在生产中使用神经网络。它们在野外的表现难以预测,故障也更难快速解释或修复。训练昂贵,部署脆弱,数据的小幅偏移就可能悄悄破坏性能。
对产品团队来说,问题保持简单:ML 是否能创造足够的用户价值,来抵消新增的运营负担?这类负担包括数据工作、质量检查、监控,以及当模型出错时的应对计划。
你不需要成为 ML 专家也能做出好的决策。如果你能清晰描述用户痛点、明确错误的代价,并定义如何衡量改进,你就已经在问对的问题:不是“我们能建模吗?”,而是“我们应该建吗?”
Yoshua Bengio 是让神经网络变得实用的研究者之一,核心转变很直接:不要再告诉模型确切要找什么,让模型从数据中学习什么是重要的。
这就是表示学习。通俗地说,系统从混乱的输入(文本、图像、音频或日志)中自己学出有用的信号和特征。与其由人写出脆弱的规则(例如“邮件包含这些词就标为紧急”),不如让模型学会那些在微妙、间接或难以用规则表达的情形下仍有效的模式。
在这一转变之前,许多 ML 项目依赖手工特征存活或毁灭。团队要花数周时间决定测什么、如何编码,以及补丁哪些边缘情况。当世界稳定、输入整洁时这种方法能奏效。但当现实很嘈杂、语言变化、用户行为不可预测时,这种方法就会失效。
表示学习促成了深度学习的复兴,因为它让神经网络在真实世界数据上有用了,而且通常随着更多样的示例输入,模型会改进,而不需要从头重写规则集。
对产品团队而言,历史教训变为实操问题:你的问题主要是规则问题,还是主要是识别模式问题?
一些通常成立的启发式规则:
举例:如果你想要分发支持工单,规则可以捕捉明显的情况(“账单”、“退款”)。但如果客户用一百种不同方式描述同一个问题,表示学习能捕捉措辞背后的含义,并在新短语出现时持续改进。
神经网络并非新事物,但长期以来很难训练好。团队可能把演示做通了,却在模型更深、数据更脏或训练数日无进展时看到它崩溃。
一个重要转变是训练纪律。反向传播给出梯度,但真正带来强劲结果的是更好的优化习惯:小批量、动量方法(后来有 Adam)、谨慎的学习率选择,以及通过关注损失曲线等简单信号让失败早早显现。
第二个转变是更好的构建块。像 ReLU 这样的激活函数让梯度比旧的选择更稳定,这使得更深的模型更容易训练。
然后是一些看似小但很重要的稳定性技术。更好的权重初始化减少了信号在层间爆炸或消失的风险。归一化方法(比如批归一化)让训练对超参数不那么敏感,帮助团队复现结果而不是靠运气。
为了减少记忆化,正则化成为默认的安全带。Dropout 是经典例子:训练时随机丢掉一些连接,促使网络学习更能泛化的模式。
最后,规模变得可负担。更大的数据集和 GPU 把训练从脆弱的实验变为团队可以反复运行并逐步改进的事情。
一个简单的心理模型是把它们看作一组“乏味但有力”的成分:更好的优化、更友好的激活、稳定器(初始化与归一化)、正则化,以及更多数据与更快计算的组合。
模型只是可工作的 ML 产品的一部分。难点在于把“在我的笔记本上可用”变成“对真实用户每天可用且不会出奇怪问题”。那意味着把 ML 当成一个有移动部件的系统,而不是一次性训练任务。
把模型和周边系统分开会有帮助。你需要可靠的数据收集、可重复构建训练集的方法、能快速响应请求的服务化部署,以及能在漂移时提醒你的监控。如果这些任何一环薄弱,性能在演示中可能看起来不错,但在生产中会默默下滑。
评估必须与真实使用匹配。一个准确率数字可能掩盖用户真实感受到的失败模式。如果模型需要排序结果,就要测排序质量,而不仅仅是“对或错”。如果错误代价不均,就根据重要结果评分(例如:漏掉的坏例 vs 误报),而不是单一平均值。
迭代速度也是成功关键。大多数收益来自许多小循环:改变数据、重训、复查、调整。如果一次循环因为标注慢或部署痛苦而需要数周,团队就停止学习,模型停滞不前。
隐藏成本通常会打破预算。标注与复查耗时。当模型不确定时你需要重试和回退。边缘情况会增加支持负担。监控与事件响应是真正的工作。
一个简单测试:如果你无法描述如何检测退化并安全回滚,那么你还没有做好扩展。
当问题主要是识别模式而不是执行规则时,ML 才能值回票价。这是深度学习复兴的核心:模型在从原始、混乱的输入(文本、图片、音频)中学习有用表示方面变得很强,而人工规则在这些场景下往往脆弱。
一个好迹象是你的团队一直在给规则添加例外但仍跟不上。如果客户语言变化、新产品上线,或“正确”答案依赖上下文,ML 可以适应,而死板的逻辑会保持脆弱。
当决策稳定且可解释时,ML 通常不是好选择。如果你能用两三句话描述决策,从规则、简单工作流或数据库查询开始。你会更快上线、更容易调试、也能睡得更安稳。
一些实用启发式:
一个快速现实检查:如果你无法写出 20 个真实案例应该发生的结果,那你还没准备好做 ML。你会不停争论,而不是改进模型。
举例:支持团队想自动分流工单。如果问题以多种写法出现(“无法登录”、“密码不工作”、“被锁定”),且每周都有新话题,ML 能比规则更好地分类和优先排序。但如果分流只是基于用户选择的下拉项,ML 就是不必要的复杂。
如果你希望 ML 帮助产品(而不是变成昂贵的爱好),像对待任何功能一样做决策:从用户结果出发,然后逐步“挣得”加入复杂度的权利。
先一句话说明:要让用户哪方面更好,系统需要重复做出的决策是什么?“显示正确结果”太模糊。“在 10 秒内把每个请求路由到正确队列”是可测试的。
然后做一组简短检查:
好的试点应狭窄、可逆且可测量。在一个位置改变一个决策,并保留回退。不要一开始就想“把 AI 加到整个入职流程”,可以先做“建议下一个最合适的帮助文章,但需要用户点一次确认”。
目标不是完美模型,而是证据表明 ML 在重要指标上优于基线。
团队常因“听起来现代”而想用 ML。如果你不能用朴素的语言说明一个可测量目标(例如“把人工审核时间减少 30%”或“把误放行率降到 1% 以下”),项目就会模糊不清,模型永远感觉“不够好”。
另一个错误是用单一评分(准确率、F1)掩盖问题并宣称成功。用户注意的是具体失败:错误自动批准、无害消息被标记、退款请求被漏掉。追踪少量面向用户的失败模式,并在训练前就同意可接受范围。
数据工作通常是真正的成本:清洗、标注、保持数据新鲜比训练花更多时间。漂移是静悄悄的杀手:用户的输入、上传或点击会改变,昨天的模型会慢慢退化。没有持续标注和监控计划,你只是在做一个演示而非产品。
一个安全的 ML 功能也需要“不确定时怎么办”的路径。没有回退的话,你要么用错误的自动化惹恼用户,要么把功能关掉。常见做法是把低置信度情况交给人工或更简单的规则、显示“需人工复核”而不是猜测,并保留带清晰日志的人工覆盖。
在添加 ML 之前,直接问:一个简单规则、搜索或工作流改进能否大概率达到目标?许多“ML 问题”实际上是需求不清、输入混乱或缺少 UX。
一个好的 ML 功能从真实使用的数据开始。仅有演示级的示例容易误导。如果你的训练集主要展示理想案例,模型在测试中看起来聪明,但在生产中会失败。
检查表:
两个容易忘记的点:所有权与事后维护。必须有人负责监控、用户反馈和上线后的定期更新。如果没人每周有时间审查失败,功能会慢慢漂移。
支持团队人手吃紧。工单通过邮件和聊天进来,需要有人阅读每一条、判断内容并把它路由到账单、Bug 或账户访问。团队也希望更快地给出首次回复,但不能以发送错误答案为代价。
先用非 ML 的基线开始。简单规则常能解决大部分问题:关键词路由(“发票”、“退款”、“登录”、“双因素”)、一个简短表单要求订单号或账户邮箱,以及常见问题的模板回复。
基线上线后,你才能看到真正的痛点。ML 在混乱部分最有用:客户用各种写法描述同一问题,或写很长的信息把真实请求隐藏在其中。
一个好的试点只在 ML 能赚回成本的地方使用。两个低风险高收益的任务是:用于分流的意图分类,以及为客服提取关键事实的摘要。
在构建前定义成功。选择每周可测的几个指标:平均处理时长、错分率(以及它导致二次联系的频率)、首次响应时间和客户满意度(或简单的点赞率)。
为试点设置保障以确保不会伤害用户。对任何敏感话题保持人工把控,始终有安全回退。例如对高风险主题(支付、取消、法律、安全)进行人工复核;根据置信度将不确定情况路由到通用队列;当 ML 失败时回退到基线规则。
2–4 周后,根据实际提升而非意见做出继续或停止的决定。如果模型仅能匹配规则,保留规则。如果它能减少错误路由并在不降低满意度的情况下加快回复,就可以扩大推广。
大多数产品中的 ML 失败并不是“模型不好”,而是“模型周边的东西从未像真实产品那样被对待”。如果你想让深度学习复兴有回报,就要从第一天起规划模型之外的工作。
从决定要围绕模型发布什么开始。没有控制的预测会变成支持负债。
你需要一个清晰的 UI 或 API 约定(输入、输出、置信度、回退),记录输入与模型版本的日志(注意不要保存不该保存的数据),管理后台控制(启用/禁用、阈值、人工覆盖),以及把纠正记录为训练数据的反馈路径。
隐私与合规在作为产品需求处理时更容易。明确哪些数据被存储、保存多久以及存放位置。如果用户来自多个国家,可能需要数据驻留的选择。
为变化做计划。你的模型会遇到新类别、新俚语、新的滥用模式和新的边缘情况。写下“变化”对你功能意味着什么(分诊中新标签、产品名、季节性峰值),然后决定谁更新分类法、多长时间重训练一次,以及模型出错时如何处理。
你不需要华丽的仪表板来早期发现问题。选择一些你会真正查看的信号:
把模型当作发布版本来对待。给每个模型和 prompt/配置打版本,保留最近的良好版本,并在质量下降时快速回滚。
选一个痛点明显且频繁发生的工作流。好的试点足够小,可以在 2 到 4 周内完成,但重要到即使有小幅改进也有意义。想想支持工单分流、发票字段抽取或风险行为标记,而不是完整的端到端重建。
在碰模型前,写下基线。使用现有数据:单个任务的人工时间、当前错误率、积压量、客户等待时间。如果你今天无法衡量现状,就无法判断 ML 是否真正带来帮助。
设定清晰的成功标准并限定时间,然后构建你能用真实输入测试的最薄切片:一个主要指标(每天节省的分钟数、减少的升级次数)和一个安全指标(令人恼火的误报数)。保持回退路径,让系统永远不会阻塞工作。记录决策与修正,这样你可以看到失败点。
如果你在围绕 ML 功能构建应用,保持模块化。把模型当成可替换组件,放在简单接口后面,这样你可以在不重写产品的情况下更换提供商、调整 prompt 或改用别的方法。
如果你想更快地推进周边产品工作(UI、后端与工作流),像 Koder.ai (koder.ai) 这类 vibe-coding 平台可以帮助你生成并迭代网页、服务器或移动端部分,然后在准备好时导出源码。
在试点结束时,根据数据做一个决定:放大规模、收窄到有效的部分,或放弃 ML 并保留更简单的解决方案。
一个默认判断:当输入是混乱且非结构化的(自由文本、图片、音频),并且写出可靠规则一直失败时,使用 ML。
当决策是稳定且可解释的(能用两三句话描述),或者你无法获得足够的真实示例与反馈来持续改进时,就不要用 ML。
表示学习就是模型自己从数据中学习“特征”,而不是由你手动编码要关注的内容。
在实践中,这就是为什么深度学习在工单文本、商品照片或语音等场景中效果好——有用的信号很难用规则明确写出来。
因为真实用户不像你的演示那样行为规范。上线后你会看到拼写错误、讽刺、新话题、新语言,以及不断变化的用户行为。
此外,那“差的 5%”往往就是代价高的 5%:令人困惑的错误、增加的客服工作,或会损害信任的高风险决策。
先列出用户实际感受到的主要失败模式(例如:路由错误、漏掉的紧急案例、烦人的误报)。
然后选择:
当错误成本不均时,避免只依赖单一的准确率指标。
默认做法:先运行一个范围窄且安全的试点。
常见保障措施:
这样可以在不强行猜测的情况下让系统继续有用。
预期这些经常出现的经常性成本:
请为模型周边的系统而不是仅为训练或 API 调用预算。
数据漂移是指真实世界输入随时间变化(新产品名、新俚语、季节性峰值),导致模型逐步变差。
保持简单:
如果你无法检测质量退化,就无法安全扩展。
一个实用的 2–4 周试点包含:
目标是取得提升的证据,而不是追求完美的模型。
像发布软件版本一样对待模型:
这样“神秘行为”就能变得可调试和可控。
你可以用它快速构建模型周边的产品部分——UI、后端端点、工作流、管理控制与反馈界面——从而让 ML 组件保持模块化与可替换。
一个好的做法是:把模型放在一个简单接口后面,发布回退和日志,然后根据真实用户结果迭代。如果以后需要更细的控制,可以导出源码并接入你自己的流水线。