跳到主要内容
赞助推荐 Claude Team 合租,少折腾账号
AI 大模型 #MIT《How to AI (Almost) Anything》:多模态 AI 逐讲精读

在动模型之前,你得先和数据"贴脸"

16 分钟阅读阅读(98)
#MIT《How to AI (Almost) Anything》:多模态 AI 逐讲精读
赞助推荐 团队协作里的 AI 办公工作台

第 4 讲是这门课第一次把人按到键盘前面。前三讲讲原则、讲研究、讲数据本身的结构,从这一讲开始,Paul Liang 把麦克风让给两位 TA:David 和 Chanaka,带大家在 Colab 里把一个分类模型从头跑通。

听上去像一节教 PyTorch 怎么写 tensor 的工具课。我开头也这么以为,听完才发现不对:这节课表面在讲 PyTorch 和 Hugging Face,真正讲的是一种做事节奏——拿到一份新数据,你先看它一眼,再搭最薄的一层 harness,再用一份”调试清单”逼自己回到数据里。这个节奏才是这一讲的题眼,工具只是顺手带过的载体。

赞助推荐 一人公司 · 创业装备库
赞助推荐 一人公司 · 创业装备库

这是 MIT《How to AI (Almost) Anything》的第 4 讲(原视频),主题是 实用 AI 工具。

这一讲真正讲的是:先和数据”贴脸”,再谈模型

整节课有一句话被 David 和 Chanaka 反复说,后半段 Chanaka 干脆把它放进了调试清单的第一条:become one with the data。我把它直译成”和数据贴脸”。

它不是一句鸡汤。它是这一讲所有具体动作的起点:在写第一行 model = 之前,先把 CSV 打开看一眼,先用 matplotlib 画一画时间序列,先 print 一下 tensor.dtype,先确认你以为的 80% 训练集和 20% 测试集是不是真的在不同的天、不同的房间。这门课开宗明义说自己教的是”原则不是方法”(见第 1 讲),”贴脸数据”就是这套原则里最朴素也最难做到的那一条。

很多教程会跳过这一步,理由是”反正神经网络会自己学”。这节课用一个反例把这句话戳穿了:他们自己做的嗅觉分类器,从 PyTorch 深度模型换成随机森林,准确率从 75% 跳到 95.8%。一行模型代码的改动,跑赢了你写一晚上的 MLP。

为什么会这样?因为这份数据只有十几个传感器通道、一两千个样本。深度模型在低维少样本的地盘上,优势消失,而它对超参、对噪声、对环境漂移的脆弱性照旧。下面这一讲所有的工具操作,本质上都是为了让你尽快走到”我能看清这份数据长什么样、什么模型配得上它”的那一刻。

嗅觉传感器:一个被讲透的小项目

David 没有挑 MNIST 这种被讲烂的数据集,他用的是 Paul 组里自己采的嗅觉数据。一块装着十几个气体传感器的小板子,凑近物体闻一闻,采到的就是若干通道的时间序列。这份数据被反复用来当本系列的”贴身样本”,第 1 讲 Paul 拿它演示过”识别花生救命”的故事,这一讲又拿来当 PyTorch 教程的载体。一个数据集贯穿全程,本身就是个好习惯——你能看到同一份原料在不同问题下的不同切法。

任务很小:三分类,识别空气、酒精、咖啡豆。但他没有跳着讲,反而把一份真实数据集里所有容易摔跤的地方挨个拆给你看:

第一坑,数据形状和文档不一样。 David 直接说:”我的经验是,文档里写的格式,跟你下载下来的格式,经常不是一回事。”所以打开文件夹之前,先 os.listdir 看一眼有几个 CSV,再 print 一行看一眼列名是什么。这件事每个人都知道该做,但绝大多数人写代码时会跳过。

第二坑,采集过程里的”状态位”。 数据里有一列 state,0 是环境采样、1 是凑近物体采样。课上有个学生问”这是机械臂自动切的吗”,David 答”不是,人手切的,我们也想要机械臂”。这个细节我特别喜欢,它把数据集还原成了一个真实的、有人在房间里手动操作的过程。采数据这件事,从来没有”自动化”四个字那么干净。

第三坑,有的通道根本没采到信号。 学生追问:”那这个不工作的传感器为啥还留在数据里?”David 的回答是两层的:这份样本里它坏了,别的样本里它是好的;而且神经网络通常对单个通道的噪声很鲁棒,会自己学会忽略。这是个值得记下来的判断:盲目剔列不如让模型自己拒绝。 Paul 在旁边补了一句更狠的话:真要剔列,看的不是这一个文件,是整个数据集

第四坑,通道量级差异。 LPG 通道在 0 到 2000,O2 在 50 到 100。如果不做归一化,LPG 这个量级大的通道会主导整个梯度,模型就被它”绑架”了。归一化在这种数据上算不得优化技巧,它是不做就跑不起来的前置条件。

第五坑,环境的偏置。 同一个房间初始读数本来就抖,所以他们减掉了每次采样开头那段环境基线,只保留相对变化。这一步谈不上预处理”风格”,它属于看了数据之后才知道要做的修正。

把这五个坑串起来看,你会发现 David 演示的根本不是 PyTorch 语法,而是一种“看数据的姿势”。PyTorch 那几行 torch.tensor torch.from_numpy tensor.to(device) 只是顺手讲的,真正讲透的是:在你写训练循环之前,这份数据需要先被你看见。

训练/测试切分:最容易骗自己的一步

整节课最值钱的一段,在讲完模型训练之后。有学生问”分类器是分一整段时间序列还是一个时间窗”,David 回答了,然后 Paul 接了一段我觉得应该裱起来的话。

他说:你怎么切训练集和测试集,几乎决定了你这个模型有没有意义。

举的例子很具体。如果你在同一个 session 里、甚至同一个小时内采的数据,前 80% 给训练、后 20% 给测试,模型当然能跑出漂亮的准确率,但它学到的只是”记住这一小时的环境”,并不是”区分酒精和咖啡豆”。换到第二天、换个房间、换个温湿度,它立刻就废。

他们自己就吃过这个亏:在某个屋子里训出来的模型,搬到另一个屋子或者室外就不工作了,因为它压根没学会区分背景的温度、湿度。

把这件事翻译成一句通用的原则:训练集和测试集的切分方式,应该尽可能模拟你真实部署时的分布差异。 你将来要在新一天用模型,就按”按天切”;你将来要在新场地用,就按”按场地切”。否则你看到的准确率,是你自己给自己写的一个安慰剂。

这一段值不值钱,看你写过多少次”明明离线指标很好上线就崩”的事故复盘。

Hugging Face + LoRA:从”自己写”到”接生态”

后半段 David 切到 Hugging Face,讲怎么用别人预训练好的大模型。这部分动作很多,但精神只有一句:当数据量和模型规模到了你写不动的量级,你的工作就从”造模型”变成”接生态”

具体到几个能记住的小判断:

怎么估能不能跑得动一个大模型? David 给了个糙但够用的拇指规则:模型名字里 1B 前面的数字乘 2,大约就是推理需要的 GB 显存;训练再多估一点。一个 1B 模型,T4 上 4GB 显存够推理,训练就吃力。这种”心算估算”是工程师身上很值钱的肌肉,比背 transformer 公式有用。

LoRA 是个适配器,不是新模型。 它在原模型基础上加一小撮可训练参数,让你能用很少的显存把大模型微调到自己的领域。这门课不打算教你从零预训练,所以微调路径就是大家真正会用到的那条。LoRA 里的 ralpha 越大,改得越多、显存吃得越多。

4bit 不是常态,只是省显存的妥协。 David 特地点了一句:理想情况下 16bit 训练更稳,4bit 是因为 Colab 装不下才用的。这种”我知道这不是最佳实践,但我先告诉你为什么这么做”的口气,是好工程教育的标志。

WandB 看两块表:显存和功率。 训练跑起来之后,他先看 GPU 显存占用,压到 80-90% 最理想,太高会 OOM,太低说明 batch size 没拉满。再看 GPU 功耗,低于 60% 就是数据管线在拖后腿,GPU 在等你喂数据。这两块表,比看 loss 曲线更早能告诉你训练有没有跑顺。

这一段讲的全是脚手架,没人会因为这些知识拿奖,但它决定你能不能在一个晚上把模型真的跑起来。

调试模型更像工艺活

最后十分钟 Chanaka 接过来,讲一份”调试模型”的清单。他开场就说一句话:调试机器学习模型更像艺术,不像科学

我把他那张总图压成几条可以背的口诀:

  1. 先和数据贴脸:再炫的模型也救不了你没看过的数据。少样本场景里,识别数据里的可建模 pattern,比换更深的网络重要。
  2. 固定随机种子:训练已经够随机了,把所有你能锁住的随机性都锁住,你才知道是模型变了还是命数变了。
  3. 看初始 loss:模型刚 init 完,先跑一次,看 loss 是不是 inf、是不是离你期望的”瞎猜基线”差太远。一上来就发疯,大概率是初始化或归一化的锅。
  4. 先在单个样本上过拟合:模型连一个样本都背不下来,后面所有努力都白费。这一步是判断”模型架构有没有学习能力”的最便宜的实验。
  5. 能过拟合再谈泛化:dropout、weight decay 这些正则化手段,在你能过拟合一个小训练集之前都别碰。先确认下限,再谈上限。
  6. 别一上来调架构:很多人读了几篇 paper 就想换个炫架构,结果根本是数据没洗、超参没调、初始化不对,跟架构无关。架构是最后再动的东西。
  7. 超参很可能就是答案:Chanaka 说得很直接,大多数模型其实能 work,只是没人花时间搜超参。小模型尤其,值得多搜几组。

这七条没有一条新,但放在一起就是一份反 hype 的工程纪律。它在反对的不是某种具体做法,而是新手最容易犯的那种”先调最酷的、再回头补数据”的顺序。

我会怎么用 / 放到机器人现场看

把这一讲整篇压回机器人云的现场,有几处是直接对得上的。

第一,清洁机器人的传感器数据,跟那块嗅觉芯片是同一种”动物”——多通道、低维、有量纲差、有环境偏置。 一台清洁机器人身上,激光雷达、深度相机、IMU、里程计、电机电流、碰撞、超声、防跌落,各自的量纲完全不在一个数量级:激光雷达点云一秒几万点,IMU 一秒几百帧,碰撞传感器一天可能只触发几次。这种数据上面跑分类/异常检测,优先级跟 David 在嗅觉芯片上一样:先看数据、先归一化、先做基线减除、先用随机森林或者 XGBoost 把”傻瓜基线”打出来,再谈深度模型。我见过太多团队上来就堆 transformer 处理传感器序列,准确率不如一个手动加几个滑窗特征的 GBDT。

第二,”训练/测试切分按部署场景切”这条,在机器人上是性命攸关的。 我们最容易翻车的一类模型,是地面材质识别、玻璃门检测、湿滑预警。如果你的训练数据来自十台机器人在三个商场扫了一个月,测试集是从同一池子里随机抽 20%,模型在离线看准确率 95%,部署到第四个商场,比如换了一种灰色花岗岩或者天花板灯光不一样,直接退回 60%。正确的切法是按机器、按场地、按时间窗切。这一段 Paul 讲嗅觉芯片在不同房间失效,跟我们换商场失效,是同一份病。

第三,”通道坏了别急着剔”这条,我们走过反方向的弯路。 早期我们做某个异常检测时,看到某型号 IMU 的某轴噪声特别大,就在预处理里把它整轴 mask 掉。后来发现:那一轴在某些机型的某些工况下其实是关键判据,我们一刀切掉,等于把模型的一只眼睛戳瞎了。David 那句”网络对单通道噪声通常很鲁棒,要剔得看整个数据集而不是一个文件”,直接打脸我们当年的做法。

第四,机器人云上跑大模型这件事,LoRA 是真实路径。 我们做语义理解、做工单分类、做用户回访总结这些场景,业务样本量永远凑不够预训练,但完全可以用 LoRA 把开源基础模型(foundation model,无需从头训练的大型预训练模型)调到我们的语料上。David 那个”模型参数前面的 B 乘 2 估显存”的拇指规则,是工程选型时的省心算法,我会让团队的 ML 工程师都背下来。

第五,Chanaka 的调试清单可以直接挂墙上。 我们模型上线前的 checklist,过去主要盯准确率、F1、混淆矩阵这些”结果指标”,对训练过程本身的健康度看得不够。”初始 loss 是不是疯的””单样本能不能过拟合””超参搜过没有”——这些过程门禁,值得加进我们模型上线评审的标准模板里。结果指标看得见,过程指标决定结果指标的可信度

收束

听完这一讲,我反而对前三讲的”原则”二字理解又深了一层。原则不是抽象的口号,它就藏在 print 一行 dtype、画一张时间序列图、把训练集按天切开这些不起眼的动作里。能不能在自动跑训练之前先和数据贴脸,能不能在炫架构之前先让一个 100 行的随机森林跑出来,能不能把”环境换了模型就崩”的风险在切数据时就堵住,这些才是把一个新模态做出来的真功夫。

工具会换,昨天是 PyTorch + Hugging Face,明天可能是别的栈。但这套”看数据 → 搭最小 harness → 按清单调试 → 再回到数据”的节奏,十年内都不会过时。

本系列

MIT《How to AI (Almost) Anything》共 12 讲,这是我的逐讲解读:

  1. 这门 MIT 课不教模型,教你怎么”想” AI
  2. 怎么做 AI 研究:读论文、找想法、快速验证
  3. 数据、结构与信息
  4. 在动模型之前,你得先和数据”贴脸” (本篇)
  5. 常见模型架构
  6. 多模态对齐
  7. 多模态融合
  8. 跨模态迁移
  9. 大型基础模型
  10. 大型多模态模型
  11. 强化学习与交互
  12. 人机交互
赞助推荐 一键部署 AI 大模型
赞助推荐 一键部署 AI 大模型
赞(0)
未经允许不得转载:80aj » 在动模型之前,你得先和数据"贴脸"
赞助推荐 低成本上手 Claude Code 的中转选择
赞助推荐 低成本上手 Claude Code 的中转选择
赞助推荐 一键部署 AI 大模型
赞助推荐 一键部署 AI 大模型