云聚 AI Token Plan 满 199 减 35 元
AI编程 · 架构思考 · 技术人生
DigitalOcean 开发者云

数据稀缺的模态,要靠别的模态来养

#MIT《How to AI (Almost) Anything》:多模态 AI 逐讲精读
云聚 AI Token Plan 满 199 减 35 元

做机器人的人都熟悉一种处境:你想训一个新传感器上的模型,真实数据只有几千条,但同一个场景下,摄像头数据有几百万条、激光雷达数据有几千万条。你眼睁睁看着隔壁模态躺着金山,自己手里却只有沙子。

这不是你一个人的问题。医疗数据、生理传感器、嗅觉信号、罕见行为标注,几乎所有”非主流模态”都长这样:任务很真,数据很穷。Paul Liang 在这节课里讲的”跨模态迁移”,就是给这类穷人指一条活路:让富数据模态当老师,把它学到的东西折算成你这条穷模态能用的能力

阿里云 OPC 一人公司创业装备库

这是 MIT《How to AI (Almost) Anything》的第 8 讲(原视频),主题是 跨模态迁移。

这一讲的总判断:跨模态迁移吃的是”冗余”

Paul 整节课讲了三套方法,听上去技术细节差得很远,但最后他在收尾时点了一句最值钱的话:所有这些方法,前提都是两个模态之间有冗余信息(redundancy),而你关心的任务,恰好落在这块冗余里。

冗余在这里不是贬义。它指的是两个模态描述了同一件事的一部分,像两张地图覆盖到同一片区域。冗余越大,跨模态迁移越好做。如果你的两个模态各说各话,完全没有重叠,所有”借东风”的招数都失效。

这句话听一遍轻飘飘,放到工程里却是个非常硬的判断。它直接决定你该不该做跨模态迁移、能从哪条模态借到东西借多少才会饱和。后面 Paul 讲的三套方法,迁移学习、协同学习(co-learning)、模型归纳(model induction),其实是这条判断的三种工程化形态。

第一套:把”预训练-微调”做到多模态尺度

第一种思路最熟,就是大家天天用的预训练加微调。在一个大数据源上把模型预训练好,再把它适配到你关心的小任务上。

Paul 重点不在重复这条老路,而在它最近的一次升级:一个 Transformer 处理几十种模态。他展示了自己组里 2023 年的工作 IMnt,以及 DeepMind 的 Generalist Agent。这类模型不再区分”自然语言模型”和”视觉模型”,直接把语言、语音、手势、图像、传感器时序、医疗记录全部塞进同一个 Transformer。

技术上怎么吃下这么多东西?Paul 给了个简洁的答案:先把一切序列化。文字本来就是 token 序列,语音按采样率切片也是序列,图像切成像素块是序列,机器人传感器按时间步排列还是序列。序列化之后,Transformer 学的是同一种东西:序列里相邻位置之间的依赖关系。模态身份只用一个 one-hot embedding 标识:语言是 [1,0,0,0],图像是 [0,1,0,0],仅此而已。

效果上 Paul 给了一组数字:目标任务只做监督学习准确率 67%,加一个无关模态预训练涨一格,加两个再涨,加到三个又涨。没有显式告诉模型”语言和机器人时序有共同结构”,光是塞进同一个 Transformer 一起训,性能就会单调上行。这是这套方法最反直觉、也最值得记住的点。

但 Paul 自己也提示了硬伤。这套模型假设”模态身份只是一个 one-hot 标识符”,其实丢掉了大量模态特有的结构。比如时序数据的连续性、图像的二维空间关系,都被压成一个序列处理。混合专家(mixture of experts)是近来的修正方案:让一部分专家专门处理某些模态,但又不彻底切开。这是这条线后面的演进方向。

第二套:协同学习,训练时多一只手,测试时撒手

迁移学习的前提是有个大模型可以微调。但很多情况下你没那么幸运,只是手头训练时多一种模态可用,测试时这个模态没了。比如你研究的是听障人士的语音转写,训练时你有同步的视频(看口型),但部署的时候只有麦克风。

这个场景 Paul 叫 co-learning,直译过来叫”协同学习”。规则很简单:辅助模态 B 只在训练时出现,测试时只用主模态 A。

这一节是整堂课最技术、也最有意思的部分。Paul 给了三种做法,每一种背后都是一个不同的”借东风”哲学。

第一种:通过融合(fusion)借。训练时把 A 和 B 融合成一个联合表征,测试时把 B 的输入位置填 0(或者填均值),只让 A 的那一路真正激活。Paul 引了 2014 年那篇用深度玻尔兹曼机(早期的生成模型,可以理解为变分自编码器的前辈)做图文联合训练的论文,以及更早 2011 年的多模态深度学习:用音频和视频一起训,测试时只给视频,结果比纯视频监督学习还好。他们测的是经典的 McGurk 效应:人看一个嘴型说”ga”、听到的是”ba”,大脑就会觉得听到了”da”。视觉和听觉在这个任务里是真冗余,所以 borrow 得动。

第二种:通过对齐(alignment)借。不把两个模态融成一坨,而是各学各的表征,再通过一个相似度函数把它们拉到同一个空间。Paul 引了 2013 年那篇”零样本跨模态迁移”,可以理解为 CLIP 的史前版本。训练时让”cat”这个词向量(embedding,把词映射到一组数字)和真正的猫图片在表征空间里相邻;测试时来了一张全新的猫图片,模型从来没见过 cat 这个类别,但它能把图片投到那个对齐空间里,找到最近的词向量,直接给出”cat”的预测。这就是零样本分类的雏形。

机器人这块他还给了一个特别贴肉的例子:训练时让机械臂的摄像头视觉和力觉传感器学一个对齐空间,正样本是同一时刻配对的视觉+力觉,负样本是错配的。学好之后,这套表征单独喂给视觉或者单独喂给力觉,都比直接监督学习要强。这跟上一讲讲过的对齐方法是一脉相承的。

第三种:通过翻译(translation)借。前两种都把 B 放在输入端,这种把 B 放在输出端:训练时让模型从 A 去预测 B,把这个”预测 B 的能力”当作辅助任务。预测得越准,A 编码出的表征就越富信息。

Paul 自己组里的例子是情感识别:用语言去预测说话人当时的面部表情。即使最后只用语言做情感分类,因为编码器被强迫学过”什么语言对应什么表情”,它编出的语言表征就比纯监督学到的好。他还讲了一个更深的版本,循环翻译:语言 → 视觉表征 → 再反推回语言,加入循环一致性的约束。

更脑洞的应用是帕金森早筛。研究者想用睡眠呼吸数据预测帕金森症,数据是 10 小时的连续录音,标签只有一个比特:有没有帕金森。10 小时输入对一个比特输出,监督信号稀薄得几乎没法训。他们的做法是同时让模型预测脑电波(EEG)信号,脑电波也是 10 小时的连续信号,瞬间从”10 小时对 1 比特”变成”10 小时对 10 小时”。预测脑电的能力反过来喂养了主任务,帕金森识别也上来了。

这个例子的妙处在于,它把”协同学习”的本质讲透了:当你的主任务监督信号太稀薄,借另一个模态当密集监督是一种廉价但很有效的杠杆

Paul 难得讲了一次反例

整节课让我印象最深的不是上面这些”涨点”的故事,而是 Paul 中段那一段反例。

VideoBERT 和 VisualBERT 是 2019、2020 年很火的工作,在 BERT 上加了视频/视觉的联合预训练。直觉上这应该让模型同时变强。Paul 直接抛出对比数字:BERT 在一个语义角色标注任务上原本是 90%,加了视频联合训练之后掉到 65%,跌了 25 个点。在常识问答这种你直觉上”应该用得到视觉”的任务上,有时候涨一点,有时候反而掉。

他用一句话总结这条线:”如果某篇论文标题里写着’Does X help?’,大概率答案是不 help,不然他们就直接讲结果了。”这是整节课唯一一段他没在卖力推销技术的地方,也恰好是最值得记的地方。所有跨模态迁移的招数,前提都是冗余足够、任务在冗余里。这两个条件不满足,加模态就是加噪声,加得越多掉得越狠。

第三套:你只有 API,怎么办

最后一段 Paul 讲了一个很现实的场景:现在大模型几乎都只给 API,你看不到权重、改不了参数,但你又想让多个模态/多个模型互相帮忙,怎么办?

他从单模态情形热身,讲了自训练(self-training):你有少量带标签数据训一个分类器,再用这个分类器给大量无标注数据打”伪标签”(pseudo label),挑最自信的那一批加进训练集,迭代下去。这套思路在今天的大模型时代被反复重生:data augmentation、distillation、rejection sampling,内核都是它。

到了双模态,1998 年的协同训练(co-training)是更经典的算法。两个模态各训一个分类器,模态 A 的分类器把它最自信的样本打上标签,这个标签喂给模态 B 的分类器训练;反过来 B 也帮 A 打标签。两个分类器轮流当对方的老师。

Paul 给的例子是视频动作识别:RGB 帧和光流(optical flow,描述像素在相邻帧之间怎么移动的)两个模态轮流标注对方的无标签数据。静态画面认得出来的动作(吃饭、看书)RGB 分类器自信,RGB 就帮 flow 老师打标签;动作幅度大的(挥杆、跳跃)flow 分类器自信,flow 就回帮 RGB。

这套 1998 年的算法在今天最有意思的回响,是多 LLM agent 协作。GPT-3 和 BERT 互标数据,或者多个不同的大模型互相 debate、互相给中间结论打分,本质上就是 co-training 在大模型时代的变体。Paul 直接说”这条线很大程度上启发了今天多 agent 的玩法”,我觉得这个判断是站得住的。

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

这一讲对我做机器人云服务的最大启发,是把”跨模态迁移”从一个论文里的招数,落成了一套面对真实部署场景的决策框架。

机器人本身就是个跨模态迁移天然的试验场。一台扫地或清洁机器人身上,激光雷达、深度相机、IMU、里程计、碰撞传感器、电机电流、麦克风,每一种数据的标注成本和数据量都差得离谱。视觉数据可以批量爬、批量自动标;力觉、IMU 上做精细动作识别,标注全靠现场人工跟车,一天采不到几十条。Paul 讲的”穷模态借富模态”问题,在我们这儿是每天的工程现实。

具体几个我会去落地的方向。

第一,玻璃门和反光场景的协同学习。清洁机器人在商场最头疼的事之一是玻璃门,激光雷达打过去直接穿透,视觉看上去又是一片反光。我们传统做法是规则兜底:多个传感器投票,有一个说”前方有障碍”就停。Paul 的协同学习思路给了另一条路:训练时同时喂激光、视觉、超声、碰撞,让模型学一个能从”视觉反光纹理”反推”这里其实有玻璃”的表征;部署时即使某一路传感器临时出问题,联合表征还撑得住。这跟我们现在的传感器降级逻辑能接得很紧。

第二,稀有故障样本的跨模态翻译。机器人云上每天几十万条运行日志,真正”翻车”的故障可能只有几千条,典型的标签稀薄场景。我们可以借鉴帕金森那个例子的思路:不直接用故障标签训分类器,而是让模型从早期传感器数据预测后期更密集的传感器轨迹(比如从开机前 10 秒预测开机后 1 分钟的电机电流曲线)。预测得准的样本,中间表征对故障也会更敏感。把”翻车与否”这个稀薄标签的训练,变成”翻车前的轨迹长什么样”的密集训练。

第三,新机型冷启动的 co-training。我们每出一款新机型,都要重新积累一遍标注数据,周期很长。但老机型上有大量已标注数据,新机型上有大量无标注运行数据,而且两边大部分场景是重叠的(都是商场、都是医院、都是写字楼)。这正好是 co-training 的设定:老机型分类器先标新机型最自信的那批数据,反过来训练一个新机型的初始分类器,再让新机型分类器帮老机型补一些它原本看不到的角度。这套 1998 年的老算法,在我们这种”多机型迭代”的业务里还能再活一遍。

第四,警惕 Paul 那段反例。VideoBERT 那个 25 点掉点不是花絮,是警告。我们之前有过一次教训:把激光特征硬塞进一个本来只用视觉的语义分割模型,期望”多模态总是更好”,结果模型在标准测试集上掉了 4 个点。事后复盘正是 Paul 这套话的工程版:两个模态在那个具体任务上的冗余很弱,激光提供的不是补充信息,而是噪声扰动。做跨模态迁移之前,最该花时间的不是搭模型,而是先量两个模态对当前任务的互信息(mutual information,粗略理解就是”知道一边对预测另一边有多大帮助”)。互信息高了再上手,这套方法才省力。

最后

Paul 这节课其实是一节很”务实”的课。它没有一个统一的、闪闪发光的新方法,而是把跨模态迁移这件事拆成了三种工程实现:能改模型权重就做协同学习,只有 API 就做模型归纳,有大数据池子就做大一统预训练。三套方法背后是同一句话:冗余可借,稀缺可补,但前提是借得对、补得准

如果只让我记一件事,我会记 VideoBERT 那个 25 点掉点。它提醒我,跨模态迁移没有免费午餐:加一个模态,可能让性能涨,也可能让它崩。下一讲开始进入大模型部分,Paul 会讲第 7 讲,大型基础模型的训练与扩展。

本系列

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

  1. 这门 MIT 课不教模型,教你怎么”想” AI
  2. 怎么做 AI 研究:读论文、找想法、快速验证
  3. 数据、结构与信息
  4. 实用 AI 工具
  5. 常见模型架构
  6. 多模态对齐
  7. 多模态融合
  8. 跨模态迁移 (本篇)
  9. 大型基础模型
  10. 大型多模态模型
  11. 强化学习与交互
  12. 人机交互
阿里云函数计算 一键部署 AI 大模型
赞(0)
未经允许不得转载:Toy's Tech Notes » 数据稀缺的模态,要靠别的模态来养
ReClaude Claude Code 合租
阿里云函数计算 一键部署 AI 大模型

Claude Code 合租 · KYC 封号全托管

官方又涨价又 KYC,封号还得自己重新折腾?ReClaude 拼车了解一下——200 / 400 / 800 / 1600 四档随便挑,账号、风控、切换全平台托管,触发风控自动换号不计次。

上车 4 人车 400/月查看四档套餐