调整参数,改变激活函数提升模型性能,都不再是问题。最近,GoogleBrain的负责人Quoc发布了一个搜索框架,可以自动搜索高效的Transformer变体,并找到一些有效的模型Primers。其中,在ReLU中加入一个正方形最能提升性能!目前,自然语言处理领域的发展红利来自大规模的基于Transformer的语言模型,但这些语言模型的训练成本和推理成本之高让民间炼金术士望而却步。当模型参数数量大到一定程度时,研究人员也在考虑如何在收缩模型的情况下保持性能不变。GoogleBrain团队最近在arxiv上上传了一篇论文,目标是通过寻找更高效的Transformer变体来降低训练和推理成本。与以前的方法相比,新提出的方法在较低级别执行搜索,在Tensorflow程序的原语上定义和搜索Transformer。并提出一种名为Primer的模型架构,其训练成本低于原始Transformer和其他用于自回归语言建模的模型变体。https://arxiv.org/abs/2109.08668论文作者是大神QuocV.Le。在斯坦福攻读博士学位期间,他的导师是吴恩达教授。他目前是谷歌的研究科学家,也是谷歌大脑的创始成员之一;seq2seqOne的作者之一;GoogleAutoML的创始人,提出了包括神经架构在内的方法;EfficientNet的作者等。研究人员使用TensorFlow(TF)中的操作来构建Transformer变体的搜索空间。在这个搜索空间中,每个程序都为自回归语言模型定义了可堆叠的解码器块。鉴于输入张量是长度为n且嵌入长度为d的序列,该程序能够返回相同形状的张量。堆叠时,其输出表示每个序列位置下一个标记的预测嵌入,程序仅指定模型架构,不指定其他任何内容。换句话说,输入和输出嵌入矩阵本身以及输入预处理和权重优化不在本程序的范围内。解码器模型程序(DNA,decodermodelprogram)定义了一个自回归语言模型,每个DNA都有一组子程序,其中0号子程序是MAIN函数的入口。每个子例程都包含指令,这些指令被翻译成TensorFlow代码行。指令操作映射到原始词汇表中的基本TensorFlow库函数或父DNA子例程之一,它由简单的原始TF函数组成,如ADD、LOG、MATMUL等,但像self-attention的高级构建块不是搜索空间中的操作,self-attention可以从低级操作构建。DNA的子程序库包含额外的程序,这些程序可以通过指令作为函数执行。每个子程序只能调用子程序库中索引较高的子程序,从而消除了循环的可能性。使用父指令的参数集填充操作的参数,其中包含所有潜在操作参数的值。参数包括Input1(作为第一个tensor输入的hiddenstate的index),Input2(第二个tensorinput的indexHiddenstateindex),Constant(一个实数值常量,可以用于函数如MAX)、Dimensionsize(一个整数,用来表示输出维度的大小)。未在特定操作中使用的参数将被简单地省略。研究人员还提出了进化搜索(evolutionarysearch),目标是在搜索空间中找到最有效的模型架构。主要方法是设计固定的训练预算(使用TPUv2时24小时),并将其适应度指标定义为Tensor2Tensor中十亿词基准(LM1B)上的困惑度。这些架构搜索工作的明确目标是减少训练或推理步骤时间,同时优化效率。在搜索过程中,可以发现将步长时间增加一倍,采样效率增加三倍是一个很好的修改,因为它最终使得模型架构的计算效率更高。也可以对ReLU求平方并在注意力上添加深度卷积以增加训练步骤时间。这些操作极大地提高了模型的采样效率,通过大幅减少实现目标质量所需的训练步骤数,减少了实现目标性能所需的总体计算量。通过这个搜索程序找到的模型,被研究人员命名为Primer,即PrimitivessearchedTransformer(原语搜索transformer)。Primer的改进主要是平方ReLU激活和在自注意力中的每个Q、K和V投影之后添加一个深度卷积层。最有效的修改是将Transformer前馈块中的ReLU激活改进为方形ReLU激活函数,这也是首次证明这种整流多项式激活在Transformer中有用。并且高阶多项式的有效性也可以在其他Transformer非线性激活函数中观察到,例如GLU、ReGLU、近似GELU的各种变体等。但是,平方ReLU与最常用的激活函数相比具有截然不同的渐近特性,ReLU、GELU和Swish。SquaredReLU确实和ReGLU有明显的重叠,事实上,当ReGLU的U和V权重矩阵相同时,squaredReLU就等同于ReLU。并且平方ReLU可以获得GLU变体的好处,同时更简单,不需要额外的参数,并提供更好的质量。研究人员使用三种Transformer变体与Primer进行比较:1.VanillaTransformer:原始Transformer,使用ReLU激活和层归一化。2.Transformer+GELU:Transformer的常用变体,使用GELU来逼近激活函数3.Transformer++:在前馈反向瓶颈(SwiGLU)中使用RMS归一化、Swish激活和GLU乘法分支。这些修改在T5中进行了基准测试并被证明是有效的。实验表明,Primer相对于Transformer的增益随着计算规模的增长而增加,并在最佳模型规模下遵循质量相关的幂律。研究人员还凭经验验证了可以将Primer放入不同的代码库中,发现无需额外调整即可显着加快训练速度。例如,在500M的参数大小下,Primer在C4自回归语言建模上改进了原始T5架构,将训练成本降低了4倍。此外,降低的训练成本意味着Primer需要更少的计算来实现目标单次性能。例如,在类似于GPT-3XL的1.9B参数配置中,Primer使用1/3的训练计算量来实现与Transformer相同的one-shot性能。研究人员开源了该模型,以帮助提高论文的再现性。
