欢迎光临散文网 会员登陆 & 注册

【花师小哲】当代炼金术(神经网络)前沿(28)——给1750亿参数模型剪枝吧

2023-03-29 10:54 作者:花师小哲-中二  | 我要投稿

这篇文章也是较早之前的了,是一篇对于千亿规模模型进行剪枝的论文:

由于本文专业性比较高,我个人对剪枝也不是很熟悉,所以只是讲下大概思想,具体细节感兴趣的朋友可以去看论文(毕竟本系列专栏是类似科普的性质)。

1.为什么要剪枝

我们还是回到一个关键术语——稀疏

在计算机中,稀疏是个有种特殊魅力的词语。对于一个满满当当的矩阵,我们却可以用一个存在一些零星有意义元素的矩阵来代替,这非常酷不是吗(

不开玩笑了,稀疏的好处还是很多的,来看看new bing怎么解释稀疏的好处吧:

(当然,稀疏的一个麻烦的地方在于,很多时候,你只有在这个领域有一定的了解后才能体会到一种很难说出来的魅力)

关于稀疏模型之前的专栏讲过了:

【花师小哲】当代炼金术(神经网络)前沿(5)——稀疏网络与特征筛选

简单来说,经过剪枝,整个模型的训练会更快,成本会更低。包括MoE本身也是稀疏的模型。关于MoE,见如下链接:

【花师小哲】当代炼金术(神经网络)前沿(16)——语言模型的其他出路

2.大模型剪枝

对于大模型,剪枝算法也是需要的。本文的一个主要剪枝对象是GPT模型家族的OPT-175B(1750亿参数)。

大家知道,由剪枝造成模型稀疏,很自然地性能大概率会下降,所以很多算法在剪枝后还要重新训练网络。但对于大模型来说,训练成本是很高的,所以只能做一次剪枝来达到最终的效果,所以只能采用训练后剪枝

当然,对于一整个模型直接进行剪枝是很麻烦的,然后就是计算机领域经典的分而治之——分层剪枝

正如果树一样,神经网络也是分为一层一层的(这里说句题外话,有些关于大模型知识工程的研究表明大模型很可能是在中间层存储知识的):

图片来源于网络

我们的想法就是对每一层进行剪枝,并保持原有映射不会发生太大变化。或者说,如果把每层看做一个函数f(x),则我们需要找到一个f'(x),它和f(x)非常相似但计算成本要更低。

当然,这种剪枝算法要是做不好,性能很可能会一层层打折扣的。

3.本文的方法

还是不谈细节(否则一个海森矩阵就够我讲长篇的),谈一些思想。

本文基于的原始方法简单来说就是剪枝+补偿。由于不修改权重直接剪枝必然会损伤性能,所以需要对其他权重进行补偿。这个问题的主要麻烦在于计算解比较慢(时间复杂度为4次方)。然后又是计算机经典方法——迭代求近似解。通过这种方法,总算是稍微降了一下时间复杂度。

4.结语与好玩的发现

本文最终达到的剪枝效果还是很好的,在剪除了50%-60%的权重后依然能保证性能下降不严重甚至提升性能的情况(据说剪70%左右就会崩溃)。而且作者发现似乎越大的模型反而更好剪枝(也许真的暗示MoE的未来是光明的?)

这让我想到《银砂糖师与黑妖精》中安进行了剪枝反而帮助了她取得了更好的声誉[指动画,轻小说这里血压更高]:

不管怎么说,这篇文章确实是非常好的一次尝试。


【花师小哲】当代炼金术(神经网络)前沿(28)——给1750亿参数模型剪枝吧的评论 (共 条)

分享到微博请遵守国家法律