三问大模型,AI的路在何方?
近日内部有关大模型的讨论比较多,也组织了几次内部的分析和研讨,有赞同、有批判、有质疑、有期许,抱着略懂的心态,本着“胡说八道”的精神,借着弹窗的周末时间,谈谈对大模型的一些看法。想到哪里就写到哪里,比较细碎,由于胡说八道所以就以字为主,方便讨论,省流的话直接看加粗字体部分。
1.『大模型到底大在哪里?』
要想回答这个问题,首先要思考“大模型”到底是什么,只有定义好这个边界,我们才能有所有后续的“胡说八道”。
大模型这个关键词的热度在学术界应该起于两篇论文GPT-3 [1] 和 ViT [2]。(注:由于我以前的研究背景都在视觉上,所以对GPT相关的工作是真的胡说,后文的思考还是以CV领域的感受为主)GPT-3给大家的直观感受就是参数量暴涨、计算量暴涨、数据量和性能暴涨,很强!ViT给做视觉的同学们带来的感受有点文艺复兴的意思,因为把图像切成很多块的方式是深度学习之前的视觉最基本的操作,不规则的就是传统的SIFT [3],规则的切patch方式就是HoG [4],在十年前的很多比赛中也都取得了不错的结果(CV和NLP领域经常互相借鉴,Bag-of-visual-words也是从NLP领域借鉴过来的)。话又说回来,ViT对视觉领域的从业人员来说,更直接的感受像让子弹飞中的张麻子(枪在手,跟我走),新架构终于来了,赶紧跟!谁下手快谁引用高!
那么,以视觉为例,到底什么是大模型呢?大是一个形容词,比较出来的结果,如果拿ViT与也是基于谷歌的工作卷积网络(CNN)架构FixEfficientNetV2-L2(480M参数,585G计算量)做对比,ViT-Large(307M参数,190.7G计算量,很多人其实没有细想过,我有时候会觉得,ViT这种架构只是在不想增加FLOPS的情况下,努力增加参数量,能吃下更多数据的一种方案)似乎也没有特别大 [6]。不过,由于架构的不一致,ViT这种具有更高参数容量的模型在更大的数据集(谷歌JFT,也有一种说法这个数据集一定程度包含了ImageNet,所以结论存疑)上做预训练可以达到更好的性能。此外,之前在智源的一次活动中跟山世光等老师们讨论过,视觉跟语言的模型不一样,视觉模型的输入维度很高,比如经典的ResNet系列,输入数据的维度是一张有224*224*3个像素的图像,所以大不大其实也要看计算量,比如上面提到的94B已经非常恐怖了。
结合最近的一些论文、公众号、讲座、内部研讨、访谈,我总试图想定义一下,到底什么是大模型,可行的有两个可以量化的角度:
a) 100M参数以上,在多个任务(不同loss|不同dataset|不同task)上进行预训练的模型就叫大模型。正例很多,ViT和各种变种,也有我们自己鼓捣出来的底层视觉大模型IPT [5]。不过,这个结论很快被组里的一位机智的小伙伴推翻了,因为EfficientNet或者某些CV backbone经过放大之后可以轻易超过100M参数,并且在ImageNet上预训练之后可以在检测、分割等任务上做出很好的表现,不是新东西。
b) 用到了Transformer的架构,支持预训练就叫大模型。本来以为这个定义似乎清晰了一些,但是又想到大家开始在ViT架构中猛插卷积(convolution)并且取得了更好的效果,所以大模型似乎也不应该跟Transformer绑定。
所以,这一环节的结论,仍然是无法清晰地给定,什么是大模型。或许,在技术上就不存在这样一个新概念,只要随着数据不断增长,算力持续提升,优化手段越来越好,模型总是会越来越大的。
2.『大模型到底解决了什么大问题?』
既然有大模型,我想,其他的AI模型都应该是“小模型”了吧,那我们需要思考的就是大模型在关键的问题上真的全面超过小模型了没有?感觉前面啰嗦了太多,当然问题定义也比较重要,我们沿用1.a的定义去思考,大模型与小模型的对比。
a) 在ImageNet这种大规模数据集上,或者更大的数据集,目前的证据确实是越大的模型(尤其引入了Transformer和切patch之后),精度越来越高。不过限定的一些实际用到的数据集往往也会发现,小容量(<100M)的网络也能摸到数据集的极限,小模型还有速度、内存、功耗、训练成本等优势。所以,越复杂的任务,参数越多,模型越大,作用越大,也有点胜读一席话的意思了。
b) 多个任务一起预训练,这么多年机器学习也都是一直这么干的,那我们剥离模型本身,就看多任务预训练一定会让模型在后续任务中fine-tuning之后效果更好吗?答案是否定的,我们之前的工作中就发现了,在底层视觉的任务里,有些任务是打架的,联合训练会导致一定程度的精度恶化。甚至如果优化器做得好,直接train from scratch可以比pre-train + fine-tuning效果更好,确实也有点离谱。相似的任务一起预训练还是会有一定帮助的,也可以理解成为某种程度的数据扩充,见得多总是要识得广。
c)大模型经过调整之后,经过一系列模型优化手段之后,是不是能一定超过小模型?答案也是否定的,很多任务是具有很专业化的领域知识支撑才可以做好的,而不简单是一个大模型就包打天下。如果不理解任务不理解数据特性,大模型甚至达不到领域内SOTA模型的精度。此外,很多任务的逻辑不一样,模型架构也是完全不一样的,强扭的瓜不甜,我感觉为了融合而融合达不到很好的效果。用大模型对小模型蒸馏一定会产生更好的结果吗?不好意思,因为架构差异太大,这还是个需要探索的问题。
个人感觉有价值的方向还是2.a和2.b中提到的,难的任务,相似的功能,相同的数据,大模型可以吃得下,就有其优势。 题外话是算力和优化器能否支撑这么大的模型,还有硬件之间的连接和通信。
3.『大模型中最大的挑战是什么?』
大模型从热度伊始就在学术界有两种声音,一种是大模型功能多性能强,一种是大模型就是一阵风。所谓韭菜的共识也是共识,我们再想想大模型面临的挑战。上面也说了,NLP我确实不怎么懂,主要的感官还是来自计算机视觉。
a)模型规模继续加大,参数量继续增多,精度还能上涨吗? 目前来看在新的架构出来之前,似乎CNN、Transformer、CNN+Transformer都已经达到了一定程度的极限,一旦主流任务刷不动了,大家又要开始去别的领域应用了,例如AI4Science,我个人不觉得关键点在于大模型。不过这也是个好事,技术阶段性成熟,积极变现转化成新的力量。另外一个角度是一位同学跟我说的MoE(Mixture of Experts),通过稀疏化把多个模型集成在一起,轻松提升模型参数量。嗨!学术界的营销能力其实一直都不比工业界差,MoE也不是个新概念,有几十年历史。类似的一些优秀工作也有Slimmable Network和Dynamic Network等,未来到底AI架构何去何从,共勉吧。
b)现在大模型是一个工程问题,还是一个技术问题? 大胆的说一下,更多我们见到的大模型都是工程问题,背后有杰出的工程师做数据收集、数据清洗、模型结构设计、模型调优、多机多卡优化等等复杂繁琐的工程性工作。产生的价值见仁见智。两年前,一位业界大佬在重要的讲座中讲到,大模型的工作里面都是工程、工程、还是工程问题。在合适的任务上还是有其优势的,但是我们也要思考,现有的优化器能否支撑大模型的参数量和任务复杂度。单说ImageNet这个经典任务,非Transformer架构,不用预训练,通过系统性地适配优化器、训练参数、数据扩充、甚至随机数种子等等,也可以超过ViT。当然,这也是一些炼丹工作,但是炼丹炼着炼着其实也能发现科学,比如最近的一些Rep系列工作(重参数化),我觉得也是一种很不错的优化器改进的方法,也会鼓励大家去使用。
惯例还是要及时总结: 写完这些,越来越让我觉得大模型是一个被大家揣着明白装糊涂的概念性词汇,大家似乎也没有定义清楚啥是大模型,无论是1.a还是1.b都有一定的可取之处,对AI架构有一定年头积累的专业人员也都知道“大模型”的优劣。但是,大家似乎都沉浸在大模型欣欣向荣、歌舞升平的状态中,大多数工业界的场景中,大模型并不能直接发挥价值。在不同的任务里还是要根据实际场景去谈具体的模型和算法,不建议逢解决方案就提大模型,也不建议把大模型当成一个主要的技术方案去忽悠不是特别懂这一块技术的人,事实上在学术界的论文中也不会有人说我们用一个Big Model解决了所有问题。未来大模型应该可以在2.c所提的方向上持续发力,但肯定也会演变出来一系列千奇百怪或优或劣的AI架构,大浪淘沙,去伪存真。
参考文献:
1. GPT-3: Language Models are Few-Shot Learners
2. An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
3. Scale Invariant Feature Transform
4. Histogram of Oriented Gradients
5. IPT:Pre-Trained Image Processing Transformer
6. https://paperswithcode.com/sota/image-classification-on-imagenet