1.2万亿参数:谷歌通用稀疏语言模型GLaM,小样本学习打败GPT-3

机器之心报道
机器之心编辑部

大规模语言模型性能固然好 , 但计算和资源成本太高了 , 有没有方法可以更有效地训练和使用 ML 模型呢?
近几年 , 我们已经看到模型规模越来越大 , 例如 2018 年诞生的 GPT 具有 1.17 亿参数 , 时隔一年 , 2019 年 GPT-2 参数量达到 15 亿 , 2020 年更是将其扩展到 1750 亿参数的 GPT-3 。 据了解 , OpenAI 打造的超级计算机拥有 285000 个 CPU 核以及 10000 个 GPU , 供 OpenAI 在上面训练所有的 AI 模型 。
大型语言模型虽然训练昂贵 , 但也有其重要的一面 , 例如可以在各种任务中执行小样本学习 , 包括阅读理解、问答 。 虽然这些模型可以通过简单地使用更多参数来获得更好的性能 。 但是有没有方法可以更有效地训练和使用这些模型呢?
为了回答这个问题 , 谷歌推出了具有万亿权重的通用语言模型 (Generalist Language Model , GLaM) , 该模型的一大特点就是具有稀疏性 , 可以高效地进行训练和服务(在计算和资源使用方面) , 并在多个小样本学习任务上取得有竞争力的性能 。
我们来看一下 GLaM 模型的具体情况 。
数据集
谷歌首先构建了一个高质量的、具有 1.6 万亿 token 的数据集 , 该无标签数据集很大一部分来自 Web 页面 , 其范围从专业写作到低质量的评论和论坛页面 。 此外 , 谷歌还开发了一个文本质量过滤器 , 该过滤器是在维基百科和书籍文本数据集上训练而成 , 由于过滤器训练的数据集质量很高 , 所以谷歌将其过滤 Web 网页内容的质量 。 最后 , 谷歌应用这个过滤器来生成 Web 网页的最终子集 , 并将其与书籍和维基百科数据相结合来创建最终的训练数据集 。
GLaM 模型架构
GLaM 是混合专家模型 (MoE), 这种模型可以被认为具有不同的子模型(或专家) , 每个子模型都专门用于不同的输入 。 每一层的专家由一个门控网络控制 , 该门控网络根据输入数据激活专家 。 对于每个 token(通常是一个词或词的一部分) , 门控网络选择两个最合适的专家来处理数据 。 完整的 GLaM 总共有 1.2T 参数 , 每个 MoE 包含 64 个专家 , 总共 32 个 MoE 层 , 但在推理期间 , 模型只会激活 97B 的参数 , 占总参数的 8% 。
1.2万亿参数:谷歌通用稀疏语言模型GLaM,小样本学习打败GPT-3
文章图片

GLaM 的体系架构 , 每个输入 token 都被动态路由到从 64 个专家网络中选择的两个专家网络中进行预测 。
与 GShard MoE Transformer 类似 , 谷歌用 MoE 层替换其他 transformer 层的单个前馈网络(人工神经网络最简单的一层 , 如上图蓝色方框中的 Feedforward 或 FFN) 。 MoE 层有多个专家 , 每个专家都是具有相同架构但不同权重参数的前馈网络 。
尽管 MoE 层有很多参数 , 但专家是稀疏激活的 , 这意味着对于给定的输入 token , 只使用两个专家 , 这样做的优势是在限制计算的同时给模型提供更多的容量 。 在训练期间 , 每个 MoE 层门控网络都经过训练 , 使用它的输入来激活每个 token 的最佳两位专家 , 然后将其用于推理 。 对于 MoE 层的 E 专家来说 , 这本质上提供了 E×(E-1) 个不同前馈网络组合的集合 , 而不是经典 Transformer 中的一个组合 , 从而带来更大的计算灵活性 。
最终学习到的 token 表示来自两个专家输出的加权组合 , 这使得不同的专家可以激活不同类型的输入 。 为了能够扩展到更大的模型 , GLaM 架构中的每个专家都可以跨越多个计算设备 。 谷歌使用 GSPMD 编译器后端来解决扩展专家的挑战 , 并训练了多个变体(基于专家规模和专家数量)来了解稀疏激活语言模型的扩展效果 。

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。