今天我们将学习关于数据结构与学习的第二讲。在这一讲中,我们将探讨各种形式的数据。数据大概是如今机器学习和人工智能中最重要的要素。我们将看看视觉语言、听觉感知、集合以及图数据的例子,然后我们将把所有这些数据形式推广到关于是什么让数据变得独特的讨论中:你的数据具有哪些属性,你应该如何思考你的数据,以及为你的数据设计什么样的合适建模架构。我们将给出可变数据集的例子,我们还会讨论标签。通常你会有原始数据输入,我们试图学习一些特征,以便你可以对它们进行标注或做出一些推理。为了进行这些推理,我们将介绍标签的类型和学习范式的类型,以及你可以施加哪些不同的目标在你的方法上,使它们在实践中能够真正学得好。
在开始上课之前,先处理一些事务性工作。你们所有人都应该已经被加入到Piazza中了,如果还没有,请在课后尽快告诉我。Piazza将是发布所有公告的资源平台,例如这第一条公告,以及包含所有网站、课程幻灯片、课程日历、教学大纲等等的链接。请确保你已经加入了Piazza,邮件已经发送出去了,可能需要激活并注册你的账户,如果你以前没有使用过Piazza,请尽快完成。
说到Piazza,我们的第一条公告是,项目偏好表需要在今天结束前提交。如果你计划修这门课并把课程项目作为其中的一部分,请填写那个表单。那个表单是一个非常简短的表单,询问您的姓名、您已经有哪些团队成员,或者如果您正在寻找合法的团队成员、需要我们帮助为您匹配志趣相投的学生,以及您对参与这门课程项目的总体兴趣。请在Piazza上注册,并在今天之前填写该项目意向表。我也提早一点结束讲座,这样还没有找到队友的学生就有机会交流并找到志趣相投的人。
另一个简短的后勤事项:我们发现下周,也就是第三周,周二和周一实际上互换了。如果你们不知道周一是总统日的话,但不是在周一上课,而是取消周二的课,并将周一的课移到周二取而代之,这似乎是学校的官方政策。因此,周二的所有活动都取消了,我们下周二没有讲座。所以我们必须重新调整一些内容,以便在这些讲座中容纳更多内容。
这个日历,如果你以前没看过的话,将会非常有用。它会涵盖每周的主题以及任何重要的作业。例如,红色标注的,你看到项目意向表格今天(2月11日)截止,而且很快,一个非常重要的时间节点是下周四,不是这周四,而是下周四(2月20日),将是你们的第一次提案陈述。我们将发送这些说明给大约每个正在做研究项目的学生及其队友,我们将进行大约五分钟的陈述,概述他们的大致想法以及他们想要开始使用的不同数据集和模型,其目的是为了获得讲师和班上其他成员的反馈。请注意看这个日历,它再次链接在Piazza上,如果你还没有加入Piazza,请加入。
其他几件后勤事务:本周四,你会看到有一个PyTorch和HuggingFace教程,将由我的一些学生主持,主要是对不同内容的介绍性教程,涵盖你在机器学习中会用到的工具,包括如何快速迭代代码、使用GPU、监控你的实验等等。你们中有些人也问过第一次阅读材料什么时候发布。本周四将是一个Python教程,下周四你们所有人都要进行开题报告陈述,接下来的几个周四讨论将会开始。讨论一、二、三、四,春假前有四次讨论,这意味着阅读材料大约会在讨论前一周发布。第一次阅读材料将在2月19日发布。一定要去查看日历。
好的,进入今天的课程。在机器学习中,我们经常谈论数据,数据是取得任何成就的关键。你想把这些数据看作是属于某种感官模态,感官模态本质上是指数据在世界上被表达或感知的某种方式。当你观察数据时,你经常会认为收集数据的背后有某种传感器。你基本上可以从更原始的角度来看待数据模态,即更接近传感器的,到更抽象的,即距离传感器更远的。
例如,原始数据可以包括直接从麦克风收集的语音信号,记录某人;或者直接从相机记录或捕捉的图像。然后你可以考虑从原始模态中进行抽象:你可以提取出语言,即一个人在他们的语音信号中所说出的具体词汇,它是通过保留一些信息并丢弃其他一些信息来进行抽象;你可以开始从图像中检测物体,这是一种提取形式,提取出那里有什么物体、它们在什么位置,同时丢弃图像的其他部分。你还可以进行更深层次的抽象:从语言中,你可以检测某人的情绪,他们感觉是积极的还是消极的,关于他们正在谈论的话题;从检测到的物体中,你可以提取出确切的物体类别。
机器学习和人工智能主要就是学习这些抽象——从原始数据出发,这些数据通常维度很高、充满噪声,并且在现实世界中是不干净的,到学习有用的抽象并对该数据进行推理。整堂课和整个核心内容是涵盖有哪些类型的数据,以及学习这些抽象的正确方法是什么,这些抽象对于你所关心的某些任务是有用的。

为了在实践中看到其中的一些,你们所有人可能都见过视觉模态。这是一幅彩色图像,当你观察这些模态时,它们通常必须在你的计算机上以某种方式进行表示。你想分类的图像可以被表示为像素,你有一个高度、一个宽度,并且每个维度都有一些通道,也就是它们背后的颜色数量,即RGB,所以它通常是一个三维矩阵:高度、宽度和通道。从这些图像中,你可以分类某个物体的存在。这可以被设定为一个二分类问题——这里是有狗还是没有狗;你也可以把它作为一个多类分类问题——你可能会有一大组类别试图从图像中推断出来,而你的目标是选择其中一个正确的类别。这就是视觉数据的一个例子,以及你可能会对视觉数据做出的一些推断。
语言数据,你可以在互联网上获得大量的语言数据。例如,亚马逊上的一些书面语言,可能是某人在购买商品后写下的;你也可以获得口头语言,例如在电影或电视节目中人们说话的录音。从语言数据中,你可以尝试推断,例如一个句子中出现的某个特定单词——比如“humorous”这个词——是否可以被推断为积极或消极。你会如何表示这个数据?“humorous”是你电脑上的一个字符串,但你会如何以一种方式来表示它,从而能够真正被你的机器学习或人工智能算法所接收?词袋模型是实现它的一种简单方法:这本质上意味着你首先要收集一个词典,包含句子中出现的所有单词,然后你在那个特定的感兴趣的单词处放一个1。所以“humorous”是词典中的第八个单词,你在第八个位置放一个1,其他地方放0。这是一种简单的表示方法,用来表示计算机可以接收的数字格式的单词。你可以分类,例如这些单词是积极的还是消极的,你可以分类它是哪种词性,是名词、动词还是形容词,你也可以分类它是否是命名实体,例如特定的地点或特定的物体。
现如今,我们已经看到,我们并不真正训练词级模型,我们训练的是句子或段落级别的模型。你可能会输入多个词、段落,或者在对话中,然后你试图对其进行一些推理,比如整段话是否表明一个人持积极态度还是对他们购买的物品持消极态度,或者这整段话编码在模型中并生成一个回复,这样客服代理就能自动回复这个人写的评论。这些更像是句子或文档级别的分类任务。表示它的简单方法是继续使用你的词袋,你基本上只需要统计哪些词出现了——也许“ideal”这个词出现了,那是词典中的第二个标记;“anyone”这个词出现了,那是第五个标记;“humorous”这个词出现了,那是第八个标记。本质上,就是将句子中所有出现在词典里的词标为1,其他地方都标为0。
你们所有人可能都意识到,这些都是非常简单的方法来表示你的数据。例如,词袋模型仅仅统计哪些词出现,并不能真正处理词序问题。比如“nothappy”,这两个词紧挨着出现,实际上意味着非常重要的意思,而如果是“happy”且“not”在其他地方,意思就不同了。我们将在整个课程中看到更多关于更好表示你的数据以及更好从数据中学习的方法的例子。这只是作为各种数据形式的介绍。
我们看到了视觉,我们看到了语言。音频是另一种常见的模态。有时,你可能会从麦克风中获取声学信号,并且通常这些信号会以某种方式被离散化,因为这些麦克风以某些固定频率进行采样,从现实世界中的连续数据中。从这个音频信号中,你可能会尝试推断这个人说了什么,这就是自动语音识别的任务。音频数据有几个关键参数:采样率是多少,也就是你以多高的频率录制这个人的声音;位深度是多少,每个样本你录制了多少数据;还有其他你可能需要考虑的事情,例如什么是时间窗口,在这个窗口中你想识别说的是哪个词。如果你把时间窗口设置得太短,你可能只能听到一个特定的音素,也就是这个人所说的某个特定字母;如果时间窗口设置得太长,那么你可能会因为识别了更多东西而不仅仅识别出一个词,你的模型可能就没那么精确。还有不同的方式来表示音频模态,这基本上是一个时间维度的表示。你可能也听说过声谱图,它本质上将时间维度转换为频率维度,你可以看到振幅。声谱图是另一种表示音频的方法。人们惊讶地发现,你可以将声谱图视为一个图像,甚至可以把它输入给图像识别模型来对声谱图进行推理,所以音频模态和视觉模态之间存在某种关系。
你基本上可以通过输入观察值来开始识别音频,从具有某个固定时间窗口的第一时间步开始,以及具有其他时间窗口的后续时间步,并用它来识别音频中的内容。自然地,你可以识别口头词汇,但你也可以识别情绪——无论某人似乎感到积极还是消极,不仅仅是从他们所说的话中,而是他们说话的方式,也许是他们声音的大小和振幅,还有他们说话的速度是快是慢,并且你还可以看出音质如何。这就是音频模态,感知模态。
如果你在处理机器人或环境传感器,你通常会跨时间收集数据,跨时间测量某些特定的物理现象,并且在y轴上展示该传感器是如何变化的。这是一个常用于机器人上的力矩传感器的例子,在这里你正在跨时间进行感知,并且每个维度都是某种六轴力矩传感器,在测量六个不同分量上的力。通常我们与机器人合作时,你也会有一些内部的本体感受数据,许多这类具身系统内部都有一些内部状态,这些内部状态可能会测量机器人的位置、机器人手臂的角度是多少、也许还有它的速度、速率,以及交互智能体内部的其他参数。这同样是跨时间的数据,所以有一个时间维度,在这种情况下它只是在测量当前的位置(x,y,z轴)以及这个机器人手臂的速度。
通过所有这些传感器数据,你基本上可以训练一个模型,它接收这些传感器数据并输出一些东西。你可以输出并尝试预测它正在抓取什么物体,你可以预测机器人手臂的属性,例如被机器人手臂抓取的物体的属性——它是软质材料、硬质材料、刚性材料,还是不同的形状。你也可以尝试预测接下来的动作:这就是当前的传感器数据,我们可能会尝试预测下一个机器人应该采取的动作,以便更好地抓取物体或者更好地操作物体,然后这将为你提供下一个时间步的新读数集,或者一组新的力记录以及机器人中一组新的本体感觉读数。这涵盖了传感器模态。核心想法是现在你有了一些时间维度,你可能想把它画出来以查看时间维度和力的大小,这可以用来识别物理世界中的事物,并且还可以采取行动,这样你就可以看到这些数据的新出现,并可能再次采取行动。
这就是感官模态。有时人们会说传感器,有时人们会说时间序列,它们经常被相当混用地使用。从技术上讲,时间序列是将传感器数据泛化到任何具有时间维度的东西,所以金融数据也有这个时间维度——例如,你正在测量股票价格如何变化,那也被认为是时间序列,但你可能不会认为它是传感器数据。所以你在寻找编码传感器数据的模型时,你可以搜索传感器模型,但也可以搜索时间序列模型。
表格模态。这里我展示了表格和时间序列的混合,这是医疗领域中常用的一套数据集,被称为MIMIC数据集。有这两种模态,包含关于特定患者的信息,比如他们的年龄、性别、种族、既往病史,所有这些你通常会在表格形式中看到的东西。同时你还有时间序列模态:一旦患者入住ICU,他们血液中的通气量是多少,他们随时间变化的心率是多少,他们随时间变化的血糖率是多少,从他们入住ICU到出院。结合起来,表格和时间序列数据可以用来做出推断,针对许多医疗程序,例如他们的死亡率是多少,根据ICD-9编码衡量他们可能患有什么疾病,他们在ICU住了多久等等。
表格模态非常独特,在某种意义上,它的关键属性之一是你基本上可以互换这些值中的任何一个。无论你是把年龄和性别放在前面,还是把性别放在年龄前面,从技术上讲不应该改变你如何对表格数据进行推断。如果你的模型实际上对这些值的顺序很敏感,那你可能会有麻烦。表格数据的另一个常见挑战是数据在本质上通常更离散,比如性别可能会有几个分类,种族可能会有几个分类,所以它不是那种连续数据,就像我们在看图像或传感器时所习惯的那样。处理表格数据存在一些挑战。
图也是另一种非常有趣的数据形式。图无处不在,例如,如果你看一个社交网络,你不想仅仅对该社交网络中的单个人做出推断,你想利用那个人以及他与该社交网络中其他人的关系,这就是一个图的例子:这些其他人与谁相连。经济网络、生物医学网络——这非常常见,如果你在看不同的蛋白质,你必须看这些蛋白质是如何与其他蛋白质相互作用的,以及它不与哪些相互作用,这可以被表示为一个图,还有像互联网之类的东西。
如果你看图模态,通常你有一组节点,那些是图中的单个点,并且你有边,本质上告诉你哪些节点与哪些其他节点相连。图上的几个重要任务:节点分类——你能分类每个节点的某些属性吗?例如在社交网络中,你能把每个人分类为更积极还是消极,或者也许是他们的政治立场(右倾、左倾)。这是一个节点的属性,但你不能只用那个节点来做那个预测,你可能必须看看他们是朋友的其他人和他们在社交网络中点击的其他页面,以此来对那个人做出推断。链接预测——给定两个特定的节点,它们可能被链接在一起的概率。例如,给定两个蛋白质,它们相互作用的可能性,或者给定社交网络中的两个人,他们成为好朋友的可能性。这些更多是图上的分类任务。还有很多任务涉及将图用作数据数据库,并用它来改进其他事物。如果你在构建一个问答系统,许多早期的问答系统(比如IBM沃森,它在《危险边缘》中拥有超越人类的水平)有很大的权限访问知识图谱——所有这类常识性知识,这些是你在这类问答游戏中所需要的,它们本质上查询了这些知识图谱,检索到了可以实时回答这些问题的答案。现如今人们使用大语言模型,但也有很多关于大语言模型混合体的工作,其中知识存储在这些参数中,对比你可能希望大语言模型去进行查询并从中检索答案的显式知识图谱。用于情感分析等的社交网络,仅仅在图本身就有许多机会,强调图,并且还将图作为一种额外的辅助模态来对其他任务进行预测。
集合模态。集合模态与表格模态有一些共同点,你可能会有一组对象的组或分布,再次强调,其中的每个对象都是重要的,哪些对象在集合中、哪些不在集合中是非常重要的,但关键是元素的顺序不重要。在这一块,我可能在看一堆名人的图像,这是那些机器学习数据集的常见任务,你可能会试图对一些属性进行分类,比如头发颜色、皮肤颜色、也许还有年龄等等。你可能会有一个对象集合,但这位名人是先出现还是另一位名人先出现并不关键。事实上,如果你的模型对这些图像出现的顺序敏感,那么模型将无法工作得像对顺序不敏感的模型那样好。你可以检测异常,找出哪些人或哪张图像不属于那个图像集合;你可以扩展到集合扩展——如果我想生成更多具有特定属性的图像,我该如何在该集合中采样更多元素。
我们讨论集合,点云是另一个例子。我们看到了二维图像,只有高度和宽度,点云本质上是它的三维版本。它被称为点云,因为每个点都是x,y,z,这就是为什么你会有这种三维特性和云,因为你有一堆点。其中顺序很重要,但这些点集在一起可以让你某种程度上重建并可视化这些三维物体。你在处理某些三维表示通常会被表示为点云,你可能想要做更多的采样,例如,我想采样不同的、不同三维朝向的椅子,遵循椅子这一语义类别,这是一个点云扩展任务的例子;你可能想要分类是哪一个特定的物体,并且我想检测这些三维物体中的异常。这些都是点云上的任务。
总结一下,集合模态也非常重要。关键的区别在于你有一个集合中的一堆元素或者你点云中的这些点,但顺序并不重要。如果你构建了一个敏感的模型,对你集合中元素的顺序或者你点云中的点敏感,那么你本质上就没有充分利用你的数据,并且你的模型也不会运行得那么好。我们会在接下来的课程中把很多这些关于模型运行得好与不好的想法具体讨论。
这就是对目前所有数据形式的快速一瞥,完全不是详尽无遗的,还有目前存在的任务。很多时候,我喜欢把出现的事情归纳为一个统一的框架,我打算称它为模态特征。给定任何特定的数据源,来自你最终收集的任何模态,你最终为其标记数据的,思考几个维度总是很有用的,该模态的几个维度,我称之为模态特征。粗略地说,它是该模态所独有的独特品质和结构。
让我展示一些会属于这个模态特征的维度,使用两个例子:一个来自视觉模态,一个来自语言模态。你可以看到这两个是相关的。一个茶杯在笔记本电脑的右边,在一个干净的房间里,是这张图片的粗略说明。那么这个模态特征里包含什么?我该如何开始对数据进行推理?第一个非常重要的维度是数据中单个元素的分布。我有这张图片,然后我开始意识到一个元素是沙发,一个元素是茶杯,一个元素是笔记本电脑,其中一个是桌子。语言也是一样,有一些我可能不在乎的虚词——the、of、in这些并不是非常重要的词,但有一些关键词,我关心的句子中的关键元素需要建模,例如茶杯、笔记本电脑、干净的房间。我将开始推理这些元素是什么,特别是那个分布:它们是连续分布还是离散分布,以及它们的支撑集是什么,我必须捕获的所有可能元素是什么。在图像中,它会是那三个边界框区域;而在语言中,它可能是那些词。他们首先要开始研究的是你如何对这些单个元素进行建模。我该如何学习一个能够真正捕捉到这个元素是一个笔记本电脑的优秀表示,尽管它被茶杯部分遮挡了;我该如何学习一个优秀的表示,能够真正将其捕捉为一个视觉的、包含其所有属性的沙发的表示。同样的事情,我该如何为语言中的元素学习正确的表示。我提到了这些元素,它们的分布是什么,以及它如何潜在地表示这些元素。
第二个维度是粒度。我们解决了单个元素是什么的问题,但现在这些元素出现的频率如何?在图像上,你可能会在每张图像中看到几个对象,似乎不是很拥挤,也许大概有三个、四个主要关注的对象。在文本中也是如此,无论一个人是在说话,可能是每分钟的词数,如果它是一个句子、一个段落或一篇文档,是可能关注的单词数量。这也会影响粒度如何,也会影响随后如何设计模型来,在学习了单个元素的表示之后,在它们的粒度和频率上组合这些表示。
第三个关键维度是结构。结构本质上告诉了我这些元素是如何组合形成更高级别的信息的。我们从这个自底向上的过程开始,我们观察了这些单个元素并对它们进行了表示,并观察了它们的频率,但最终,你将学习整个图像的表示,或者整个句子、整个段落的表示。结构本质上告诉了你这些元素应该如何组合起来以获得更高阶的抽象。图像通常是一个空间结构:我们在空间上观察图像元素之间的相互关系,椅子在桌子前面,茶杯在桌子上面,笔记本电脑在茶杯的左边等等。这是一个非常空间化的排列,你应该考虑到这些空间关系,当你组合这些元素来形成图像表示时。对于语言,取决于哲学,有些人认为语言应该通过语法进行层级组合,你必须先看一个茶杯,那是一个名词,有些名词的前驱词,某个东西的右边。有些人认为语言应该通过观察单词并进行层级组合,通过某种语法形成更高阶的意义。有很多工作,例如构建遵循这种语法的神经网络,当然,这是非常乔姆斯基式的思考方式。如今人们知道,从经验上看,效果最好的可能并不完全是遵循所有这些语法结构,你可以简单地将它视为序列,也许是一个序列,并使用像序列模型Transformer、LLM这样的东西,这样就可以工作得很好。其他事情也是一样,如果你有一个图或一棵树,可能存在某种特定的结构,在其中你的元素被组合以形成更抽象的表示,这是你在设计模型时应该考虑到的。这就是结构。你观察了单个元素、我们如何表示它们、这些元素的频率,以及这些元素如何结合、结构组合是怎样的。
很多时候,我们也会关心总信息量——你的模态中的总信息量。一旦你将它们结合起来形成更抽象的高层表示,它提供了什么信息?我能对这些我关心的图像做出什么推断?我能对我关心的句子做出什么推断?很自然地,某些模态会比其他模态拥有更多信息,而且很多时候这些模态在它们拥有的信息上也会有重叠。
最后,一个我们以为不会发生、但它也非常重要的维度是噪声。当你开始从某些传感器收集这些模态时,它们通常会是不完美的。相机会容易出现抖动、摇晃和遮挡;语言如果是电脑输入的,就会容易出现各种拼写错误;如果是口头表达,就会容易出现人们说话时会犯的各种错误。这些类型的噪声通常有独特的模式。思考你的数据中可能会出现什么类型的噪声,并且实际上你当前的数据在你收集和处理它时也带来另一个重要的维度。
这是一个对各种数据形式的总结,并非详尽无遗,也是对不同特征的概览。在你开始收集数据时,思考这些通常非常有用:元素是什么,你的数据的单个元素,它们的分布和频率;当你把它们组合成更高层次的抽象时,这种结构是如何出现的;不同形式的信息;是否存在噪声或缺陷,以及它们是什么;还有我其实没有讲到这个,但它与你关心的预测任务有多大关联。这就是数据。
现在有了数据,我们必须谈谈学习——你如何从数据中学习。这里我借用了一些导论的幻灯片,也就是我这学期也在教的机器学习。从高层次来看,通常有三种类型的学习范式,同样这些并不是详尽无遗的,它们之间也有重叠,而且它们在不断扩展,但通常有必要去思考三种类型的学习目标:监督学习、无监督学习和强化学习。
监督学习本质上意味着对你的数据有一些监督。原始数据输入,监督通常以一些标签的形式出现,一些你想从数据中预测的东西。你可能会有一堆图像,并且你拥有这些图像中包含什么物体的标签:猫、狗、桌子、人,非常简单。你可能有一个蛋白质结构,并且你有一些关于它与哪些蛋白质相互作用的标签,或者它找到了哪些蛋白质。你可能有一种语言的一个句子,例如西班牙语,那是你的输入数据,你可能还有关于什么是其他某种语言中对应翻译的标签。所有这些都是监督学习的例子,你拥有数据X,你拥有标签Y,你愿意提供那种监督,你如何从中学习。
无监督学习是不同的,基本上意味着没有监督。现在你有了数据,但你不想在收集标签时提供监督,因为标注数据可能很昂贵,或者需要大量的人力,或者标签本身可能非常主观,比如一个人的情绪可能非常主观。所以你可能会想做无监督学习,此时你只有数据X,并且你希望能学到一些特征,这些特征最终可能对那些你愿意收集的标签或者对其他一些任务有用。有几种类型的无监督学习:你可能只关心降低你的维度,在低维空间中可视化你的数据不需要标签,只需要你的数据就可以完成。你能可视化单词吗?这些被称为词嵌入,而且它们具有一定的结构,因为某些国家被归类在一起,某些单词被归类在一起。你可能会想训练生成模型:如果你有大量的蛋白质数据,但你没有关于这些蛋白质是什么或者它们如何与其他蛋白质相互作用的标签,你仍然可以学习一个模型,它基本上估计你蛋白质的分布,并可能生成更多蛋白质。我们也已经在图像中看到了这一点:大量的图像,你不想去标注里面有只狗这个事实,你仍然可以获取大量图像并训练一个能够生成新图像的模型。
现如今,无监督学习和有监督学习已经真正地交织在了一起,伴随着自监督学习的概念。你可能有很多无监督的数据,没有标签,标签太贵了,但你仍然可以在你未标记的数据上定义一些很好的训练目标来学习这些抽象概念,这些随后可以被迁移或微调的特征,然后你有一些少量的标注数据和监督。一个例子是狗的图片:如果你能够成功学习到所有狗图片的分布并生成新的狗图片,那么这些特征很可能在预测和识别狗的图片中非常有用。
第三种学习范式强化学习。监督、无监督学习通常关注涉及单个步骤的任务——你做出预测,就完成了;或者你生成另一个样本,就完成了;或者你将数据可视化,就完成了。强化学习关注的是通常发生在多个时间步骤上的问题。游戏是一个很好的例子:如果你想训练一个交互式的系统能够玩像国际象棋和围棋这样的游戏,那么通常会有游戏的某种状态(例如棋子的当前状态),你正在采取的一些行动(例如走特定的一步棋),从而过渡进入具有新棋子布局的游戏新状态,在这个状态下你可能想采取另一个行动,以此类推。这个多步过程中的关键区别在于我们不能再仅仅最大化并选择局部步骤中的最佳行动,可能有很多情况下你会采取次优的短期行动,以获得长期来看更好的行动。这是强化学习中最大的挑战之一:你如何可能为了长期而放弃短期行动,以获得长期的真正好的行动。我们在游戏中能看到它们,我们在机器人技术中能看到它们,如今我们也在大型语言模型中看到了它们。你可以把这些大型语言模型与人类的交互看作是有一些多步交互,在其中你可能会提示它,它给你一个回答,你再次被提示,给它一些回答。当然,这个对话跨越了多个步骤,而你的目标是真正最大化你的长期回报。有很多工作关于应用强化学习方法以最大化人类与算法之间的长期交互质量,我们将在课堂上介绍其中的一部分。
这三个可能相当微不足道,你们中的大多数人或者有些人以前可能见过它们。我还想快速介绍更多的学习范式,当你开始在你的课程项目中寻找并思考你可以收集什么形式的数据,以便它符合当前从数据中学习的这些方式之一时,这些非常有用。
你看到了监督学习:输入X,模型预测Y,所以你需要包含X和Y的配对且标记的数据。当然,是多模态学习:其中你有多个输入X,每一个提供互补的信息,你可能会对Y做出一些推断,这比X1和X2单独给你提供了更多信息,但现在你需要包含X1、X2和Y的数据,因此对你所需要的数据有更多的要求,而且通常数据更少。这是多任务学习:输入X,你同时预测Y1和Y2,利用这两个任务是互补的这一事实。例如,你可能想要预测一个人的情绪,但同时,也预测一个人的压力,这两个任务通常非常相关。你可能想要预测机器人物体的某些属性,并且还要采取下一步行动来再次操作该物体,这两个任务——尽管一个是标签、一个是动作——彼此相关。多任务学习如果效果好的话可以运行得非常理想,当然限制在于现在你需要X、Y1和Y2在一起的数据,以及两个标签都在一起,这反过来可能会限制你拥有的数据量。
迁移学习略有不同。你可能会在第一个任务上训练一个模型,从X到Y1,训练那个模型,然后把这个你已经训练好的模型迁移到第二个任务中,也就是在第二个任务上继续构建该模型(Y2)。这与多任务学习略有不同,因为现在你是分两个阶段来做事情:第一阶段你需要X和Y1的数据,第二阶段你可能只需要X和Y2的数据。这也非常常见,这种两阶段的过程特别有用,当你拥有的Y1和Y2获取分布不均时。比如你可能会训练一个图像模型来分类自然图像,你可以从互联网上获取海量的数据,你可以获得海量的自然图像标签,但接着你想迁移到一些医学维度——医院收集的医学图像,所以你拥有的医学图像和医学标签会少得多。迁移学习允许你应对这种不对称性。
跨模态学习可以说是针对不同模态的延伸。有时训练可能会非常有帮助:针对Y训练X1模态,并将其迁移到针对Y的X2模态,或者可能是略有不同的Y。输入模态是不同的。如今当你实践这种迁移学习的想法时,X1可以是语言,你为某些任务训练模型。令人惊讶的是,这些大语言模型不仅能迁移语言,它们还可以迁移到代码、数学、到蛋白质结构、到基因组序列、甚至到机器人状态和动作的序列,甚至到游戏状态。你可以很好地迁移到很多事情上。我们如何突破跨模态学习的极限?不同的模态,并进行这种迁移。你可以结合这个,做跨模型——模态是不同的,还有迁移,所以任务也略有不同,只要它们之间存在某种关系。
无监督和自监督预训练也非常常见,这是迁移学习的延伸。其中,你不是以监督的方式将你的第一个模型从X训练到Y1,而是对你的第一个模型进行一些无监督学习,从X到X'。在这种情况下,你在第一步中不需要任何标签,你只需要X,而X'实际上就是你创建的自监督标签。有几种方法可以做到这一点:你可以使用图像的左半部分来预测图像的右半部分;你可以把图像分成不同的部分,就像拼图一样,并让模型重新构建哪些拼图块应该去哪里来重新构建完整的图像;你可以在前五个词上预训练,自回归生成第六、第七个词;你可以旋转你的图像或向其添加噪声,并尝试去除该噪声或恢复旋转该图像。有很多方法,只要你自动生成的X和X'之间存在某种关系,你在你的电脑上做,然后你基本上可以无限访问X和X'对,所以你可以预训练你的模型。然后通常那些特征,如果设计得很好,将会非常强大。因为首先,你有很多数据,X数据的数量远多于XY标签数据,所以你可以利用大量的数据。如果你的特征以及你的X到X'设计得很好,那么它实际上会学习到非常好的特征,然后可以被迁移到某些任务Y。我们称之为无监督或自监督预训练。
到目前为止有什么问题吗?是的,在学习的过程中,你提到了LLM。所以我的问题是关于LLM的,你提到它显然通常涉及建模多个步骤,就像人类通过重要的互动。但LLM的目标难道不是生成一个极好的回答吗?这就是为什么我们有RL的工作,为了让回答在单轮中就很棒,而不是来回。另外,对于强化目标函数,对于没有目标函数的情况,我们不提供反馈。你怎么认为在未来会有个目标函数,然后那会涉及多个步骤,为了实现整体目标?很好的问题,我们之后会对此进行更多讨论。简短的回答你的问题:当然,你想最大化你在单一步骤中获得的最佳回应,但通常情况下,当你不是指问澄清性的问题——如果你问很多澄清性问题来构成多步骤,那不好——但通常你会得到一个好的回答,你继续和它交流,所以这将会产生一些自然的长期互动,你可以使用强化学习来建模。同样,我们遵循学习可以是一个回应,但是其中的每个步骤都是一个词,而整个响应可以被视为一个问题,它也可以是多个响应,每一个都对待我们一个响应、一个即时响应,这也给你带来了所有这些。至于奖励,有大量的工作,人们在其中对好的进行评分,或者评估大语言模型输出的质量,并且所有的人类监督都投入到奖励函数中,以更好地微调这些大语言模型,所以那也非常常见。当然,如果其中一些指标是自动的,那就太好了,但这些中的大多数当前的方法和RLHF仍然依赖于一定数量的人类监督和人类反馈。
关于自监督训练的一个问题:在第一步中创建的模型,我已经看过了所有这些。你可以保留大部分模块,因为这是一个大模型,但一旦你带到这里,你可能会训练一个单独的线性分类头,你可能会调整模型的一些最终层,你要进行低秩适应。有很多种方法,但只要你进行某种预初始化,初始化得好,然后你把它带过来,对其进行一些微调,只需做一些微小的调整,你不需要重新训练整个模型,微调整个模型。
更具交互性的学习范式。那大部分只是非交互式的,进行预测,但是还有交互式学习范式。我们看到了强化学习,其中X是你的数据,或者在强化学习中我们通常称之为状态输入,你可能会采取多个行动来获得多个状态,有多个你必须采取的多个观测和多个动作,并且你最终可能会得到一些奖励,你的目标是最大化这种长期奖励。你想想强化学习:多个动作,多个步骤。
除了适应之外,使模型更具交互性也是非常常见的事情。你可能会有一些本质上是被监督的模型XY,X预测Y,只是一个类别或一个数字,或者分类。你可以开始调整其中的很多,以便模型可以用语言输出一些内容,这可能会非常有用,因为现在不仅能预测它是猫还是狗,你可能还可以问后续问题——它是什么类型的猫?它是什么种类的狗?你甚至还可以提示模型来解释为什么它是一只猫,这样模型就可以识别出不同颜色的四条腿等等。本质上,通过使用将语言添加到输出空间,其他大语言模型让你的模型更具交互性,在回答后续问题甚至解释其决策方面。当然,如何完美、鲁棒地做到这一点且没有幻觉,仍然是一个问题。
课程学习或主动学习:这是一个非常常见的范式。比方说,你想要完成某个任务Y,那真的很难。如果你只是在Y上训练你的模型,模型的效果会非常糟糕。所以你可以做的是,你可以先监督模型去完成一些更容易的任务,就像学生学习一样,学生根据某种课程进行学习,从较容易的任务到较困难的任务。如何选择该课程是一个开放性问题,但在这方面已经有大量的工作。主动学习也是一个类似的范式:在这里,你可能首先让你的数据、一个模型在简单的数据上做出预测,然后根据模型的当前状态,你会去寻找越来越困难的数据或越来越困难的任务让模型去解决,并且找一个人来看。
之前的一切大多只是在计算机中自动完成的。在许多设置中,你有X来预测一些标签,或者采取一些行动,其中会有一些人类反馈,然后这些反馈可以用来训练模型针对新的输入并做出新的预测。这可以迭代地进行,根据你的需要进行多次循环,直到你对性能满意为止。可以是原始的人类反馈,或者也许在你看过了足够多的人类反馈之后,你就可以训练另一个模型来模仿人类是如何给出反馈的,这样就可以成为一种自动化方式,从一些人类反馈到最终实现自动化并预测人类会如何给出反馈。
让我最后再过一下其他几个重要的提示。我们看了不同形式的数据,你应该如何思考数据的属性,你正在收集不同的学习范式来从数据中学习并找到你的学习过程。本质上,机器学习和人工智能的整个目标是找到一种好的建模方法,去学习关系,去从你的数据中学习特征。很多时候,你会考虑一个模型或一类模型——一类模型可以是一类神经网络,其他可能的包括一类线性函数、一类决策树等等。例如,你只在一维中,如果你有X、你有Y,你有一些同时启用了X和Y的数据,数据本质上让你能够学习一个学习数据之间关系的函数。你经常会看到这些方框,其中X输入进来,你学习了某种函数F或H,并做出预测Y。
在下一节课中,我们将探讨本质上如何定义这些模型,这些模型长什么样。你的模型基本上表现得有多好,真的取决于你如何选择模型或者你如何定义模型的参数。但在深入研究模型之前,你甚至该如何评估一个模型有多好?经常会遇到过拟合与泛化的问题。机器学习的真正目标是泛化到未来的数据。我们谈论你收集到的所有这些数据,显然你收集了一堆图像,并且你为其中不同的对象贴上标签,你本质上是在这些数据上训练一个模型,但你的希望是能泛化到新数据。如果我明天用我的相机拍一张新图像的照片,我希望能够做出那个预测。如果明天或一年后有人与我的大语言模型进行交互,我希望大语言模型在那种交互中表现良好。
存在风险。有时模型甚至无法捕捉到X和Y的关系,你学到了这个被称为欠拟合的函数,它没有很好地学习这种关系,你的模型就不会很好地工作。如果它真的把关系捕捉得太好了,我们称之为过拟合——它已经专门针对你的训练数据进行了特化,并且当你实际将模型部署在测试数据上时,它可能无法泛化。这条蓝色曲线显然是过拟合了,而且拟合得太贴合训练数据,而不是实际捕捉到一个平滑的关系,这很令人担忧。通常在实践中,你会收集你的数据,你会将其拆分为训练集、验证集和测试集,这是为了模拟这种在测试新数据之前收集数据进行训练的概念。你基本上是在训练集上训练一个模型,在验证集上进行验证、调整超参数,并在测试集上衡量模型的表现,以此来模拟模型在未来真实数据上的表现,而这些数据你目前还没有。至关重要的是要确保你的测试数据条件尽可能地匹配你实际想要部署模型的环境条件,在现实世界中。
那么,总结一下如何处理数据。我打算在每张幻灯片的结尾都写上“如何做某事”,但这次的主题是数据,所以是“如何处理数据”。首先,决定收集多少数据以及标注多少数据,假设你打算收集标签,我们会考虑到收集数据的成本、雇佣人工标注员来标注数据的成本,以及资金成本、时间成本等等。清洗数据:通常你需要对数据进行一些归一化或标准化处理,以便让所有数据都处于一个合适的范围内。寻找噪点数据,检测离群值和异常值,有很多现成的工具包可以做到这一点。可视化你的数据:没有多少人在这方面做得足够多,但你应该把它画出来。如果这是我的X1、这是Y,我把它画出来,我知道我正在寻找一种X和Y之间的线性关系,这样我就能知道该设计什么样的模型。这是一维的,所以比较容易画图。如果数据是在更高维度呢?有一些降维的方法,比如PCA和t-SNE,来基本上识别你的聚类——我的数据是否甚至落入了那些我起初想要预测的类别,在对它们设计任何模型之前。评估指标:什么是评估模型好坏的好方法?无论你做的是平方误差(连续值的预测),还是分类误差,或者可能是更复杂的东西,比如用户研究或可用性测试。通常你也会想看看代理指标和真实指标:如果你的真实指标是人类在未来如何使用,但你不想与人类进行迭代,当你只是在设计一个模型时,获取一些代理指标可能会很有用,它们是真实指标的近似值。正向指标的单一指标,定量和定性的。然后,也只有在那个时候,你才会选择一个模型类别、学习算法并进行机器学习。从这一、二、三开始,四需要先完成。
总结一下,我们看了一些常见数据模态的例子,我们提供了一个统一的范围界定框架,关于如何思考你数据中的维度,我们看了数据的类型、标签和学习目标,还有挑战,例如过拟合、欠拟合以及实际推广到现实世界的例子。
那么下周的任务安排:目前还没有阅读任务,那将开始,我想是下周。确保你填写了你的项目偏好表格在今天之前,好让我们大致了解你正在考虑的任务、数据和队友。如果你还没有找到队伍,也许出去社交一下,试着寻找志同道合的人。项目提案演讲将在下周四进行,每个团队大约五分钟,我们会发布具体说明。在本周四,我们将进行一场教程,由我们的一些学生来分享机器学习工具和实用技巧,用于训练和调试邮件流水线。
好的,各位,至于今天和周四,如果你们想就项目碰一下,我会在我的办公室在今天两点到三点留出时间,以及周四的两点到三点,这样我们可以讨论你们的课程项目,如果你们需要对其获得任何反馈。
谢谢大家。