【无监督学习】压缩即预测——Kolmogorov 复杂度作为终极压缩器

news2024/11/19 11:31:20

基于学习方法,机器学习大致可分为监督学习和无监督学习两种。在无监督学习中,我们需要用某种算法去训练无标签数据集,从而帮助模型找到这组数据的潜在结构。

为了进行无监督学习,在OpenAI成立早期,他们认为通过压缩可以通向这一路径。随后,他们发现“预测下一个词元(token)”正是无监督学习可以追求的目标,并且意识到,预测就是压缩。这也正是后来ChatGPT成功的关键思想之一。

他们通过不断训练自回归生成模型实现了数据压缩,如果数据被压缩得足够好,就能提取其中存在的所有隐藏信息。这样GPT模型就可以准确地预测下一个词元,文本生成的准确度也就越高。

近期,OpenAI联合创始人和首席科学家Ilya Sutskever在UC伯克利的一场演讲中提出,希望通过压缩视角来解释无监督学习问题。不过值得一提的是,他指出,GPT模型也可以不通过压缩理念进行理解。

(以下内容由OneFlow编译发布,转载请联系授权。https://simons.berkeley.edu/talks/ilya-sutskever-openai-2023-08-14)

来源 | Simons Institute

OneFlow编译

翻译|宛子琳、杨婷

1

无监督学习理论

通过压缩来解决

众所周知,我们可以将压缩看做是一种预测过程,每个压缩器都可以转化为一个预测器,反之亦然。所有压缩器和预测器之间都存在一一对应的关系。为说明对无监督学习的思考,我认为,使用压缩进行论述更具优势。

无监督学习能否形式化?

那么我们该如何将无监督学习形式化呢?在接下来的内容中,我会交替使用压缩和预测场景进行描述。假设你有一个机器学习算法 A,它试图对 Y 进行压缩,如果算法 A 可以访问 X,其中 X 文件编号为 1,Y 文件编号为 2,你希望机器学习算法(即压缩器)能够压缩 Y,并且这可以通过使用 X 来实现。那么使用这个特定算法会带来什么样的遗憾(regret)?

如果任务完成得足够好,遗憾程度较低,则意味着我已经从未标记数据中获得了所有可能的帮助,对此我毫无遗憾,数据中已经没有其他预测价值可供更好的算法利用,我已经从未标记数据中获得了最大收益,已经做到了极致。
在这里插入图片描述
我认为,这是思考无监督学习的重要步骤。你不知道自己的无监督数据集是否真正有用,它可能用处很大,包含了答案,也可能毫无用处,还可能是均匀分布的数据集。但是,如果你在监督学习算法上的遗憾较小,就可以判断出自己的无监督数据集是第一种还是第二种情况。我确信我已经尽了最大努力,从未标记数据中取得了最大收益,没人能比我做得更好。

2

Kolmogorov 复杂度作为终极压缩器

接下来讲一讲 Kolmogorov 复杂度(Kolmogorov complexity),它被称为终极压缩器,可以提供终超低遗憾算法。实际上,Kolmogorov 复杂度并不是一个可计算的算法。很多人也许都不了解,其实它很简单。
在这里插入图片描述
假设给我一些数据,我将提供可能存在的最短程序对其进行压缩,如果运行这个最短程序,它会输出数据。这个输出Y的最短程序长度就等于 Kolmogorov 复杂度K(X) 。直观来说,可以看出这个压缩器非常有效,因为这个定理很容易就能证明。如果用 Kolmogorov 压缩器来压缩字符串,压缩质量的遗憾会很小。如果你要压缩字符串 X,那么输出 X 的最短程序的长度要比压缩器所需的输出长度更短,而且不论压缩器如何压缩数据,都可以得到一个很小的项,这个小项是实现压缩器所需的代码字符数量。
在这里插入图片描述

“计算”K(X)

现在让我们将 Kolmogorov 复杂度进行泛化,使其能够调用其他信息。再次重申,Kolmogorov 压缩器是不可计算、不可判定的,这一点非常重要,但它会搜索所有程序。就像你对一些百层的神经网络参数上做随机梯度下降SGD),它自动地就像在一台拥有一定内存大小和步数的计算机上做程序搜索,这在某种程度上有点类似于微型 Kolmogorov 压缩器,二者之间具有非常微妙的相似性。
在这里插入图片描述

神经网络可以模拟小程序,它们就像小型计算机,由电路构成,电路是计算机的基本组成部分,而计算机本质上就是一台机器。随机梯度下降(SGD)在程序上进行搜索,整个深度学习都围绕 SGD 展开,实际上我们可以用 SGD 来训练这些计算机,从数据中找到电路。因此,我们可以计算出我们的微型 Kolmogorov 压缩器,模拟论证在这里同样适用。

条件 Kolmogorov 复杂度作为解决方案

条件 Kolmogorov 复杂度可以作为监督学习的解决方案。
在这里插入图片描述
如图所示,这就是无监督学习的超低遗憾解决方案,尽管它不可计算,但我认为,这是一个有用的框架。这里的条件是一个数据集,而非示例。这里我们是基于数据集而不是单个样本进行条件设置,这个方法将从 X 中提取所有预测 Y 的值(value)。
在这里插入图片描述

“压缩一切”的可行性

条件 Kolmogorov 复杂度,其中涉及压缩算法,压缩器会尝试在接触一个数据时对另一个数据进行压缩,在机器学习语境下,尤其处理大数据集时,这种情况并不自然。

上面的式子表明,如果你对监督任务 Y 进行预测,那么使用旧式(old-fashioned) Kolmogorov 压缩器对 X 和 Y 的连接数据进行压缩,与使用条件(conditional ) Kolmogorov 压缩器的效果一样好。这里我只做简单介绍,其中的细节还有更多微妙之处。这基本上证明了我们之前所讲的内容,即可以通过条件 Kolmogorov 压缩器解决监督学习问题。

也就是说,我们也可以使用常规(regular) Kolmogorov 压缩器,使用时只需将所有数据收集起来,然后将所有文件连接在一起进行压缩,就能很好地预测我们关心的监督任务。
在这里插入图片描述
总之,对于无监督学习的解决方案,就是将所有数据输入到 Kolmogorov 压缩器中进行 Kolmogorov 复杂度计算。

3

如果没有过度拟合,那么联合压缩就是最大似然

在这里插入图片描述
最后我想说的是:如果没有过拟合,那么联合压缩就是最大似然估计。如果有一个数据集,那么给定参数的似然之和就是对数据集进行压缩的成本,此外,你还需支付压缩参数的成本。但如果你现在想要压缩两个数据集,那么只需在总和中添加更多的数据集。

在机器学习的语境下,这种通过连接数据进行联合压缩的方式非常自然。这也是我们花时间来说明条件 Kolmogorov 复杂度的原因,尽管我还不能为以上这些论证提供强有力的支撑,但我们通过压缩所有 Kolmogorov 复杂度仍然是有效的。

大型神经网络上的随机梯度下降(SGD)相当于大型程序搜索,神经网络越大,就越能更好地接近 Kolmogorov 压缩器,这或许就是我们喜欢大型神经网络的原因之一, 因为我们能够以此近似不可实现的无遗憾常规 Kolmogorov 压缩器思想,希望随着训练的神经网络越来越大,遗憾度越来越低。

4

是否适用于GPT模型的压缩?

5

线性表征

我喜欢压缩理论,长期以来我一直受困于无监督学习无法进行严格思考这个问题,但现在我们可以在一定程度上做到这一点了。目前压缩理论并不能解释为什么表征是线性可分的,也无法解释为什么需要线性探头。线性表征无时不在,其形成的原因必定十分深刻,未来也许我们能够清晰地阐明这一点。

我还观察到一个有趣现象:自动发布下一个像素预测模型(或自回归模型)在线性表征方面的表现要优于 BERT。目前我还无法确定其中的原因,如果我们能够理解线性表征的成因可能会有所帮助。

我认为,下一个像素预测任务需要从之前所有的像素中进行预测,因此需要考虑到长程结构long range structure)。而在 BERT 中,你有自己的向量表示,假设在这种情况下你丢弃了 25% 的词元或像素,那么你的任何预测实际上都可以通过略微查看过去和未来的情况很好地补全。相比之下,下一个像素中最难的预测任务比 BERT 中最难的预测任务要困难得多,目前这还只是一种猜测,但我们可以通过实验来对其进行验证。

6

答听众问

问:是否存在更加鲁棒(robust)的二维版本的下一个像素预测模型?
:任何将神经网络转变为将概率分配给不同输入的概率模型,都可以被看作是更加鲁棒的二维版本的下一个像素预测模型。扩散模型 (diffusion models)是另一种常见的下一个词元预测模型。在高质量图像生成中使用的扩散模型并没有真正最大化其输入步骤的似然,它们有着不同的目标。然而,最初的公式确实是最大化似然。

需要注意的是,扩散模型与下一个词元预测模型是互斥的。我认为,出于与BERT模型相同的原因,扩散模型的表征比下一个词元预测模型的表征更差,这进一步增加了线性表征形成原因的神秘感。

问:Transformer SGD 是否可以看做是最好的压缩器程序?

Ilya Sutskever:没错,还有另一种假设。假设有一个神经网络(不一定是Transformer),这些神经网络可以为数据分配对数概率,在有大量训练样本的情况下,我们可以运行该神经网络,并计算每个样本的对数概率,然后对这些概率进行求和,得到神经网络分配给整个数据集的对数概率。然而,这种特定形式的神经网络无法明确地注意到数据顺序中的时间或其他结构。尽管如此,我仍然认为可以计算整个数据集的对数概率,从而得到负对数概率,实际上是使用此神经网络作为压缩器压缩该数据集所需的位数。

:你提到了将压缩作为理解和推动无监督学习的框架。同时,你在最后提到,如果将这个框架应用于语言模型的下一个词预测,可能会有些表面,因为任何文本任务都可以转换为下一个词预测任务。因此,对于文本任务来说,无监督学习在表面上与监督学习有些相似。然而,图像 GPT 无法像预测下一个像素那样明确定义文本任务,但我们可以利用线性表征,展示压缩可以形成良好的无监督学习。不过,高度有效的压缩器可能无法提供有用的线性表征。因此,我想知道是否存在无监督学习和监督学习表面上并不相同,但无需压缩器提供有效的线性表征以证明压缩是一个良好的无监督学习目标的情况。

:好的线性表征只是一个额外的好处,这并不意味着线性表征应该出现,但这一理论确实主张应该有良好的微调。因为联合压缩就像是使用糟糕的搜索算法(SGD)进行近似查找。早期实验表明,在图像上运行时,BERT 所学习的线性表征比下一个像素预测要差,扩散模型可能也是如此。因此,对比微调扩散模型的结果非常有趣,或许已经有人进行了研究。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/946133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go gin 自定义验证

我们上一篇已经提到了gin中binding时候可以指定json字段大小等限制,但是那个错误却是英文的,现在想搞成中文的,以便前端可读,demo如下 package mainimport ("net/http""reflect""github.com/gin-gonic/…

知更鸟语音训练

现在哪还有人读小说、看视频,谁还用真人朗读呢? 现在给大家介绍,假人朗读是怎么来的,提供一些音频,进行训练,然后就能合成属于自己的音频了。这里只讲训练部分,使用请自己看github知更鸟&#…

javaee spring 静态代理

静态代理 package com.test.staticProxy;public interface IUsersService {public void insert(); }package com.test.staticProxy;//目标类 public class UsersService implements IUsersService {Overridepublic void insert() {System.out.println("添加用户");…

【C++作业】定义一个基类Animal,其中有一个虚函数Perform,用于在子类中实现不同的表演行为

1 动物园的讲解员和动物表演 以下是一个简单的比喻,将多态概念与生活中的实际情况相联系: 比喻:动物园的讲解员和动物表演 想象一下你去了一家动物园,看到了许多不同种类的动物,如狮子、大象、猴子等。现在&#xff0c…

让你成为室内渲染大师!别再犯这6大错误

你是不是经常感叹自己仿佛用了个假软件? V-Ray室内渲染中这6个常见错误你一定不能犯,今天小编就带你逐一击破! 案例项目为 Whistler House by SBD & Burgers Architecture 1.错误比例的纹理 材质纹理太小或太大都会让渲染看起来不真实…

公园可视联网报警器怎么样

公园可视联网报警器怎么样 公园可视联网报警器是一种用于保障公园安全的设备,具有以下几个优点: 1. 实时监控:可视联网报警器可以实时监控公园的各个角落,一旦发现可疑情况,及时报警并提供现场视频。 2. 防止犯罪&am…

前端基础1——HTML标记语言

文章目录 一、基本了解二、HTML常用标签2.1 文本格式化标签2.2 列表标签2.3 超链接标签2.4 图片标签2.5 表格标签2.6 表单标签2.6.1 提交表单2.6.2 下拉表单2.6.3 按钮标签 2.7 布局标签 一、基本了解 网页组成(index.html页面): HTML标记语言…

一次讲清楚Linux Cron和 Spring Cron

定时任务是我们日常开发中经常用到的一个功能点,无论是Linux服务器上Crontab还是Spring task schedule,都会使用到cron表达式去实现定时任务的配置。不过,一定要注意,Linux cron表达式和Spring的cron表达式不一样,下面…

打开谷歌浏览器远程调试功能

谷歌浏览器远程调试功能 首先我们来启动Chrome的远程调试端口。你需要找到Chrome的安装位置,在Chrome的地址栏输入chrome://version就能找到Chrome的安装路径 开启远程控制命令 文件路径/chrome.exe --remote-debugging-port9222开启后的样子(注意要关闭其他谷歌浏…

你会使用druid数据库连接池吗???

1.下载架包。下载地址:https://note.youdao.com/ynoteshare/index.html?id61e2cc939390acc9c7e5017907e98044&typenote&_time1693296531722 2.将架包加入项目文件。 创建一个lib目录,将架包复制进去 右键点击lib目录,将其添加为库。…

秋招面试总结

八股 C中传引用和传指针的区别:参考 指针传参: 本质是值传递,形参的指针变量是个临时局部变量,用来接收外部实参指针变量保存的地址值除了解引用对地址内存进行操作外,形参指针变量的其他任何操作都不会影响到外面的实…

yolov5自定义模型训练一

要拿yolo来用到自己希望使用的场合就需要自己来训练模型权重,要训练模型权重需要足够的训练数据集,数据越多训练后的模型权重越准确。 数据集需要按yolov5的格式进行收集,收集图片后需要用标注工具进行标注,常用的有LabelImg软件…

Redis——》Pipeline

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

小学生演讲与口才教案设计

教案设计:小学生演讲与口才 教学目标: 1. 培养学生的演讲能力和口才表达能力。 2. 培养学生的自信心和沟通能力。 3. 提高学生的思维逻辑和语言组织能力。 教学重点: 教学重点一:演讲技巧的培养 演讲技巧是指在演讲过程中运…

Python科研绘图--Task05

目录 SciencePlots 安装SciencePlots 安装LaTeX ① 安装 MikTex 和 Ghostscript ② 将软件的安装路径添加到系统环境变量中 SciencePlots 绘图示例 SciencePlots 虽然 Matplotlib 或 ProPlot 库能够绘制出插图结果,但用户还需要根据期刊的配图绘制要求进行…

简易虚拟培训系统-UI控件的应用3

目录 Button组件的组成 Button组件方法1-在Button组件中设置OnClick()回调 Button组件方法2-在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中,本篇增加使用按钮来控制显示哪一篇文字信息。 Button组件的组成 1. 新建Button&#…

由北京筑龙承建的“黔云招采—贵州高速板块”正式上线

8月28日,由北京筑龙承建的黔云招采电子招标采购交易平台首个行业板块——贵州高速板块正式上线运行。该板块实现了资源共享和数据隔离,提升了系统可扩展性和业务灵活性,切实满足了贵州高速集团交易业务独立运营的要求。 贵州高速板块由黔云招…

HTML之动态点连线

做一个动态点连线的效果。 每个点会随机进行移动&#xff0c;点移动到靠近的点之后&#xff0c;就会连接到这个点&#xff0c;以此类推。 详情注释看源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8&quo…

L1-041 寻找250(Python实现) 测试点全过

题目 对方不想和你说话&#xff0c;并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字。 输入格式 输入在一行中给出不知道多少个绝对值不超过1000的整数&#xff0c;其中保证至少存在一个“250”。 输出格式&#xff1a; 在一行中输出第一次出现…

Java异常-Could not initialize plugin: interface org.mockito.plugins.MockMaker

跑单元测试&#xff0c;报如下错误&#xff1a; java.lang.IllegalStateException: Could not initialize plugin: interface org.mockito.plugins.MockMaker (alternate: null) at org.mockito.internal.configuration.plugins.PluginLoader$1.invoke(PluginLoader.java:84) …