"); //-->
一种无监督学习方法:分布匹配
接下来,Sutskever 展示了一种思考无监督学习的潜在方式。他说这种无监督学习方式一直没有成为主流,但却非常有趣。它有与监督学习类似的特征,也就是必然有效。为什么会这样?这涉及到一种名为分布匹配(distribution matching)的无监督学习流程。
接下来简单说明一下。假设有两个数据源 X 和 Y,它们之间并无对应关系;模型的目标是找到函数 F,使得 F (X) 的分布与 Y 的分布近似 —— 这是对 F 的约束(constraint)。
对于机器翻译和语音识别等许多应用场景,这个约束可能是有意义的。举个例子,如果有一个英语句子的分布,使用函数 F 后,可以得到接近法语句子分布的分布,那么就可以说我们得到了 F 的真实约束。
如果 X 和 Y 的维度都足够高,那么 F 可能就有大量约束。事实上,你甚至有可能从那些约束中恢复完整的 F。这是无监督学习的监督学习(supervised learning of unsupervised learning)的一个示例,它必定有效,就像监督学习必定有效一样。
此外,替代密码(subsitution cipher)也符合这一框架。
Sutskever 表示自己在 2015 年时独立发现了这一现象。这让他不禁思考:也许我们能用某种有意义的数学形式来描述无监督学习。
当然,上面描述的机器翻译场景是简化过的人工场景,并不符合真实的应用情况,对应的无监督学习场景自然也是如此。
接下来,Sutskever 将阐述他提出的方法 —— 其能从数学上为无监督学习提供说明以及确保无监督学习的结果优良。
众所周知,压缩就是一种预测,每个压缩器都可以转换为一个预测器,反之亦然。全体压缩器与全体预测器之间存在一一对应关系。
Sutskever 指出,为了能更清晰地说明对无监督学习的思考,使用压缩方面的论述方式更具优势。
基于此,他给出了一个思想实验。
假设你有两个数据集 X 和 Y,它们是你的硬盘上的两个文件;然后你有一个很棒的压缩算法 C。再假设你对 X 和 Y 进行联合压缩,也就是先将它们连接起来,然后将其馈送给压缩器。
现在的重要问题是:一个足够好的压缩器会做什么?
Sutskever 给出了一个非常直觉式的答案:压缩器会使用 X 中存在的模式来帮助压缩 Y;反之亦然。
他表示,预测任务场景其实也存在类似的现象,但在压缩语境中说起来似乎就更直观一点。
如果你的压缩器足够好,那么对连接后文件的压缩结果应该不会差于分开压缩的结果。
因此,通过连接所获得的进一步压缩效果是你的压缩器注意到的某种共有的结构。压缩器越好,其能提取出的共有结构就越多。
两种压缩结果之间的差就是共有结构,即算法互信息(algorithmic mutual information)。
对应地,可以把 Y 视为监督任务的数据,X 视为无监督任务的数据,而你对这些信息有某种形式的数学推理 —— 可以使用 X 中的模式来帮助 Y 任务。
也要注意其如何实现了对分布匹配的泛化。如果是在分布匹配情况下,假如 X 是语言 1,Y 是语言 2,并且存在某个简单函数 F 可从一个分布转换到另一个分布;那么优良的压缩器也能注意到这一点并将其利用起来,甚至可能在内部恢复出该函数。
这样一来,闭环就形成了。那么我们如何用数学形式描述无监督学习呢?
无监督学习的数学形式化
注意这一部分的描述会交替使用压缩场景和预测场景的描述。
首先假设我们有一个机器学习算法 A,其作用是压缩 Y。算法 A 能够访问 X。令 X 为 1 号文件,Y 为 2 号文件。我们希望我们的机器学习算法 / 压缩器能对 Y 进行压缩并且其能在合适的时候使用 X。目标是尽可能地压缩 Y。
那么我们要问自己:使用这个算法最大的遗憾(regret)是什么?
Sutskever 解释说:「如果我很好地完成了工作并且我的遗憾很低,就意味着我已经从这未标注的数据中获得了所有尽可能的帮助。这些未标注数据已经尽可能地帮助了我。我对此毫无遗憾。」也就是说已经没有更好的预测值可供更好的压缩算法使用了。「我已经从我的未标注数据中获得了最大收益。」
Sutskever 认为这是向思考无监督学习所迈出的重要一步。你不知道你的无监督数据集是否真的有用,但如果你在监督学习算法上的遗憾很低,那么不管有没有用,你都已经得到了最佳结果,不可能会有更好的结果了。
现在进入有些晦涩难懂的理论领域。
将 Kolmogorov 复杂度用作终极压缩器能为我们提供超低遗憾的算法,但这其实并不是算法,因为它不可计算。
先简单解释一下 Kolmogorov 复杂度:就好比你给我一些数据,为了压缩它,我给你提供一个可能存在的最短的程序。Kolmogorov 复杂度就等于这个最短程序的长度。
令 C 是一个可计算的压缩器,那么对于所有 X,Kolmogorov 压缩器的复杂度小于压缩器 C 的任意输出加上实现该压缩器所需的代码字符数。
我们可以使用模拟论证(simulation argument)来证明这一点。假设有一个非常棒的压缩器 C,那么它可能是一个计算机程序,如果将这个计算机程序交给 K 来运行,那么 K 所需的成本就是这个程序的长度。Kolmogorov 压缩器可以模拟其它计算机程序和其它压缩器,也因此它是不可计算的。它就像是一个能够模拟所有计算机程序的自由程序,但它也是有可能存在的最好的压缩器。
现在我们泛化 Kolmogorov 压缩器,使其可以使用其它信息。我们知道 Kolmogorov 压缩器是不可计算的,不可判定的,而像是搜索所有程序。这就像是使用神经网络通过 SGD(随机梯度下降)调整参数来搜索程序。这个过程运行在有一定资源(内存、 步骤数)的计算机上,这就像是非常微小的 Kolmogorov 压缩器。这两者存在相似之处。
神经网络可以模拟小程序,它们是小小的计算机,有回路 / 电路。我们可以使用 SGD 训练这些计算机,从数据中找到它的「电路」。
模拟论证在这里也适用。如果你想设计一个更好的神经网络架构,你会发现这很困难,因为增添或修改连接这些操作虽然可以被其它神经网络架构模拟,但实际却难以做到。因为这些是能带来巨大提升的罕见情况。正如从 RNN 到 Transformer 转变。RNN 有一个瓶颈:隐藏状态。但如果我们能找到一种方法,让 RNN 可以拥有非常大的隐藏状态,那么它的性能表现可能会重新赶上 Transformer。
所以我们可以把条件 Kolmogorov 复杂度作为无监督学习的解,如下所示:
其中 C 是一个可计算的压缩器,K (Y|X) 是如果能使用 X,能输出 Y 的最短程序的长度。
这是无监督学习的超低遗憾的解,只不过它是不可计算的,但却能提供一个有用的框架。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。