

在本节课中,我们将学习《如何AI所有事情》这门课程的核心目标、课程结构、学习方式以及评估标准。这门课程旨在教授将人工智能应用于几乎任何新领域或新模态的基本原则,而非仅仅学习特定的算法。




欢迎来到《如何AI所有事情》课程。我们非常兴奋能首次开设这门课程,延续媒体实验室“如何制造”和“如何发展”系列的传统。本课程的教学团队包括我(Paul,麻省理工学院媒体实验室和电子工程与计算机科学系的新任教师,多感官智能研究组的负责人)以及两位出色的助教Shaa和David。他们将协助作业并指导课程研究项目。

我们所属的“多感官智能”研究组,专注于开发能够理解世界万物的新一代人工智能系统。这些系统本质上是多模态的,能够处理语言、视觉、手势及各种传感器数据。因此,本课程的一大重点是如何设计真正多感官、能接纳世界上几乎任何感官模态的AI系统。


我们构建的系统旨在增强人类体验,而不仅仅是复制人类能力。同时,由于AI系统与人类的交互日益紧密和强大,确保其安全可靠也至关重要。课程后期将涵盖如何使AI系统真正安全与稳健。
我们周围的世界是多感官的。AI系统已开始能够处理和交互越来越多的媒介。例如,大型语言模型处理文本,语音识别系统理解我们的口语和声音表达,视觉系统能解读面部表情和肢体语言。在医疗领域,AI能通过X光图像进行合理预测以辅助诊断,或理解各种细胞和医学传感器数据。这仅仅是冰山一角,AI几乎已应用于世界上所有这些模态。

以下是AI应用于各种领域的几个启发性例子:
机器人需要理解力和触觉信息,以感知抓取的是硬物还是软物,并判断放置位置是否正确。同时,机器人通常配备摄像头,可利用环境中的形状、颜色和大小等信息。为机器人集成更多传感器能使其更稳健。例如,可以模拟地震推动机械臂,它可依赖视觉完成任务;或遮挡摄像头模拟雨雾,它则可依赖力觉完成任务。
我们的研究组正在构建用于嗅觉的AI。例如,一块能够感知不同食物和饮料释放的挥发性气体的芯片。在收集足够数据后,可以训练AI系统来检测特定气味,如花生。这对于花生过敏者非常有用。
本课程也将涵盖生成式AI。这类模型能够接收任何模态的数据,并将其语义转换到其他感兴趣的模态。例如,根据文本生成对应视频,或根据视频生成匹配的音乐或音效。
AI可以应用于全面的健康指标监测。许多健康指标并非在医生办公室测量,而我们每年只去一两次医院。AI有潜力通过日常设备(如手机和可穿戴传感器)高分辨率地理解我们的身体状况(如ICU病人的状态)、情绪健康(压力、情绪)以及社交互动方式(通过语言和非语言表达)。
除了感知和预测,新一代AI是关于交互式智能体的。这些智能体能够执行多步操作来完成人类指定的任务。例如,根据自然语言指令在网站上搜索、筛选并购买商品,或帮助操作办公软件。这开启了智能体协助处理多种计算机任务、提升日常生产力的新篇章。
以上只是构建“AI所有事情”机遇的快速一瞥,涵盖了从理解物理环境、处理生成数字媒介、监测健康到提升生产力的交互式智能体。

希望你们都能从本课程中学到东西。课程的核心目标是教授将AI应用于任何模态(尤其是AI研究前沿以外的新模态)的原则。这里的“原则”指的是:
- 数据:直观思考需要何种数据以及从哪里收集。
- 模型架构:需要何种模型架构以及如何设计。
- 实验与评估:如何快速实验并评估模型在数据上的成功。
- 实际关切:在实际部署AI系统前必须解决哪些现实问题。

这与传统的机器学习或AI导论课程不同,后者通常侧重于每周学习一个特定算法。本课程则侧重于教授思考原则,而非方法本身。
课程的第一个主题是 “面向新模态的AI”。许多同学对姿态、医疗数据、生理传感器、移动数据等领域感兴趣,这些都是AI尚未充分研究的领域。
自然地,第二个主题是 “多模态AI”。许多应用需要连接不同的数据模态。例如,连接语言和手势以全面理解社交互动,或连接感知与驱动形成闭环。我们将涵盖如何构建能学习模态间连接的数据集、模型架构,以及如何评估和部署这些系统。
课程形式是半讲座、半独立研究与讨论。
- 阅读与批判性思维:通过阅读近期AI研究的顶尖成果(以讲座和论文阅读形式呈现),提升批判性阅读和思维能力。
- 展望未来:不仅理解现状,还要学会展望未来的挑战和愿景,以及如何实现这些成就。
- 动手实践:探索并实现一些新的研究想法,迈向未来。

以下是理想的先修知识,但如果不完全满足,我们会根据你的情况调整课程体验:
- 编程知识:最好是Python,但如果你会其他语言,也能快速上手Python,因为大多数AI工具包使用Python。
- 对现代AI能力与局限性的基本了解:不需要深入技术细节,但应了解最新进展、能力和限制。每天浏览相关资讯是一个好方法。
- 外部领域知识:带来一些AI之外的专业知识(如某个传感器、任务或领域问题),并与他人协作寻找解决方案。
- 加分项:有过为某个模态尝试或原型开发AI的经验,可以借此深入研究。
我们每周二和周四下午1-2点上课。
- 周二:主要是一小时的讲座(由我、我的学生或客座讲师主讲)。
- 周四:更偏向动手实践和互动,可能是基于课前阅读的讨论课,也可能是代码实践教程。
课程分为四个主要模块,每个模块持续约三到四周:
- 第1周:课程介绍与AI研究基础(如何做文献综述、产生想法、快速实验、撰写论文)。
- 第2-4周:应用AI于任何事物的原则。涵盖数据(性质、形式、收集)、模型架构(通用设计原则)以及学习与泛化(训练函数、监控学习过程、模型选择)。

涵盖模态连接的原因、学习连接的方法、模态交互与融合,以及跨模态迁移(如何利用其他模态数据补充目标模态数据不足的问题)。
春假后开始。涵盖大语言模型的预训练、缩放与微调(重点在微调实践)、大视觉-语言等多模态模型,以及现代生成式AI系统(生成图像、传感器数据、视频、音乐等)。

涵盖多步推理AI、具身交互与实体AI,以及最后一章关于人-AI交互中的安全等问题。


评分由两部分组成:
- 阅读与讨论(40%):基于7次阅读作业及课堂讨论。
- 研究项目(60%):完成一个高质量的研究项目。

每次阅读作业会分配约2篇必读论文和5-6篇选读论文,并附带讨论问题。流程如下:
- 个人准备(周一前提交):独立阅读论文,总结笔记,寻找相关论文,初步回答讨论问题。
- 课堂角色与讨论(周四):
- 阅读负责人:在课前准备简短报告,总结论文、答疑、汇总同学找到的相关资源,并在讨论中协助记录。
- 纪要负责人:主要负责在讨论中记录,并在课后撰写一份连贯的讨论总结报告,与全班分享。
- 讨论主题示例:学习与泛化的属性、专用模型与通用模型的优劣、跨模态迁移、大语言模型、生成模型、人-AI交互等。
- 评分构成:个人作业15%,课堂参与讨论15%,担任特殊角色(阅读/纪要负责人)10%。
- 可能的扩展角色:为了增加趣味性,我们可能会尝试其他角色,如论文评审员、考古学家(追溯论文历史背景)、学术研究员(基于论文产生新想法)、行业实践者(评估商业价值)、黑客(快速实现演示)、私人调查员(探究作者动机)以及社会影响评估员。


项目类似于独立研究,鼓励组队进行。可以与现有研究有共通之处,但不应完全重复。最终报告应像一篇高质量的AI研究论文,鼓励探索新想法。
- 项目思路方向:适配AI到新模态(数据、建模、评估挑战)、时间序列/传感器数据、味觉/艺术/音乐/嗅觉、AI推理、交互式智能体、具身实体AI、社交智能AI、新人-AI交互媒介、超越模仿人类的新任务、AI伦理与安全。
- 指导与会议:每位同学/小组会分配一位主要导师(我或助教)。需要每两周进行一次20-30分钟的会议,并提前在共享文档中更新进展和遇到的困难。
- 关键时间点:
- 第2周:提交预提案(简短描述)。
- 第3周:课堂提案展示。
- 第6周:初步想法实现。
- 春假后:中期报告与展示。
- 第11周:更新结果。
- 第13周:深入分析成功与局限。
- 第14周:期末展示。
- 第16周:提交最终报告。
- 项目评分构成:提案10%,中期报告15%,最终报告25%,每两周进度更新10%。

- 出勤:注册学分的学生需尽量出席每次课。如有长期旅行计划请提前告知。
- 延期:有2次“万能卡”可用于将阅读作业延期24小时提交;项目团队也有2次“万能卡”可用于将中期或期末报告延期1-2天。
- 课程资料:所有讲座幻灯片、视频和讨论笔记都将公开在课程网站上。作业和报告通过Canvas提交。

本周没有作业。建议开始思考感兴趣的研究项目,并寻找有共同兴趣的队友。我们将发布一份项目意向表格,于下周二截止。
本周四的课(下午1-2点)将继续,内容是“如何进行AI研究”的讲座,涵盖如何读论文、产生想法、快速执行研究以及撰写总结结果。



本节课我们一起学习了《如何AI所有事情》课程的总体介绍。我们了解了课程旨在教授将AI拓展到新领域的原则,探讨了多感官AI的广阔应用前景,明确了课程以讲座、阅读讨论和动手研究项目相结合的形式进行。我们还梳理了四个核心教学模块的内容脉络,以及评分考核的具体方式。接下来,请大家开始构思自己的研究兴趣方向,为后续的深入学习与实践做好准备。
在本节课中,我们将学习如何进行人工智能研究。我们将涵盖从产生研究想法、进行文献综述、设计实验到撰写论文的完整研究流程。课程内容旨在为初学者提供清晰、实用的指导。

人工智能研究是一个迭代循环的过程。它始于初步的观察和想法,接着通过文献综述将这些想法置于现有工作的背景下,然后提出具体的研究问题或假设。随后,通过编写代码和运行实验来验证这些想法,分析结果,并最终报告结论。如果结论不尽如人意,研究者将基于新的观察重新开始这个循环。本节课将详细介绍这个循环的每一个环节。


产生研究想法主要有两种通用方法:自下而上的发现和自上而下的设计。
上一节我们介绍了研究的基本循环,本节中我们来看看如何启动这个循环——即如何产生研究想法。
自下而上的发现意味着从具体实践出发。你首先调研某个领域的现状,尝试最先进的模型,观察哪些方法有效、哪些无效。基于无效的情况,你可以从中获得灵感,思考下一步该做什么。

这种方法通常更安全,因为它始于一个在特定场景下有效的基础。只要你能修复它在其他场景下的问题,就能得到一个更好的新方法。它是实现渐进式、稳步进展的优秀工具,但通常难以实现研究上的巨大飞跃。
核心公式:新想法 = 现有SOTA方法 + 观察到的失败案例 + 针对性的改进方案
自上而下的设计与自下而上相反。你不是从具体的细节出发,而是从一个宏大的研究主题开始。这个主题可能是一个前所未有的、极具潜力的方向。当然,这个宏大主题通常不可直接实现,因此你需要将其分解为可在数月或数年内完成的若干子部分。
这种方法有助于构思更具突破性的论文和想法,但通常风险也更高。

为了确保安全,本课程的设计将主要围绕自下而上的研究路径展开。当然,如果你有更具雄心的自上而下的想法,我们也非常支持。

以下是自下而上研究路径的具体阶段规划:
- 提案报告阶段(约2-3周内):确定你感兴趣的研究领域,并梳理该领域现有的最先进方法。如果你的领域没有直接可用的方法,可以考虑将其他领域的先进方法移植过来。
- 中期报告阶段:你应该已经实验了一些现有方法。在实验后,分析它们成功和失败的案例,进行错误分析,并对所有失败模式进行分类。在此基础上,找出修复这些错误的方法。
- 期末报告阶段(春假后):专注于完成一份扎实的期末报告。报告应包含对你所提出的新想法的实现,并总结这些新方法是否真正修复了你在中期报告中发现的问题。
这是一个扎实的自下而上研究时间线,期望每位同学至少能完成这个框架下的工作。

当然,我们也欢迎并支持那些更具“登月”性质的自上而下的研究构想。对于这类想法,与我和助教在办公时间进行头脑风暴至关重要,以确保项目的可行性。文献综述同样重要,你需要将你的宏大想法与当前工作联系起来。中期和期末报告的结构将不那么固定,更侧重于展示你朝着高层级想法所取得的进展。
所有的研究想法通常都源于一个待解答的研究问题。明确的研究问题是定义研究新颖性的关键。
研究问题是你向学术界提出的、尚未有明确答案的明确疑问。一个常见的问题是审稿人认为论文缺乏新颖性,这通常是因为研究问题要么已被解答,要么作者未能完全回答该问题。
我发现,将研究问题设计成是非题(Yes/No)形式通常比“如何”(How)类问题更容易入手和验证。因为是非题可以很容易地被证实或证伪,从而为你的研究提供一个坚实的答案。
假设则是你对研究问题答案的初步猜测。它为后续的实验设计提供了方向。


以下是两个例子:
- 研究问题:所有语言是否同样难以进行语言建模?(这是一个优秀的、新颖的是非题)
- 假设:基于跨语言可比性的概念,所有语言不太可能同样容易建模,或者说我们的方法不可能对所有语言都同样有效。(这为“否”的答案提供了一个具体理由)

- 研究问题:是什么让一个播客节目具有广泛的吸引力?(这是一个更复杂的探索性问题)
- 假设:诸如减少填充词、提高流畅度或融入情感等因素可能使播客更吸引人。(这为研究问题分解出了可验证的具体部分)
通常,研究问题混合了验证性(是非题)和探索性(多因素分析)两种类型。
需要注意:避免使用“X是否让Y更好?”这种形式的研究问题。虽然有效,但它通常是间接的。如果答案是“是”,那很好;但如果答案是“否”,你就会陷入困境,不知道下一步该做什么。更好的方式是将其重新表述为“X的哪种特性会让Y更好?”,这样即使一种特性无效,你也可以探索其他特性。
以下是一些可能与本课程参与者兴趣相关的潜在研究主题示例,旨在激发大家的思考。

许多同学对超越图像和文本的新模态(如传感数据、脑数据、实体交互数据)感兴趣。
- 如何将AI与非深度学习方法主导的模态结合?(例如,结合深度学习和传统方法处理表格或时间序列数据)
- 如何进行多模态融合?(例如,融合语言模型与时间序列模型)
- 在特定场景下,专用模型还是通用模型更有效?
- 如何将领域知识融入模型?(例如,将医学专家处理EEG数据的知识融入模型,能否用更少的数据达到相同性能?)
传感器数据通常频率高、序列长,超出当前序列模型的处理能力。
- 如何将传感器数据切分为有语义意义的单元(Tokenization)?
- 如何构建信号处理方法与深度学习的混合模型?
- 如何收集传感器-语言配对数据来构建传感器大语言模型?
- 如何设计自适应采样方法,以高效处理长达数年的传感器数据?

目标是构建能够进行多步骤复杂推理的系统。
- 如何为模型提供明确的推理步骤监督?(神经符号方法、收集中间步骤数据、树搜索等)
- 如何在小样本(如1000-8000例)下复现复杂的推理能力?
让模型执行多步操作以协助完成任务(如自动办公、旅行规划)。
- 如何构建能更好理解网页截图、PPT等非自然图像的视觉模型?
- 如何设计在不确定时能暂停并向人类寻求澄清的智能体?(人在环学习)

将AI从数字世界带入物理世界。
- 如何构建能在硬件设备上高效运行的模型?(模型压缩与优化)
- 如何连接感知与驱动,形成强化学习闭环?

让AI更好地理解并与人类进行社交互动。
- 如何让AI理解非语言表达和社交常识?
- 如何让AI系统发展长期社交关系?
- 如何让AI具备“心智理论”,理解他人所想?(例如,构建能玩“狼人杀”这类涉及隐藏身份和欺骗游戏的AI)
让AI系统更好地与人类协作。
- 如何让模型表达其不确定性以寻求人类反馈?
- 除了点击投票,能否利用面部表情、手势等更直观的方式提供反馈?

确保AI系统的安全与公平。
- 如何更好地分类和界定模型中的偏见与安全漏洞?
- 如何通过微调等新方法来缓解这些问题?
这并非详尽列表,你可以基于自己的兴趣提出新的想法。


在确定了研究想法和问题后,下一步是进行文献综述,了解相关领域的研究现状。以下是进行文献综述和阅读论文的实用方法。
上一节我们探讨了各种研究主题,本节中我们来看看如何系统地了解一个领域的现有工作。

我通常按以下顺序和资源进行文献调研:
- Google Scholar:针对特定主题进行关键词搜索,浏览前几页的结果。
- 代码实现平台:关注
Papers with Code、GitHub和Hugging Face。这些平台集中了论文的代码实现,便于了解在特定任务或数据集上的最新进展。 - 会议论文集:查看你所在领域顶级会议(如NeurIPS, ICML, CVPR, ACL等)近年来的论文集。
- 技术博客:在搜索时加上“blog post”关键词。博客文章通常由领域专家撰写,内容更浅显易懂,非常适合初学者快速把握一个领域的关键进展和趋势。
- 综述论文与课程:搜索“survey”、“tutorial”或相关课程资料。这些资源通常以教学方式系统化地组织领域知识,对初学者非常友好。
核心流程:泛读(博客/综述) -> 精读(顶会论文) -> 实践(复现代码)

本节课我们一起学习了人工智能研究的基本流程。我们从如何产生研究想法(包括自下而上和自上而下两种途径)开始,接着探讨了如何提出明确的研究问题和假设。然后,我们浏览了多个潜在的研究主题示例以拓宽思路。最后,我们介绍了进行文献综述和阅读论文的系统性方法。掌握这些基础技能,将为你在本课程中开展自己的AI研究项目奠定坚实的基础。
在本节课中,我们将学习机器学习和人工智能中最重要的组成部分——数据。我们将探讨各种形式的数据,分析其独特属性,并了解如何根据数据特性设计合适的建模架构。课程最后,我们会介绍不同的学习范式以及评估模型性能的关键概念。

在进入正式课程内容之前,我们先处理一些课程管理事务。
所有同学应该都已加入Piazza。如果尚未加入,请在课后尽快告知我。Piazza是我们发布所有通知的资源平台,包括第一份公告、课程网站链接、讲座幻灯片、课程日历和教学大纲等。请确保你已注册Piazza。邮件已发出,如果你之前未使用过Piazza,可能需要激活并注册账户,请尽快完成。
关于Piazza,我们的第一份公告是:项目意向表需在今天结束前提交。如果你计划选修本课程并完成课程项目,请填写该表格。表格内容简短,包括你的姓名、已有的团队成员信息,或者你是否需要我们来帮助你匹配兴趣相似的同学,以及你对课程项目的总体兴趣方向。

另一项快速的后勤安排:我们注意到下周(第三周)的周二和周一实际上互换了。可能你们不知道,周一是总统日。但根据学校的官方政策,我们没有取消周一的课,而是取消了周二的课,并将周一的安排移到了周二。因此,下周二的课程取消。我们将重新调整一些内容,以便将更多内容融入这些讲座中。
这个日历将非常有用,它涵盖了每周的主题以及任何重要的作业安排。例如,用红色标出的项目意向表提交截止日期是今天,2月11日。很快,一个非常重要的节点是下周四(不是本周四,而是2月20日),届时你们将进行第一次项目提案展示。我们将向所有同学和他们的团队成员发出相关说明,每个进行研究的团队将进行大约五分钟的展示,概述他们的初步想法、计划使用的数据集和模型。目的是从讲师和班级其他成员那里获得反馈。
请务必查看此日历,链接同样在Piazza上。如果你尚未加入Piazza,请尽快加入。
其他几项后勤事务:例如,本周四将有一个由我的学生主导的PyTorch和Hugging Face教程。这主要是一个关于机器学习中不同工具的入门教程,涵盖如何快速迭代代码、使用GPU、监控实验等内容。
有些同学询问第一次阅读材料何时发布。本周四将用于PyTorch和Hugging Face教程。下周四,所有同学将进行项目提案展示。再接下来的周四,讨论课将开始。春假前将有四次讨论课(第一、二、三、四次讨论)。这意味着阅读材料将在讨论课前大约一周发布。因此,第一次阅读材料将于2月19日发布。
请务必查看你的日历。

现在进入今天的讲座内容。
在机器学习中,我们经常谈论数据。数据是当今机器学习和人工智能领域任何成就的关键。
你可以将数据视为属于某种感知模态。感知模态本质上指的是数据在世界上被表达或感知的某种方式。
当你查看数据时,你通常会认为数据背后有某种传感器在收集。你可以从更接近传感器的原始模态,到离传感器更远的更抽象的模态来看待数据模态。
原始数据,例如,可以包括直接从麦克风录制某人语音的语音信号,或直接从相机捕获的图像。

然后,你可以考虑从原始模态中进行抽象。例如,你可以从语音信号中提取出人所说的具体语言(单词)。这是一种通过保留某些信息并丢弃其他信息来进行抽象的方式。
你还可以开始从图像中检测物体,这同样是一种提取形式,提取出存在哪些物体、它们的位置,或者丢弃图像的其他部分。你甚至可以更进一步抽象。从语言中,你可以检测某人的情感,即他们对所谈论话题的感受是积极还是消极。从检测到的物体中,可以提取出精确的物体类别。
机器学习和人工智能主要是关于学习这些抽象,从通常非常高维、嘈杂、不干净的原始数据,到学习有用的抽象,并对这些数据做出推断。

整个讲座乃至整个课程的目的,就是涵盖所有存在的数据类型,以及学习这些对特定任务有用的抽象的正确方法。
为了在实践中了解这些,我们来看一些常见的数据模态。
你们可能都见过视觉模态。这里有一张彩色图像。当你查看这些模态时,它们通常需要以某种方式在你的计算机上表示。图像,如果你想进行分类,将被表示为像素,其中包含高度、宽度,每个维度都有一些通道(颜色数量,如RGB)。因此,它通常是一个三维矩阵:高度、宽度和通道。
对于这些图像,你可以对其中存在的物体进行分类。你也可以将其表述为一个二元分类问题,例如,判断图像中是否有狗。你还可以将其表述为一个多类分类问题,即你可能有一个大的类别集合,试图从图像中推断出类别,你的目标是选择正确的类别之一。
这就是视觉数据的一个例子,以及你可能对视觉数据做出的一些推断。
你可以从互联网上获取大量语言数据。例如,这里是亚马逊上的一些书面语言,可能是某人在购买商品后写的评论。你也可以获取口语数据,例如,电影或电视节目中人们说话的实际录音,这也是一个很好的数据来源。
从语言数据中,你可以尝试推断,例如,情感。判断出现在整个语言数据中的特定词语(例如“humorous”)是积极的还是消极的。同样,你如何表示这个数据?“humorous”在你的计算机上是一个字符串,但你如何以一种可以被机器学习或人工智能算法实际接受的方式来表示它?
词袋模型是一种简单的实现方式。词袋模型本质上意味着你首先收集句子中出现的所有单词的词典。对于多个单词,你本质上是在感兴趣的那个特定单词(例如“humorous”是词典中的第八个单词)对应的索引位置放上1,其他位置放0。这是一种以数字格式表示单词的简单方法,你的计算机可以接受。
因此,你可以对这个词进行分类,例如,判断它是积极的还是消极的。你可以分类它的词性,是名词还是形容词。你还可以分类它是否是一个命名实体,例如,是否是一个特定的地点或物体。
当然,如今我们通常不训练单词级别的模型,而是训练句子或段落级别的模型。因此,你可能会输入一个段落或对话中的多个单词,并试图对其做出一些推断。例如,判断整个段落是否表明某人对他们购买的商品感到积极或消极,或者将这个段落编码到模型中并生成回应。因此,客户代理可能会自动回复这个人写的评论。
这些是更偏向句子或文档级别的分类任务。为了表示它,你可以继续使用词袋模型,基本上就是统计哪些单词出现。例如,“ideal”这个词出现了,它是词典中的第二个词;“where”和“anyone”作为第五个词出现;“humorous”这个词出现了。本质上,在你的句子中,所有出现在词典中的单词位置放1,其他位置放0。这是一种表示数据的方式。
当然,你们可能都意识到,这些是非常简单的数据表示方式。例如,词袋模型仅仅统计哪些单词出现,并没有真正处理单词的顺序。例如,“not happy”这两个词连续出现实际上意味着非常重要的事情,而“happy... not...”出现在其他地方则不同。因此,我们当然会在整个课程中探讨更好的数据表示方式和更好的学习方法的例子。
这仅仅是作为对各种数据形式的介绍。我们看到了视觉数据、语言数据。

音频是另一种常见的模态。有时你可能从麦克风获取声学信号。通常,这些信号会以某种方式离散化,因为麦克风是以某个固定频率从世界上的连续数据中采样的。
同样,从这个音频信号中,你可能尝试推断这个人说了什么,这是一个自动语音识别的任务。
音频数据有几个关键参数,例如采样率(你以多高的频率录制一个人)、比特深度(每个样本记录了多少信息)。还有其他你可能需要考虑的因素,例如时间窗口。你希望在哪个时间窗口内识别出所说的单词?如果你的时间窗口太短,你可能只听到一个特定的音素或字符;如果时间窗口太长,你可能识别出不止一个单词,开始识别更多内容,你的模型在测量单词时可能不够精确。
表示音频模态的不同方式。这基本上是一个时间维度的表示,或者频谱图,它本质上将时间维度转换为频率维度,你可以看到振幅。
频谱图是表示音频的另一种方式。人们惊奇地发现,你可以将频谱图视为图像,甚至可以将其交给图像识别模型来对频谱图进行推断。因此,音频模态和视觉模态之间存在某种关系。
同样,你可以通过从第一时间步开始,使用某个固定的时间窗口输入观测值,然后在下一个时间步使用另一个时间窗口,来开始识别音频。自然地,你可以识别口语单词,但也可以识别情感,判断某人感觉积极还是消极,这不仅仅基于他们说的话,还基于他们说话的方式,可能是他们声音的幅度和振幅,以及他们说话的快慢。你还可以判断语音质量。
传感模态。如果你从事机器人或环境传感器相关工作,你通常会随时间收集数据,测量某个特定的物理现象随时间的变化。这里的Y轴显示了传感器如何变化。这里展示的是一个六轴力扭矩传感器的例子,常用于机器人,它随时间测量六个不同分量上的力。

当你从事机器人工作时,通常还会拥有一些内部本体感觉数据。许多具身系统都有一些内部状态。这些内部状态可能测量机器人的位置、角度、速度、加速度以及其他与交互智能体内部相关的参数。
同样,这是随时间变化的数据。因此,这里有一个时间维度T。在这个例子中,它只是测量了这个机械臂的当前位置(X、Y、Z轴)和速度。所以它类似于一个 T x 2 的矩阵。
利用所有这些本体感觉数据,你本质上可以训练一个模型,该模型接收这些传感器数据并输出某些内容。你可以输出并尝试预测机器人抓取的是什么物体,或者预测机械臂的某个属性,例如被抓取的物体是软材料还是硬材料、刚性如何、不同形状等。你还可以尝试预测下一个动作。
因此,基于当前的传感器数据,你可能尝试预测机器人应该采取的下一个动作,以便更好地抓取或操纵物体,这将为你提供下一个时间步的一组新读数,或者一组新的力记录和机器人内部的新本体感觉读数。
这涵盖了传感模态。关键思想是,现在你有了时间维度,你可能希望利用这个时间维度和力的大小来识别物理世界中的事物,并采取行动。因此,你可以查看这些数据的新出现情况,并可能再次采取行动。
这就是传感模态。有时人们称之为传感器数据,有时称之为时间序列数据,它们经常可以互换使用。时间序列是传感器数据的一种泛化,指任何具有时间维度的数据。
因此,金融数据也具有时间维度,例如测量股票价格如何变化,这也被视为时间序列,但你可能不会称之为传感器数据。所以,你在寻找编码传感器数据的模型,即传感器模型,但也包括时间序列模型。
这里我展示了一个表格和时间序列的混合体。这是一个在医学领域常用的数据集,称为MIMIC数据集。它包含两种模态:关于特定患者的表格信息,例如他们的年龄、性别、种族、既往病史等,这些你通常会在表格形式中看到。同时,你还有时间序列模态,即患者入住ICU后,从入院到出院期间,他们的通气情况、心率随时间的变化、血糖水平随时间的变化等。
因此,表格和时间序列数据可以结合起来,对许多医疗程序做出推断,例如他们的死亡率、他们可能患有的疾病(通过ICD-9代码衡量)、他们在ICU停留的时间等。
表格模态在某种意义上非常独特。一个关键特性是,你基本上可以互换这些值。例如,无论你先放年龄和性别,还是先放性别再放年龄,从技术上讲,不应该改变你对表格数据做出推断的方式。因此,如果你的模型实际上对这些值内部的顺序敏感,那么你可能会遇到麻烦。
表格数据的另一个常见挑战是,数据通常更具离散性。例如,性别可能只有几个类别,种族可能只有几个类别。因此,它不是我们在处理图像或传感器数据时习惯的那种连续数据。因此,处理表格数据存在一些挑战。

图是另一种非常有趣的数据形式。但我不认为有人会把图列为自己最喜欢的模态。图无处不在。例如,在社交网络中,你不仅想对网络中的单个人做出推断,还想利用这个人以及他与其他人的关系。这就是一个图的例子,显示了这些人之间是如何连接的。
经济网络、生物医学网络也非常常见。如果你研究不同的蛋白质,你必须查看蛋白质如何与其他蛋白质相互作用,哪些不相互作用。这可以表述为一个图。还有像互联网这样的东西。
如果你查看图模态,通常你有一组节点(图中的各个点)和边(本质上告诉你哪些节点与哪些其他节点相连)。
图上有几个重要的任务。节点分类:例如,在社交网络中,你能将每个人分类为更积极或更消极,或者他们的政治立场(右倾、左倾)吗?这是一个节点的属性,但你不能仅使用该节点来做出预测,你可能需要查看他们在社交网络中结交的朋友或点击的其他页面来对该人做出推断。
链接预测:给定两个特定节点,它们可能链接在一起的概率。例如,给定两个蛋白质,它们相互作用或结合的可能性;给定社交网络中的两个人,他们成为朋友的可能性。
这些是图上更多的分类任务。还有许多任务涉及将图用作数据数据库,并利用它来改进其他事物。
例如,如果你正在构建一个问答系统,许多早期的问答系统,如IBM Watson(在Jeopardy游戏中表现超群),它们能够访问包含所有这些常识性知识的知识图谱,这些知识对于这类问答游戏是必需的。它们本质上查询这些知识图谱,检索答案,以便实时回答这些问题。当然,如今人们使用大型语言模型,但也有许多工作致力于结合大型语言模型(知识存储在这些参数中)和显式知识图谱(你可能希望大型语言模型真正查询并从中检索答案)的混合方法。
因此,图本身有很多机会,可以对图进行推断,也可以将图作为一种额外的辅助模态来对其他任务进行预测。
集合模态。集合模态与表格模态有一些共同点。你可能拥有某个对象组或分布,其中每个对象都很重要,哪些对象在集合内、哪些不在集合内非常重要。但关键的是,集合内元素的顺序并不重要。

在这里,我可能正在查看一堆名人图像,这是机器学习数据集中常见的任务。你可能试图根据一组对象分类某些属性,比如头发颜色、肤色、年龄等。但无论这位名人先出现,还是另一位名人先出现,都不重要。事实上,如果你的模型对这些图像出现的顺序敏感,那么该模型的效果将不如对顺序不敏感的模型。
对于集合,你可以执行以下操作:检测异常,找出哪些人或哪些图像不属于该图像集合;进行集合扩展,例如,如果我想生成更多具有特定属性的图像,如何在该集合中采样更多元素。
当我们谈论集合时,点云是另一个例子。我们看到了2D图像,只有高度和宽度。点云本质上是其3D版本。之所以称为点云,是因为每个点都有X、Y、Z坐标,这就是它具有二维性质的原因;而“云”是因为你有一堆点,其顺序并不重要。一组点允许你重建和可视化这些3D对象。
因此,点云。同样,如果你从事3D表示相关工作,通常会将其表示为点云。你可能希望进行更多采样,例如,我想按照“椅子”这个语义类别,在不同3D方向上采样不同的椅子。这是一个点云扩展任务的例子。你可能希望分类特定的物体,或者检测这些3D对象中的异常,这些都是点云上的任务。
总结一下,集合模态也非常重要。关键区别在于,你有一组集合中的元素或点云中的点,但顺序无关紧要。因此,如果你构建的模型对集合中元素的顺序或点云中的点顺序敏感,那么你本质上没有充分利用你的数据,你的模型效果也不会那么好。
我们将在下一讲中详细讨论这些关于模型效果好与不好的想法,届时我们将实际讨论具体的模型。
好了,我们快速浏览了所有存在的数据形式,这远非详尽无遗,以及存在的任务。我倾向于将事物归纳起来,形成一个统一的框架。我称之为模态剖面。给定你最终收集的任何特定来源的数据,无论来自何种模态,你为其标注数据,思考该模态的几个维度是有用的。
因此,我称之为模态剖面。粗略地说,它是该模态独有的品质和结构。让我用两个例子展示哪些维度属于这个模态剖面:一个来自视觉模态,一个来自语言模态。
你可以看到这两者是相关的。右边是对这张图像的粗略描述:“一个干净房间里的笔记本电脑右侧有一个茶杯”。这是这张图像的粗略标题。
那么,什么构成了这个模态剖面?我应该如何开始推理数据呢?
首先,一个非常重要的维度是数据中各个元素的分布。我有这张图像,我开始意识到一个元素是沙发,一个元素是茶杯,一个元素是笔记本电脑,还有一个是桌子。对于语言也是如此,句子中有一些不重要的虚词,但也有一些我关心、需要建模的关键词,例如“茶杯”、“右侧”、“笔记本电脑”、“房间”。
因此,我将开始推理这些元素是什么,特别是它们的分布:是连续分布还是离散分布,以及它们的支撑集是什么(即我必须捕获的所有可能元素)。对于图像,可能是边界框区域;对于语言,可能是那些单词。
所以,我要开始考虑的第一件事是如何建模这些单个元素,如何学习一个能够真正捕获“这是一个笔记本电脑”的群体表示(即使它部分被茶杯遮挡),如何学习一个能够真正捕获“这是一个具有所有属性的沙发”的视觉表示。
同样,如何学习语言中元素的正确表示?
其次,我提到了元素及其分布,以及如何潜在地表示这些元素。第二个维度是粒度集合。我们考虑了单个元素是什么,但现在这些元素出现的频率如何?在图像上,每张图像可能看到几个物体,看起来不太杂乱,也许有三四个主要感兴趣的对象。在文本中,如果是一个人说话,可能是每分钟的单词数;如果是一个句子、段落或文档,则是我可能关心的单词数量。
粒度也会影响我们随后如何设计模型,即在学习了单个元素的表示之后,如何根据它们的粒度和频率组合这些表示。
第三个关键思想,第三个关键维度是结构。结构本质上告诉我这些元素如何组合形成更高级别的信息。

我们从这个自底向上的过程开始,查看了这些单个元素并表示了它们,查看了它们的频率,但最终你必须学习整个图像、整个句子或整个段落的表示。
因此,结构本质上告诉你这些元素应该如何组合以获得更高层次的意义,形成更高层次的抽象。
图像通常是一种空间结构。我们查看图像元素之间的空间关系:椅子在桌子前面,茶杯在桌子上面,笔记本电脑在茶杯左侧,等等。这是一种非常空间化的排列,当你组合这些元素以形成图像表示时,应考虑空间关系。

对于语言,根据哲学观点,有些人认为语言应该通过语法分层组合,你首先看“茶杯”这个名词,然后……(这里演讲者有些犹豫,未说完)。有些人认为语言应该通过查看单词并分层组合它们,通过某种语法形成更高层次的意义。例如,有很多工作致力于构建尊重这种语法的神经网络。

这是一种非常乔姆斯基式的思考方式。当然,如今人们从经验上知道,效果最好的方法可能并不完全是尊重所有这些语法结构。你可以简单地将其视为序列,也许是一个序列,并使用像Transformer这样的序列模型,这对于其他事情可能效果很好。例如,如果你有一个图或树,你的元素可能以某种特定的结构组合形成更抽象的表示,这是你应该根据它来设计模型的东西。
因此,结构。你查看了单个元素,我们如何表示它们,这些元素的频率,以及这些元素如何组合,结构组合是什么。


通常,我们也关心总信息量。抱歉,是你的模态中的总信息量。一旦你将它们组合成更抽象的高层表示,它们提供什么信息?我可以对这些我关心的图像做出什么推断?我可以对我关心的句子做出什么推断?

自然地,一些模态会比另一些拥有更多信息。实际上,有些模态确实比其他模态拥有更多信息。通常,这些模态在它们拥有的信息上也可能重叠。
最后,一个我们通常不考虑的维度,但当你开始从某些传感器收集这些模态时,它也是一组非常重要的规范。它们通常是不完美的:相机容易出现抖动和晃动以及遮挡;语言如果在计算机上输入,容易出现各种拼写错误;如果是口语,容易出现人们说话时犯的不同错误。通常,这些类型的噪声有独特的模式。
因此,思考你的数据中可能出现的噪声类型,以及实际出现的噪声类型,也是当你收集和处理数据时另一个重要的维度。


好了,这是对各种数据形式的总结(远非详尽),以及对不同剖面、不同维度的一般性看法。当你开始收集数据时,思考这些维度通常非常有用:元素是什么(这只是数据的一个元素)、它们的分布和频率、当你将它们组合成更高层次抽象时结构如何出现、不同形式的信息、是否存在噪声或不完美之处以及它们是什么。我并没有真正涵盖这一点,但它与你关心的预测任务的相关性如何。
好了,这就是数据。现在你有了数据,我们经常谈论学习,即如何从数据中学习?
我借用了一些本学期也在教授的机器学习入门课程的幻灯片。但总的来说,在高层次上,学习范式通常有三种类型。这些并非详尽无遗,它们也相互重叠,中间有交叉,并且不断扩展,但通常考虑三种学习目标是有用的:监督学习、无监督学习和强化学习。

监督学习本质上意味着你的数据有某种监督。原始数据输入,监督通常以某种标签的形式出现,即你想为数据预测的东西。例如,你可能有一堆图像,并且有这些图像中物体的标签:猫、狗、桌子、人等,这很简单。你可能有一个蛋白质结构,并且有一些关于它与哪些蛋白质相互作用或结合的标签。你可能有一个句子,例如西班牙语(这是你的输入数据),并且有它在其他语言中的对应翻译的标签。所有这些都是监督学习的例子。我们有数据X,有标签Y,你愿意提供这种监督,如何从中学习。
无监督学习则不同。“无”基本上意味着没有监督。现在你只有数据,但你不愿意提供监督来收集标签,因为标注数据可能成本高昂,需要大量人力,或者标签本身可能非常主观,比如一个人的情感可能非常主观。

因此,你可能希望进行无监督学习,你只有数据X,你希望学习一些特征,这些特征最终可能对你愿意收集的标签或其他任务有用。
无监督学习的几种类型:你可能只关心降低维度,在低维空间中可视化你的数据,这不需要标签,只用你的数据就可以完成。例如,你能可视化单词吗?这些像词向量的东西,它们有一些结构,因为某些国家被分组在一起,某些单词被分组在一起。
你可能希望训练生成模型。如果你有大量蛋白质数据,但没有这些蛋白质是什么或它们如何与其他蛋白质相互作用的标签,你仍然可以学习一个模型,该模型本质上估计你的蛋白质分布,并可能生成更多蛋白质。你也见过图像,对吧?你有一堆图像,你不想标注里面有狗的事实,你仍然可以获取大量图像并训练一个能够生成新图像的模型。

当然,如今,无监督学习和监督学习通过自监督学习的思想真正地交叉在一起。因此,你可能拥有大量数据,无标签,标注成本太高,但你仍然可以在未标注数据上定义一些良好的训练目标来学习这些抽象、这些特征。迁移学习或微调,即你有一些少量的标注数据和监督,是它们之间的一些交叉。
一个例子是:这些是狗的图片,如果你能成功学习所有狗图像的分布并生成新的狗图像,那么这些特征很可能在预测和识别狗图像时非常有用。
第三种学习范式是强化学习。监督和无监督学习通常着眼于涉及单步的任务。你做出预测就完成了,或者你生成另一个样本就完成了,或者你可视化数据就完成了。强化学习着眼于通常跨越多个时间步的问题。
游戏是这方面的一个很好的例子。如果你想训练一个交互式系统来玩像国际象棋和围棋这样的游戏。通常会有游戏的某种状态,例如当前棋子的状态;你采取的一些行动,例如走一步棋,这会转换到游戏的新状态,即棋子的新配置,你可能希望在其中采取另一个行动,依此类推,直到你赢得游戏。
这个多步过程的一个关键区别是,我们不能再在局部步骤中最大化并选择**行动。可能有很多情况,你为了在长期获得更好的行动,而在短期内采取次优行动。这是强化学习最大的挑战之一:如何权衡短期行动以获得长期真正好的行动?
我们在游戏中看到它们,在机器人技术中看到它们,如今在大型语言模型中也看到它们。你可以将大型语言模型与人类的交互视为某种多步交互,你可能会提示它,得到一个答案,再次提示它,得到一些答案,这种跨越多个步骤的对话,你的目标是真正最大化你的长期奖励。因此,正如你可能已经看到的,有很多工作致力于应用强化学习方法来最大化人类与智能体之间长期交互的质量,我们将在课程中涵盖其中一些内容。
这三种范式可能对你们大多数人来说都很简单,有些人可能以前见过它们。我还想快速介绍更多学习范式,当你开始查看课程项目并思考可以收集哪些形式的数据时,这些范式非常有用,以便它们适合这些当前从数据中学习的方式之一。
你看到了监督学习:X输入,预测Y。因此,你需要包含成对标注的X和Y的数据。当然,这是多模态学习,你有多个输入X进来,每个都提供互补信息,你可能对Y做出一些推断。这当然比只有X给你更多信息,前提是X1和X2选择得当。但现在你需要包含X1、X2和Y的数据,因此对你的数据有更多要求,而且通常数据量更少。
还有多任务学习,X输入,你同时预测Y1和Y2,利用两个任务互补的事实。例如,你可能想预测一个人的情绪,同时也预测一个人的压力,这两个任务通常相互关联。你可能想预测机器人抓取的物体的某些属性,同时也采取下一个动作来操纵物体。同样,这两个任务,虽然一个是标签,一个是动作,但彼此相关。因此,多任务学习如果效果好,可以表现得非常好。当然,限制是现在你需要X、Y1和Y2在一起的数据,即数据和两个标签在一起,这同样可能限制你拥有的数据量。
迁移学习略有不同。你可能在第一个任务Y1上训练一个模型X。训练该模型。然后,取你训练好的模型,并将其迁移到第二个任务Y2上。因此,继续在第二个任务Y2上训练该模型。
与多任务学习略有不同,因为现在你分两个阶段进行。第一阶段你需要X和Y1数据,第二阶段你可能只需要X和Y2数据。这也非常常见。这种两阶段过程在Y1和Y2数据分布不均时特别有用。例如,假设我训练一个图像模型来分类自然图像。我可以从互联网上获取大量自然图像数据,获取大量自然图像的标签。但然后我想迁移到一些在医院收集的医学图像上。因此,你将拥有少得多的医学图像和医学标签。迁移学习允许你处理这种不对称性。
跨模态学习是不同模态的扩展。有时训练X1模态用于Y,然后迁移到X2模态用于Y(或可能略有不同的Y)可能非常有帮助。因此,跨模态学习的输入模态不同,当你进行这种迁移学习时,如今X1可以是语言,你为某个任务训练大型语言模型。令人惊讶的是,这些大型语言模型不仅可以迁移到语言,还可以迁移到代码、数学、蛋白质结构、基因组序列,甚至机器人状态和动作序列,以及游戏状态。因此,我们如何推动跨模态学习的极限?不同的模态。你正在进行这种迁移吗?当然,可以结合这些。你可以进行跨模态学习,模态不同,同时也进行迁移,只要它们之间存在某种关系。
无监督和自监督预训练也非常常见。它是迁移学习的一种扩展,其中你不是以监督方式从X到Y1训练你的第一个模型,而是在第一个模型上进行一些无监督学习,即X到X‘。X’是X的某种变换。在这种情况下,你在第一步不需要任何标签,你只需要X,而X‘本质上是你创建的这种自监督标签。
有几种方法可以做到这一点:你可以使用图像的左半部分来预测右半部分;你可以将图像分解成不同的部分,像拼图一样,让模型重建哪些拼图部分应该放在哪里以重建完整图像;你可以使用前五个单词来预测第六、第七个单词(自回归生成);你可以旋转图像或向其添加噪声,然后尝试去除噪声或无限旋转图像。只要X和X‘之间存在某种关系,你就可以自动在计算机上完成,并且本质上可以无限访问X和X’对,从而预训练你的模型。
通常,如果设计得当,这些特征将非常强大,因为首先你拥有大量数据,X数据比X-Y标注数据多得多,所以你可以利用大量数据。如果你的特征和X到X‘的设计得当,那么它实际上会学习到非常好的特征,然后可以迁移到某个任务Y上。
因此,我们称之为无监督或自监督预训练。
更多互动学习范式。之前主要是关于进行预测。但互动学习范式,我们看到了强化学习,其中X(你的数据,或在强化学习中通常称为状态)输入,你可能采取多个行动,因为有多个状态、多个观察和多个你必须采取的行动。你可能最终获得一些奖励,你的目标是最大化这个长期奖励。因此,你想将强化学习视为多个行动、多个步骤。
大型语言模型适应也是使模型更具互动性的常见方法。你可能有一个本质上是监督性质的模型X->Y,即X预测Y,只是一个类别、数字或分类。你可以开始适应大型语言模型,使你的模型输出语言内容。这可能非常有用,因为现在你不仅可以预测是猫还是狗,还可以提出后续问题,例如它是什么类型的猫或狗。你甚至可以提示模型解释为什么它是猫,因此模型识别出它有四条腿、不同颜色等。本质上,通过使用大型语言模型向输出空间添加语言,使你的模型在回答所有问题甚至解释其决策时更具互动性。
当然,如何完美、稳健地做到这一点而不产生幻觉仍然是一个问题。
课程学习或主动学习。这是一种非常常见的范式。假设你有一个任务Y非常困难,如果你直接在Y上训练模型,模型会很糟糕。你可以做的是,首先用一些更容易的任务来监督模型。就像学生学习一样,学生从一些课程中学习,从容易的任务到更困难的任务。如何选择那个课程是一个开放性问题,但有很多相关工作。
主动学习是类似的范式,你可能首先拥有你的数据,模型对容易的数据做出预测,然后根据模型的当前状态,你将寻找越来越困难的数据或模型需要解决的越来越困难的任务。
人在回路学习。之前的一切大多只是在计算机上自动完成的。当然,在许多设置中,你有X来预测某个标签或采取某些行动,中间有一些人类反馈,然后可以用来为新的X训练模型并做出新的预测。这可以迭代进行,直到你对性能满意为止。它可以是原始的人类反馈,或者在你看到足够多的人类反馈后,你可以训练另一个模型来模仿人类如何给出反馈,这可以成为从某些人类反馈到最终自动化并预测人类将如何给出反馈的一种方式。
现在让我最后介绍几个其他重要的提示。我们研究了不同形式的数据,你应如何思考所收集数据的属性,以及从数据中学习并找到学习过程的不同学习范式。本质上,机器学习和人工智能的整个目标是找到一种好的方法来建模、学习关系、从数据中学习特征。
通常,你会考虑一个模型或一类模型。一类模型可以是一类神经网络(许多大型语言模型)、一类线性函数、一类决策树等。例如,在一维情况下,如果你有X和Y,你有一些包含X和Y标签的数据。
因此,有了数据和标签,你本质上是在学习一个函数,该函数学习数据之间的关系。你经常看到这些框图:X输入,你学习某个函数F或H,然后做出预测Y。
在下一讲中,我们将研究如何定义这些模型,这些模型是什么样子。你的模型表现如何,很大程度上取决于你如何选择模型或如何定义模型的参数。
但在深入探讨模型本身之前,你如何评估模型的好坏呢?
因此,经常出现一个称为过拟合与泛化的问题。真正的目标是泛化到未来的数据。在机器学习中,我们谈论你收集的所有这些数据。例如,你收集了一堆图像,并为其中的不同物体标注了标签。你本质上是在这些数据上训练模型,但你的希望是泛化到新数据。如果我明天用相机拍一张新照片,我希望能够做出预测;如果一年后有人与我的智能体互动,我希望大型语言模型在那次互动中表现良好。
因此存在风险。有时模型没有捕获关系,我们称之为欠拟合,即它没有很好地学习关系,你的模型能力不足。如果它过于完美地捕获了关系,我们称之为过拟合,即它已经专门化到你的训练数据,可能无法泛化到你实际在测试数据上部署模型时的情况。
因此,这条蓝色曲线显然是过拟合,与训练数据拟合得太好,而不是实际上具有平滑的关系。
这是一个需要担心的问题。通常在实践中,你会收集数据,将其分为训练集、验证集和测试集。这旨在模拟在测试新数据之前收集数据进行训练的概念。你本质上在训练集上训练模型,在验证集上调整超参数,并在测试集上测量模型的表现,以此模拟模型在尚未拥有的真实未来数据上的表现。

当然,确保你的测试数据条件尽可能接近你实际想在现实世界中部署模型的条件至关重要。
好了。总结一下,如何对待数据?我将为每张幻灯片添加“如何做某事”,但这次是关于数据或如何处理数据。
首先,决定收集多少数据以及标注多少数据,假设你将收集标签。考虑收集数据的成本、雇佣人工标注员标注数据的成本,包括金钱成本、时间成本等。
清理数据。通常需要对数据进行一些归一化或标准化,以便所有数据都处于一个良好的范围内。查找噪声数据,检测异常值、异常情况,有各种软件包可以做到这一点。

可视化你的数据。很多人做得不够,但你想绘制它。如果这是X1,这是Y,我绘制它,我知道我正在寻找X和Y之间的线性关系,这给了我设计什么模型的思路。这是一维的,所以更容易绘制。如果你的数据是高维的,有降维方法,如PCA、t-SNE,来识别聚类。我的数据是否首先落入我想要预测的聚类中,然后我才为它们设计任何模型?
选择评估指标。什么是评估模型好坏的好方法?无论是预测连续值、分类错误,还是更复杂的方法,如用户研究或可用性测试。你还想查看代理指标和真实指标。如果你的真实指标是未来人类如何使用,你不想在设计模型时与人类迭代,你可以使用它来获得一些近似真实指标的代理指标。
质量度量:单一量化指标和定性分析。
然后,并且只有在那时,你才会选择模型类别、学习算法并进行机器学习。不要从这一步开始,一、二、三、四需要先完成。
好了,总结一下,我们看了几个常见数据模态的例子。我们给出了一个统一的框架,说明如何思考数据中的维度。我们看了数据类型、标签和学习目标的类型,以及挑战,例如过拟合、欠拟合和实际泛化到现实世界的例子。

因此,本周的作业:还没有阅读作业,那将从下周开始。请确保在今天之前填写你的项目意向表,向我们概述你正在寻找的任务、数据和队友。
如果你还没有找到团队,请出去交流一下,尝试找到兴趣相似的人。

项目提案展示将在下周四进行。每个团队大约五分钟,我们将发出说明。本周四,我的学生将主持一个关于机器学习工具以及训练和调试流程实用技巧的教程。
好了,各位。今天和周四,如果你想讨论项目,我将在今天和周四的下午2点到3点在我的办公室,我们可以讨论你的课程项目,如果你需要任何反馈的话。

好了,谢谢大家。
在本节课中,我们将学习如何使用PyTorch和Hugging Face等实用AI工具来构建、迭代和调试机器学习模型。课程内容涵盖从数据处理、模型训练到性能评估的完整流程,旨在为初学者提供清晰、直接的指导。
在开始技术教程之前,我们先了解一些课程安排。请确保你已经提交了项目提案。提案表格已共享在Piazza上,你可以通过该表格寻找有相似兴趣的队友组队。
下周我们将进行项目提案展示,每个小组有5分钟时间介绍项目想法、计划使用的数据集等,以获取课程反馈。展示后一周,需要提交一份简短的书面报告。请尽快填写表格组队,并开始准备提案展示和报告。


接下来,助教David和Chanaka将为我们讲解关于高效构建、迭代和调试ML模型的实用技巧。


上一节我们介绍了课程的后勤安排,本节中我们来看看如何使用PyTorch进行机器学习。我是本课程的助教David,我将首先介绍如何使用PyTorch,然后通过一个在真实数据集上的简单项目来演示完整流程。
在开始前,请打开以下两个Colab页面,以便跟随操作:
- Colab 1: [链接]
- Colab 2: [链接]
本教程旨在帮助你入门PyTorch。如果你已有经验,可能会觉得基础,但我会确保每个人都能有所收获。
PyTorch是一个帮助加速机器学习过程的库。其核心概念是张量(Tensor),你可以将其理解为线性代数中的多维数组。
首先需要导入PyTorch库:
import torch
你可以通过多种方式初始化张量。如果你有一个像 [[1,2], [3,4]] 这样的二维数组,可以直接用它来创建张量:
data = [[1,2], [3,4]] x = torch.tensor(data)
如果你熟悉NumPy,也可以将NumPy数组转换为张量:
import numpy as np np_array = np.array(data) x_from_np = torch.from_numpy(np_array)
你可以初始化特定形状的张量。例如,要创建一个2行3列的随机张量、全1张量或全0张量:
x_rand = torch.rand(2, 3) # 随机张量 x_ones = torch.ones(2, 3) # 全1张量 x_zeros = torch.zeros(2, 3) # 全0张量
关于张量,有两个需要特别注意的属性,它们是常见的错误来源:
- 数据类型(dtype):张量可以有不同的数据类型(如整数、浮点数)。确保参与运算的张量数据类型兼容。
print(x.dtype) # 检查张量数据类型 - 设备(device):张量可以位于不同的设备上,如CPU或GPU。位于不同设备上的张量不能直接运算。
print(x.device) # 检查张量所在设备 # 将张量移动到GPU if torch.cuda.is_available(): x_gpu = x.to('cuda')
张量支持基础运算。例如,对于两个张量 x 和 y:
z = x + y # 逐元素相加 z = x * y # 逐元素相乘(不是矩阵乘法)
在PyTorch中,矩阵乘法需要使用特定函数:
z = torch.matmul(x, y) # 矩阵乘法 # 或使用 @ 运算符 z = x @ y
以上是对PyTorch张量操作的简要概述。
接下来,我们将通过一个完整的简单项目来演示整个流程。我们将使用实验室收集的小型气味传感器数据,对三种气味(环境空气、酒精、咖啡豆)进行分类。
在构建模型之前,我们必须先查看数据。根据我的经验,数据的实际格式与文档描述不符的情况非常普遍,因此先检查数据至关重要。
首先运行以下单元格来下载数据并导入必要的库。
# 假设的下载和导入代码 # !wget [数据链接] # import pandas as pd, torch, sklearn, etc.
数据包含三个类别的CSV文件。我们使用 os.listdir() 来列出所有文件,并用 pandas 打开一个文件查看其结构。
import os import pandas as pd data_dir = './smell_data/' files = os.listdir(data_dir) sample_df = pd.read_csv(os.path.join(data_dir, files[0])) print(sample_df.head())
你会看到许多列,分别对应不同的气体传感器读数以及一个“状态”列。
对于时间序列数据,可视化非常重要,它能帮助你理解哪些数据与分类相关。
import matplotlib.pyplot as plt # 绘制某个传感器通道随时间的变化 plt.plot(sample_df['sensor_channel_1']) plt.show()
在我们的数据中,传感器先采集环境背景读数(状态0),然后将物质靠近传感器采集实际读数(状态1)。通过计算状态1区域的平均值并减去状态0的背景值,我们得到了相对变化值,这能有效消除环境因素的影响,是数据预处理的一部分。
观察数据可以发现,不同传感器通道的读数范围差异很大(例如0-2000 vs 0-100)。这告诉我们需要进行归一化,因为神经网络对输入尺度很敏感,数值过大的通道会主导训练过程。
以下是数据处理的关键步骤:
- 加载并合并数据:读取所有CSV文件,提取特征和标签。
- 归一化:使用
sklearn的StandardScaler将输入数据缩放到相近的范围。 - 划分数据集:按80%训练集、20%测试集的比例划分。
- 创建Dataset和DataLoader:
Dataset负责存储数据和标签。DataLoader负责批量加载数据,支持并行处理以加速训练。使用较大的批量大小可以使梯度计算更稳定。
from torch.utils.data import DataLoader, TensorDataset from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler # 假设 X 是特征, y 是标签 scaler = StandardScaler() X_normalized = scaler.fit_transform(X) X_train, X_test, y_train, y_test = train_test_split(X_normalized, y, test_size=0.2, random_state=42) train_dataset = TensorDataset(torch.FloatTensor(X_train), torch.LongTensor(y_train)) train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
现在我们可以设计模型。这里我们使用一个简单的多层感知机(MLP),包含多个线性层、批归一化层和ReLU激活函数。
import torch.nn as nn class SimpleMLP(nn.Module): def __init__(self, input_size=13, hidden_size=64, output_size=3): super(SimpleMLP, self).__init__() self.layers = nn.Sequential( nn.Linear(input_size, hidden_size), nn.BatchNorm1d(hidden_size), nn.ReLU(), nn.Linear(hidden_size, hidden_size//2), nn.BatchNorm1d(hidden_size//2), nn.ReLU(), nn.Linear(hidden_size//2, output_size) ) def forward(self, x): return self.layers(x) model = SimpleMLP()
对于我们的简单数据,两到三层通常就足够了。输入大小是13(传感器通道数),输出大小是3(类别数)。
以下是训练循环的核心步骤:
- 从
DataLoader获取一个批量的数据和标签。 - 将数据输入模型,得到预测输出。
- 计算损失(预测输出与真实标签的差异)。
- 反向传播计算梯度(指导模型参数如何更新)。
- 优化器根据梯度更新模型参数。
import torch.optim as optim criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) for epoch in range(num_epochs): for data, labels in train_loader: optimizer.zero_grad() # 清零梯度 outputs = model(data) # 前向传播 loss = criterion(outputs, labels) # 计算损失 loss.backward() # 反向传播 optimizer.step() # 更新参数
评估阶段与训练类似,但不进行参数更新。我们计算模型在测试集上的准确率。
model.eval() # 将模型设置为评估模式 with torch.no_grad(): # 不计算梯度 test_outputs = model(torch.FloatTensor(X_test)) predicted = torch.argmax(test_outputs, dim=1) accuracy = (predicted == torch.LongTensor(y_test)).float().mean() print(f'Test Accuracy: {accuracy:.2%}')
在这个例子中,我们获得了约75%的准确率。我们还可以查看更详细的分类报告(精确率、召回率、F1分数),以分析模型在哪些类别上表现好或差。
模型迭代改进的方法是:识别表现最好和最差的类别。对于表现差的类别,分析是数据不足还是其他问题,并据此决定是收集更多数据还是调整模型。
最后,别忘了保存训练好的模型以供后续使用。
torch.save(model.state_dict(), 'smell_classifier.pth')


在划分训练集和测试集时,应尽可能模拟真实应用场景。例如,如果你计划在不同日期使用模型,那么应该用某天的数据训练,用另一天的数据测试,而不是随机打乱同一天的数据。
此外,对于这个数据集,我们还尝试了随机森林这种非深度学习的简单模型。
from sklearn.ensemble import RandomForestClassifier rf_model = RandomForestClassifier() rf_model.fit(X_train, y_train) rf_accuracy = rf_model.score(X_test, y_test)
结果随机森林的准确率达到了95.8%,远高于我们简单的MLP模型。这揭示了一个实用技巧:对于低维数据,简单的浅层模型(如随机森林、SVM)的性能可能优于复杂的深度模型。因此,建议先从简单模型开始尝试。
上一节我们使用PyTorch完成了一个端到端的项目,本节中我们来看看如何利用Hugging Face生态来微调大型语言模型。




Hugging Face不是单个库,而是一套工具集,让你能用更少的代码训练大模型。其两个核心库是:
transformers:提供API来加载预训练大模型。datasets:方便下载和使用公开数据集。
你可以直接在Hugging Face官网上搜索适合你任务的流行模型,然后将模型名称填入代码即可。此外,还有一些提升训练效率的流行工具,如:
bitsandbytes:量化模型,减少GPU内存占用。xformers或flash-attention:加速注意力计算,提升训练速度。
本教程将展示如何使用LoRA来微调大语言模型。LoRA是一种适配器技术,通过仅训练少量参数来大幅降低内存需求。
请确保在Colab中运行时选择GPU硬件加速器。
首先,我们需要登录Hugging Face,以便访问有使用限制的模型。
from huggingface_hub import notebook_login notebook_login()
运行后会提示输入Hugging Face令牌。你需要在网站个人设置中生成一个具有相应权限的令牌。
我们使用 bigcode/starcoderbase-1b 这个10亿参数的模型。一个经验法则是,模型参数数量(以B为单位)乘以2,大致是推理所需的最小GPU内存(GB)。对于训练,则需要更多内存。我们使用的Colab GPU约有4GB内存。
LoRA的相关参数(如r、alpha)决定了模型修改的程度,数值越大,改动越大,所需内存也越多。
接下来,我们加载并预处理数据集。由于时间关系,我们只使用4000个样本。
from datasets import load_dataset dataset = load_dataset("dataset_name", split="train").select(range(4000))
对于语言模型,我们需要分词器将文本转换为模型能理解的令牌(Token)。
from transformers import AutoTokenizer tokenizer = AutoTokenizer.from_pretrained(model_name) # 添加填充令牌(如果分词器没有) if tokenizer.pad_token is None: tokenizer.pad_token = tokenizer.eos_token
我们需要定义如何从原始数据中提取训练数据。关键步骤是使用分词器对文本进行编码。
def tokenize_function(examples): return tokenizer(examples["text"], truncation=True, padding="max_length", max_length=512) tokenized_datasets = dataset.map(tokenize_function, batched=True)


然后,我们以4位精度加载模型,这是为了适应有限的GPU内存。理想情况下,使用16位精度(如torch.float16)训练会更稳定。
from transformers import AutoModelForCausalLM import torch model = AutoModelForCausalLM.from_pretrained( model_name, load_in_4bit=True, # 4位量化加载 device_map="auto", torch_dtype=torch.float16, )
接下来,设置LoRA配置并应用。
from peft import LoraConfig, get_peft_model lora_config = LoraConfig( r=8, # LoRA秩 lora_alpha=32, target_modules=["q_proj", "v_proj"], # 对哪些模块应用LoRA lora_dropout=0.1, bias="none", task_type="CAUSAL_LM" ) model = get_peft_model(model, lora_config)
最后,配置训练参数并开始训练。Hugging Face Trainer API与Weights & Biases等工具有很好的集成,可以方便地监控训练过程。
from transformers import Trainer, TrainingArguments training_args = TrainingArguments( output_dir="./results", num_train_epochs=1, per_device_train_batch_size=4, logging_dir='./logs', report_to="wandb", # 报告到W&B ) trainer = Trainer( model=model, args=training_args, train_dataset=tokenized_datasets, ) trainer.train()
在监控训练时,除了损失曲线,还应关注:
- GPU内存使用率:最好保持在80%-90%,既能充分利用内存,又不易出现内存溢出错误。
- GPU功率利用率:如果低于60%,可能意味着数据加载或训练流水线存在瓶颈,GPU经常空闲。
- 梯度范数:梯度大小的平均值。如果持续增大,可能意味着训练不稳定。
由于大模型训练耗时较长,我们无法在此等待其完成。但通过上述流程,你已经了解了使用Hugging Face和LoRA微调LLM的基本步骤。
上一节我们介绍了使用高级工具库的流程,本节中我们来看看如何系统地调试机器学习模型。调试模型更像一门艺术,而非精确科学。我们的目标是提供一份检查清单,帮助你在模型不工作时,知道该检查什么。
以下是训练神经网络的基本调试流程和心法:
- 深入理解你的数据
- 机器学习工程师首先应该与数据融为一体。在尝试复杂模型前,花大量时间观察数据分布,看是否能发现直观的模式。对于数据量不大的任务,识别可建模的模式至关重要。
- 从简单模型开始
- 基于对数据的理解,尝试一个能给出初步信号的简单模型(如线性回归、逻辑回归)。对于已有公开数据集的任务,可以在GitHub上寻找相关的基线模型。
- 确保实验可复现
- 使用固定的随机种子,消除不必要的随机性,让调试过程更确定。
import torch import numpy as np import random seed = 42 torch.manual_seed(seed) np.random.seed(seed) random.seed(seed) - 简化问题,检查损失
- 尽可能简化模型。关注损失的初始值,如果初始损失就是无穷大(NaN),通常意味着模型初始化、数据归一化或损失函数有问题。
- 尝试在极小数据上过拟合
- 如果模型表现不佳,尝试让它过拟合单个或极少数训练样本。这是检验模型容量和训练代码是否正确的强有力方法。如果模型连一个样本都学不会(无法将损失降到接近零),那么问题可能出在模型架构或代码实现上。
- 可视化训练动态
- 观察损失曲线是如何下降/上升的,是否有异常波动。
- 监控梯度范数。梯度爆炸(变得极大)或消失(变得极小)都是常见问题,可能与权重初始化、学习率设置或数据未归一化有关。
- 不要过早优化架构
- 初期不要过分纠结于设计酷炫的模型架构。在确保简单模型能在训练集上学习之后,再考虑更复杂的架构。
- 从过拟合到泛化
- 机器学习关心的是泛化能力,而非记忆。一旦确认模型可以过拟合训练集,再引入正则化技术(如Dropout、权重衰减)来提升泛化性能。在此之前不要使用它们。
- 系统地调整超参数
- 很多时候模型性能不佳,仅仅是因为没有找到合适的超参数(如学习率、批量大小)。对于小模型,进行系统的超参数搜索是值得的。
- 集成与持续训练
- 如果以上步骤都做了,可以尝试模型集成。有时让模型训练超过收敛点(“训练更久”)也会有帮助。
- 最后考虑复杂架构
- 只有在完成上述所有步骤后,如果性能仍不满足要求,再开始研究并应用更复杂的模型架构。
核心思想是:数据 -> 简单模型 -> 过拟合检查 -> 调优 -> 复杂模型。遵循这个流程,可以更高效地定位和解决模型训练中的问题。

本节课中我们一起学习了实用AI工具的各个方面。我们首先了解了PyTorch张量的基础知识,并通过一个气味分类项目实践了数据预处理、模型构建、训练和评估的完整流程。随后,我们介绍了如何使用Hugging Face生态系统及LoRA技术来高效微调大型语言模型。最后,我们探讨了一份系统性的机器学习模型调试指南,强调了从理解数据、使用简单模型开始,逐步迭代优化的重要性。记住,在追求复杂解决方案之前,确保基础流程正确无误是成功的关键。

在本节课中,我们将学习深度学习中的常见模型架构。我们将在一个统一的框架下,理解序列模型、空间模型以及集合与图模型的设计原理。课程的核心是理解如何根据数据的固有结构(如不变性和等变性)来设计高效且数据需求量少的模型。


在开始之前,先说明一下项目与阅读的安排。
以下是项目提案的提交要求:
- 请于今晚前提交您的四页项目提案,通过邮件发送给我。
- 我会回复我的反馈意见。
- 如果您在最终确定项目想法前需要更多反馈,可以在下课后至下午3点在我们的实验室空间找我。

以下是本周阅读作业的要求:
- 阅读作业明天截止,为本周四的首次阅读讨论做准备。
- 本周主题是“数据与学习”。
- 有两篇必读论文,每个人都应阅读并反思,尝试回答文中的问题。
以下是两篇必读论文的核心议题:
- 第一篇论文关于“苦涩的教训”现象。该现象指出,随着算力增长,表现最好的往往是那些不使用过多归纳偏置和领域知识的大模型。您如何理解这一现象?它对您的AI实践有何启示?
- 第二篇论文关于“双下降”现象。这是现代AI中一个违背传统智慧的新现象,即模型在训练过程中可能看似过拟合且表现不佳,但训练更久后突然表现优异。这一现象对您部署和训练模型的方式有何启示?
以下是阅读作业的其他安排:
- 每个人都需要完成一个表格,回答一些问题并写下反思。
- 每周有10位同学会被选中承担更多任务,例如担任同行评审员等。具体角色和说明在PDF中。
- 这是一个随机分配每周10个角色的电子表格,链接在作业中。
- 如果某些周因旅行等原因无法完成任务,请尽快告知,我们会重新安排。
今天我们将涵盖四个部分。我们将提出一个统一的范式来审视深度学习中的不同模型架构。这与传统的AI/ML课程不同,在传统课程中每周介绍不同的模型或算法。我将尝试统一视角,说明如何看待不同架构,以及如何设计自己的定制架构,探讨这些原则可能是什么。然后,我们将看一些常见的案例研究,包括非常适合时间序列等时序数据的序列模型、适合空间数据的卷积模型,以及适用于集合和图数据的模型。
从高层次看,您应该将这些建模范式视为一个谱系。您设计的任何机器学习或AI模型都可能落在这个谱系的某个位置,从更领域特定的方法(真正考虑问题结构和该问题的专家知识)到更通用的模型(利用更多数据和计算,因此对特定领域或问题的结构考虑较少)。

以下是模型设计谱系的具体说明:
- 领域特定端:设计具有非常专业化架构的自定义神经网络,或设计真正嵌入您对问题了解或数据应具有属性的自定义训练目标。
- 通用目的端:例如,直接应用现成的模型(这非常通用),或者对预训练的通用现成模型进行一些微调或适配。

所有基于数据、架构、训练目标设计的方法都将位于这个谱系的某个位置。这个位置的确切取决于许多因素。
一个好的模型应具备以下因素:
- 捕获正确的语义信息:无论是进行预测、生成具有特定属性的数据还是进行预测,都应捕获正确的语义。
- 使用适当的数据和标签粒度:有些问题需要非常精细的定位,有些则需要更高级别的信息摘要。这是一个非常重要的因素,我们将看到,在谱系上不同位置的点需要根本不同数量的数据(包括未标记数据和标签)。
- 尊重部署时的资源约束:有些模型更适合在大型GPU上运行,有些则更适合在边缘和小型设备上运行。
- 提供适当级别的可用性:无论是您关心的某种解释质量、向用户解释模型决策,还是以某种方式使其更易于访问,这也会影响该点在谱系上的位置。

可能还有更多考虑因素,这是在开始设计模型之前首先要思考的事情:什么是好模型?有哪些属性?哪些是希望拥有的?哪些是绝对不能妥协的?

接下来的几堂课将基本涵盖这个谱系。今天的讲座将更偏向领域特定,涵盖一些更定制的模型架构。然后我们将开始讨论多模态架构,它们位于中间位置。春假回来后,将真正更多地讨论通用架构以及如何为您的任务微调和适配它们。因此,我们将涵盖从领域特定到更通用目的以及适配这些通用模型的整个谱系。
为了开始讨论这些更领域特定的方法,我们先回顾一下两周前关于数据的内容。我们提出了“模态概况”的概念。您收集的每个数据、您试图建模的每个任务都将具有一些特征。我发现将您的问题分解为这些特征中的每一个是非常有用的,对于每一个,您都需要从数据中理解它,并理解您将如何建模该特征。第一个是元素及其表示方式。
第二个是元素的分布。您是只关注图像的两三个部分还是高频数据?如果您处理的是空间或图形数据,其结构是什么?您的数据中必须鲁棒应对的不同类型的噪声是什么?您的任务是什么?它必须与您的任务有多相关?因此,模态概况再次只是一个总结:给定您的数据,这些是您首先应该查看并尝试理解您的数据的事项。
在理解了您的数据(包括将其分解为单个元素、它们的组成方式、分布等)之后,您可能开始构建一些深度模型。深度学习模型的一个统一观点是,这些模型总是有几个步骤。一个步骤是学习表征。学习表征的定义是,您将获取一些非常高维的原始数据,并尝试学习从中提取信息的更抽象的特征。
因此,可以有一个模型将其转换为一些更密集、更低维的特征,并从您的数据中捕获一些重要信息。几乎所有学习模型中的第二个关键属性是组合表征。您可能已经学习了图像中飞机的表征、天空的表征、地面上有房屋的表征,所有这些都代表某种意义。您如何组合它们以学习整体场景中的信息?在模型更深层时,总是在提取特征和学习表征的步骤与组合这些特征的步骤之间交替,以学习更具信息性和总结性的表征。
鉴于这些是深度学习中的两个目的,您基本上可以将不同的深度学习块视为实现这两个目的的方式。为了学习表征,有几个人们可能见过的块。全连接网络基本上是矩阵乘法。ReLU基本上是一个激活函数。如果一切都是线性的,那就是全连接。这些是线性函数。如果您有太多线性函数,最终将学习一个线性模型。像ReLU这样的东西是非线性激活函数,因此您可以开始逼近更复杂的非线性函数,并且可以证明在极限情况下它可以表达基本上任何函数。层归一化已被证明可以帮助您标准化数据并使一切处于良好的归一化范围内。卷积和自注意力(稍后介绍)本质上是用于基本学习特征或表征的构建块。
第二点,正如提到的,是用于信息聚合的块。因此,如果您从一个图像部分学习了特征,从另一个图像部分学习了特征,如何组合它们以学习整个图像的特征?同样,有几个您可以考虑的块。连接是一种非常简单的跨信息组合方式。注意力(稍后介绍)甚至像逐点加法、两个向量的逐点加法或取两个向量之间的最大值,都是组合信息的方式。
本质上,您为应用程序设计的任何现代AI模型都将是这些块的某种组合(可能简单,可能复杂)。因此,您有数据(这些小三角形代表一些元素,例如图像的某些部分、段落中的某些句子、句子中的某些单词),并且您将应用提取特征的层来学习表征,并在其中一些层或块中组合信息以学习更具信息性的语义特征。因此,它可能看起来像这样。

一旦您设计了这个前向传播,您基本上就计算您的损失。损失本质上衡量您预测的标签与真实标签的接近程度。如果您有一些标签数据,计算一些差异,并基本上将其视为您想要最小化的损失函数。您希望最小化预测值与真实标签之间的差异。您基本上可以通过计算梯度并应用像随机梯度下降这样的方法来最小化该损失,从而更新您的参数。

希望这对任何了解基础深度学习、基础机器学习的人来说并不新鲜。我只是以一种更统一的方式呈现:这些只是您可以定义和组合的不同构建块。只要大多数内容是可微分的,您就可以组合任意数量的这些构建块,并且基本上可以计算前向传播、计算损失、计算梯度以更新参数。


我们还看到,您阅读的任何机器学习论文、任何深度学习论文,无论是Transformer还是CNN,都将是这些块的某种组合。关键思想只是您如何放置这些块,放在哪个位置。
说到如何放置这些块以及如何思考设计模型的方式,让我从一个简单的例子开始。我想使用集合和点云作为例子。我非常喜欢这个例子。您有某种形式的数据集,本质上意味着我给您一堆具有特定属性的演员或女演员的图像,您可能想检测一些异常,即哪个人可能没有与其他人类似的人口统计属性。
或者是点云,这些是3D网格,每个点基本上是X、Y、Z坐标,您可以将一堆它们放在一起以构成3D形状、体积形状。也许您的目标是在您的图像集中检测异常,扩展以获取新图像,将这些点云分类为不同类型的家具,甚至生成点云的新3D模型。
那么,您将如何设计这个例子的神经网络?同样,它将是这些块的某种组合。您需要从您的集合和点云中提取一些特征。您可能需要聚合信息,因为现在您的集合中有多个图像,点云中有多个点。问题也许是我应该如何进行这种特征提取、学习表征,以及我如何真正聚合所有这些信息。
您想要思考的方式是,显然这些数据以某种结构形式出现。当您有集合或图数据时,可能想要考虑的最重要的结构是,您构建的任何模型都应该对集合中元素的顺序保持不变。
无论我以ABC DE的顺序向您呈现我的图像集,并尝试让您找到异常图像,还是我以ECDDA的顺序(某种反向顺序)向您呈现,并让您找到异常图像,您的模型应该给我相同的答案。五个图像集合中的异常图像不应取决于我呈现这些图像的顺序。
因此,几乎所有为集合设计的成功深度学习模型中的两个关键思想是:第一个关键思想是,首先,您应该共享编码每个集合元素的模型的参数。共享参数在这里意味着相同的颜色、相同的参数。

第二个关键思想是,您应该使用一个置换不变的函数来聚合从这些个体表征中学到的信息。例如,加法(如果这些都是向量,您将它们逐元素相加)就是置换不变的。一旦您有了那个特征,您可以将其输入更多层,并可以对标签进行预测。
为了理解为什么这很重要,只需想象我向模型呈现了不同的顺序,例如EC、B、EA,即图像的不同顺序。现在,每个这些元素都将通过完全相同的特征提取器来获得相同的表征。所以这没有改变。而这个加法函数,无论您加EC E加E还是您加C加E,都会得到相同的结果。因此,现在您从提取数据(A B D CE或其他顺序)中学到的最终特征将完全相同。这意味着您预测的异常图像也将完全相同。


本质上,这个想法是,如果我向我的模型呈现训练数据,一个顺序为AB DCE的示例,我也基本上同时给了模型所有可能的这些图像的排列(即不同顺序),模型将学习相同的表征,无论我给它什么顺序。

假设您不满足这两个约束。假设您不为每个元素进行参数共享。那么现在您正在设计一个模型,其中对于呈现给您的集合中的每个元素,您将使用不同的特征提取器(由不同颜色和不同参数表示)。这基本上意味着您呈现给模型的是相同的集合,只是顺序变了。答案应该相同,但模型最终将学习一个不同的结果,因为每个集合元素都通过不同的特征提取器,一旦将它们相加,最终特征将不同。实际上,这意味着您需要给模型第一个元素顺序,然后给它第二个顺序,它将学习其他东西,因此您必须给模型所有可能的顺序,本质上需要给模型看5的阶乘倍(即120倍)于第一个案例(您共享了参数)的样本。
同样,如果您进行参数共享,但不使聚合函数置换不变呢?一个例子是您进行参数共享,每个特征都通过具有相同参数的相同编码器,但您不做像加法这样对顺序不敏感的操作,而是做像连接这样的操作。在连接中,无论您堆叠A B还是堆叠B A,都会改变模型输出的向量。因此,做像连接这样的操作,那么标签又会不同,这意味着要成功训练这个模型,您需要给模型所有这些排列,然后它才能成功地从您的数据中学习。同样,您需要5的阶乘倍(120倍)的周期。


这只是一个非常简单的例子,希望人们觉得直观:如果您仔细设计模型架构,您将需要比不仔细设计时少得多的样本。
为了概括这个讨论,我发现当您收集数据或查看任务时,有两个想法非常重要。两者通常都归入“结构”这个概念下。第一个想法是数据不变性。即您可以对数据进行的、标签或结果不应改变的变换。例如,我给您这个图像,上面有一个高亮的3,您的目标是分类这是什么数字或将其分类为3。如果您只是将图像上下左右移动几个像素,如果您将图像旋转45度、90度,如果您将其变为黑白而不是RGB,您仍然应该得出标签3。这是一个不变性的例子,理想情况下您的模型应该捕获它,因为如果您的模型对颜色敏感,或者对旋转敏感,或者对像素左右的小位移敏感,那么您将需要更多的数据来本质上学习相同的任务。

因此,图像分类是数据中具有某些不变性的一个例子。不变性是对输入数据的更改,模型不应敏感。这与等变性相对,等变性是输入数据中模型应敏感的更改。

考虑一个非常相似的任务。同样,给定这个带有3的图像,您的目标基本上是生成一个语义图,告诉您这是背景,这是数字,这是树,这是海洋,您想做像分割这样的事情。那么,如果我将此图像向上移动两个像素,我的语义图也应向上移动两个像素。如果我将此图像旋转45度,我的语义图也应旋转45度。因此,移动和旋转是等变变换。无论我对输入数据进行什么更改,我也希望模型在输出中捕获该更改。这与例如颜色(无论是RGB还是黑白)相反,您仍然应该得到相同的语义图,因此RGBA和颜色是它应该不变的东西,而位移和旋转是它应该等变的东西。
这些是开始处理数据时要考虑的非常重要的属性。正如在集合数据分类案例中看到的,您必须尊重置换不变性这个想法。这意味着您可以任意置换您的元素。给定ABC或CBA,给定您要设置的所有元素,理想情况下不应改变模型的输出。
这是一种我喜欢思考的统一框架:给定数据,并且您想设计一些定制架构,使用尽可能少的样本并尽可能高效,这些是您可能想要考虑的事情。
接下来,我们继续讨论一些常见的架构。我们将再次在不变性和等变性的框架下呈现这些常见架构,我们将看到为什么这些架构会以这种方式被提出。

第一个要讨论的模型类型是基于时序的模型。例如,一个元素是一个单词,这个单词可能构成更长序列的一部分。您可能有一个很长的单词序列,或者它可能是时间序列数据中的时间步序列,也可能是代码、基因组学数据,所有这些都是序列。
目标可能是对下一个单词、某个主题或给定序列数据的某个标签进行分类。同样,关键问题是如何学习表征以及如何聚合信息?显然,对于时序数据,一个非常关键的想法是局部性的概念。如果您想预测下一个单词,您可能会看它前面的单词,可能前面的单词是最重要的,但当然,考虑到更长的上下文、四五个甚至更远范围的单词也是有意义的,这取决于您有多少计算资源。
这真正激发了我们对序列分类经典模型的首次讨论。这些模型本质上接收像单词、时间序列或基因组学数据这样的数据序列,并对您的标签进行一些预测。
同样,给定这样的数据,您想再次思考两个属性:这些数据应该对什么保持不变(即对什么更改不敏感),以及对什么应该等变(即对什么更改敏感)。直观上,为序列数据设计的任何模型都应该对时间本身保持不变,即无论您将此序列向前或向后移动一步,都不应对模型产生太大影响。但它应该对顺序等变,如果您说“狐狸跳过”或“狗跳过”,如果您改变单词的顺序,那么这是模型应该极其敏感并真正考虑到的更改。
为了处理这两种类型的不变性和等变性,几乎所有用于序列数据的模型都具有这两个属性。第一个属性是跨时间步的参数共享。相同的模型、相同的特征应处理这个单词、这个单词、这个单词和那个单词,即使单词本身可能不同,它们使用的处理函数应该是相同的。这很关键,因为否则,如果您只是将序列左右、前后移动所有时间步,那么如果您不共享参数,您将得到非常不同的输出。
第二个关键想法是您希望跨时间聚合信息。这种循环的思想是,您首先在这里提取特征,这是一个特征提取器,然后您看下一个单词“跳过”,提取特征,并累积您在前一个单词上的信息,然后看第三个单词,提取特征,并累积您在第二个和第一个单词上的信息,依此类推。这种跨时间的信息聚合思想。第二点本质上就是使模型对单词顺序等变的原因,因为现在如果您改变单词序列,您的信息聚合序列将不同,您将得到不同的结果。
因此,您应该对每个时间步不敏感,但应对呈现给模型的单词顺序敏感。因此,两个关键思想:我们希望进行参数共享,相同的特征提取器跨时间步,并且我们希望以自回归方式跨时间聚合信息。一旦您遍历了整个句子,您就预测标签。
为了了解这通常是如何实现的,这里有一点数学符号。X是您的数据,第一层概率乘以一些参数U。所有这些模型都只是线性变换U乘以X(矩阵乘法),后跟一些激活函数如tanh,这允许您表达非线性函数,然后您可能对其应用下一层,例如V是您的下一个参数,V乘以前一层的输出,最后您将计算相对于真实标签的损失,在这个分类案例中是负对数似然。本质上,当前模型只是展开这个,其中相同的V、相同的D是应用于序列中不同时间步X1、X2、X3等的相同参数。这显示了相同的参数在每个序列时间步应用,相同的参数在这里应用,相同的参数在这里应用。只是视觉上,输入的数据不同,是X1到Xt,但每个时间步都应用相同的参数,这是参数共享的关键,并且信息本质上跨时间累积。这里的H是信息累积的地方。

这是非常高层次的序列分类。当然,您也可以扩展它来进行序列生成。因此,如果您不是输入一个序列并预测一个标签,而是只输入一个东西并输出多个东西。假设我给您一个单词“狐狸”,您的目标是完成一个故事或生成音乐。同样,您将在每个时间步使用相同的参数。您将生成一些东西,将您之前生成的Y1作为输入到下一步并生成Y2,然后将您在Y2中生成的内容作为下一步生成Y3。我们称之为自回归解码。但想法相同:参数共享,每个步骤有一组参数,并且您将通过将先前生成的内容输入以生成下一个标记来跨时间累积信息。
数学上,它的样子是,您在T时刻的每个特征是您在前一时刻生成的Y和T-1前一时刻的特征H的函数。U和W是跨时间步共享的参数。
有些人可能意识到这些是循环网络,并会说它们已经过时了,但我实际上要说服您并非如此,因为RNN已经演变为LSTM,LSTM演变为时间卷积网络,而时间卷积网络真正启发了现代状态空间模型中的许多工作,如果您想处理时间序列或连续数据作为Transformer的替代方案,这些模型现在仍然相当流行。
那些是用于序列生成的模型。序列到序列模型本质上结合了两者。因此,将有一些序列输入,也将有一些序列输出。为了了解其工作原理,当序列输入时,完全相同的想法,您希望在每个时间步使用相同的参数来处理每个单词,并且您将跨时间累积信息,例如“狐狸跳过”,累积信息。当您读完一个序列时,您可以预测第一个输出,然后自回归地将前一个输出作为输入到下一步,得到Y2,取Y2,输入得到Y3。这些是序列到序列模型,用于机器翻译,例如您想将三个英语单词的句子转换为三个法语单词的句子。它们也用于许多机器翻译和当今的许多生成模型。
这是一个非常好的问题,也是下一部分的很好过渡。在某些语言中,我们知道主语或宾语翻译也是主语动词宾语,当然在其他语言中不一定。因此,一篇非常重要的机器翻译论文基本上展示了这些热图。这些热图告诉您,给定英语输入序列和法语输出序列,哪些英语单词对应于输出法语单词,您可以看到大多数都沿着对角线,因此顺序大部分被保留,但当然也有细微差别,有些偏离对角线,意味着英语和法语之间的单词顺序发生了偏移。

我说这是开创性的,因为这种机制本质上被扩展了,我们称之为基于注意力的方法,这些方法告诉您,当我在生成Y1时,前三个单词中哪些与生成Y1最相关?是“狐狸”还是其他?或者可能有一点“狐狸”,一点“跳过”,然后我在生成第二个单词时,这三个单词中哪些最重要?这就是为什么您会得到这个T乘T的注意力矩阵:您的输入序列乘以输出序列。当然,如果您的语言差异更大,比如英语和中文、英语和日语,那么您的注意力矩阵会更加偏离对角线。它应该是一个正方形,应该对应单词到单词,但有时可能不是正方形,它可能是T1乘T2。
另一个问题:我们是否将GPT视为序列到序列模型?是的,它们也算作序列到序列模型,有一些更高级的掩码,我稍后会讨论Transformer,但要获得GPT这样的序列到序列模型,您本质上拥有整个序列,只是放置掩码标记以强制模型生成输出。
这是一个非常好的过渡。序列到序列模型曾经很流行,然后它们通过注意力机制得到了增强,正如您所知,这些注意力机制真正启发了所有这些现代Transformer。对于不知道的人来说,第一篇Transformer论文实际上是在机器翻译上进行的基准测试,这是他们全面获得的第一个数据结果。
同样,这些基于注意力的方法的想法是,有时我可能希望给不同元素动态权重。在翻译时,我看第一个单词,也许我主要看第一个单词,但我也想稍微看第二和第三个单词;我看第二个单词时,我想主要看第二个,也许稍微看第一和第三个。这些基于注意力的方法本质上通过利用其上下文来计算新特征。因此,我想为单词“lazy”获取一个新特征,我将查看它前面的其他四个单词,我将计算注意力分数,这些分数本质上告诉我前四个单词中的每一个应该为第五个单词学习的特征贡献多少。
您可以这样想:五个上下文单词中的每一个都输入,这是您想要的目标特征,您想本质上学习一组五个分数A1到A5,告诉我五个单词中的每一个对这个新特征的相对贡献。然后,这些注意力分数可以用来根据它们的贡献加权每个特征。因此,您应该取A1乘以“狐狸”的值,A2乘以“跳过”的值,A3乘以“过”的值,A4乘以“那只”的值,A5乘以“懒惰”的值。一旦您获得这些注意力分数,它们告诉您相对贡献,然后您将实际将其与特征本身相乘,得到按这些注意力分数加权的加权和。
再给一个层次的细节,我喜欢通过矩阵乘法以抽象的方式思考这些注意力模型。为了解释这一点,这可能是每个人在Transformer中都见过的方程。我喜欢这样思考:这里有几个矩阵。X是您的数据。您的数据本质上是3乘D。在这个例子中,我假设您有三个单词,我不想画太多。三个单词,您的数据是3乘D,这意味着对于三个单词中的每一个,您都有某个维度。这里的WQ本质上只是您通过数据传递的一些线性变换,将其从单热标记转换为低维密集向量。因此,一边是3乘D,我将再次取我的数据并乘以另一个可学习参数,但这次我取转置,所以3乘D的转置变成D乘3。我先排列维度,然后排列单词数。本质上,我进行我们称之为加权外积的操作,这个外积本质上帮助我对于三个单词“狐狸跳过过”中的每一个,与相同的三个单词“狐狸跳过过”,得到一个3乘3的注意力矩阵,告诉我我的模型应该关注哪些成对注意力分数。“狐狸”与其他三个单词,“跳过”与其他三个单词,“过”与其他三个单词。
您的注意力分数总是序列乘序列。您将通过缩放来归一化。这里的原因是,因为您的3乘3矩阵中的每个条目都是D维向量与D维向量点积的结果。这就是您从3乘D和D乘3得到3乘3的方式,每个单独的条目是一个D维向量点积,所以如果您不小心,如果D很大,那么幅度Q会随着D迅速增加,因此我将除以D的平方根来归一化。方差变为1/D,值被归一化到0和1之间。然后我将进行softmax。这本质上是一个行softmax,将每一行的条目归一化为非负且和为1。因此,您实际上可以将这些条目视为例如0.7、0.3,非负且和为1,或者1.0、0、0,非负且和为1。您实际上可以将它们解释为注意力,告诉您我应该以概率分布的形式关注多少,例如这里50%,那里25%,25%。最后,您然后实际将其与真实的特征向量相乘。因此,仅仅有注意力分数不是很有用,仅仅告诉您哪些部分应该共同出现并相互关注,您必须实际将其与您的特征相乘以实际进行注意力操作。
因此,您将应用于您的特征X,这是另一个线性变换,这是3乘D,这是3乘3,这是3乘D矩阵向量乘法,得到3乘D的输出。这个输出向量您想再次将其解释为语言的新表征。因此,有三个标记,您再次为“狐狸跳过过”有一个新特征,只是对于每个单词,您查看了与其他三个单词中每一个的注意力,并实际乘以其他三个单词的向量,按该注意力缩放。然后您可以用它来进行任何您想要的预测。
这就是五分钟内的Transformer。尽管它们看起来与循环模型不同,但实际上并没有那么不同。回到统一框架,您再次要记住,序列数据,任何用于序列数据的模型必须尊重对时间的不变性,但对单词顺序的等变性。在这种情况下,您仍然尊重这些属性。首先,您仍然跨时间步进行参数共享。每个输入的单词通过Transformer嵌入,它们都通过相同的可学习变换,即W、W和W,本质上是在时间上重复的三组权重矩阵。因此,这种参数共享允许模型对时间保持不变,因此无论您将序列前后移动还是用零从左或右填充,它仍将给出相同的结果,因为不同时间输入的单词共享参数。
在这种情况下,它仍然在进行信息聚合。只是这种信息聚合不是顺序完成的(您必须等待一个得到两个,两个得到三个,三个得到四个,四个得到五个,这在GPU上可能更慢),而是使用矩阵乘法并行完成,一次性获得整个5乘5的注意力权重并进行注意力操作。因此,它仍然对单词顺序等变,因为如果您置换顺序,注意力矩阵将不同,然后输出将不同。因此,想法仍然相同:用于序列数据的模型应对时间保持不变,但对单词顺序等变。

最后,对于空间数据,同样的问题仍然存在:如何学习图像每个部分的特征?如何聚合图像多个区域的特征以进行预测?

本质上,您希望理想地构建一个能够分解元素、可能学习图像每个部分的特征、可能聚合图像的局部部分以从图像中获得越来越多信息的模型。您如何做到这一点?一种朴素的方法是,您有一个图像,您只是将其展平,因此每个这些都是像素,您可以将其展平为像素序列,然后可以使用全连接网络连接到下一层。

当然,这是一个非常糟糕的主意。为什么这是一个坏主意?如果我的图像是200乘200,即40,000像素,并且我想进入具有N个特征的下一层,这个矩阵将是40,000乘N,这非常巨大,所以效率不高。另一个大问题是,我为空间数据设计的任何模型应该对任何空间变换保持不变。如果您将图像上下左右移动几个像素,稍微旋转5度、10度,输出不应改变。如果您有一个模型基本上使用从像素到响应的全连接网络,那么它将对图像上下左右的细微位移敏感。

一个很好的问题:首先,我不明白为什么空间数据是……首先,有两个块,红色在黑色上面,所以如果我翻转它,那就不同了。很好的问题。正如一开始提到的,这取决于您的数据。如果您尝试进行分类,那么它可能对空间方向非常不变。如果您尝试进行分割,那么您将敏感,因此对于您描述的情况,它应该对任何位移和旋转等变。这取决于任务是什么:是将其分类为红色和白色块(在这种情况下您可以任意旋转),还是进行语义背景分割(那么您不希望旋转不变性)。
但一般来说,大多数用于图像的模型,特别是进行分类或检测时,将非常不变。以下是Transformer的几分钟介绍。第一个关键想法是,我不需要将所有输入像素连接到所有输出响应。如果我想获得输出响应,例如图像的右上角,我可能或应该只查看右上角区域的几个像素,而不需要查看图像的左下角区域。第一个关键想法是,我将只具有从像素到输出的稀疏连接,其中连接由某个滤波器大小(例如3)决定,其中每个输出响应仅取决于输出位置附近的三个像素。这首先节省了参数效率,同时也尊重了局部性,即该输出仅取决于其连接的小区域。


然后,我还将进行另一个修改,即共享参数。这个输出取决于三个附近位置,我将共享参数,因此相同的权重从这个输出应用到这三个位置,从这个输出应用到另外三个位置,从这个输出应用到这三个位置。现在,这种共享参数的想法本质上给了您空间不变性,因为现在您可以将像素左右移动一点,只要它落在窗口大小为三的范围内,就不会改变输出。


视觉上看起来像这样:我有一个图像,我将采用某个窗口大小,例如3乘3,对于每一个,我将提取特征,本质上总结该3乘3区域中的信息。我将把滤波器移动到下一个3乘3区域提取特征,然后下一个3乘3区域提取特征,每次提取特征时,我将使用相同的权重。同样,正如您所见,它将对该2乘3节点内的任何小变化保持不变,无论您在该2乘3节点内将剪切向下向右移动,它仍将给您相同的输出。我将用其他几层完成,并且还将跨那些2乘3区域聚合信息,这称为池化操作,本质上您有某个区域,例如2乘2,您将只取最大值。这使得模型对这些小位移和变化更加不变,并迫使模型看更大的图景。我只是取最大值。同样,相同的构建块只是卷积和取最大值,只是跨这些窗口和区域应用。
总结一下,卷积层允许模型学习这些部分的组合。人们已经证明,您取像素,首先学习边缘,然后一旦您学习了一些边缘,您组合边缘以学习直线边缘以学习部分和形状,然后您可以组合这些形状以学习更复杂的东西,如面孔。因此,卷积允许模型学习这些子部分,而池化(因为它本质上迫使模型在一个区域上取最大值)允许模型学习更抽象的信息,而不是仅仅关注低级细节。
如今,人们也从CNN转向了视觉Transformer,尽管不像NLP中从循环模型到Transformer的转变那样剧烈,但现在很多人使用视觉Transformer。老实说,要设计一个对任何空间平移保持不变的模型,这些视觉Transformer所做的是,它们切出图像中K乘3的块,因此原始图像是所有这四个部分在一起,现在它们将图像切割成不同的部分。每个部分可能是K乘K。您将这些作为四个图像部分的序列输入,就像您将其视为四个单词的序列一样,您对其应用Transformer,本质上通过计算相对于其他三个部分及其自身的注意力分数来学习每个部分的特征(给出四个分数),并通过使用这四个注意力分数对那四个特征中的每一个进行加权和来提取特征。

但同样的想法适用。首先,您仍然跨每个K乘K区域进行参数共享,相同的参数用于处理这个部分、这个部分、这个部分和这个部分,因此您仍然跨四个区域进行参数共享,并且您仍然跨这些块聚合信息。因此,如果这些块设计得当,那么模型将不会对这些块之间的任何小位移和移动非常敏感。
因此,您可以将这种分块视为类似于这些卷积区域。这只是视觉Transformer的动画:获取图像,分割成一系列块,应用一些序列设置,然后学习一个Transformer以获取成对注意力,从而获得图像的整体表征。


最后,图。图是另一种形式的数据,您有一些节点,也许某些节点之间有一些连接。对于图网络,同样的想法适用:首先,如何学习特征?如何聚合特征?
图网络的关键想法是,同样,您希望为每个节点共享参数。因为如果您不共享参数,那么您将无法泛化到新节点或新图。而信息聚合的想法是,您只想查看邻居中有哪些特征并从它们中提取那些特征。
假设您想学习节点A的表征,例如A是您社交网络中的一个人。您想为它学习一个特征,我们首先看哪些邻居是它的朋友,例如C、D、B、E。但要学习C的特征,C只依赖于A;D只依赖于A;B依赖于两个朋友A和E;E依赖于两个朋友A和B。因此,您本质上设计一个像这样的模型:这只是一个神经网络示意图,您想通过学习邻居的嵌入、通过一些非线性变换来学习特征,而邻居又将递归地依赖于它们的邻居。



因此,这又是图网络的高层思想:您希望跨节点共享参数,因此所有这些节点将执行相同的函数,并且您基于节点彼此之间的连接性聚合信息。您可以看到图恢复了集合。集合本质上只是具有节点且彼此之间没有边的图。因此,同样的逻辑适用:您有一些参数共享,因此为每个节点提取相同的特征,只是这次没有聚合,因为当您为A学习特征时,它不依赖于任何其他东西,B不依赖于任何其他东西,因为没有邻居。

事实上,您可以应用相同的逻辑并证明图恢复了空间数据。像图像这样的空间数据本质上是部分在某些区域内上下左右连接的部分,因此有一个1乘1的区域,就像这样,也许您连接了2和3,如果您认为那是图像应该连接的区域。同样,它也是序列的泛化,因此序列是一个链图。这就是为什么在我们见过的所有这些模型中,总是跨元素进行参数共享,相同的模型处理A、B、C和D。并且信息聚合总是在您的邻居之间进行,或者对于序列数据,每个信息左右聚合,或者对于空间数据,您上下左右聚合信息。
总结一下。我认为这内容很多。幻灯片会上线,希望你们中有些人以前见过这些模型的某些组合,但这只是一个统一的框架,用于审视多种深度学习架构并了解如何设计自己的架构。

总结一下,上周的“如何建模”主要是关于数据:如何首先决定收集多少数据、标记多少数据,这是超级关键的;清理和规范化数据;从数据中移除异常值;可视化数据以理解标签与数据以及标签之间的关系。最后,正如提到的,您需要建模数据的方式很大程度上取决于您希望模型满足的最终结果和属性,无论是性能、效率还是某种程度的可解释性。
然后,您会想选择一些模型范式。今天我们看了针对每种模态的更领域特定的方法,也让您了解了如何为集合和图等构建定制架构。接下来的几堂课还将研究更通用的模型以及如何适配通用方法。
因此,对于任何AI问题,您必须做出的一个重大决策是:如果存在一些通用模型,您可以适配、微调它;如果不存在,我想在多大程度上构建一些领域特定的模型,无论是在模型架构上特定还是在训练目标上特定。
您必须弄清楚基本元素和表示。正如我们提到的,这总是关于将复杂数据分解为单个元素,无论元素是按序列组织、空间组织,还是集合或图上的元素,弄清楚基本元素以及如何表示它们。
弄清楚数据不变性和等变性。不变性是模型不应敏感的东西,等变性是模型应敏感的东西。如果您不小心,可能会爆炸性地增加模型训练所需的样本数量。
同时,我们还要弄清楚我们讨论的模态概况的其他部分,包括模型应鲁棒应对的噪声、信息量等等。最后,您通常会在数据收集、模型设计、模型训练、超参数调优、评估等之间迭代,直到您满意为止。


记住,阅读作业明天截止,为周四的讨论做准备。请今晚提交您的项目提案,稍后通过邮件发给我。接下来的一个小时我将有空提供反馈。谢谢大家。



在本节课中,我们将要学习多模态人工智能的基础知识,特别是如何让不同形式的数据(如文本、图像、声音)相互“对齐”和理解。我们将从多模态AI的概述开始,然后深入探讨其核心挑战,并重点讲解“对齐”这一关键方法。



首先进行课程安排说明。项目提案已提交,感谢大家的努力。我已为每个项目分配了一位主要助教(David或Chnnya),目标是每周与我和主要助教会面一次,以跟进项目进展,目标是将其提升至前沿的研究水平。

阅读任务方面,第二次阅读作业将于明天(周三)截止,为本周四的阅读讨论做准备。这两篇论文主要围绕现代AI架构的主题,一篇探讨自回归模型的“缩放定律”,另一篇则研究在模型训练中不同数据点的重要性差异。


到目前为止,我们已经涵盖了AI的基础知识,包括AI研究简介、不同形式的数据及其内部结构、从数据中学习的方法,以及不同模型架构(如序列、卷积、空间和图模型)的统一范式。
现实世界中的许多问题都涉及多种不同的数据源和模态,这是一个活跃的研究领域。在接下来的三周(直到春假),我们将从宏观视角介绍多模态AI的不同范式。今天我们将介绍多模态对齐,下周探讨如何更好地融合不同模态的信息,第七周则关注“迁移”概念,即利用更常见的模态数据来补充目标模态信息的不足。


多模态AI的研究始于对人类行为心理学的观察。心理学家David McNeill通过“麦格克效应”实验证明,人类的感知(如对语音的识别)实际上融合了多种沟通模态(如视觉唇形)的信息,而不仅仅是单一的语言模态。这开启了多模态研究的行为时代,随后经历了计算时代、交互时代,并发展到如今的深度学习与基础模型时代。


历史上,多模态AI的任务从早期的视听语音识别,发展到互联网多媒体检索、情感识别、图像描述、视觉问答、多模态对话、自主导航代理,直至现今的文本生成图像/视频以及交互式智能体。


模态是指信息在世界上被表达或感知的某种数据源。我们可以将其视为一个光谱:一端是更接近传感器的“原始模态”(如原始语音信号、原始图像),另一端是经过更多处理的“抽象模态”(如从语音中提取的情感、从图像中识别的物体类别)。

多模态问题即涉及多种不同模态的问题。当多种模态同时存在时,通常会面临几个核心挑战:
- 异质性:不同模态在数据结构、维度和信息属性上差异巨大。
- 连接性:不同模态之间存在共享或重叠的信息。
- 交互性:当模态融合时,可能产生新的、单独模态所不具备的信息(如冗余、互补、协同)。

多模态模型通常接收多种模态的输入,学习其表示或预测标签。其设计面临六大独特挑战:

- 表示
如何为异质性的模态数据学习有效的表示,以便能够以恰当的方式将它们结合起来?主要有三种范式:- 融合:将不同模态的元素合并到一个共同的表示中。
- 协调:为不同模态学习独立的表示,但通过相似性函数使它们对齐。
- 分解:学习一个比原始模态数量更多的表示空间,以解耦和捕获共享及独有的信息。

- 对齐
当每个模态内部包含多个元素(如句子中的单词、图像中的区域)时,如何建立这些元素之间的对应关系?这包括:
- 离散对齐:数据可被清晰划分为离散元素(如单词、边界框)时的匹配问题。
- 连续对齐:数据是连续的(如传感器信号),需要先进行语义分割或离散化,再进行对齐。
- 上下文表示:将对齐作为中间步骤,来学习更好的表示(即隐式对齐),例如多模态Transformer。
- 推理
如何通过多步推断,结合所有信息进行预测?这涉及定义推理的结构(如序列、树、图)和中间媒介(如注意力图、自然语言)。虽然视觉推理比纯语言推理更具挑战性,但正确的多步、多媒介推理能提升性能并增强可解释性。

- 生成
如何构建能够生成多模态数据的模型?例如,文本到图像/视频生成、视频摘要、跨模态翻译(如图像描述)以及同步生成多模态内容(如带配乐的视频)。

- 迁移
当目标模态数据稀缺或嘈杂时,如何利用其他更丰富的模态数据来辅助学习目标模态的任务?方法包括:- 协同学习:在训练时将辅助模态作为输入或额外的预测目标。
- 模型归纳:鼓励不同模态的分类器共享信息,使强分类器帮助弱分类器。


- 量化
如何从数据、模型、目标函数和评估等方面,形式化地理解和衡量多模态学习的各个方面(如模态异质性、信息重叠度),以更深入地理解模型何时有效、为何有效。

在这些挑战中,表示和对齐是最基础且关键的。任何多模态问题都需要先将数据分解为元素,并决定如何表示它们。对齐则是在此基础上建立元素间的联系。


对齐旨在寻找不同模态元素之间的对应关系。我们将重点介绍离散对齐,特别是基于对比学习的方法。

在拥有配对数据(如图像-描述对)的情况下,对比学习的目标是学习一个共享的嵌入空间。在该空间中,配对样本的表示彼此接近,而非配对样本的表示彼此远离。
核心公式通常涉及以下组件:
- 两个编码器:
f_A和f_B,分别处理两种模态,输出表示z_A和z_B。 - 一个相似性函数:
g(z_A, z_B),用于衡量两个表示的相似度,常见的有余弦相似度。 - 对比损失:例如InfoNCE损失,其目标是最大化正样本对的相似度,同时最小化负样本对的相似度。
# 简化的对比损失概念(以余弦相似度为例) similarity = cosine_similarity(z_image, z_text) # 对于一批N个样本,计算图像i与文本j的相似度矩阵 # 损失鼓励对角线(正对)相似度高,非对角线(负对)相似度低 loss = -log(exp(similarity[i,i]) / sum_j(exp(similarity[i,j])))


著名的CLIP模型就是大规模应用这种思想的典范。它通过在海量图像-文本对上进行对比学习,学习到一个统一的表示空间。这使得模型能够进行零样本分类:将任意类别的文本描述嵌入到该空间,并找到与待分类图像嵌入最接近的文本描述,而无需针对这些类别进行专门训练。

然而,标准的跨模态对比学习主要捕获模态间的共享信息,可能会丢弃各模态独有的信息。为解决此问题,可以结合模态内的对比学习(例如,对图像进行数据增强后做对比学习),以同时保留共享和独有的信息。

对于连续对齐,核心挑战在于如何将连续信号(如视频、传感器数据)分割成语义上有意义的离散片段。常用方法包括变化点检测、固定间隔采样后聚类等,以便后续进行对齐操作。





本节课我们一起学习了多模态人工智能的入门知识。我们了解到多模态数据具有异质性、连接性和交互性。我们探讨了构建多模态AI系统面临的六大核心挑战:表示、对齐、推理、生成、迁移和量化,并重点深入讲解了对齐,特别是基于对比学习的离散对齐方法及其应用(如CLIP)。理解这些基础是处理更复杂多模态任务的关键。




最后提醒,阅读作业明天截止,请确保在项目上取得进展以便每周会面。

在本节课中,我们将要学习跨模态学习。这是一种在不同模态之间传递信息的技术,通常用于将数据丰富的模态中的知识迁移到数据稀缺但更重要的任务上。我们将涵盖三种主要范式:基于预训练模型的迁移学习、协同学习以及模型诱导。

首先,提醒一下接下来的作业安排。期中作业即将截止,相关说明已发布在Piazza上。两个关键截止日期都在春假之后:4月1日(周二)提交一份六页的报告,4月3日(周四)进行课堂展示。
关于4月3日的展示,考虑到许多同学可能在下午2点有其他课程结束,我们将尽量灵活安排。如果你需要在2点离开,请告知我们,以便将你的展示安排在课程的第一小时(1-2点)。如果你的展示被安排在第二小时(2-3点),我们也理解你可以稍晚到达(例如1:30或1:45)。请大家尽量参与整个1-3点的课程。

期中作业的要求是:确定你的项目想法、将要使用的数据集和基线模型。理想情况下,你应该已经处理了数据集和基线模型,运行基线模型得到了一些初步结果,并指出了这些模型的主要错误。同时,你应该已经朝着实现你的核心想法取得了一些初步进展,以展示你如何解决先前工作的关键局限。
此外,第四次阅读作业将于明天(周三)截止,为周四的讨论做准备。这次阅读作业主要关于多模态交互,探讨不同模态如何提供信息、如何结合,以及如何使用机器学习模型进行建模。包含两篇论文:一篇是从人机交互角度讨论多模态交互的经典论文,另一篇是近期关于使用专家混合和基础模型进行多模态融合的新论文。
总结一下:期中作业在春假后一周截止,阅读作业明天截止。

在今天的课程中,我们将以跨模态学习的概念来结束关于多模态学习的讨论。我们将介绍基础知识以及实现跨模态学习的几种方法。

跨模态学习非常重要。其核心思想是在不同模态之间传递信息。通常,你关心的任务或模态可能数据有限(例如医疗数据或现实世界传感器数据)。如何将大规模数据源的知识迁移到你真正关心的任务上,是这里的关键。
我们将涵盖三种范式:
- 迁移学习:通过预训练模型将信息迁移到下游任务。
- 协同学习:在训练时引入辅助模态(在输入或输出端),但在测试时丢弃该模态,仅使用目标模态。
- 模型诱导:即使只能以黑盒API形式访问模型,也能诱导模型之间的行为。

首先,我们快速回顾迁移学习。你可能已经对此有所了解。其思想是,我们通常拥有一个存储了大量信息的预训练大模型(例如BERT、LLM),目标是将其信息通过某种方式适配到我们关心的、可能与预训练分布不同的模态或任务上。这个过程通常称为微调。
我不会过多涉及大语言模型,春假后会有专门讲座。但需要指出,你经常会进行多任务或迁移学习。关键定义如下:
- 监督学习:使用数据
X预测标签Y。 - 多模态监督学习:使用
X1和X2预测Y。 - 多任务学习:使用数据
X同时预测两个任务Y1和Y2。如果任务间共享信息,两个任务的性能都可能提升。 - 迁移学习:从任务
X -> Y1(或通过自监督学习X -> X‘)学习,然后将知识迁移到新任务X -> Y2。目标是这种迁移比直接从X监督学习Y2效果更好。 - 跨模态学习:是迁移学习的扩展。例如,在一个模态(如语言)上预训练,然后迁移到另一个模态(如代码或基因组序列)。
- 自监督预训练:通常形式是
X -> X‘,然后迁移到X -> Y任务。
这些概念在第二周讨论数据收集和训练范式时已经涉及。



今天要讲的第一部分是“加强版”的多任务和迁移学习。这是一种新的方法范式,它们在许多不同模态之间进行多任务和迁移学习。
考虑当前多模态数据集的通用设置。例如,在理解人类时,你可能有语言、语音、手势和行为标注。在多媒体数据中,你有图像和文本(尽管与人类说话的内容不完全相同)。在机器人领域,你有传感器数据,其中部分与医疗数据(如ICU传感器信息)重叠。
如今的新一代方法不再局限于单个领域或一组模态内进行多任务和迁移学习,而是在非常不同的输入模态和输出领域之间进行。
例如,我们的HiMT论文以及另一篇名为“Journalist Agent”的论文,就为多媒体、机器人学和多个强化学习任务实现了这种跨域迁移。


关于迁移学习的一个问题:在迁移学习中,我们是否关心源任务 Y1 的准确性?Y1 和 Y2 的性能之间是否存在关系?

通常,Y1 的准确率越高,迁移性能越好。这就是为什么在计算机视觉研究中,一个在ImageNet(Y1是图像分类准确率)上预训练效果更好的模型,通常能更好地迁移到其他任务(如医疗图像)。如今,人们通过预训练并衡量模型在MMLU等多任务语言理解基准上的性能来评估模型,通常在这些基础任务上表现更好的模型,迁移到其他任务的效果也更好。当然也有例外,有时模型可能对源任务过拟合,导致 Y1 性能越好,迁移效果反而越差。


如今,我们确实有方法可以在非常不同的模态和任务之间进行多任务和迁移学习。这对于医疗或设计等数据稀缺的领域非常有用,因为你必须利用其他数据丰富的领域。
现在越来越常见的是,尽管表面上输入数据差异很大,但我们可以将所有数据序列化。语言可以序列化为词序列,语音可以序列化为采样频率序列,图像可以序列化为像素序列,传感器数据可以序列化为时间步序列。一旦序列化,Transformer被证明是学习模态内关系(词与词、面部表情之间、传感器时间步之间)的一阶近似非常可靠的方法。


因此,单模态Transformer正变得越来越通用,事实上,你可以用同一套参数模型处理所有事情。同样,多模态Transformer 用于学习模态间的成对交互,也变得越来越通用。它们可以用来学习所说词语和面部表情之间的信息,也可以用来学习患者人口统计信息和ICU时间序列信息之间的关联。



这些模型的优点是,首先,它们是大规模多任务的,一个模型在非常不同的输入模态子集和不同的预测任务上进行训练。其次,它们展示了迁移现象。例如,你可以在三个任务和三种模态上训练一个模型,然后将其迁移到第四个任务(比如一个医疗案例)。你会发现,机器人数据中的时间序列与医疗数据中的时间序列存在重叠,同时也有新的信息。
我们的研究结果显示,性能持续提升。如果仅在目标任务上监督训练,性能是67%。增加一个不同的源任务进行预训练,性能提升;增加两个,更好;增加三个,更好。同样,对于其他预训练和迁移任务组合,预训练的模态和任务越多,迁移性能越好。


我们确实看到了一些非常通用的多模态多任务模型。但它们做出了一些关键假设,这些假设在不同场景下可能被违背:
- 序列化假设:假设所有数据都适合表示为序列。有些数据可能不太适合。
- 模态标识:假设仅通过一个独热编码向量来标识模态(例如语言是
[1,0,0,...],视频是[0,1,0,...])。这没有捕捉到很多特定信息,也许可以做得更好。 - 共享模型:使用一个共享的多模态模型处理一切。当然,现在也有工作(如阅读作业中的专家混合)探索让某些专家处理特定的融合,但专家之间仍然共享信息。

关于医疗MIMIC数据迁移的问题:那些任务具体是什么?当你在机器人时间序列数据上训练,如何评估其迁移到主要是数值的医疗MIMIC领域?

在我们的案例中,源任务包括多媒体视频分类、人类行为视频、机器人传感器数据等,然后迁移到MIMIC任务。我们尝试了从零个源任务(仅监督训练MIMIC)到一、二、三个源任务的不同组合。对于机器人数据,它也是预训练的任务之一,我们也尝试了其他组合。具体数字可以参考论文。

另一个问题是,在之前的例子中,模型使用音频、文本和图像,但首先用音频和文本做什么?为什么这样有效?这可能取决于你是否同时拥有所有三种数据。如果你同时拥有文本、视频和音频,那没问题。但有时你可能分别拥有文本-视频数据和文本-音频数据,而没有三者同时出现的数据。这时,文本可以作为连接这两个数据集的共同桥梁。

关于如何将视频等模态信息迁移到只有表格和时间序列的MIMIC任务:MIMIC确实是时间序列和表格数据。但我们在其他任务(如机器人、音频视频)中也看到了时间序列的证据。实际上,音频和视频虽然维度更高,但在效果上仍然主要是时间序列。
我们展示的方法基本上是训练一个Transformer编码器,它可以处理语言、语音、手势、视频、时间序列等一切。唯一的区别是一个标识模态来源的独热编码标识符。模型学习通用特征,而任务特定的头部学习任务特定特征。这并不总是容易做到,可能会面临领域特定挑战。


截至2023年,我们进行了一项综述,总结了所有在不同模态和任务之间进行迁移的模型。例如,Perceiver是一种适用于一切的通用架构(但不同任务参数可能不共享)。有些模型尝试标准化图像、视觉、音频,有些模型尝试在语言、视觉、音频之间进行迁移。这就是2023年多模态多任务和迁移学习的概况。


第一部分主要是通过多任务迁移学习来利用不同数据集的信息。第二部分,我们将看看称为协同学习的现象。
在协同学习中,我们有关心的模态A。我们会在训练时引入一些额外的模态B(仅训练时可用),以学习更好的表示。你可以将其视为一种更好的“协同”表示,它丰富了模态A的信息。关键思想是:B仅在训练时作为辅助信息引入,在测试时,只有A分支被激活,仅使用A来预测标签。因此,可以公平地与仅使用A进行监督学习的模型进行比较。

协同学习有三种主要方式,各有优缺点,有时有效,有时无效。

第一种方式是通过融合。你有A和B,学习一个融合表示。回想一下融合,你有一个设置,其中有两个模态,你学习一个结合它们的联合表示。

在测试时,你“清零”或“用平均值填充”模态B的输入。所以测试时仍然只使用A,将其通过融合模型来预测Y。
基线是单模态学习,即仅使用A预测标签Y。

研究表明,使用这种协同学习范式,性能相比直接监督学习有持续提升。在我们的工作中,情境是A为语言,B为非语言信息(面部表情和声音表达)。在训练时结合语言和非语言信息学习,测试时仅使用语言,比直接监督学习语言效果更好。
其他证据包括2014年的论文《Multimodal Learning with Deep Boltzmann Machines》,他们使用深度玻尔兹曼机作为融合模型,在图像和文本上训练联合模型,测试时移除文本,模型性能优于仅基于图像的监督学习方法。
另一个例子是2011年的论文《Multimodal Deep Learning》,他们训练音频和视频的共享表示,然后在测试时尝试仅用视频,结果发现这与“视频训练-视频测试”的监督学习性能相当甚至更具竞争力。他们的任务是音素识别(McGurk效应),结合音频和视频来识别人在说什么。
这些例子都表明,在训练时拥有更多模态可以学习到更好的共享联合表示。即使在测试时某些模态缺失(用零或均值填充),其性能仍然优于仅使用现有模态进行监督学习。


协同学习的第二种范式是通过对齐。设置相同:你关心模态A,但在训练时有额外的模态B。你不是像融合那样将A和B合并为一个表示,而是学习一个表示空间,其中A和B是分开的,但通过某种相似性函数对齐。

一个早期的证据是2013年的论文《Zero-shot Learning through Cross-modal Transfer》,这可以说是CLIP的早期版本。你有CIFAR-10的低分辨率图像和一些词嵌入。你学习一个对齐的表示空间,使得“汽车”的词嵌入附近是所有汽车图像的嵌入,“狗”的词嵌入附近是所有狗图像的嵌入。你使用余弦相似度或L2距离作为相似性函数,拉近对应配对,推开不配对。
在训练时,你学习这个对齐的表示空间。在测试时,假设你有一张从未见过的猫的新图像。在传统的图像分类中,由于没有“猫”这个类别,你无法预测。但在这个对齐空间中,你可以将图像投影进去,找到最近的词嵌入。由于词嵌入本身有结构(“猫”接近“狗”但不同于“狗”,并且远离“马”),你就能进行零样本预测,说这张图像应该标记为“猫”。
这同样是协同学习的证据:训练时使用词和图像进行对齐,测试时仅使用图像,通过查找最近邻词嵌入实现零样本图像分类。如今,我们有这种方法的扩展版本,如CLIP等模型。训练时使用图像和文本进行双编码器对齐,下游推理时仅使用单一模态(如图像编码器)进行预测任务,性能优于直接在目标模态上进行监督学习。

另一个例子是机器人领域,机器人操纵物体时有视觉和触觉。训练时使用视觉和触觉学习一个对齐空间,判断它们是否来自同一次演示。学习到的良好表示可以迁移到仅视觉或仅触觉的任务中。
所以,通过对齐进行协同学习:训练时有两个模态,学习它们之间的对齐表示,这个对齐表示对于测试时仅使用其中一个模态的任务是有用的。


协同学习的最后一种类型。前两种(融合和对齐)中,额外模态B出现在输入空间。这第三种例子将额外模态B用在输出空间。
在训练时,你以A为输入,学习一些特征,这些特征用于预测模态B作为一个预测目标。希望通过预测这个额外的辅助模态B,你能学到更好的表示,这些表示最终可以用于测试时仅使用A进行的预测。
我们称之为通过翻译进行协同学习。三种方式总结:融合(B在输入)、对齐(B在输入)、翻译(B在输出)。

一些例子:在我们的工作中,数据包含人说话的语言和说话时的视觉表情。目标是理解情感等行为。通常做融合需要在测试时同时拥有两个模态。另一种方法是进行翻译:以语言为输入,预测一个表示,这个表示应该能够解码人的视觉表情(即“幻觉”出说这些话时可能有的表情)。这个表示本质上是多模态的,因为它编码了语言,但只保留了与预测视觉信息最相关的部分。然后,你可以用这个表示进行情感预测。测试时,你使用训练好的模型,输入语言,通过编码路径得到表示,然后直接通过分类头预测情感,不再预测视觉信息。
我们还展示了双向翻译(循环一致性)可以进一步提升性能:先用语言预测视觉,再用预测的视觉重建原始语言。这仍然是协同学习,因为训练完成后,测试时只需要输入语言,预测特征,然后解码标签。结果显示这优于仅使用语言进行监督学习。

其他例子包括一些论文认为协同学习有助于组合性。在一些需要模型非常精细地预测物体位置、数量、空间关系的计算机视觉任务中,仅进行监督学习可能无法捕捉这些细节。这些研究者发现,可以进行辅助训练(测试时丢弃),即以图像为输入预测描述性语言。因为语言本身就捕获了“什么在什么上面/后面”的组合结构。训练时,学习能够预测这种组合句子的表示,测试时丢弃语言预测,仅进行图像预测,效果更好。
另一个例子是关于扩展掩码语言建模的论文。除了做掩码语言建模(用上下文预测被掩码的词),还可以做掩码视觉标记分类。在编码文本时,同时预测与之相关的人或事物的视觉表现(尽管可能很抽象)。这很自然,许多人认为人类就是这样学习的:听到语言会想象视觉画面,看到视觉会想象声音。证据表明,训练时使用文本来预测被掩码的词和图像,学习到的表示在测试时仅输入文本,性能优于仅基于语言的掩码语言建模。
最后一个例子是关于使用呼吸数据评估帕金森病的研究。你可以收集患者10小时的夜间呼吸数据,但只能预测一个比特的信息(是否患帕金森病)。训练信号非常稀疏。一个自然的想法是使用另一个模态来提供更丰富的监督。例如,同时预测同一时间点的脑电图(EEG)。呼吸数据是10小时,EEG也是10小时,这提供了丰富的监督信号(用10小时预测10小时),同时也要预测帕金森病指标。他们称之为辅助任务的多任务学习,但这也是通过从一个模态翻译到另一个模态进行协同学习的例子。研究表明,预测EEG数据的能力越强,学习到的用于预测帕金森病早期发作的表示也越好。
关于数据规模和关系的问题:这主要是经验性的发现。理论上,如果你对两个模态的互信息以及任务信息所在位置做出一些假设,可以证明一些结论。直觉是,当你进行翻译时,你本质上是在学习两个模态之间的共同部分。如果任务信息也恰好在这个共同部分内,那么你就会表现良好。

如何决定使用哪个辅助模态?这通常基于直觉、试错以及与领域专家(如医生)的交流。所有这些例子都包含直觉和试错的成分。

说到试错,我想展示一些失败案例,因为协同学习并非总是有效。

有一系列工作探讨了这个问题。例如,早期BERT在众多NLP任务上表现出色。然后出现了VideoBERT和VisualBERT,它们学习语言与视觉/视频的联合表示。事实上,人们发现这些模型不仅在视觉语言任务上,在纯NLP任务上也表现更好——这是协同学习的正面证据。
但有些研究者发现,对于许多任务,存在负面证据。如果你从BERT开始,在语义角色标注等词分类任务上达到90%的准确率,然后开始训练BERT去预测视频(或反之),性能实际上会下降,有时甚至大幅下降(从76%降到65%)。他们展示了一些NLP任务性能下降的例子。你可能会认为这些是NLP任务,不需要视觉和视频。但他们也展示了一些常识问答任务,这些任务似乎视觉很重要(例如“如何去除家具上的光泽?”)。直觉上,如果模型看过相关的教学视频,应该表现更好。但结果显示,训练这些VideoBERT/VisualBERT后,性能有时只有轻微提升,有时反而下降不少。
所以,协同学习有其局限性,并非总是有效。


在最后一部分,我们将讨论模型诱导。这同样是迁移和多任务学习的扩展,但在这种情况下,我们主要关注API场景,你可能无法访问模型的内部。因为协同学习通常需要训练融合、对齐或翻译模型,需要内部访问权限。我们将介绍一些不需要内部访问的方法。
在剩下的课程中,我将介绍两种关键算法。我们将从单模态情况开始,即自训练,并以此作为热身,过渡到双模态情况,讨论协同训练算法——这是最有名的多模态/多视图算法之一。
自训练算法实际上与当今的标签学习非常相关。其直觉是,你有一些带标签的数据 (X_labeled, Y) 和大量未标签的数据 X_unlabeled。

在自训练设置中,你通常会在以下步骤间迭代:
- 在带标签数据上训练一个分类器
F1。 - 使用这个分类器去标注你拥有的未标签数据(称为伪标签)。
- 通常有一个选择过程,例如先标注最置信的样本。
- 将这些新标注的样本添加回带标签数据集。
- 在合并后的带标签数据上重新训练分类器。
- 重复此过程,直到所有未标签数据都被标注,或者模型收敛。
测试时,直接输出分类器的预测。
如何定义“置信度”? 通常使用启发式方法。例如,分类器对未标签数据点进行推断,会给出一个softmax分布。你可以看这个分布是像 [0.9, 0.1] 这样非常确定,还是像 [0.6, 0.4] 这样不太确定。置信度的一种衡量方式是看预测概率的最大值,或者看样本距离决策边界的距离。
直观理解:假设你有一些带标签样本和一个初始分类器边界。未标签样本中,有些距离边界很远(高置信度),有些就在边界附近(低置信度)。你首先用分类器标注那些高置信度的样本(伪标签),将它们加入训练集,然后重新训练分类器。新的决策边界可能会向这些新加入的样本方向移动,从而更好地分类那些之前不确定的样本。
协同训练是1998年提出的一篇非常具有开创性的论文,至今仍被广泛使用。它本质上是自训练向两个视图的扩展。
我们假设数据有两个视图 X1 和 X2(经典的多模态设置),有两个分类器。我们有一些带标签的配对数据 (X1, X2, Y),以及大量未标签的配对数据 (X1, X2)。
一个关键假设是:两个模态是冗余的,它们之间的共同信息对任务至关重要。不能有太多独特或协同的信息。
协同训练算法的工作原理与自训练非常相似:
- 你有带标签数据
(X1, X2, Y)和未标签数据(X1, X2)。 - 分别在两个视图上训练分类器:
F1在X1 -> Y上训练,F2在X2 -> Y上训练。 - 使用分类器
F1标注它在第一个模态上最置信的未标签样本,然后将这些样本(及其伪标签Y’)分配给第二个模态的分类器F2作为训练数据。 - 反过来,使用分类器
F2标注它在第二个模态上最置信的样本,然后将这些样本分配给第一个分类器F1作为训练数据。 - 两个分类器在对方标注的新数据上重新训练。
- 迭代进行。
为什么需要配对数据? 因为当 F1 标注了 X1 中的一个样本时,我需要找到对应的 X2 样本,并将 F1 赋予的伪标签用于训练 F2。
测试时,给定新数据,你可以使用任一分类器,或者对两个分类器的结果进行集成(如多数投票)。
尽管是1998年的工作,但至今仍被广泛使用。例如,在行为识别中,你有视频数据(RGB帧)和光流数据(捕捉运动)。直觉上,有些活动(如静态图像分类)RGB更重要,有些活动(如高尔夫挥杆)运动信息更重要。协同训练被证明在这里效果很好,因为RGB分类器可以帮助标注光流数据,光流分类器可以帮助标注RGB数据,它们相互学习。
更多例子出现在语言模型中。例如,一篇2022年的论文中,两个视图分别是GPT-3和BERT。GPT-3更大,更擅长文本补全;BERT在当时更擅长使用其表示进行分类。他们进行协同训练:GPT-3模型标注一些数据用于训练BERT,BERT模型标注一些数据用于训练GPT-3。
如今,甚至有更多例子假设这些模型是API,你无法或不想修改其内部,但仍然具有多个智能体辩论、相互传递信息或相互标注数据的特性。协同训练工作确实启发了这一系列研究。


总结一下,跨模态学习是在不同模态之间传递信息的思想,通常是从数据资源丰富、数据量大的模态传递到数据资源少、数据量小但你真正关心的模态。

我们看到了三种主要方法的例子:
- 迁移和多任务学习:通过预训练和微调,或在多个任务和模态上联合训练。
- 协同学习:在训练时引入额外数据(作为输入或输出),测试时丢弃。包括通过融合、对齐和翻译三种方式。
- 模型诱导:即使只能以黑盒API访问模型,也能诱导模型之间的行为,如自训练和协同训练。
一些提示:决定使用哪个辅助模态;决定是做辅助输入还是辅助输出;决定是修改模型内部还是保持黑盒访问。

所有这些方法都假设模态之间存在一定的冗余性,你只能保留两者共同的部分(融合、对齐、翻译正是利用共同信息)。模型诱导也假设两个视图能提供相似的信息。目前,我还没有看到如何在不依赖冗余性假设的情况下进行跨模态学习。



到目前为止,在本课程中我们已经学习了AI的基础知识,涵盖了多模态连接、对齐、交互、融合,以及今天的跨模态学习。下周是春假,没有课。春假回来后,我们将讨论大模型、现代生成式AI、推理、交互式智能体以及所有与数据相关的内容。


最后再次提醒,请确保你正在完成期中作业,报告和展示将在春假后一周截止。阅读作业明天截止,周四讨论。谢谢大家!





在本节课中,我们将深入学习多模态融合。多模态融合是多模态学习中的核心挑战,旨在将来自不同模态(如图像、文本、音频)的信息有效地结合起来,形成一个能够捕捉模态间交互的联合表示。
上一节我们介绍了多模态对齐,本节中我们来看看如何将已对齐或未对齐的不同模态信息融合在一起。


多模态融合的一般定义是:给定两个或多个模态,学习一个能够捕捉这些模态如何交互、信息来自何处以及如何组合的联合表示。

我们可以将融合视为一个光谱。光谱的一端是:首先使用预训练模型从原始数据中提取抽象特征,然后在特征层面进行较简单的融合。由于特征处于表示空间中,它们本质上更相似,因此融合需要做的工作较少。

光谱的另一端是:直接从原始数据开始融合。这些原始数据模态彼此之间可能差异更大(异质性更高),因此融合模型需要做更多的工作来整合它们。


融合的整体目标是捕捉模态之间的交互。回顾上一讲,我们将“多模态交互”作为使多模态数据独特的三个关键原则之一。我们讨论了三种交互类型:
- 冗余:模态间存在共同信息。
- 独特性:信息仅存在于某一模态中。
- 协同性:信息并非单独存在于任一模态,而是在融合后才显现。
基于对比学习的对齐方法本质上捕捉的是模态间的冗余(共同)信息。因此,我们需要其他融合方法来更好地捕捉独特性和协同性信息。

以下是不同融合策略的概述:
- 晚期融合:先分别从各模态做出预测,再组合预测结果。例如,集成方法或多数投票。
最终预测 = 组合函数(模型A的预测, 模型B的预测)
- 早期融合:尽早将原始数据组合,然后让模型自行学习如何融合。
融合特征 = 融合模型(拼接(原始数据A, 原始数据B))
- 基于特征的融合:先提取抽象特征,再进行融合。这是介于早期和晚期融合之间的常见策略。

我们从最简单的一维案例开始,介绍融合的核心思想:建模跨模态交互。
假设有两个一维模态特征 X_A 和 X_B,要预测标签 Y。一个基础的线性回归模型如下:
Y = w_0 + w_1 * X_A + w_2 * X_B

这只是一个加性模型,每个模态独立贡献。为了捕捉交互,我们引入乘**互项:
Y = w_0 + w_1 * X_A + w_2 * X_B + w_3 * (X_A * X_B)
这里的 w_3 * (X_A * X_B) 项使得 X_A 对 Y 的影响依赖于 X_B 的值(反之亦然),从而能够建模更复杂的依赖关系。

对于高维特征向量,我们可以推广乘**互。一种常见方法是元素积:
Z = X_A ⊙ X_B (其中 ⊙ 表示逐元素相乘)

更强大的方法是双线性融合,它计算所有特征对之间的交互:
Z = X_A^T * W * X_B 或等价于 M = X_A ⊗ X_B (外积,得到一个矩阵)
这会产生一个矩阵 M,其元素 M[i,j] = X_A[i] * X_B[j],捕获了所有可能的成对交互。现代多模态Transformer中的注意力机制就深受此思想启发,它计算一个模态序列中每个元素与另一模态序列中每个元素的相似度权重。

双线性融合或Transformer的全注意力计算量可能很大。为了提升效率,可以使用低秩近似技术。其核心思想是,大的权重矩阵或张量通常可以用几个小矩阵的组合来近似。


例如,一个大权重矩阵 W 可以近似分解为:W ≈ U * V^T
其中 U 和 V 是低秩矩阵。这显著减少了参数量,是当前微调大语言模型(LoRA等技术)和多模态学习中常用的策略。

前述方法的融合权重是静态的。动态或门控融合则让权重根据输入数据本身动态变化。

例如,融合权重可以是输入的函数:Y = g(X_A, X_B) * X_A + h(X_A, X_B) * X_B
这里 g() 和 h() 是网络学习的函数(如注意力机制),它们像“门”一样控制着每个模态特征的通过程度。这使模型能根据当前输入,自适应地关注更相关的模态信息。
在某些任务中,模态的重要性不同(如语言为主,视觉为辅)。我们可以设计非对称融合,让次要模态以调制或补充的方式影响主要模态的表示,而不是平等对称地融合。


即使我们设计了复杂的融合架构,一个关键问题是:模型是否真的学到了有意义的非线**互(协同性),还是仅仅学会了使用各模态独立的(加性)信息?
一篇重要论文提出了分析方法:给定一个训练好的复杂融合模型 F(X_A, X_B),寻找一个最优的纯加性模型 G(X_A, X_B) = F_A(X_A) + F_B(X_B) 来近似它。研究发现,在某些数据集上,即使将复杂模型替换为其最优加性近似,性能下降也非常小(例如仅0.2%)。这表明,有些复杂模型可能主要依赖加**互,并未充分挖掘协同性。

为了鼓励模型学习协同交互,可以采用分阶段残差优化策略:
- 首先训练一个仅使用各模态独立信息的加性模型,预测
Y_uni。 - 计算残差
R1 = Y - Y_uni。 - 然后训练一个模型(可包含成对乘**互)来拟合这个残差
R1,预测Y_bi。 - 计算新的残差
R2 = R1 - Y_bi,并用更复杂的模型(如三阶交互)去拟合。
这种方法确保每一阶段都致力于解决前一阶段未捕获的信息,理论上能更好地学习层次化交互。

当前主流的多模态融合模型常基于Transformer架构。它将文本视为词序列,图像切分为块序列,通过位置编码后输入Transformer编码器。Transformer的自注意力机制天然适用于建模序列内和跨序列(模态)的成对交互。

值得注意的是,许多现代模型(如CLIP、ALBEF)同时进行对齐和融合:
- 对齐目标:通常使用对比学习损失,在全局(如图片-描述)或局部(如词-图像块)层面拉近正样本对,推开负样本对。
- 融合架构:使用Transformer编码器对跨模态特征进行深层交互。
这种联合训练方式在富含冗余信息的数据(如图像-标题对)上非常有效。但对于独特或协同信息占主导的任务,需警惕对比损失可能会丢弃这些非共享信息。




多模态融合并非总是有效,有时甚至不如单模态模型。主要挑战包括:
- 单模态偏差:模型可能过度依赖某个容易学习的模态(如语言),而忽略其他模态(如图像)。例如,在VQA中,仅根据问题“香蕉是什么颜色?”就回答“黄色”,而不看图中实际的香蕉颜色。
- 缓解策略:平衡数据集(如VQA 2.0),确保每个问题都有支持不同答案的图像;添加辅助训练目标,促使梯度流向所有模态。


- 优化不平衡:不同模态的学习速度和泛化能力不同,导致优化困难。
- 缓解策略:采用OGM-GE等算法,在训练多模态模型的同时,监控各单模态模型的性能,动态调整多模态训练中各个模态的学习速率,以促进均衡学习。


本节课中我们一起学习了多模态融合的核心概念与方法。我们了解到:
- 融合的目标是创建能捕捉冗余、独特和协同信息的联合表示。
- 融合方法构成一个光谱,从处理同构特征的简单晚期融合,到处理异构原始数据的复杂早期融合。
- 数学上,从加**互到乘**互(双线性、外积),再到更高效的低秩近似和动态门控机制,模型的表达能力逐渐增强。
- 我们需通过分析(如加性近似)和策略(如分阶段融合)来确保模型真正学到有价值的跨模态交互。
- 基于Transformer的架构是现代多模态融合的主流,常结合对齐目标进行训练。
- 实践中需注意单模态偏差和优化不平衡等挑战,并采用数据平衡、辅助损失、动态速率调整等策略来缓解。



多模态融合是一个活跃的研究领域,拥有众多模型和技术。请根据你的项目需求,深入阅读相关的论文和参考文献。请继续推进项目,并记得完成阅读作业。
在本节课中,我们将要学习大型基础模型的核心概念、发展历程以及如何在实际中应用它们。我们将从基础的循环神经网络开始,逐步深入到现代的Transformer架构、预训练方法以及模型优化技术。
大型语言模型已成为人工智能领域的核心驱动力。本节课程将提供一个关于这些模型的浓缩概述,涵盖其架构演变、训练方法以及当前的研究趋势和实用技巧。
在深入探讨大型语言模型之前,我们先简要介绍循环神经网络。
RNN是一种在Transformer出现之前非常流行的模型。其核心思想是,我们将每个词元与一个嵌入向量关联起来。在每一步,我们将这些值输入RNN网络,并更新该网络的隐藏状态。本质上,我们逐个“喂入”词元,在处理完整个句子后,会得到一个最终的隐藏状态,这个状态应该包含了所有先前词元的信息。然后,我们使用这个最终状态,结合一个分类器,来预测下一个最可能的词。
例如,对于一个句子“The student opened their...”,分类器会输出一个概率分布,表明“book”可能是这个句子中最可能的下一个词。

RNN有几个优点:
- 它可以处理任意长度的输入。因为隐藏状态是固定大小的,所以无论输入文档多长,隐藏状态的大小都固定。
- 模型大小不会随着输入上下文变长而增加。
然而,RNN也有缺点:
- 循环计算速度慢。必须逐个词处理,因此输入处理时间随句子长度线性增长。
- 由于我们仅基于先前的隐藏状态计算当前状态,因此很难访问许多步之前的信息。模型很容易忘记几个词或几个句子之前的信息。
为了解决这些问题,我们引入了Transformer。


Transformer的优势在于它拥有全局注意力机制,每个词都可以与输入句子或输入文档中的任何其他词进行交互。
它让每个词的表征作为一个查询,去访问并整合来自其他词的信息。这样做的好处是:
- 可并行操作的数量不随序列长度增加。无论输入序列多长,都可以用单一操作处理它们。
- 最大交互距离为1,这使得模型更容易捕捉句子中词与词之间,甚至不同句子之间的长距离关系。

但是Transformer也有缺点,一个突出的缺点是时间复杂度很高。
如上图所示,这里的 n 表示输入句子的长度。注意力操作需要将一个 n x n 的矩阵与另一个矩阵相乘,这意味着注意力层的时间复杂度是 O(n²)。当输入文档非常大时,计算需求会变得巨大。
因此,最近出现了“稀疏注意力”的趋势。稀疏注意力的基本思想是将整个很长的输入文档分成块,然后在每个块内运行注意力机制,这样句子中的词就可以与同一块内的其他词交互,然后以RNN风格的方式聚合信息。这本质上是将RNN与Transformer结合,以减少所需的计算量。

在有了大规模计算能力之后,语言模型首次取得了巨大成功。
那么人们是如何进行预训练的呢?方法其实很简单。假设你有一个输入文档,将其分割成重叠的窗口,然后将整个输入“喂”给模型,要求模型输出并预测下一个词元。这本质上是在整个互联网文本规模上进行的“下一个词预测”。

这个想法很简单,但为什么语言模型如此成功呢?这是因为互联网文本包含了极其多样化和大规模的数据,这种规模对于语言模型获得通用能力至关重要。
例如,最大的问答数据集之一Natural Questions约有5000万个词元。而现在的预训练数据集,如DataComp-LM,拥有250万亿个词元,比最大的问答数据集大得多。整个互联网文本估计有约3100万亿个词元,这比最大的问答数据集大了约1000万倍。
在如此庞大的互联网文本中,几乎包含了你能想到的任何主题的数据,这就是为什么模型具有良好的多任务能力。数据也具有高度多样性,包括网页、代码、社交媒体(如Reddit)、论文、书籍和维基百科文章。


现在,我们简要介绍用于基础模型的架构类型。主要分为三类:仅编码器模型、编码器-解码器模型和仅解码器模型。
我们不深入探讨架构之间的细节差异,但本质上:
- 编码器模型 具有双向注意力。如果一个词在句子中间,它可以同时关注前半句和后半句的词。
- 解码器模型 只能关注过去的词(因果注意力)。如果一个词在句子中间,它只能关注该词之前的句子部分。
著名的编码器模型是 BERT,它非常适合文本分析任务,如情感分析。目前几乎所有现代模型都是解码器模型,编码器-解码器架构在现代模型中已不常见。
解码器模型流行的原因在于:
- 它更自然地模拟了语言生成过程。在生成答案时,模型确实只能基于已生成的词来预测下一个词。
- 由于不需要关注未来词元,仅解码器模型在计算上更高效,这在当前语言模型训练中是一个主要考量。
最著名的仅编码器模型BERT于2018年提出,拥有3.4亿参数,在当时被认为是大型模型。它使用掩码语言建模进行预训练,即随机掩盖句子的一部分(用[MASK]标记),然后让模型预测被掩盖的内容。在原始训练中,他们掩盖了约15%的词元。

仅解码器模型则是我们现在熟知的GPT系列。从1.17亿参数的GPT-1开始,模型规模迅速增长,到GPT-3已达到1750亿参数。
解码器模型的优势在于它自然地建模了语言生成。要创建一个对话模型,本质上就是让模型基于过去的上下文输出下一个最可能的词元。



在解码器模型流行后,人们发现模型的性能可以基于其规模(参数量)和训练计算量进行可预测的缩放。2022年的Chinchilla论文提出了一个700亿参数、在1.4万亿词元上训练的模型,这成为了一个流行的规模与数据量平衡的“配方”。
但近年来,人们增加训练词元数量的速度超过了增加模型参数本身。例如,Llama 3模型有30亿参数,但却在15万亿词元上进行了训练。这是Chinchilla模型规模的10%,但训练词元量却是其10倍,这是一个非常有趣的趋势。
预训练模型本质上是在做语言建模,即预测给定句子后最可能出现的句子。但这并不等同于“遵循用户指令”。
例如,如果我们让模型“向一个六岁孩子解释摩尔定律”,一个纯粹的预训练模型可能会输出“向一个六岁孩子解释薛定谔的猫”,因为这两个句子在互联网文本中经常接连出现,但这并不是我们想要的答案。
因此,人们引入了指令微调。在指令微调中,我们收集跨许多任务的输入-输出对示例,并在这些任务上对大型语言模型进行微调。

指令微调在有了大量数据后变得非常流行。例如,Super-NaturalInstructions数据集包含了超过1600个任务、约300万个示例,涵盖了翻译、问答、序列标注等几乎所有可以用文本完成的任务。这使得模型能够跨任务学习,在数据集中的每个任务上都获得更好的性能。


那么,我们如何精确地优化模型的响应,使其输出我们想要的内容呢?这就是基于人类反馈的强化学习(RLHF)的用武之地。我们优化模型以符合人类偏好,即我们希望模型如何响应给定问题。
具体步骤如下:
- 收集较小规模的有监督微调数据(指令-输出对),并用标准有监督损失在该数据上训练模型。
- 准备一个更大的问题集,让模型对每个指令生成多个响应。
- 请另一组标注员对这些响应从好到坏进行排序。
- 训练一个奖励模型来拟合这种人类偏好排序。
- 在获得奖励模型后,可以扩展训练规模,使用奖励模型通过强化学习(如PPO算法)进一步优化模型。
但人类偏好存在噪声且不一致。例如,对于同一个摘要,一个人可能给高分,另一个人可能给低分。因此,人们引入了相对偏好优化。这是目前最先进的算法,它要求模型对响应进行排序(从最好到最差),然后基于排序而非具体的奖励分数来优化模型。
经过指令微调和偏好优化后,模型在回答问题方面的能力相比原始预训练模型有了显著提升。

然而,基于强化学习的偏好优化并不总是按预期工作,因为人类偏好不可靠且奖励模型可能产生 unintended 行为。例如,标注员可能只花几秒钟看响应,如果听起来合理就给予高奖励,但这可能导致模型产生看似权威有帮助、实则不正确的“幻觉”。奖励模型也可能存在偏见,例如对模型声称来自发达地区的响应给予更高奖励。
因此,对齐模型使其既乐于助人又忠于事实,仍然是一个巨大的挑战。


最近的许多工作更关注训练效率,因为人们发现,无论如何改变架构,只要在非常大规模和多样化的数据上进行训练,模型的行为都会趋于相似。
因此,最大的改进往往来自于提高效率,从而在固定的计算预算下用更多数据训练模型,使模型变得更好。
以下是几种流行的高效训练与部署技术:

低秩自适应(LoRA)
动机:微调整个模型需要大量的计算和GPU内存。LoRA的解决方案是冻结整个预训练模型的权重,然后训练一个低秩的适配器来更新参数。
本质上,它引入两个小矩阵:一个将嵌入压缩到更小的尺寸,另一个将其扩展回原始尺寸。这两个适配器的参数量很小,但通过它们可以有效地调整整个模型。如果你GPU内存有限,LoRA通常是微调大模型的**选择。

混合专家模型(MoE)
动机:MoE并非让每个专家专门负责某个领域(实际上在现代模型中,专家并不可解释),而是通过混合专家,我们可以在较小的计算成本下训练一个更大的模型。
具体做法是:在每一层设置多个并行的网络(专家),在前向传播时,由一个门控网络决定每个词元应该经过哪些专家。由于每个词元只经过一部分网络,因此节省了大量计算和内存。一个著名的例子是Mixtral 8x7B模型,它总共有约470亿参数,但每个词元只激活约130亿参数,节省了约95%的计算量。
量化
在训练后,如果你想将模型部署到手机等智能设备上,量化是一种非常好的技术。它可以将模型压缩到更低的精度。
训练时模型通常使用16位或32位浮点数。但人们发现,使用好的量化算法,可以将模型压缩到4位甚至更低,而不会损失明显的性能。

基本思想是:
- 进行范围校准:给定一组权重,首先去除异常值,将权重裁剪到给定范围。
- 将权重缩放至目标精度(如8位整型)的范围(-128 到 127)。
- 为了更精确,可以对权重进行分组,为每组权重寻找最优的缩放和零点偏移。
- 将模型转换为低位格式,并进行一些校准以减少量化过程中引入的误差。

量化应用于模型中的所有权重,但不应用于激活函数和最后的softmax分类器层。目前GGUF是一个非常流行的量化库格式。
量化可以做到很极端,最近有论文尝试将权重二值化为{-1, 0, 1},相当于1.58位,并展示了与原始模型相近的性能。但这通常需要新的硬件支持。

本课程更注重实践,因此最后介绍一些关于如何使用LLM的实用技巧。假设你正在为课程项目进行LLM微调,通常会有以下四个步骤:
- 准备数据:将数据转换为对话格式,以便于LLM框架处理。
- 选择一个好的起点:选择一个合适的预训练模型作为基础。
- 扩展模型:使用选定的方法对模型进行微调。
- 评估与部署:评估模型性能并部署。


数据准备
你需要将任何数据转换为问答格式。现有的指令微调框架支持多种格式,你只需选择一种。例如,可以包含问题、答案、图像等。


选择起点
从一个好的起点开始非常重要。不要使用非常旧的模型(如最初的Llama 1)。建议从较小的模型开始,但也不能太小。人们发现,如果参数小于30亿,性能会下降很快,即使微调后也难以看到提升。
以下是一些推荐的起点模型:
- 纯文本任务:Llama 3 8B/70B。如果有大型计算集群,可以尝试DBRX。
- 多模态基础:Qwen-VL系列,参数从70亿到720亿,适用于多种用例。
选择训练框架与方法
不要使用原始的Transformer包来训练模型,建议使用高效的LLM训练框架,速度会快很多。
- 推荐框架:vLLM、LLaMA-Factory。Unsloth是一个新框架,据说比原始的LLaMA-Factory更高效。
- 训练方法:可以尝试标准的监督微调,也可以尝试基于PPO的RLHF。建议都尝试一下,看看哪种效果最好。RLHF较新,但可能存在算法不稳定的问题。
- 根据你的GPU内存,决定是否使用LoRA。
- 对于多模态LLM,需要决定是否冻结视觉编码器或连接视觉编码器与LLM的投影层。
最后,介绍两个可能的大模型未来研究方向:
- 教模型推理:如何让模型学会推理是目前的热门趋势。最近的GPT-4 R1论文是该领域的代表作,许多团队正在尝试为各种测试优化模型的推理能力。
- 模态扩展:我们有很多公开的语言模型,但缺乏音频或时间序列的LLM,这是当前可以探索的方向。
本节课我们一起学习了大型基础模型的演进之路。我们从RNN和Transformer的基本原理出发,了解了预训练如何赋予模型通用能力,以及指令微调和RLHF如何将预训练模型转化为有用的助手。我们还探讨了LoRA、MoE、量化等高效训练与部署技术,并提供了从数据准备到模型选择的实践指南。最后,我们展望了模型推理和多模态扩展等未来方向。希望这些知识能帮助你更好地理解并应用大型语言模型。


在本节课中,我们将要学习大语言模型。我们将从回顾LLM的基础知识开始,然后探讨如何将其扩展为能够理解和生成多模态数据的大语言模型。


大语言模型在文本理解和生成方面取得了巨大成功。然而,它们仅能处理文本输入,并未与现实世界的感官信息(如视觉、听觉)建立联系。本节课将探讨如何构建能够处理和理解多种模态信息的大语言模型,包括其架构、训练方法以及最新的研究方向。

上一节我们介绍了LLM的基本概念,本节中我们来看看如何将Transformer架构应用于多模态数据。
多模态Transformer是当今许多模型的核心。与单模态Transformer的主要区别在于,查询和键可以来自不同的模态。例如,查询可能来自语言(如三个词的嵌入向量),而键可能来自非语言信息(如视觉特征)。为了实现跨模态的注意力计算,需要将不同模态的特征投影到一个共同的嵌入空间中。


公式:跨模态注意力计算可以表示为:
Attention(Q, K, V) = softmax((Q * K^T) / sqrt(d_k)) * V
其中,Q(查询)来自一种模态(如语言),K(键)和V(值)来自另一种模态(如视觉)。投影矩阵 W_Q 和 W_K 确保它们处于相同的维度 d。

以下是多模态预训练的几种常见目标:

- 掩码语言建模:遮盖部分文本,模型利用周围文本和图像信息来预测被遮盖的词。
- 掩码区域建模:遮盖图像的部分区域,模型利用剩余图像区域和文本描述来预测被遮盖的内容。
- 对比学习:训练模型将整个图像与其对应的文本描述在嵌入空间中拉近,同时将其与其他不匹配的描述推远。
这些方法都是自监督的,无需人工标注,可以利用海量的网络图像-文本对数据进行训练。

我们已经了解了如何从头训练多模态表示,本节中我们来看看一种更高效的策略:快速适配现有的大语言模型。

由于大语言模型参数量巨大,从头训练或微调成本高昂。一个流行的思路是保持LLM的权重冻结,仅训练一个轻量级的“适配器”。这个适配器的作用是将其他模态(如图像)的特征,转换到与大语言模型词嵌入相同的空间中。

代码:一个简单的线性适配器可以表示为:
adapted_features = W_adapter * visual_features + b_adapter
其中 W_adapter 和 b_adapter 是可训练的参数,visual_features 是预训练视觉编码器的输出。

训练时,我们将适配后的视觉特征作为“前缀”与文本词嵌入拼接,输入给冻结的LLM。模型的任务是基于视觉上下文和已生成的文本,自回归地预测下一个词。只需相对少量的图像-文本配对数据,就能让LLM获得视觉问答、图像描述等能力。

这种方法可以扩展到多种模态。例如,Lora Adapter项目展示了如何为图像、3D点云、音频等不同模态分别训练适配器,并将其接入同一个冻结的LLM,实现灵活的多模态理解和指令跟随。



前两部分主要关注如何让模型理解多模态输入并生成文本,本节中我们来看看如何让模型也能生成多模态内容。

最新的趋势是构建能够进行真正多模态交互的模型:既能接受图像和文本作为输入,也能生成图像和文本作为输出。这需要整合文本到图像的生成模型。


一个关键创新是使用“交错”的图像-文本序列进行训练。模型输入可能是一张图片,接着是一段描述,然后是另一张图片,再是一段描述。模型需要学习理解这种交错的上下文。

在输出阶段,模型不仅生成文本token,还会生成一个特殊的嵌入向量。这个嵌入向量可以与一个图像数据库中的CLIP图像嵌入进行相似度比较,以检索出最匹配的图像作为输出。更进一步,模型可以集成像Stable Diffusion这样的文生图模型,直接生成全新的图像像素。


以下是实现多模态生成与交互的几个关键点:

- 交错数据训练:使用图像和文本交错排列的序列进行训练,使模型能处理连贯的多轮对话和内容生成。
- 检索与生成结合:模型动态决定是检索现有图像还是生成新图像,以更好地满足用户请求。
- 统一表示空间:通常利用CLIP等模型,将图像和文本映射到对齐的语义空间,便于跨模态的匹配和生成。


随着技术发展,出现了“原生多模态”模型与“适配器”模型的路线之争。原生多模态模型(如某些最新的大模型)主张从零开始共同训练语言和多种模态的表示,而非在预训练好的LLM上做适配。初步研究表明,在规模足够大时,两种架构的性能可能趋同。
另一个重要方向是多模态混合专家模型。通过设计不同的专家网络来处理模态间信息的不同关系(如冗余、互补、协同),可以提升模型在处理复杂多模态数据时的性能。

此外,研究也在向更广泛的现实世界数据扩展,例如将大语言模型与时序传感器数据、机器人控制指令等进行结合。尽管初步尝试效果不一,但这为构建真正理解物理世界的AI系统开辟了道路。




本节课中我们一起学习了从大语言模型到大语言模型的发展路径。我们回顾了多模态基础模型的架构与预训练方法,探讨了通过适配器快速赋予冻结LLM多模态能力的流行策略,并展望了实现多模态输入与输出的最新技术。我们还简要介绍了原生多模态训练、混合专家系统以及扩展到时序数据等前沿方向。这些进展正推动AI系统向更全面、更深入地理解和交互我们多模态的世界迈进。
在本节课中,我们将要学习强化学习的基础知识,了解其与监督学习的核心区别,并探索现代强化学习方法如何被用于对齐和提升大型语言模型的推理能力。课程最后,我们还将简要介绍强化学习在LLM智能体中的应用。
大家好,欢迎回来。我们必须马上开始,因为今天有很多内容要讲。
首先,学期即将结束。这意味着希望你们所有人的期末项目都取得了不错的进展。我们计划在本周四进行课堂展示,让大家简要概述一下期末项目。项目不需要最终完成,因为在周四的最终展示和下一个周二最终报告截止日期之间,你们还有大约12天的时间。之后我们会给所有报告评分,并将成绩提交给注册处。
所以,本周四将是期末项目展示。我也给大家一些概述性的指示。所有这些都发布在Piazza上了,但期望是你们的最终报告应包含8到9页的内容。两人小组是8页,三到四人小组是9页。
报告在这一点上应该总结你们在整个学期所做的一切。最重要的是,摘要、引言、问题动机及其重要性、相关工作。相关工作应按不同的方法类别进行组织,而不是按单篇论文,并强调你们的工作有何不同。严谨的问题陈述动机,形式化问题。当然,还有你们提出的方法,这应该是报告的主体,大约两页。可以是提出的新基准、新的AI方法、新的评估策略、模拟环境等,但这应该是最重要的部分。应该有一个很好的概览图来解释高层次上发生的一切。
实验方法、实验设置、数据集、基线。当然,你们应该有严谨的结果和讨论。基线的结果,你们方法的结果,理想情况下它效果更好,但你们知道我们不会根据它好多少来评分。如果更好,那很棒,你们仍然需要分析为什么你们认为你们的方法有改进。如果不如基线,也不用担心,但请包含一些分析,说明你们认为为什么会这样,以及未来可以采取哪些方向来改进。
最后是任何结论和未来方向。至于报告展示,将在本周四进行。每个项目的时间限制是8分钟,大约7到9张幻灯片。你们不必深入探讨问题和相关工作,它应该真正涵盖关键的新方法和你们已有的关键新实验的初步结果,以及你们计划在报告截止前12天内完成什么。所以,8分钟,7到9张幻灯片。我们会稍微延长一点时间,从下午1点到3点。但同样,如果有任何时间限制,请告诉我,我们会尝试将大家安排到合适的时间段。如果你们能在今天之前将限制条件发给我。

好的,关于期末项目流程有什么问题吗?



没有。好的。也请在今天下课后与我和助教们见面。我想我会从两点一直待到五六点,如果有人在周四之前想要反馈和讨论的话。周四我们也会在展示期间问一些问题,并给你们一些反馈,这样你们就能在5月20日之前完成一份扎实的最终报告。
好的。那么,回顾一下。学期即将结束,这门课涵盖了几个模块。我们从AI研究、数据和常见模型架构的基础开始。我们研究了多模态AI,对齐不同模态,使用它们并在模态之间传递信息。然后我们有几节关于LLM和大型多模态模型基础的讲座,以及一节关于生成式AI的客座讲座。所以今天的内容是扩散模型和流匹配模型,用于生成更多数据。本周和下周的最后两讲将涵盖更具交互性的AI。所以今天我们将介绍强化学习、推理和交互式AI,下周我们将介绍更多的人机交互、一些AI智能体,以及如何确保这些东西在世界上部署时是安全、合乎伦理的。
所以今天,基础RL。还有基础RL以及现代强化学习,以及它如何被用于对齐并使其他模型在推理方面变得更好。最后一部分,LLM智能体中的一些应用。


首先,RL基础。再次强调,目标不是要涵盖RL的所有深度,而只是为了理解今天所有的RL方法以及它们如何用于现代AI方法。
所以RL与非RL方法(监督学习)的最大区别在于RL是动态的。你们有处于某个环境中的智能体,它们不是像对一张图像进行分类那样只做一个预测,而是通常尝试采取一系列动作,环境然后给它们新的状态、环境中的新位置,在这种情况下它们可能会采取更多动作,整体上这种模式会持续下去。采取更多动作,与环境交互,进入新状态。目标方式是最大化智能体在该环境中的长期奖励。


为了稍微形式化这一点,人们通常在MDPs(马尔可夫决策过程)的背景下讨论RL。这本质上是形式化以下事实的一种方式:存在一组状态。这可以是位置,如果是机器人导航的话。如今,人们也可以将状态视为语言模型生成的词语。所以状态是查看你当前在世界上拥有的数据的一种方式。
有一组动作,这些是动作,模型可以做的事情。如果是机器人,可以是上下左右移动。如果是语言模型,可以是它可能生成的输出词语集合,一组核心动作。
通常有一个转移函数,告诉你从一个状态出发,如果我采取一个动作,我会进入哪个下一个状态。有时是确定性的,如果机器人向右移动,它总是会到达右边。有时环境中也可能存在一些随机性。
同样非常重要的是奖励函数。所以如果我处于特定状态并采取某些动作,我会得到什么奖励。同样,这可能是你是否成功完成了任务,可能是对花费太多时间或太多资源完成任务的惩罚,也可能是用户对交互的满意程度,所有这些都是可能的奖励函数。
当然,还有其他东西,比如你开始的状态、折扣因子(这实际上对于确保这些RL方法收敛非常重要),本质上是告诉你现在拥有的奖励比未来的奖励更有价值,所以你应该尝试最大化你能得到的东西。而范围通常是智能体与环境交互的总步数。
当这个智能体在不同状态周围移动、采取不同动作并观察到不同奖励时,有几个关键事项需要关注。
首先是回报这个概念。意思是我不想仅仅训练一个动作来获得这个即时状态的最大奖励。我希望能够最大化我在交互中获得的所有奖励的累积长期总和。所以会有下一个时间步T+1的奖励,加上γ乘以时间步T+2的奖励,等等。γ是折扣因子,基本上模拟了即时奖励(比如你现在拥有的钱)比未来可能获得的奖励(未来的钱)更有价值。你会一直加到交互结束。
所以这是关键所在,不仅仅是最大化即时奖励,而是最大化未来所有奖励的总和。当然,在很多情况下,即时奖励并不好,但未来有更好的奖励需要尝试优化。
这就是RL的整体目标:最大化长期奖励。
你试图通过学习一个策略来最大化这个长期奖励。策略是一种花哨的说法,表示无论我当前处于什么状态,我应该采取的动作分布是什么。所以机器人在这里,它应该向上或向前移动。如果语言模型生成了这些词,你应该输出那些其他词。所以,给定当前状态,你应该采取的动作分布。我再次说分布,是因为有时你的策略是确定性的,所以你在特定状态下总是向前移动。有时拥有随机策略也很有帮助,比如现在的LLM都有一些温度参数,所以它们生成的下一个动作或下一个词存在一些随机性。
如前所述,目标确实是找到**策略,即从每个状态出发,我应该采取的**下一个动作分布,以最大化长期累积奖励,也就是你得到的下一个奖励,以及未来的其他奖励。

所以从概念上讲,RL与监督学习有几个关键区别。RL涉及做出一系列决策,这个序列可以任意长,而监督学习只做一步决策。
在RL中,你试图最大化一系列决策产生的累积奖励,而在监督学习中,你只最大化即时奖励。在RL中,有时你还会遇到奖励非常稀疏的问题。你可能交互了很长的序列,但只在1000步之后才得到一个奖励,也许是在LLM和人类对话了1000个词之后,你才得到一个奖励。这使得RL天生具有挑战性。但在监督学习中,你总是得到密集的奖励。你知道标签是什么。

在RL中,环境可能是未知的。总是存在探索问题。设计机器人或自动驾驶汽车时,你无法规划出自动驾驶汽车将要行驶的每一条道路或机器人将要前往的每一个地方。需要对环境进行一些探索,这又增加了一层难度。而在监督学习中,通常你知道要预测的可能事物是什么,你知道可能的输入是什么。

话虽如此,监督学习方法在RL中有一个非常简单的应用,叫做模仿学习。想象一个例子,你想训练一个策略来导航自动驾驶汽车。所以状态就是你从挡风玻璃上看到的东西,动作就是你应该如何转动方向盘。简单来说,输入状态是你看到的,动作是转动方向盘。
当然,你可以做的是,让人类专家长时间驾驶汽车,并使用这些数据,这些数据将是人类看到的状态序列、人类采取的动作、人类看到的下一个状态、人类采取的下一个动作。所以你可以得到我们所谓的专家轨迹,即擅长执行此任务的专家驾驶员的数据。

然后你基本上可以只做监督学习。通过学习一个函数,该函数接收这些人类专家数据中收集到的任何状态(这是你的输入S),你只是重现人类所做的,并预测动作。
所以这可以是一个简单的分类模型。这被称为模仿学习,它是强化学习的一个例子,但你也可以看到它失败的情况,有几个主要原因。
首先,最大的问题是分布不匹配。如果你看到人类专家驾驶员,他们当然会开得很好,他们会在应该停车的时候转弯和停车,并遵循其他道路规则,因此你的模型只有在处于正确路径上时才知道何时采取正确的动作。
但在你的模型意外走上错误路径的情况下,那么你将无法恢复,因为它从未见过人类专家如何从意外未在停车标志处停车或意外偏离道路的情况下恢复的例子。
所以这种分布不匹配将很难处理,如果你意外进入一些次优状态,同样也很难让模型恢复,因为在这些专家演示中,你从未见过任何次优状态。
当然,你还有后勤问题,有时专家轨迹并不总是可用。即使总是可用,也需要大量人力去做,这可能非常耗费资源。但你知道,有时如果有可能收集人类专家演示,模仿学习是一种初始化良好策略的方法,但随后你还必须解决让策略探索一些次优轨迹以及学习如何从这些次优轨迹中恢复的问题。
更深入地探讨RL,有两种通用范式。

一种通用范式是所谓的基于模型的RL方法。在基于模型的方法中,你经常看到这些像树一样的图。这些树本质上表示,我将从这个状态开始。也许从这个状态出发,有两个可能的动作。给定这两个可能的动作,有两个可能的下一状态,也许每个状态都有,比如顶部是+1奖励,底部是-1奖励,然后又有两个可能的动作可以采取,在这种情况下又有两个状态。所以这是一个指数增长的节点树,节点是状态,边是动作,以及当你从一个状态到下一个状态时观察到的奖励。
所以,基于模型的RL在高层上就是构建这棵树,并为树中代表你将从这些节点获得的长期奖励的节点分配正确的值。

在这种情况下,我用蓝色高亮显示了一个策略。所以这个蓝色基本上意味着在这个状态,动作是……所以策略基本上是对这棵树的遍历。
同样,在短短五分钟内,如果你在做基于模型的RL,有几件事需要学习。一个叫做状态价值函数。所以给定每个状态,它的价值是多少?价值意味着如果我处于那个状态,我将获得的预期长期奖励是多少。再次强调,长期奖励是关键,不仅仅是这里的即时奖励。你不想仅仅因为状态是负一就给它赋值,你想给状态分配一个价值,要考虑到你未来可能获得+100。
这就是我们所说的状态价值函数,我们通常将其标注为V(S)。同样,有两种写法,一种是状态的价值。
当你遵循当前策略时,在这种情况下,状态S1的价值是,你从S1开始遵循当前策略,你会得到-1,然后得到+10,依此类推,所以价值是99。它考虑的不只是即时的-1,还有你的策略将在未来给你+100的事实,所以是+99。你提到了随机奖励?奖励是定义的。
所以就像我说的,如果我想为当前状态找到一个好的价值,我不想只是说如果我采取一个动作,我会得到负一。我想考虑到一旦我到达这里,未来有可能获得+100。所以在这种情况下,我没有使用任何折扣因子,总价值是-1 + 100 = 99。
所以它不……模型采取的步数无关紧要,但它需要是一个大数字。我的意思是,可能是-10,-20,然后+115。当然,是的。所以通常会有,我的意思是,会有更多我没有画出来的东西,通常可能有一个折扣因子来表明未来的东西可能价值较低。但在这种情况下,如果这个蓝色路径是一个策略。
那么它现在会得到负一,下一步会得到一百,然后得到更多。所以你会说总的长期价值是99。好的。
是否存在衰减函数?我可以想象,例如,假设你正在为做手术的医生制作一个RL系统,或者你知道有很多情况,即使等待很长时间或进行大量计算的结果更好,你可能也不想这样做,你可能想引入衰减函数或减少计算量。
是的,这正是折扣因子。所以γ就是你的总回报是下一个即时时间步的奖励加上γ乘以未来一步的奖励,然后你再加上γ平方乘以更远的奖励。通常γ设置为小于1的数,比如0.9。所以是的,有时折扣因子实际上对于确保其中一些方法收敛是非常必要的。否则你会一直继续下去,即使是一个小奖励,你也会一直试图寻找它。很好。
好的。😊 所以,这就是遵循你的策略的状态价值。另一个关键定义是,在所有可能采取的策略中,状态的最优价值。
如果你为S1计算它,你会发现这个蓝色路径已经是最优策略了。所以是的,V*(S1)也是99。同样,还有一个非常微妙的点,有时人们定义的不仅仅是状态的价值,还有状态-动作对的价值。所以如果我处于特定状态并采取特定动作,那么该状态-动作的长期价值是多少?同样,一些例子,如果人们将其标记为Q,你会看到Q(S, a)和V(S)。所以在这种情况下,遵循策略π,从S1开始并向上走,你会看到+1,然后看到+2,所以是+3。
呃,啊,所以。如果你从S1开始,然后向下走,那么你会看到,你知道这个,这是,你看到99。所以,那是。这基本上是一种估计状态价值以及你从该状态采取的动作价值的方法。同样,你基本上可以说最优的状态-动作函数是什么。所以在这种情况下,你看这个Q*,在S1,你向上走,你实际上会发现这个策略是次优的。事实上,你应该走这里然后走那里。所以这就是为什么在最优策略下,你的**状态价值函数是4而不是3。
所以很多基于模型的RL正是关于推导这些Q(S, a)和V(S)。你知道,在过去,人们在使用动态规划探索树时使用这些,如今人们当然使用神经网络来近似Q(S, a)和V(S)。但一旦推导出来,最优策略基本上可以通过将其视为树搜索问题来完成,你基本上将尝试遍历你的树,每次你将找到最大化你的V(S)或最大化你的Q(S, a)的动作。
所以基本上是从……搜索。另一点是,这些Q和V是可以互换的,你有了一个,也可以推导出另一个。很好。😡 所以,那是。简要地说,基于模型的RL,所以。
人们见过AlphaGo和一些下棋、玩游戏的情况,它们大多是基于模型的,所以它们有状态,即游戏的状态,有你可以采取的可能动作,你的目标确实是估计每个可能的棋子状态的长期奖励。所以不仅仅是,你知道,我刚刚在即时步骤中吃掉了对方的棋子,而是长期来看我获胜的可能性。AlphaGo本质上只是通过将棋盘视为图像来在这些棋盘上训练CNN,并以CNN输出V(状态的长期价值)的方式进行训练。然后,一旦你有了这些V,你基本上可以局部采取动作,因为你的V(S)已经考虑了长期奖励,所以现在你可以采取你的局部动作,这只是遍历你的树。所以是基于模型的。
另一种范式是基于策略的RL。所以基于策略的RL,我们不会构建树,我们也不会担心估计每个状态、每个动作的价值。在基于策略的RL中,我要做的就是直接学习一个策略,我将其视为本质上是一个函数,它接收状态并输出动作。所以在这种情况下,这个游戏,你的状态是游戏的图像,你的动作是我应该向上还是向下移动。
大多数现代方法,当你想到我们听到的RL和其他方法时,它们都采用这些基于策略的方法。所以我们将在讲座中主要详细讨论基于策略的方法。
在讨论基于策略的方法之前。我想强调一下,看看这是一个很大的争论,基于模型的方法在哪些方面更好,或者基于策略的方法在哪些方面更好。我在这里列出了每种方法的一大堆优缺点。所以在基于模型的RL中,你实际上在学习环境的一个模型,你在学习这棵树和每个可能的状态-动作转移。而在基于策略的模型中,你只学习策略,但不关心学习环境的模型。
因此,由于基于模型的RL学习了一个模型,它们更适合规划,因为你可以通过遍历这棵树来模拟其他潜在动作,它们的样本效率更高。但代价是更复杂。另一方面,基于策略的方法不允许你进行规划,它们不允许……它们具有更高的样本效率,但训练算法通常更容易实现。
还有很多优点和缺点,这也涵盖了一些例子,一些著名的基于模型的RL算法,以及一些著名的基于策略的RL算法。
好的。😊

所以基于策略的RL。再次,我将使用这个激励性的例子。这就像乒乓球游戏,你知道你要控制其中一个球拍对抗对手,你的两个选择是向上或向下移动,将乒乓球弹回对手一侧。如果你成功将球打过网,你就得一分;如果你让球落在自己一侧,你就失一分。

所以现在的目标是训练一个模型,它接收这个状态(游戏的截图),并只输出两件事:你是向上移动还是向下移动。所以这是一个二元分类问题。你的目标本质上是训练这个模型。那么如何训练这个模型呢?

首先,假设你有标签。比如说,有人遵循人类专家,这些人类专家向你展示了在每个阶段,人类是向上移动还是向下移动。所以这是专家标签,专家轨迹。
然后你要做的通常是将其视为一个监督学习问题。输入状态,你的标签是向上或向下,你最大化你的对数概率。所以当实际向上移动时,最大化向上移动的对数概率;当标签是向下时,最大化向下移动的对数概率。这基本上就是你的交叉熵损失。如果有标签,你就会这样做。
当然,你没有标签,或者标签很昂贵。
所以基于策略的方法要做的是,首先,


有一个策略。策略只是一种说法,我有一些状态,我采取一些动作,我将只是……提升这个策略。也许在第一次运行中,你的策略采样了上、上、下、下。在第二次运行中,你采样了其他东西。在第三次运行中,你又采样了其他东西。所以这些只是你的模型根据当前策略采取行动的方式。
假设你在游戏中运行这个,你意识到在你的第一个动作序列中,所以你的第一个



例如,从你的策略中,你赢了,所以你非常幸运地赢了。然后在你的第二次和第三次运行中,你不幸运,你输了。好的,所以你可以,你可以通过得分是给了你还是给了对手来观察你是赢了还是输了。
那么你要做的是,基本上将你赢了的序列(我知道可能是靠运气赢的)视为好的例子,所以我想最大化导致你赢的序列中的每个动作。


你也会将导致你输了的动作序列(你运气不好)视为坏的例子。所以我要惩罚导致你输的序列中的每个动作。

那看起来像什么?基本上,当你赢时,最大化每个动作的对数概率;当你输时,最大化负一乘以每个动作的对数概率。所以一般来说,你可以将其视为一个通用的目标函数,它最大化每个动作的奖励R_i(在这种情况下是+1或-1)乘以该序列中每个动作的对数概率的总和。


所以实际上,这就解释了基于策略的RL,就这么简单。
这是最早出现的算法,所以它被称为REINFORCE算法。你基本上会,你知道,从某个策略π(a|s)开始,假设它是可微的,所以它可以是一个神经网络。你将随机初始化参数。
然后你无限循环,使用该策略生成一个回合。所以从你的状态采取动作。在乒乓球游戏中,就是上下移动,这是一个回合,你看到一些奖励,然后再次上下移动,你看到其他奖励,依此类推。啊,对于你的策略。然后对于回合中的每个时间步,我将最大化这个函数。所以再次,这个函数中的G是你在该序列中的奖励,所以按照这个方程给出的方式将每个奖励相加,然后这是你的动作对数概率的梯度,给定那些序列。


所以正是这个方程,只不过现在你的奖励只是


在每个时间步上求和。你也意识到,你知道这里的γ是你提到的折扣因子,所以你应该惩罚未来的好奖励,并倾向于现在就拥有它们。

但这就是策略梯度,所以采样不同的动作,你的策略,看看奖励是什么,然后根据奖励是正还是负来提升或降低动作的概率。
这里的这一点,遵循你的策略,我还应该指出ε是非常重要的。那么ε是什么意思?基本上,当你开始初始化你的策略时,你的策略会很差,或者基本上会给你随机的动作。
这意味着你不应该总是遵循你的策略来采取动作,而应该有时采取随机动作,这称为探索。不管你的策略是什么,采取随机动作。
所以通常以ε的概率,你只会采取一些随机动作。然后随着你慢慢开始训练你的模型,你提升好动作的概率,降低坏动作的概率,现在你的策略变得更好了,对吧?一旦你的策略变得更好,你将慢慢开始倾向于遵循你的策略,而不是从随机策略中采样太多。所以基本上,这个ε开始时很高,然后慢慢变小。
所以你称之为探索,即采样随机事物;以及利用,即遵循你的策略告诉你的内容。好的,所以这基本上就是策略梯度。好的。最大化奖励乘以对数概率,对数概率由奖励缩放。所以如果你的奖励是正的,就增加动作的概率;奖励是负的,就减少动作的概率。这是原始的策略梯度。
多年来有很多改进,因为它有几个问题。一个是方差非常高。为什么我说方差非常高?因为通常原始奖励本身可能没有太大意义。有时你玩的游戏总是得到正奖励,你只是想得到更多正奖励和更少正奖励;有时你玩的游戏总是得到负奖励,你只是想更接近零。所以有时原始奖励没有太大意义。
重要的是奖励随时间的变化,与奖励的滚动平均值相比。
所以一个重大的创新或提高性能的技巧是将奖励与基线进行比较,并使用相对改进。所以现在这是一个新的函数,最大的区别是,它是你的轨迹(动作序列)的奖励,减去基线。
基线可以是类似奖励的指数移动平均值。好的。减去基线显著提高了基于策略方法的稳定性。不。当然,人们也探索了更好的基线,因此开发了这种演员-评论家方法。
更好的基线基本上将你的基于策略的方法与基于模型的方法结合起来。
回想一下,我们定义了Q和V,对吧?V是V(S),衡量一个状态的好坏,通过从该状态出发的长期奖励;Q是Q(S, a),衡量一个状态-动作对的好坏,通过从该状态和动作出发的长期奖励。
所以实际上,Q(S, a)和V(S)之间的差异,我们通常称之为A(S, a),其中A代表优势函数。优势基本上意味着从该状态采取特定动作有什么优势。同样,这个优势不是用即时奖励来衡量的,而是用长期预期奖励来衡量的。
所以。如果这个A(S, a)很大,那意味着我们对这个动作非常满意,因为它给了我们更好的长期奖励。如果A(S, a)很小或为负,我们非常不满意这个动作,因为它给了我们负的长期奖励。
所以。这引出了这个新的估计器,本质上还是最大化你序列中动作的对数概率,但现在由优势函数缩放,即Q(S, a)比基线V(S)好多少。所以我们称之为演员-评论家方法。这在2016年到2020年左右非常流行,它启动了很多深度强化学习研究。在这种情况下,你必须学习两个模型,因为正如这里提到的,首先你得到一个模型来学习策略,即我从一个序列中应该采取什么动作,但我还需要模型来学习这些Q和V函数,就像我之前展示的基于模型的RL和树一样。
所以这些演员-评论家模型正好维护两个模型。一个是演员模型,演员模型学习策略,所以状态输入,演员学习给定状态的动作分布,这就是你的策略或你的演员。同时,另一个模型是我们所说的评论家。评论家本质上学习Q(S, a),它学习批评和评估模型看到的状态和动作的价值。
所以当这两个函数基本上使用不同的目标一起训练时,评论家评估基线动作的好坏。我不会在这里讲太多细节,你知道,如果有人以前见过Q学习或DQN,那基本上就是这些基于模型的方法如何用深度学习来近似的。
而演员,它决定策略是什么,再次是你的策略梯度函数,计算对数概率乘以你的优势函数。还在去发些创试。好的。😊
我知道这可能比平时的讲座内容多,但到目前为止有什么问题吗?好的。
所以,几乎到了激动人心的部分,就是关于这些RL方法如何与LLM交叉。
但在那之前,还有几个小的改进。其中一个叫做近端策略优化。所以之前的一切都是策略梯度、策略优化,然后出现了这个新方法叫做近端策略优化。
在这个领域内还有几个新方法。其中一个叫做信任区域策略优化,最大的区别是你仍然要做策略梯度,你仍然要最大化对数概率,但现在最大的区别是你要确保你的策略不会随时间变化太大,并且通过限制新旧策略之间的KL散度来衡量,即梯度更新后的新策略和梯度更新前的旧策略。
所以如果有一个当前点,你想确保你提出的点非常接近。同样,在视觉上,这是你的动作和你的策略,你不想让它与之前的样子相差太大。
所以那是2015年的信任区域策略优化,然后近端策略优化是它的进一步近似,说实际上你不需要正式测量新旧两个策略分布之间的KL散度,而是直接裁剪梯度,所以无论策略梯度(对数概率)是什么,都将其裁剪在一定范围内。
所以这是你讲义中的方程,这是你的新策略π_new(a|s)和旧策略π_old(a|s)之间的比率,你将把这个比率裁剪在1-ε和1+ε之间,所以每次更新模型时,你都在一个ε球内。
而PPO本质上是人们在RLHF(人类反馈强化学习)中使用的RL方法,如今被用来对齐这些LLM。


简要地说,这些方法的工作原理是。第0步,你首先预训练你的LLM。然后你会进行监督微调。所以无论你在预训练时做什么,只是在你的互联网文本上训练,预测一个词接一个词。监督微调有时我们也称为指令微调,收集人类编写的问答演示,并对这些问答进行下一个词预测。你们都见过这个。
然后第1步,现在这是基于RL的对齐开始的时候。所以对于每个提示,你将把LLM视为一个策略。所以策略是给定状态输出动作,现在我说它是给定状态(你的提示和之前生成的词)输出词序列。所以你可以将LLM视为一个策略。
你将从模型中采样多个响应。所以这可能是一个响应,另一个响应,另一个响应,就像我们在乒乓球游戏中看到的那样。在第2步,你让人类根据质量对这些输出进行排序,这就是人类反馈的来源。
但当然,你不能总是依赖人类标记响应,那在实验室外无法推广。所以现在你将训练一个奖励模型,该模型基本上预测并试图模仿人类偏好。
所以现在你可以标记任何其他响应,即使它没有被人类标记,也可以被奖励模型标记,所以你会得到一些奖励,就像乒乓球游戏一样,只是现在比简单的+1和-1更复杂一点。
一件事是,这些奖励模型根据完整的模型响应(即与人类对话的完整完成)来创建人类偏好。然后第4步,你使用RL,他们使用的第一个算法正是PPO,这个近端策略优化,来微调LLM以最大化这些奖励。再次,最大化这个奖励基本上意味着获取奖励,乘以该序列中动作的对数概率。
更多细节:首先是人类排序和奖励模型。所以你的提示输入,你有一个语言模型生成一些文本,人类将对每个句子评分,看他们是否喜欢。一旦这些人类评分,你将根据输入和人类评分的奖励进行训练,你使用监督学习来训练,得到一个奖励模型,以恢复给定真实人类标签时的人类奖励。

当然,你知道David在讲座中提到过,给对话分配客观的奖励(如8或1.2)更难,通常比较一个和另一个更容易,比如人类更喜欢这个而不是那个。

因此,你在这些论文中经常看到这种东西,这基本上是一种衡量一个输出优于另一个输出的可能性的方法,作为两个输出各自实际奖励的函数。所以基本上是一种将比较奖励与绝对奖励联系起来的方法。但是的,所有这些都是为了让人工排序并学习一个奖励模型。
然后在PPO中发生的是,到目前为止你拥有的,你有你的演员模型,也就是你的策略,那是你的大语言模型。状态是提示和模型目前生成的内容,动作是它们将生成的下一个词。它会有我们刚刚看到的奖励模型,该模型已经训练好并冻结,来自人类对这些响应的评分。现在它将只是重新创建并重新预测这些人类偏好作为一个标量奖励。再次,这些是在你的完整模型响应(即完整对话)之上的。
第三个组件是这个价值模型,所以这个价值模型与我们看到的评论家模型相同,所以这也将被训练,它将是一个评论家模型,本质上估计V(S)(状态的价值)。所以在这种情况下,状态只是模型响应,包括部分和完整的模型响应(词序列),你的预测器输出一个标量。
所以这几乎完全等同于你的演员-评论家模型,对吧?有一个演员模型生成动作(在这种情况下是词),还有一个评论家模型评估你从每个状态生成的词的价值。
那么你如何应用RL呢?你会从生成响应开始,LLM将为每个提示生成多个响应。
你将运行你的奖励模型,为每个输出响应分配奖励。
然后你将计算你的优势。就像在评论家中一样,你将在这里计算你的优势函数,你的策略(你的语言模型),给定提示和策略,你生成一些输出。
输出将通过奖励模型得到R,同时给你一个价值模型,它提供基线。
优势基本上是你的奖励比基线好多少。这就是优势函数,你想将其解释为你生成的特定词是否优于给定先前词的标准下你生成的平均词。
所以这给了你你的A函数,这个A函数将是你用于策略梯度中更新你的策略模型(即你的LLM)的项。另一件事是,在优化你的策略之后,你还要更新你的价值函数。所以你想训练一个更好的价值模型,你想把这个价值模型视为再次评估平均词的好坏。
所以看起来很复杂,对吧?看起来相当复杂。而这也许是GRPO最大的优势,它大大简化了这一点。
所以你之前有策略模型、参考模型、奖励模型。再次,蓝色是冻结的(我忘了提蓝色是冻结的),黄色是训练的。所以它有策略模型(即LLM),有价值模型(估计平均词的好坏),有奖励模型(这个新词有多好),然后你将新词的奖励与参考模型(即上一轮的LLM)的平均词价值进行比较,你还有这个KL惩罚,以确保它没有变化太大。记住,在近端策略优化中,你的KL必须确保你的策略不会变化太大。所以非常复杂。然后GRPO出现了,说了几件事:首先,我们要去掉价值模型。我们不要有一个跟踪平均词好坏的价值模型,我们不去学习它,相反,我只是要从我的策略中采样一组响应。
我对每个响应评分奖励,我的优势基本上只是通过这个奖励比组中其他奖励好多少来估计。
好的,所以你不需要一个价值模型来作为基线衡量平均或词的价值,如果你采样足够多的响应组,那么组内的奖励本身就允许你计算平均值是多少,从而你的奖励比那个平均值好多少。
所以是的,去掉那个价值模型,一个你不需要训练的东西,去掉它让事情变得容易多了。

你可以在这里看到,这基本上就是你的……那是大事,只是带有KL的PPO目标,但这里简单的是这个优势函数,优势就是奖励减去组内奖励的均值,再除以组内奖励的标准差。

啊。所以是的,区别在于使用一组响应来计算优势并进行集成更新,你去掉了学习的价值函数,只是让它变得更简单,作为奖励的统计量(均值和标准差),而不需要学习它。然后进一步的创新甚至放弃了奖励模型,所以你不需要训练一个复杂的奖励模型来模仿人类偏好,而只是使用一些简单的基于组的验证器,比如二进制检查(你的代码是否运行),或者你的代码通过了多少测试用例,或者你的响应有多长,或者你的响应是否遵循某种格式。
所以你可以看到很多。创新是简化的结果,而不是更复杂或更高级的算法。

啊。很好。还有,这里只是,你知道,一些。我看了一些博客文章。

我想很多人,很多RL领域的人,所以现在很多将RL用于机器人和深度RL的人都在研究RL用于LLM,很多RL社区的人在想,GRPO简化了PPO这么多,令人惊讶的是以前没人尝试过这个。
所以这是一个评论,有人说为什么以前没人尝试过GRPO。嗯,我们有REINFORCE,记得REINFORCE是我们讨论的第一个算法,在REINFORCE中,你通过减去基线(通常是几个轨迹的平均奖励,即你到目前为止看到的奖励的指数移动平均值)来更新策略。
这有助于减少方差。事实上,理论表明理想的基线是从你的状态出发的总预期未来奖励,通常称为价值V(S)。
使用价值函数作为基线被称为演员-评论家方法。所以你有学习策略的演员和学习V(S)并将其用作基线的评论家。PPO是它的一个稳定版本。
现在,在传统的REINFORCE中,基线可以是当前状态的任何函数,传统上它只是轨迹的奖励,即单个批次中的平均值。
当然,在GRPO中,它是基于为每个提示生成的数千个样本计算的,这是新颖的。所以很大程度上是回到,你知道,甚至在演员-评论家之前,你知道,在学习价值函数之前,只是对多个采样提示的奖励进行简单的滚动平均统计。


很好。嗯,最后两件事。DPO也是人们可能见过的。再次,是PPO的一个变体,也就是你的策略优化。
所以这个框是PPO,记得你有偏好数据,你有提示X和排序(人类认为一个比另一个好),你会训练一个奖励模型来反映你的人类评分,一旦有了奖励模型,你将使用它通过策略梯度来获得并更新你的策略模型。所以那是PPO。
DPO是这条线,它基本上再次从相同的偏好数据开始,跳过了训练奖励模型,跳过了PPO,实际上只是,你知道,在偏好数据上使用监督学习进行训练,就像在偏好数据上进行监督预测一样。
嗯,说它是监督的可能不太准确,它们是在这个偏好项上进行强化学习。
我不会讲太多细节,但有一些关键区别。
所以DPO在计算上更高效,因为它不需要训练一个单独的奖励模型并使用该奖励模型进行RL。
所以在计算速度和工程难度上更高效。它没有那种奖励模型。在训练期间,必须在线解码响应,这通常很慢。而PPO则必须在线数据上训练,所以它总是在你刚刚收集的响应上训练。而DPO在这些预先生成的离线数据上训练。所以关键是,这仍然是社区之间的争论。
PPO可以被视为在线强化学习,而DPO可以被视为离线强化学习。

两者之间有一些差异。我认为一个简单的类比是,假设你想在自动驾驶汽车上训练一个策略。所以你将把它部署在你的车上,当你驾驶你的车时,你将收集更多数据,你将看到你驾驶得有多好的奖励,你将根据你在世界上实际在线体验到的内容来更新你的模型。
所以那是在线RL。而离线RL更像是,你知道,你看过别人在不同场景下驾驶汽车的视频,不是你实际生活中正在驾驶的场景,而是试图从离线数据中学习。
人们争论在线更好还是离线更好,但PPO和DPO之间最大的区别是一个在做在线RL,一个在做离线RL。
但DPO的一大吸引力再次在于它更简单,并且跳过了许多以前需要的额外步骤。

好的,我们时间快到了,让我总结一下强化学习的几个技巧和训练窍门。
通常,用固定策略进行完整性检查总是好的。例如随机初始化的策略,或者从人类专家演示初始化的策略。
因为RL中最大的挑战之一是,你是在奖励本身和环境本身也在变化的情况下学习策略。

通常,监控策略散度是好的,特别是在你试图强制策略不会变化太大的算法中,确保其平滑。随时间监控熵,熵只是你的动作的方差有多大
在本节课中,我们将探讨人机交互(Human-AI Interaction)领域的最新方向。我们将回顾多模态推理、智能体系统,并深入讨论如何让人工智能系统与人类有效协作,以及理解这些先进系统的伦理与安全问题。本节课是本学期的最后一讲,我们将展望未来研究面临的开放性问题。
上一节我们介绍了推理,特别是强化学习。本节中我们来看看多模态推理,我认为下一代AI模型将在这方面非常强大。

多模态推理意味着模型能够处理越来越多的信息模态,包括语言、视频、音频、传感器数据、医疗数据等。它需要:
- 学习多模态表征:从差异巨大的输入中学习统一的表征。
- 进行多步推理:将复杂问题分解为多个步骤,其中一些步骤涉及语言推理,另一些可能涉及视觉证据、听觉证据或其他模态的证据。
- 实现人机交互:人类需要能够理解每一个步骤,能够进行干预并提出后续问题。
我认为这是一个通用的框架:多模态输入 -> 多步分解 -> 多模态输出 -> 人机交互。

以下是该领域面临的主要挑战:



建模方面:涉及多模态融合(学习不同数据模态间的对应关系)和多模态生成(模型需能生成文本、视频、音频等以进行推理)。

数据方面:需要更具挑战性的多模态推理基准,最好附带人类拆解问题的推理步骤。
训练方面:一方面可以利用优质的人类推理轨迹进行监督微调;另一方面,正如上周强化学习所示,可以直接针对最终目标进行训练,让推理行为自然涌现。

人机交互方面:系统需要与人类交互,人类输入应能控制模型,而模型输出则必须稳健、可信且安全。
为了具体说明多模态输入、推理、输出与人机交互的结合,让我们看一个我们近期的研究案例。
这项工作的背景是教育领域的推理,模态是图像和语言。例如,在解决几何问题时,在图形上绘制额外的辅助线或标注对学生理解非常有帮助。大多数辅导系统是文本基础的,而我们的目标是构建一个智能辅导系统,通过多模态交互引导学生自己找出答案,而不是直接给出答案。

我们开发的方法称为“交互式草图板”。“交互式”指的是它通过多步互动引导学生;“草图板”则借鉴了允许人们绘图、草图并迭代想法的平台历史。
系统工作流程如下:
- 学生遇到问题(如几何题)并卡住。
- AI聊天机器人首先尝试提供提示(而非最终答案),例如建议绘制特定的辅助线。
- 系统通过编写代码(如Matplotlib代码)来精确生成带有标注的图表。
- 学生根据图表和提示进行绘图和思考。
- 如果学生再次卡住,可将标注后的图表再次发送给模型。
- 模型进一步提供提示(如几何定理),最终帮助学生解决问题。
在实现上,系统首先判断绘图是否有帮助(如几何、微积分问题)。然后选择生成方式:使用代码能保证绘图的精确性(如距离、角度),而使用生成模型(如扩散模型)则更灵活但缺乏精确保证。在本案例中,我们使用了代码生成方式。
一些成果表明,该方法改进了之前的“视觉思维链”方法,并且学生反馈积极,认为图表直观,且喜欢分步提示而非直接给答案的学习体验。
这个案例展示了未来人机交互研究的一种形态:处理复杂多模态、进行多步分解、产生直观的多模态输出,并以增强人类能力(如学习)为目标。
另一个令人兴奋的方向是交互式智能体,它们可以帮助我们提升生产力,自动化各种任务。
例如,任务可能是“购买一款评分超过4星、价格低于60美元的耳机”。现代AI智能体能够理解此类复杂指令,并将其分解为步骤:打开浏览器、搜索“耳机”、按评分筛选、按价格筛选、选择商品、结账等。
这些智能体未来可能应用于网站、数据库、PPT、电子表格、手机操作系统等,几乎能用自然语言自动化任何任务。然而,它们不能完全自主运行,必须能理解指令、在困惑时请求澄清,并且人类需要能够介入并提供反馈。
智能体研究的主要挑战与方向包括:
1. 分层推理与动作分解:
将困难任务分解为高级规划(用自然语言描述,如“搜索耳机”)和低级动作(如移动光标、点击、输入字符)。一个高级规划可能对应多个低级动作。这种分解也有助于人类干预。



2. 不确定性度量与人类介入:
如何让智能体在不确定时发出信号?一种方法是多次采样模型的下一个动作,如果生成的多个动作差异很大,则表明模型不确定/困惑。此时,人类可以介入,提供一个正确的高级规划步骤(例如,“你应该按价格从低到高排序”),模型随后便能继续执行。

3. 集成搜索与剪枝:
对于复杂任务(如“查询我购买过某产品的次数”),智能体需要在巨大的状态空间(如网站页面)中搜索。可以借鉴强化学习中的价值函数概念,估计每个状态的价值,从而在搜索时剪枝掉无用的分支,提高效率。
4. 从数字智能体到具身智能体:
研究正扩展到机器人领域,即视觉-语言-动作模型。这些模型接收视觉输入(机器人所见)和语言指令,输出机器人动作(如位置变化、角速度、抓握)。通常使用大型语言模型(如LLaMA)作为核心,通过适配器接入视觉特征,并解码为动作序列。
关于训练,对于购买等复杂任务,纯强化学习可能不可行,更可行的策略是:用视觉语言模型和规划进行初始化,再对低级动作进行强化学习微调。
5. 工具使用:
将工具作为智能体的扩展模块是重要方向。目前,工具调用主要通过语言或代码接口。未来,多模态基础模型的发展可能使工具交互不再局限于语言瓶颈。





最后,我们来探讨人机交互领域的核心问题及模型量化的重要性。

我认为有三个重大问题需要回答:
1. 最直观的交互媒介是什么?
除了语言提示,是否可以是基于代码、视觉甚至生理信号的交互方式?如何在保持语言保真度的同时,降低认知负荷?这涉及构建多模态交互界面并探索不同媒介间的切换与融合。
2. 需要解决哪些新的AI技术挑战以实现人机交互?
一个关键挑战是模型量化,其正式定义是:对模型进行实证和理论研究,以更好地理解其缺陷,并预测和控制其行为。这包括:
- 理解模型何时及为何失败。
- 解释模型的内在行为。
- 预测模型如何学习及随规模扩展的性能变化。
3. 人机集成会带来哪些新机遇?
如何帮助提升生产力、创造力和福祉?这是更偏向应用和人文的问题。

模型量化的具体挑战包括:

- 安全性与社会偏见:大型语言模型容易产生性别、种族等偏见。在多模态模型中,偏见可能被复合放大(“最坏情况叠加”)。对抗“越狱”攻击是一个持续挑战。
- 鲁棒性:模型在训练数据上表现良好,但在面对真实世界的噪声、分布外数据时性能可能大幅下降。研究表明,性能越高的模型,其鲁棒性下降可能越严重。
- 可解释性:可视化神经元、计算输入梯度以高亮重要区域等方法有助于理解模型。
- 量化评估本身的挑战:如何评估我们对模型属性的理解是否正确?因为没有现成的“地面真理”。我们提出两种间接评估方法:
- 人类模拟测试:如果人类能够模拟模型在正确和错误情况下的预测,说明模型更可理解。
- 人类调试测试:如果人类基于对模型属性的理解,能够实际发现并修复模型中的错误,也证明该理解是有效的。




本节课中我们一起学习了人机交互的前沿方向。我们回顾了多模态推理的框架与挑战,通过“交互式草图板”案例看到了多模态交互在教育中的应用。我们探讨了智能体系统的关键问题,如分层规划、不确定性处理、搜索以及从数字世界到机器人领域的延伸。最后,我们审视了人机交互面临的根本问题,并强调了模型量化在理解、控制AI模型以及确保其安全、鲁棒方面的重要性。随着AI系统日益强大和普及,如何设计使其与人类有效、安全、可信地协作,将是未来研究的核心。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/248176.html