关于设计机器学习应用系统
在我准备的提纲里,《设计机器学习应用系统》(DMLA)会有 60 万字的篇幅,是我出版过的九部计算机书籍中最长的,内容也最为硬核。人的学习精力也是一种有限的资源,希望你能在开始之前,先花费一点点时间阅读本文,确定这部文档是否你所需要的,以及它的讲述方式是否适合于你现在的状态。
DMLA 的主旨是面向工程师从零建立机器学习的系统性理解,内容从机器学习的前置数学基础开始,先概览经典的统计学习方法,再聚焦于神经网络模型,尤其是从深度学习派生出的理论、卷积模型、生成模型、序列模型,以及基于 Transformer 架构的语言模型,最后将理论知识应用于软件系统。DMLA 的目标是让你理解机器学习的机制与原理,能自己动手训练模型、实现算法,也知道怎么把这些知识落地到生产系统里。
当前软件行业正受 AI 的冲击,正在经历比第一、第二次软件危机更剧烈的变革。大量软件从业者在涌向 AI 赛道。这里有现实供需关系在推动,有合理的好奇心与真实职业需要,肯定也有动荡期的焦虑情绪使然。不见得每一名软件程序员都得去学习 Transformer 原理、理解注意力机制、推导反向传播和计算梯度。为此,我给程序员与 AI 协作关系定义了四个级别,请你先估算一下自己现在属于哪一类,将来希望到达哪一类。
Level 1:视 AI 为纯黑盒工具
你了解工具库,会调用 API,传递 Prompt 给模型,从模型中拿回结果,交由 Agent 框架驱动流程继续往下执行。将 AI 视为一种更先进的搜索引擎与规则引擎,靠反复调整 Prompt,以试错的方式求结果。
这个阶段几乎没有什么壁垒可言,API 换一个人也能调,Prompt 换一个人也能写。你能看三小时教程搭个聊天机器人,看某某技术七天从入门到精通就编排出一个工作流。这种事情换别人也可以,甚至换 AI 也行。按照流程工作,写模板代码、照文档拼库、不做设计不做权衡的开发者,在这个时代里正迅速被 AI 侵蚀。
Level 2:概念够用,能用正确因果解释常见现象
你知道采样温度能影响模型输出的多样性,但说不清楚 Softmax 过程中温度参数是如何影响结果的。你知道 tool-use 中可以让模型产生特定的参数结构去调用工具,但说不清楚模型是如何进行约束解码,确保输出能够精确契合工具的结构要求。
这个阶段你积累了不少 AI 使用经验,能把奇怪现象解释成机制概念,而不是玄学,能够做出合理的判断选型,根据现实情况去折衷权衡。但只有使用上的经验,缺乏原理上的认知让你做设计时无从判断这样组合部件会不会在生产里咬人。AI 技术日新月异,每个新概念对你来说都是真正的新知识,需要靠经验积累才能把新概念小心翼翼地安放到自己已有的知识体系上。
Level 3:机制直觉,架构设计能映射到工程后果
你知道 Transformer 中为什么用 RMSNorm 替代 LayerNorm,去掉了中心化却不会影响数值稳定,知道相比标准 RoPE,YaRN 如何提升外推能力。你清楚在资源受限的环境中该如何设计注意力稀疏模式,选择多大的上下文窗口,如何锚定全局注意力 token,才能以合理的成本搭建出可用的系统,明白每一个决策对生产的哪些点会产生影响。另一方面,你并没有手推过反向传播,没有手算过梯度大小,没有做过论文复现,也没有进行过严格的理论证明。
这个阶段你已经能自己掌控系统的多数行为,AI 的原理性知识不仅足够在实践中指导设计,还显著降低了自己掌握新知识的认知负荷,这最终转化成了自己的护城河。
Level 4:研究创新,推动模型架构与方法的进步
这个阶段你关注 SOTA,讨论 arXiv 上的新文章,从思考、实验、论文、与人交流来获取信息,而不是依赖书籍与教程文档。你的画像一般是与机器学习方向相关的 PhD,或者做基础模型研究的工程实践者。我能想到这部文档与你可能的交集就只会是非机器学习领域的 PhD 来补一些工程实践经验而已。
DMLA 的定位是面向 Level 2 到 Level 3 的过渡带,面向有理工科基础与软件工程底子的从业者。我写作时假定你有符合理工科生的学习认知能力,数学知识可以遗忘掉了,但不能从来就没有学会过。你应该不畏惧写代码读代码,DMLA 的多数文章都配以可直接在页面中运行代码来辅助讲解。
- 如果你并非开发者,是一名产品经理、主管或者行业外人员,只是希望了解人工智能是什么、有什么,也许《智慧的疆界》会更适合你。
- 如果你想做一个能跑的 Demo,网上有许多三小时入门七天精通某项技术的速成教程,DMLA 关注的是生产级系统,这需要耐心。
- 如果你已经是这个领域的 PhD 或研究员,DMLA 的内容对你来说也许太基础了,以大量代码辅助的叙述方式对你来说也未必恰当,这是写给工程师看的,不是写给科学家看的。
行文至此,相信你已经对是否要继续阅读这部文档有了自己的判断。如果你准备好了,我们就正式开始这段关于机器学习的讨论与代码实践吧。
