写在前面
大家好,我是刘聪NLP。
今天给大家带来一篇黄文灏大佬(@知乎黄文灏)的《多大的参数才算大模型--关于“大”模型的一些思考》。
知乎:https://zhuanlan.zhihu.com/p/650458297
最近和很多人讨论开源大模型的问题,发现中文社区最近大多数开源的预训练模型(主要指从头开始训练的预训练模型)都是7B、13B的,而放眼全世界后chatgpt时代开源的超过50B的模型好像只有LLaMA和LLaMA 2(最近刚看到了falcon180b,但训练得着实不太行)。似乎开源社区热衷于将模型做小(更多的是没有资源的无奈),同时闭源模型如OpenAI的GPT4已经达到了万亿参数量级,也有传言Google做了400B的dense model。不由想到一些问题,都是和模型做大有关,抛出来和大家讨论一下。
多大的模型才算大模型?
前几天看到一个工作说在text2sql领域用小模型达到了和大模型接近的性能,仔细一个所谓的小模型是T5-base,想到几年前T5都是被称作大模型的,不禁感叹, 随着时间的发展大模型参数上的“大”的门槛正在越变越高 。可以想象,一年以后,回过头看今天开源社区玩得热火朝天的7B和13B模型,也会被称作为小模型被未来更大的模型淹没的。所以,真正想做大模型的公司建议直接放弃7B和13B,千亿和万亿模型才是主战场。
3月份的时候,Graham Neubig做过一个调查,看大家认为多大的模型才算大模型。有80%的人认为10B以上就算大模型了,的确大家通常也把LLaMA 7B称作为大模型。
业界对模型参数大小的要求要更高,比如Yi Tay就认为100B以上才是大模型。
如果这个调查今天再做一次,毫无疑问我觉得投100B以上的人会多很多。我自己在3月份的时候心里的答案是50B,当时读的很多paper都认为54B是模型涌现能力的一个门槛,而具有涌现能力的模型才是真正的通用模型。但随着时间的发展,对于大的标准也在逐渐变高。如果现在问我多大的参数能叫大模型,可能100B以上才算大模型吧。所以,国内那些集中精力(倾其所有)做7B、13B模型的公司,大概率都是打着大模型的旗号但连真正大模型的入门门槛还没有达到。
当然,单纯的比较模型参数量的大小是不准确的。这里又个前提上大家学习的数据在相同的量级,或者是Chinchilla最优的。比如,GLM 130B只过了400B数据,它的训练计算量(flops)是不如过了1.4T数据的llama-65B和过了2T数据的llama 2 - 70B的。模型参数量只是给大家一个相对的概念,但当数据量有限或者固定的前提下,肯定是越大越好。
大模型的大有极限吗?
从训练计算量的角度看,training flops约等于6ND,N为参数量,D为数据量,它只和这两个参数量相关。所以,所有大模型公司的第一要务都是提高数据量,提升数据质量。但大家做到一定程度后会发现,数据就是那些数据,当大家把数据量最大的cc,github这些数据就处理完以后,会发现数据量很快会达到一个上限,之后数据量的增长会非常缓慢。前段时间大家广泛讨论的互联网文本数据快不够用了可能会是未来数据发展的瓶颈。这个时候,要提升智能的上界就只能扩大模型参数了。那模型的参数会有上界吗?从目前的趋势来看, 我觉得还没有看到方法上提高参数量的上限,但看到了效率(成本)上提高数据量的上限。
方法上来看,只要同等size的模型提高数据量效果还能提高,同等数据量的模型提高模型参数量效果还能提高,就可以认为扩大模型数据量和参数量的上界还没有到。Chinchilla Law的optimal计算也可以继续适用。从目前的所有研究来看,这两点都还是成立的,出现一些违背这个基本原则的结果大多也是数据没洗干净,模型没有训练好。比如falcon-180b比llama2-70b的提升都很有限(下表对两者的性能做了个简单对比),很有可能是falcon太强调refined-web数据的重要性了,数据多样性不足。
效率(成本)上来看,抛开各种MoE类型刷参数量的方法不看,单看dense model,现在业界做的最大的应该还是Palm 540B,未来会不会有更大的还不确定(这里GPT4由于没有公布参数量,暂不考虑)。按照Chinchilla的training optimal,540B的模型大概需要过10T的数据。假设计算量是线性增长的的,用10000张A卡训练540B模型大概需要250天以上。这里是纯线性假设,参数量,数据量,卡数和时间都可以用简单的线性关系换算。实际infra在扩增后的损失会巨大。仅就这个理想情况来看,训练一次也要5亿人民币以上,会是一个成本极高,风险更高的尝试。单论成本,对大厂来说其实也还好,但实际面临的问题要多的多,比如国内不一定能10000卡互联,那带来的时间成本上升会让不确定性极具上升;比如卡数增加以后计算效率的急剧退化问题;比如模型参数增加以后收敛难以保证的问题。
有一个很有意思的观点, 研究所做的所有工作包括模型结构、优化器等等都是在资源有限情况下的妥协。 如果有无限的算力和可以线性增长的infra能力,单纯的把数据做大做好,把模型做大就可以了,Transformer还有很大的空间可以开拓。所以,随着时间推移,算力如果符合摩尔定律,只要有人能投入资源,模型智能的边界也会符合摩尔定律。这一规律什么时候出现拐点会是决定模型智能边界的核心问题。希望OpenAI、Google能利用资源不停地去探索智能的边界和拐点出现的时间。但大概率拐点出现之前,AI已经实现了对人类智能的降维打击。
大模型为什么应该做大?
很多人都在argue说模型做大并没有太大的意义,反而带来了成本的消耗,所以应该选择最适合场景的够用的模型。我自己是不太同意这样的观点的。
首先,应该把探索智能的边界和基于大模型做应用这两个事情分开来看,正如前面说到的,在数据做大、模型做大的道路上还有很大的空间。对于想探索AGI的机构来说,做大是一条方向大体正确的路。当然通向AGI可能有其他路,但沿着做大这一路径从目前来看大概率是比其他路经更快(不一定是最优,但省去了大量探索的时间)和确定性更高的路径。
其次, 用大模型蒸馏出来的小size模型会比从头开始训练的小size模型效果好很多。 3月份,GPT3.5-turbo发布的时候大家都猜测这是一个小于50B的模型,但它的效果是可以吊打所有50B以下的模型的(包括LLaMA和LLaMA2)。对于它是怎么做到的有众多的猜测,这里面我自己比较believe的路径是GPT3.5-turbo是用GPT4蒸馏出来的小模型,或者说size变小的过程中用了大量GPT4的模型(知识)。然后顺着这个思路做了一些实验,发现用大模型蒸馏小模型比从头训练小模型效果是显著要优的。因此,在考虑端侧推理等十分在乎效率的场景下,最好的方式仍然是用一个更大的模型去蒸馏一个理想大小的模型,而不是从头训练小模型。
再次,很多目前来看大模型的问题当模型参数变大后就能解决。像Hallucination幻觉问题,7B、13B可能非常严重,大家也花了很多精力去研究怎么解决。但当模型参数量超过100B、200B甚至400B以后,会发现大部分(超过80%)的hallucination问题就自然不见了。比较一下GPT4和GPT3.5会发现这个现象还是十分明显的。
最后,要用动态的眼光看问题,随着算力、算法的发展,大模型推理的边际成本会迅速降低,而效果的边际效应并不会有太大变化。100B模型和7B模型的推理成本差距会很快到可接受的范围内,未来大家考虑更多的可能是性能而不是效率。
从大的角度看一下国内的“百模大战”
按照前面的讨论,其实国内所谓的“百模大战”并没有多少公司是在真正做大模型的。加上下面两个条件
- 模型是从头开始训练的,而不是continue pre-training,sft的
- 是在真正做100B以上参数的大模型的
可能最后不会超过10家。第一条可能会淘汰掉70%以上的公司,第二条还会淘汰掉只有算力和资源从头开始训练7B,13B模型的公司,这条甚至放宽到从头训练30B以上模型的公司都只会剩下10多家。所以, 真正大模型赛道上的竞争远没有媒体描述的“百模大战”那么激烈。 反倒是有不少打着大模型的旗号,一直在7B、13B甚至更小的量级展开工作的“小模型”公司。
最后,放一张GPT4出来之前,大家谣传GPT4有100万亿参数的图。100万亿可能不远了。
请多多关注知乎「刘聪NLP」,有问题的朋友也欢迎加我微信「logCong」私聊,交个朋友吧,一起学习,一起进步。我们的口号是“生命不止,学习不停”。
PS:新书已出《ChatGPT原理与实战》,欢迎购买~~。
往期推荐: