往期文章链接🔗:
第一篇:
第二篇:
大家好,我是用AI技术赋能超级个体的实践者,本文是基于CS230的课堂笔记整理的第三篇,**它是一门将深度学习理论与实践紧密结合的“硬核”课程,是进入AI领域的一张重要“名片”,**废话不多说,请看正文内容
大家好!欢迎参与本次课程。
今天我想和大家聊聊深度学习项目的完整周期。正如第一节课承诺的那样,我不想单向讲解一两个小时,而是希望以互动形式展开。
我会结合具体案例进行说明,同时提出一系列问题,引导大家思考:如果由你负责这个案例项目,你会如何决策?希望大家踊跃互动,随时打断我提问——这也是我希望在斯坦福现场授课的原因。
开发机器学习、深度学习或其他类型的AI项目(包括基于大语言模型或智能体工作流的项目),与传统软件工程项目存在显著差异。
其中最核心的区别之一是:
在传统软件项目中,你编写代码并完全掌控它——编写任意代码、编译后,代码会严格按照你的指令执行。
但在AI项目中,除了代码,你还需要依赖训练算法所用的数据,而你几乎永远无法预知数据中隐藏着哪些奇妙或怪异的信息。
以人脸识别应用(这是我今天会贯穿始终的案例)为例,
项目初期你很难提前预判数据中存在的问题:
人脸光照条件是否良好?
系统是否会在处理长发或短发人群时遇到困难?
夸张的面部表情、佩戴眼镜是否会影响识别效果?
数据的丰富性意味着你无法提前预测AI系统的表现——并非你无法掌控代码(你可以设计任意神经网络或编写任意代码),而是你无法完全摸清数据的底细。
这也是机器学习开发与传统软件工程最大的不同:
它是一个高度迭代的过程,你必须先构建一个基础版本,观察其运行效果,再通过这个过程去发现数据中的规律,进而调整代码以优化整个系统的性能。
这一点不仅适用于深度学习系统,也适用于现代大语言模型。如今有很多关于大语言模型难以控制的炒作和恐慌,其中不乏过度渲染的成分,但大语言模型的不可预知性确实存在。
核心原因在于它的训练数据量极为庞大,远超人类所能浏览的极限,我们无法确切知晓训练数据中包含的所有细节,因此也难以精准预测其表现。
这就是为什么开发基于智能体或大语言模型的应用同样需要高度的经验性和实验性:
你必须先构建一个原型,观察其优势与不足,再据此解决问题、推动项目进展。
你可以掌控代码,但很难完全掌控数据——这不仅限于你硬盘中存储的TB级数据(事实上你可能都不清楚自己硬盘里的所有数据细节),更包括未来真实世界会产生的新数据。
例如,部署人脸识别系统后,冬季人们可能会佩戴厚重围巾遮挡部分面部,这类场景是你项目初期无法预料的。数据中总有各种意外,若你连硬盘中已有的历史数据都无法完全掌控,就更难应对未来的新数据了。
一、深度学习系统开发:不止于模型训练
很多机器学习课程的核心都聚焦于模型构建——你能从线上视频中学到大量构建强大深度学习模型的方法。但实际上,构建完整的机器学习或深度学习系统,所需的工作远不止训练模型。
学术界的研究重点往往是模型训练、评估与论文发表,这也导致很多课程过度侧重建模环节,而建模其实只是构建有效深度学习系统的一小部分。
今天我希望跳出“模型”这个小框架,带大家更全面地了解开发深度学习、AI或机器学习系统的完整体验。
1.1 深度学习项目的核心流程
一个典型的深度学习系统开发流程通常包括:
明确问题 → 收集数据 → 设计模型 → 训练模型 → 迭代优化 → 部署 → 监控与维护。
今天我会重点讲解其中多个环节,让大家感受真实机器学习应用开发中需要面对的关键问题。
需要说明的是,机器学习开发的核心是“快速迭代循环”:
设计模型 → 训练模型 → 分析结果 → 调整模型/数据/流程 → 再次训练……这个循环会重复多次,直到模型表现达到预期。之后才会进入部署和维护阶段。
1.2 人脸识别系统的核心架构:孪生网络(Siamese Network)
在线上视频的后续内容中,你们会详细学习各种人脸识别架构,其中最常用的是孪生网络。它的核心逻辑是:接收两张图像作为输入,通过神经网络判断这两张图像是否属于同一个人。
这种架构的优势在于无需为每个场景重新训练模型——例如,为家庭场景开发人脸识别门禁时,若有多位家庭成员需要授权,无需为每个家庭单独训练神经网络。
实际应用中,你只需先录入授权人员的几张注册图像(如你和室友、家人的照片),当有人靠近时,系统会快速比对现场图像与注册图像,判断是否授权通行。
我曾参与开发过一个企业工牌刷卡系统,就是这种架构的典型应用:员工刷卡时,系统会同步拍摄其面部照片,与工牌注册照片进行比对,确保工牌持有者是其合法主人,从而防止工牌被盗用导致的未授权访问。
二、实战思考:数据收集的策略与时间规划
现在我们进入互动环节:假设你是一家初创公司的CTO,正在开发下一代人脸识别系统,且律师明确要求你不能从互联网下载数据用于该应用。
你需要收集大量人脸图像来训练神经网络(判断两张图像是否属于同一人),你会如何获取这些数据?
另外一个具体问题是:你会花费多长时间收集数据,才开始启动模型训练(即梯度下降过程)?
为了让场景更具体:假设你刚从斯坦福毕业,和另外两人创办了这家初创公司,目标是先在加州帕洛阿尔托开展业务,你需要利用自己现有的资源来解决这个问题。
(课堂互动片段:学生提出多种数据收集方案,包括利用Zoom等视频流服务、在公共场所安装摄像头并邀请人们自愿参与、收集朋友的LinkedIn照片或手机相册图像、申请获取斯坦福学生ID照片等。)
2.1 数据收集的核心原则:速度优先
我非常欣赏大家提出的这些创意方案,
而我想分享的核心指导原则是:速度。
无论是初创公司还是大公司内部的小型创新团队,项目成功的关键预测因素之一就是执行速度——快速完成任务的能力。
因此,在 brainstorm 数据收集策略时,我会优先选择能快速获取数据集的方案,哪怕这些数据集规模较小、质量不高(通常1-2天内可获取)。
核心原因在于:你无法提前预知数据中存在的问题,快速获取数据集、训练基础模型、发现模型缺陷,才能更快地定位数据中的问题并加以解决。
我曾和一位CEO交流,他花费了超过1000万美元收购了一家公司以获取其数据,之后却困惑于如何利用这些数据盈利。这就是数据价值的不确定性——你很难提前判断数据的核心价值所在。
例如,收集斯坦福学生ID照片是一个有趣的想法,但你无法提前知晓这些照片是否存在“特殊性”:是否表情过于单一?是否存在拍摄角度的局限?我的斯坦福ID照片就很怪异,这类数据可能并不适合用于通用人脸识别模型训练。
而在公共场所安装摄像头并邀请人们自愿参与(需严格尊重隐私),若能在几天内完成数据收集,这种方案的价值会更高。
我自己的多个项目都采用过类似的快速收集策略:斯坦福社区的国际化程度高,学生来自世界各地(虽不能完全代表全球人口分布,但多样性足够),且大家都非常乐于合作。
我们会选择校园内人流量大的地方(如食堂),向人们说明项目情况并征求同意,收集他们的语音或图像数据——这种方式往往能快速获取可用数据。
2.2 数据收集与模型训练的时间匹配原则
我通常会要求团队:“我们有两天时间收集数据”(比如从现在到周四同一时间),然后一起 brainstorm 如何在这段时间内,以创意、尊重隐私、负责任的方式收集数据。
数据不完整、质量不高都没关系,关键是通过这种高速度的迭代,快速训练模型、发现数据问题,再调整数据收集策略。
模型训练的时间是重要的参考基准:如果训练一个模型需要两天,那么我不会花费两个月时间收集数据——这会成为项目的巨大瓶颈。
你应该为数据收集和模型设计分配与模型训练相匹配的时间。对于人脸识别这类任务,模型训练通常只需过夜或几个小时就能完成,因此花费大量时间提前收集数据是完全不合理的。
这里需要补充说明“经验性(empirical)”的含义:它指的是基于实验和实践的过程。机器学习是高度经验性的领域,你必须通过实践观察结果,再决定下一步行动。
有人批评我们这个领域“总是盲目尝试、靠运气成功”,这种说法有一定道理,但并不完全准确——我们对神经网络、超参数、架构的理解能帮助我们避免随机尝试,但由于数据的未知性,我们确实需要通过大量实验来探索有效方案。
2.3 例外情况:基于过往经验的前置数据投入
我上述的建议有一个例外:如果你曾多次开发类似项目,或有充分的学术文献支持,那么可以适当增加前期数据收集的投入。
例如,我曾开发过多个人脸识别系统,根据过往经验和研究文献可知,至少需要5万张图像才能保证系统的基本性能——因此在这种情况下,我会提前投入更多精力收集足够数量的数据。
但对于大多数你首次接触的应用,若没有学术文献或个人经验作为依据,优先聚焦于快速迭代循环才是更合理的选择。
2.4 延伸:大语言模型应用的实验性开发
这种“快速实验、迭代优化”的思路同样适用于基于大语言模型的应用开发。很多人会调用OpenAI、Anthropic、Gemini等平台的API开发应用,而大语言模型的训练数据规模庞大,我们无法提前预知其对特定提示词的响应效果。
因此,与其长时间纠结于提示词的设计,不如直接尝试不同的提示词,观察其输出结果,再针对性地优化——这也是高度经验性的过程。
这一点对负责任AI的开发也至关重要:要确保AI系统安全、无意外风险,最好的方式就是在沙盒环境中构建原型、进行充分测试。
不要过早将系统部署到真实世界,而是在本地环境中反复测试、探测其潜在问题(如不当响应、偏见等),再据此优化——只有通过实践才能发现理论层面无法预知的风险。
三、关键问题解答:数据与模型优化的联动
3.1 如何通过结果分析定位数据问题?
问:分析模型结果后,如何判断数据中存在的问题并指导后续优化?
答:这是一个非常重要的问题,我们会在本季度的后续视频和课程中详细讨论,这里先简要说明核心思路:模型表现不佳时,你可以选择调整神经网络架构(例如更换孪生网络的变体,或参考最新研究文献中的架构),但更常见的做法是调整数据。
“数据中心型AI(Data-centric AI)”就是一门专注于通过系统优化数据来构建成功AI系统的学科。
以人脸识别系统为例,若发现系统在识别戴帽子的人群时准确率极低,你就需要补充更多戴帽子的人脸数据;通过“误差分析”(即分析模型出错的案例),你能明确系统在哪些类型的数据或用户群体上表现不佳,进而针对性地补充或优化数据。
盲目收集更多数据往往不是好策略——数据的维度太多(长发/短发、面部毛发、围巾遮挡、眼镜、侧脸等),在没有明确问题方向的情况下,收集“所有类型”的数据会非常缓慢且昂贵。
如今很多人过度炒作数据的价值,认为“数据越多越好”——这一观点虽然正确,但过于简化。高质量、针对性的数据远比海量杂乱的数据更有价值。
例如,前沿大语言模型的训练并非“收集所有互联网数据”,而是重点筛选高质量的子类别数据:要提升大语言模型的编码能力,就需要收集高质量的代码相关数据,而非随机的互联网聊天或社交媒体数据。
因此,明确数据的核心价值所在,针对性地投入资源收集特定类型的数据,才是提升系统性能的高效方式。
3.2 数据质量的重要性
问:收集数据时,如何判断数据质量是否符合需求?例如,能否使用过往项目的历史数据?
答:数据质量确实至关重要,但对于首次接触的应用,我仍建议优先保证数据收集的速度——先快速收集一批基础数据,训练模型后,通过结果分析明确数据质量的短板,再针对性地提升数据质量。
以大语言模型训练为例,互联网上存在大量低质量的随机聊天数据,对模型训练价值有限;而经过严格编辑、富有洞察力的书籍、学术论文等高质量文本,才是训练大语言模型的优质数据。
对于人脸识别系统,模糊的图像就是低质量数据,清晰聚焦的图像才更有价值(前提是符合真实场景的识别需求)。
3.3 训练数据与真实场景的分布匹配度
问:训练数据与真实应用场景的数据分布需要有多高的匹配度?例如,用识别通用物体的数据集训练人脸识别模型,是否可行?
答:匹配度很重要,但并非像很多人认为的那样“必须完全一致”。神经网络的一大优势在于:若模型规模足够大,你可以输入各种类型的数据(包括与测试集分布不完全一致的数据),通常不会对核心任务产生负面影响,甚至可能带来轻微提升。
例如,用卡通人物图像训练人脸识别模型(卡通人物与真实人类差异较大),大概率不会损害模型的核心识别能力,甚至可能帮助模型学习更通用的特征。
但如果用识别水瓶、马克笔等通用物体的数据集训练,就可能因为相关性过低而收效甚微。10-15年前,由于神经网络规模较小、计算资源昂贵,人们担心“无关数据会分散模型注意力,降低核心任务性能”;但如今训练大规模神经网络越来越容易,这种担忧已大幅减少——大型神经网络就像人类大脑,能够同时学习多种技能而不互相干扰(例如,学会弹钢琴不会影响你学习AI知识)。
需要注意的是,“错误数据”(如标注错误的人脸图像)会对模型产生负面影响,但“无关数据”(如卡通人物图像)的危害则小得多。因此,训练大型神经网络时,适量加入无关数据通常是可行的。
四、部署环节:视觉活动检测(VAD)的方案选择
模型训练完成后,还需要大量软件工程工作才能将其部署到云端或本地服务器并实现推理功能。
以人脸识别门禁系统为例,一个典型的部署架构是:将神经网络部署在云服务上,系统接收现场图像和注册图像,输出“解锁”或“不解锁”的结果(即判断是否为同一人)。
但在实际部署中,我们会面临一个现实问题:若24小时不间断地将视频流传输到云端,以30帧/秒的速度进行实时分类(判断是否需要解锁),成本过高且速度较慢。
因此,实际的人脸识别系统通常会加入一个“视觉活动检测(Visual Activity Detection, VAD)”模块——这是一个低成本、低功耗的轻量级计算任务,核心功能是快速判断“摄像头前是否有人脸存在”,只有检测到人脸时,才将图像传输到云端的大型人脸识别模型进行后续处理,从而降低整体计算成本。
4.1 两种VAD实现方案对比
我们有两种常见的VAD实现方案,请问作为初创公司CTO,你会选择哪种方案启动项目?
方案一:非机器学习方法——判断像素变化量是否超过阈值ε。若摄像头固定(如对准家门),大部分时间画面静止(如墙壁、街道),像素变化极小;当超过10%的像素(RGB值变化超过设定阈值)发生变化时,判定可能有人出现,再将图像传输到云端模型。
这种方案只需用PIL等图像库编写几行代码即可实现。
方案二:训练小型神经网络。人脸识别是复杂任务,需要大型神经网络处理,但“判断摄像头前是否有人”是相对简单的任务——可以训练一个小型、低功耗、轻量级的神经网络,快速输出“是否有人”的判断结果,再决定是否启动云端的大型模型。
4.2 方案选择的核心逻辑:速度优先
(课堂互动片段:学生提出多种观点,包括“短期用方案一快速验证,后期用方案二优化”“将两种方案串联使用(先通过像素变化检测,再用神经网络确认)”“考虑云端运行成本,优先选择低成本方案”“设置低阈值减少漏检风险”等。)
结合大家的观点,我想分享实际项目中的决策逻辑:依然是“速度”。核心问题是:两种方案的实现时间分别是多久?
方案一只需20分钟甚至更短时间(编写几行Python代码),而方案二则需要数小时甚至更长时间(数据收集、模型训练、调试)。因此,我的首选是方案一——快速实现一个基础版本,部署后观察其运行效果,再根据问题进行优化。
大家提到的方案一的缺陷(如树木摇晃、车辆经过、邻居家的猫经过等会触发误检测)确实存在,实际项目中我们也发现方案一的性能不足以满足需求,最终会升级到方案二。
但方案一的价值在于“快速获取真实场景数据,发现问题所在”——例如,通过方案一的部署,我们会发现:人们走向摄像头时,部分帧清晰聚焦,部分帧模糊,而将清晰帧输入人脸识别模型能显著提升准确率。
这种发现只有通过实际部署才能获得,进而指导我们优化VAD模块(不仅检测人脸存在,还筛选清晰的人脸帧)。
这也是为什么“速度优先”的策略如此重要:它能让你快速进入真实场景,发现理论层面无法预知的问题,进而更高效地优化系统。
4.3 模型性能的基准:人类水平表现
问:这类任务(如人脸识别、VAD)的分类准确率达到多少才算“良好”?
答:这是一个很难精准回答的问题,但有一个常用的参考基准——人类水平表现(Human-level performance)。
构建机器学习系统时,若能明确“人类专家能达到的准确率”,就能更清晰地诊断模型的偏差(Bias)和方差(Variance)问题(我们会在本课程后续内容中详细讨论)。
在人脸识别领域,受控环境下的AI系统准确率已远超人类——我可以肯定地说,我们开发的AI系统在区分两张图像是否属于同一人方面,表现远优于我个人,也优于绝大多数人类(甚至可能是所有人类)。
当系统性能超过人类后,评估标准会变得更加复杂,但在达到人类水平之前,“人类水平表现”是一个非常有效的基准。
对于一些人类本身就不擅长的任务(如在线书籍或电影推荐),很难设定明确的基准——大多数人甚至难以给亲密朋友推荐合适的电影,而AI在这类任务上的表现可能更好。
五、部署后:模型的监控与维护
深度学习项目的最后一个关键环节是“监控与维护”:很多时候,模型在训练集和测试集上表现优异,但部署到真实世界后,由于“世界在变化”,系统性能会逐渐下降。
这种现象被称为“数据漂移(Data Drift)”或“概念漂移(Concept Drift)”——数据漂移指真实世界的数据分布与训练/测试数据分布不一致;概念漂移指输入与输出的映射关系(X→Y)发生变化。
5.1 数据漂移/概念漂移的典型场景
以人脸识别系统为例:在加州非寒冷季节训练的模型,冬季可能因人们佩戴围巾、雨衣而表现下降;夏季可能因人们佩戴太阳镜而准确率降低;若将在加州训练的模型部署到其他国家,由于人们的穿着、外貌特征存在差异,也可能出现性能问题。
其他领域的例子也很常见:搜索引擎需要应对新的政治人物、流行趋势、 viral 视频或新专辑(如泰勒·斯威夫特的新专辑)带来的搜索需求变化;工厂的质检系统可能因原材料更换、新设备安装(产生新类型的产品划痕)而出现数据分布变化;
我曾参与的自动驾驶项目中,加州和德克萨斯州的交通信号灯设计差异极大(德克萨斯州部分地区风力大,交通信号灯的安装方式更抗风),导致在加州训练的模型在德克萨斯州无法正常工作——这些都需要通过监控与维护来解决。
5.2 机器学习工程师的核心职责:解决实际问题
我见过一些AI工程师认为“自己的职责只是让模型在测试集上表现优异”——当产品或业务负责人指出“系统在真实场景中无法工作”时,他们会反驳“我已经完成了测试集上的目标,这不是我的问题”。这种态度是不可取的。
作为机器学习工程师,你的核心职责是“构建能解决实际问题的系统”,而非“构建在测试集上表现优异的模型”。
若遇到“测试集表现良好但真实场景失效”的情况,你需要主动思考背后的原因(如数据漂移),并针对性地解决——例如,收集新场景的数据,更新训练集以适应世界的变化。
5.3 不同方案的抗漂移能力对比
值得注意的是,简单的非机器学习系统(如VAD的方案一)通常比复杂的机器学习系统(如方案二)更抗数据漂移。方案一只有一个参数(像素变化阈值ε),即使数据分布变化(如人们佩戴太阳镜),像素变化的判断逻辑受影响较小;
而方案二的小型神经网络有数千甚至数万个参数,若训练数据中没有佩戴太阳镜的样本,当真实场景中出现大量戴太阳镜的人时,模型很可能因过拟合而失效,需要重新训练。
5.4 模型监控与维护的实践方法
- 数据回传与隐私保护:在获得用户许可、遵守透明隐私政策的前提下,将少量真实场景数据回传至云端——这是监控数据漂移的基础。隐私保护至关重要,必须以负责任的方式处理用户数据。
- brainstorm 潜在风险:对于高风险应用,建议团队共同 brainstorm 所有可能的问题(包括数据分布变化)。根据我的经验,真实场景中出现的问题,几乎都能在前期 brainstorm 中被识别——这能帮助你设计针对性的监控指标和仪表盘(Dashboard)。
- 多维度仪表盘设计:由于难以提前预判哪些指标最有价值,建议设计丰富的仪表盘,跟踪多种指标的时间趋势,例如:用户需要两次认证才能通过的频率(反映用户 frustration,可能暗示系统性能下降)、用户通过/拒绝的比例、系统延迟等。初期可以保留20-30个指标,一段时间后会发现部分指标变化稳定(可移除),最终聚焦于少数关键指标。
- 报警机制设置:当关键指标超出正常范围时,触发报警(如通知相关人员),及时排查问题并更新模型。
总之,训练出一个优秀的模型并不意味着项目结束——真实世界的变化会不断给系统带来新的挑战。
建立完善的监控与维护机制,及时收集新数据、更新系统,才是确保机器学习系统长期有效运行的关键。
以上就是文章的所有内容啦,假如你对我的文章感兴趣,请关注我,假如你觉得对你有帮助,就分享给更多的朋友,和点赞,有任何关于AI方面的疑问也欢迎私信我一起交流