【AI学习】OpenAI员工关于复合模型案例(composite models)的分析

看到jbetker(OpenAI员工)发表于2022年的一篇关于复合模型案例的博客,感觉很有意思,做一个重点摘录。

前面《什么是深度学习》的文章中,特别学习了端到端的好处,而jbetker给出了另外一个分析,非常有意思,可以对比来看。

在机器学习研究中,通常有一种既定的愿望,即建立“端到端”的训练管道,所有模型都从单个训练目标中连贯地学习。过去,已经证明,这种模型比从多个组件训练的模型性能更好,每个组件都有自己的损失。
在这里插入图片描述
这个概念背后的理由是合理的:每次将模型分解为不同的部分时,都必须引入一种新的有损介质:
在这里插入图片描述
每个单独的输出都是有损的。
普遍的理论是,这些损失在管道末端累积并产生一个完全劣质的模型。

我不会试图说服你,从不同的损失中单独训练的模型(我在这篇文章中称之为“复合模型”)比那些端到端训练的模型更好。相反,我想说明何时应该使用它们。

一些类比

许多工程领域都有类似的争论:

在软件领域,我们讨论了“单体架构”与“微服务”的优点。单体是大型程序,其中所有代码都在单个进程内运行。它们高效且易于推理,但维护和重用却非常让人疲惫。另一方面,微服务架构则恰恰相反。它们会产生跨进程(或服务器)的通信成本。他们通常很难理解它们在深层技术层面上是如何工作的,因为逻辑是如此分散。另一方面,通过将团队分解为小的负责小组来维护微服务要容易得多。同样,它们通常可以相互独立地重复使用或升级。

在机械工程中也存在类似情况,其中的争论是关于应该使用多少零件来构建最终产品。众所周知,您可以通过摆脱紧固件和子组件来减轻重量并制造更坚固的结构。例如,与其用两个外壳结构建造火箭燃料箱,然后用螺栓固定在一起并密封,不如将整个燃料箱作为一个整体。然而,这样做是有代价的:
1、制造大型部件所需的制造设备非常昂贵。
2、一体式组件通常无法维修,必须批量更换。
3、升级同样意味着报废整个组件。
4、一体式组件通常是特定于应用的,不能重复使用。

你看到相似之处了吗?

我真的不认为自己在“微服务”或“单体”辩论中“全力以赴”。我见过两边都非常糟糕的设计。我认为最好的方法是一些中间立场,最好的工程师是能够在两者之间取得良好平衡的人。

再来看ML

随着机器学习越来越成为一门工程学科,我认为在构建模型时开始关注这场争论是有益的。

我想快速谈谈 Tortoise,这是一个由 4 个组件构建的复合模型:AR 模型、扩散解码器、CLVP 和声码器。

可能有一个世界,可以被建造成一个整体。您可以按照以下步骤进行操作:构建一个 AR 模型,用于预测 SoundStream 代码的概率分布。您的序列长度会很大,因此您可能需要几 TB 的 GPU 内存和几个数量级的处理内核。哦,你取消了 CLVP 重新排序,所以你可能想要增加模型维度以更好地适应你的数据集(最好也增加它的大小!)你需要将 GPU 内存和内核乘以 d 的增加。

上述方法的问题很明显:以我们今天可用的技术,它在计算上是不可行的。在构建 Tortoise 时,我的主要考虑是“如何获取 22kHz 采样的音频数据,并有效地将大型transformer模型应用于它?我最终构建的复合模型架构是我直接解决该问题的方法。声码器、扩散模型和 CLVP 都是在 AR 模型级别减少对不可行的计算量需求的方法。

这个设计决策的一个非常巧妙的结果是,你会得到很多乐趣,额外的好处:

Tortoise 的模块化组件都有其用途。例如,扩散模型可以用作高度压缩语音的解码器。
我可以将每个组件与其他组件分开“升级”(某种程度上)。我用 CLVP2 做到了这一点。
问题通常可以隔离到组件级别并并就地修复。

一些好的经验法则

虽然很明显,我认为构建复合模型至少值得考虑,但肯定有一些注意事项。以下是我能想出的一些个人准则:

  • 务必分解模型以降低空间复杂性。我的观点是,当前的ML模型满足于太多的空间复杂性。一个大的图像生成器不应该在每个像素上投掷巨大的矢量。
  • 作为相关的说明,我认为我们在今天的 LLM 中向若干个单词投掷 12k 宽向量是疯狂的,而我们同时证明了 768个宽向量足以代表整个句子。 (注:这里没有理解具体是什么含义)
  • 务必分解模型,将模型参数集中在需要的地方。例如,音乐中最大的差异发生在抒情层面。如果我想构建一个音乐生成器,我会把我最大的模型扔到生成抒情结构的任务上,而在其他地方生成较小的模型。
  • 务必使两个模型之间的操作介质尽可能具有描述性。离散码是最糟糕的。潜在向量非常好,但很难推理。像频谱图这样的紧凑描述性介质是黄金标准。
  • 不要按语义类分解模型。一个例子是为猫和狗训练单独的图像识别模型。你不会像ML模型那样“思考”,你需要让他们学习如何建立自己的语义理解。
  • 不要在每个模型都没有明确目的的情况下分解模型。例如,构建两个模型,每个模型都有 1B 参数,这些参数按顺序运行。您可能认为结果与 2B 参数模型一样好。在大多数情况下,你错了。两个模型中的大多数参数很可能会学习完全相同的东西。请改用更大的模型和模型并行性。
  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值