今天六一,小朋友的节日。所以我们浅谈一下小模型。
1.前沿——模型参数变化简史
ChatGPT出现后,大模型火了起来,毕竟GPT-3可以认为就是一个暴力美学的产物,1750亿的参数在当时可以说是对其他很多模型造成了降维打击。
然后更大的模型也一个个冒了出来,和GPT-3直接抗衡的1750亿,非要多一点的1760亿,然后谷歌搞出PaLM这个5400的大模型。
在往上就不太好卷了,但谷歌祭出了一个老方法MoE,硬是让模型的参数能够突破一万亿大关,现在我所知道的最大的模型是一万八千亿参数。当然,大量参数不是说加就加的,实际上MoE本身就是稀疏的,一些为了卷参数量甚至做到极端稀疏,64个专家就选一个,等价其实就是模型参数/64,其实也不是特别大。当然还有微软的Deepspeed MoE,又要把MoE价值榨干。当然,除此之外的盘古-Σ模型,由于是改进了MoE(可以即插即用“专家”了),我认为理论上是可以突破两万亿参数的,不过就太奢侈了。
GPT-4的参数量和模型架构是未知的,但我们有理由相信它比GPT-3应该是大一些的,MoE有没有用也不好说,但我个人觉得不会比一万八千亿参数的那个模型更大,毕竟还是有视觉部分的模型。(以上都是对比的纯粹语言模型参数量的部分,视觉大模型因为一些原因往往会小很多)
当然,也不是所有研究都在卷模型参数,特别是现在模型参数已经快卷不动的时代,很多人开始卷数据集了,包括数据量、数据质量等等。PaLM 2就是这样的模型,参数量比PaLM小很多,但是数据量上去了。
2. 极简主义浅模型
然而,华为的一篇论文直接回归极简主义:
OK,这篇论文提出了非常简单但是实验验证很有效的网络:VanillaNet。整体架构:
没错,其中一个模型就这么6层的卷积神经网络(CNN),最大的模型也就13层(最小的好像是5层,但是不典型,可能是做对比用的)。连Transformer都没有用,了解过CNN的朋友应该都能看懂。
之所以最少设计六层是因为这是现在主流认为的CNN需要有六个步骤(输入层+4个处理层+输出层)
大当然有大的好处,但是也有大的坏处。一个很经典的问题就是梯度消失。我们更新网络参数是从后往前走的,之前很多激活函数的导数都是小于1的,链式法则一出来就会导致一些梯度越来越小,前面几层的参数就更新不到了。
虽然ReLu函数的出现一定程度上解决了这个问题,但ReLu作为一个非线性函数仍然存在很多问题,更深的模型往往还有跳层等操作,RNN还有LSTM等一大堆东西来解决梯度消失问题。
而模型比较浅的话就不需要这么复杂的操作,也更加灵活。
3.怎么保证性能
为了保证性能,论文主要是在训练上做了些处理,包括深度训练和基于级数启发的激活函数。这两种方法还挺复杂的,这里不展开,其实简单来说思想基本上是相同的——叠加。深度训练可以认为是同时训练两个卷积层,然后慢慢合并,基于级数启发的激活函数就是把很多激活函数“叠加”在一起(这里说的并不是很严谨)
当然,不谈这些,其实我们还可以关注另一件事:
这张图很大,但是我们只需要看两列就可以了。黄框代表的列是模型参数量,红框代表的事模型深度。哎,是不是发现了,虽然VanillaNet确实很浅,但这参数量也不少啊,甚至可以说很多了。
没错,VanillaNet是一个浅但是特别宽的模型。从模型架构也能看出来,卷积核数量是随层数指数暴增的,加上“叠加”的训练方法,就造出了这个超级宽的模型。(在著名模型BERT的论文中有个结论:相似参数量的情况下,深而浅的模型性能往往比浅而宽的模型强。但是固定死深度的话加宽一般也会有效)
4.还能更浅?
哎,是不是觉得VanillaNet的秘密就结束了,然而,竟然有人在github上按照VanillaNet的思路发布了一个模型ReduceNet,压缩到只剩一层。
那个项目没有发布论文,只有一篇文章,这里也不展开了。
这其实告诉我们,小模型还没完呢!
前不久看有人说能不能仿照栉水母的神经网络设计人工神经网络(因为栉水母的神经网络可能是单独演化出来的,不是突触连接型),其实参照各种小生物做的神经网络有不少的、也有用光做神经网络的,不过目前研究都还很初步,毕竟现在这个神经网络发展架构也是以性能优先而选拔出来的,只能说现在要突破垄断还没那么简单。
最后祝大家六一儿童节快乐吧!我去加班了(