抛开大模型基座训练,我们还可以关注什么? - 知乎
大模型LLM领域,有哪些可以作为学术研究方向?
方向一:大模型的基础理论问题
大力出奇迹,涌现,目前还需要科学家继续研究理论基础
也就是先有飞机,再研究空气动力学,并优化飞行
方向二:大模型的网络架构问题
大模型主流网络架构Transformer是2017年提出的。随着模型规模增长,我们也看到性能提升出现边际递减的情况,Transformer是不是终极框架?
方向三:大模型的高效计算问题
大模型动辄包含十亿、百亿甚至千亿参数。随着大模型规模越变越大,对计算和存储成本的消耗也越来越大
需要建设更加高效的分布式训练算法体系,这方面很多高性能计算学者已经做了大量探索,例如,通过模型并行[9]、流水线并行[8]、ZeRO-3[1] 等模型并行策略将大模型参数分散到多张 GPU 中,通过张量卸载、优化器卸载等技术[2]将 GPU 的负担分摊到更廉价的 CPU 和内存上,通过重计算[7] 方法降低计算图的显存开销,通过混合精度训练[10]利用 Tensor Core 提速模型训练,基于自动调优算法 [11, 12] 选择分布式算子策略
然后,大模型一旦训练好准备投入使用,推理效率也成为重要问题,一种思路是将训练好的模型在尽可能不损失性能的情况下对模型进行压缩。
方向四:大模型的高效适配问题
大模型一旦训好之后,如何适配到下游任务呢?
尽管预训练语言模型已经成为基础设施,但是真正去使用大模型的论文占比还非常低。非常重要的原因就在于,即使全世界已经开源了非常多的大模型,但是对于很多研究机构来讲,他们还是没有足够计算资源将大模型适配到下游任务。
方案一是提示学习(Prompt Learning),即从训练和下游任务的形式上入手,通过为输入添加提示(Prompts)[1,2,3] 来将各类下游任务转化为预训练中的语言模型任务,实现对不同下游任务以及预训练-下游任务之间形式的统一,从而提升模型适配的效率
方案二是参数高效微调(Parameter-effcient Tuning 或Delta Tuning)[4, 5, 6],基本思想是保持绝大部分的参数不变,只调整大模型里非常小的一组参数,这能够极大节约大模型适配的存储和计算成本
方向六:大模型的安全伦理问题
方向七:大模型的认知学习问题
专业领域任务上面临不可信、不专业的挑战。这些任务往往需要专业化工具或领域知识支持才能解决。因此,大模型需要具备学习使用各种专业工具的能力,这样才能更好地完成各项复杂任务。
已有 WebGPT / WebCPM [2, 3] 等工作成功让大模型学会使用搜索引擎,像人一样网上冲浪,有针对性地获取有用信息进而完成特定任务。
各种工具(如文生图模型、搜索引擎、股票查询等)的调用流程都统一在了同一个框架下,实现了工具调用流程的标准化和自动化
方向八:大模型的创新应用问题
一个耳熟能详的工作就是AlphaFold,对整个蛋白质结构预测产生了天翻地覆的影响
方向九:大模型的数据和评估问题
从多种模态数据中学习更加开放和复杂的知识,将会是未来拓展大模型能力边界及提升智能水平的重要途径,图片,视觉数据
面向未来,从更多模态更大规模数据中学习知识,是大模型技术发展的必由之路。
大模型建得越来越大,结构种类、数据源种类、训练目标种类也越来越多,这些模型的性能提升到底有多少?在哪些方面我们仍需努力?有关大模型性能评价的问题,我们需要一个科学的标准去判断大模型的长处和不足
而对于生成式AI,模型倾向于生成发散性强、长度较长的内容,使用自动化评测指标很难对生成内容的多样性、创造力进行评估,于是带来了新的挑战与研究机会
作者:zibuyu9
链接:https://www.zhihu.com/question/595298808/answer/3047369015
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
自动评价法:很多研究者提出了新的自动化评估方式,譬如通过选择题的形式[5],收集人类从小学到大学的考试题以及金融、法律等专业考试题目,让大模型直接阅读选项给出回答从而能够自动评测,这种方式比较适合评测大模型在知识储备、逻辑推理、语义理解等维度的能力。
模型评价法:也有研究者提出使用更加强大的大模型来做裁判[6]。譬如直接给GPT4等模型原始问题和两个模型的回答,通过编写提示词让GPT4扮演打分裁判,给两个模型的回答进行打分。这种方式会存在一些问题,譬如效果受限于裁判模型的能力,裁判模型会偏向于给某个位置的模型打高分等,但优势在于能够自动执行,不需要评测人员,对于模型能力的评判可以提供一定程度的参考。
人工评价法:人工评测是目前来看更加可信的方法,然而因为生成内容的多样性,如何设计合理的评价体系、对齐不同知识水平的标注人员的认知也成为了新的问题。目前国内外研究机构都推出了大模型能力的“竞技场”,要求用户对于相同问题不同模型的回答给出盲评。这里面也有很多有意思的问题,譬如在评测过程中,是否可以设计自动化的指标给标注人员提供辅助?一个问题的回答是否可以从不同的维度给出打分?如何从网络众测员中选出相对比较靠谱的答案?这些问题都值得实践与探索。
方向十:大模型的易用性问题
大模型不仅要自身性能好,还要有强大工具体系让它好用
十一、终极问题:涌现现象是怎么出现的?大模型内部到底发生了什么?能否比较直观的给出解释。
大模型一出,AI领域正式进入像 物理学 那样的“解释性科学”阶段,也就是先有现象,再去分析+解读。理论解释的进步,可以更好的指导上面几个问题的研究和解决。
目前大模型发展生态最好的当属Meta的LLaMA模型。如果GPT系列是Windows,那么LLaMA就是Linux
训练大模型3个阶段:
- Stage 1: 预训练(Pretrain)
- Stage 2: 监督微调(SFT)
- Stage 3: 对齐(Reward Model + RLHF)
前OpenAI科学家、现任特斯拉AI总监的Andrej Karpathy在自己的GitHub项目里这样写道。
Karpathy这样说是有底气的,因为他自己只用大约300行PyTorch代码就实现了一个“小型GPT”——minGPT
GPT所做的事情就是将一个索引序列放入一个transformer块序列中,并得出下一个索引的概率分布。其余的复杂部分只是通过巧妙地进行批处理让训练更高效。
谷歌手上握有两个强大的AI战力:TensorFlow 2.0和Transformer。
gpt2是最小的模型,参数量为124M,GPT-2是用TensorFlow实现的
ChatGPT 使用了 TensorFlow 作为深度学习框架
ChatGPT 还使用了其他一些编程语言和技术,包括:
-
CUDA:用于在 NVIDIA GPU 上进行并行计算,以加速深度学习模型的训练和推理。
-
C++:用于优化模型的计算性能和内存管理,特别是在模型部署和推理时。
-
Rust:用于编写高性能的系统级代码,以提高模型的稳定性和安全性。
-
JavaScript:用于开发 ChatGPT 的 Web API,使其可以通过网络接口与其他应用程序集成。
综上所述,ChatGPT 是使用多种编程语言和技术组合编写的。Python 是主要的编程语言,用于编写核心算法和模型架构。TensorFlow 是深度学习框架,用于搭建神经网络模型。其他编程语言和技术则用于优化计算性能、提高系统稳定性和安全性,以及扩展 ChatGPT 的应用范围。通过这些技术的组合,ChatGPT 成为了一款高效、可靠、灵活的自然语言处理模型。
GPT-3 是一个预训练的语言模型,意味着它在大量的文本数据上进行了预先训练,以学习语言的基本结构和模式。一旦预训练完成,GPT-3 可以通过微调针对特定任务进行优化。这种预训练和微调的方法使得 GPT-3 可以在各种 NLP 任务上取得卓越的性能,如文本生成、翻译、摘要等。
LLM 技术的核心思想是使用深度神经网络,通过大规模的文本数据预训练模型,并利用这些预训练模型进行下游任务的微调或直接应用
在国内做llm其实竞争不大,因为大家做事都太急太糙,目前看来大家都没太大出息。预计两年内不会有太好的成果
纵观AI发展这十年无非4个工作在定调:AlexNet、ResNet、Transformer、GPT系列。
AlexNet,第一次证明了神经网络在参数量上的规模效应,Ilya教主也在公开采访中表示这工作增强了他的信仰
ResNet,解决了神经网络在规模化进程中在深度上的瓶颈。即使今天会有从业者诟病Residual Connection在浅层网络上不work,我想说的是这毫不影响ResNet的伟大,解决了深度瓶颈的问题,是AI史上的大问题。
Transformer,解决了神经网络在关系建模上的瓶颈,提出当今世上最伟大的神经网络结构,没有之一。
GPT系列,解决了数据规模化瓶颈,证明了数据规模效应;同时在数据量和参数量上做了颠覆所有人认知的规模化。
OpenAI探索出来LLM训练流程:先用无监督预训练,再用有监督对齐,最后强化学习再微调模型,训练出了当今世上最伟大最强悍的模型。
大模型为什么具备如此高效的学习能力
过去,我们观测loss曲线的时候,很容易得到结论:loss平了,网络已经学不动了。可是今天OpenAI告诉我们,对时间取一下log,loss依然在直线下滑。
过去,我们可能做过这样的消融实验:加一层有用,加两层更有用,加三层没有进一步有用了。答曰:两层最好哦。可是今天OpenAI告诉我们,指数参数量增加,loss线性下降,何不指数增加看看
人脑大约有860亿(86 B)神经元,人脑的神经连接则有恐怖的1百万亿(100 T),学术界通常认为神经连接代表着长期记忆。神经连接对应的是人工神经网络中的参数,网传当今世上最强的语言模型GPT-4有大约1.8T参数
Transformer初始化的那一刻,参数量就已经定下来了,并不会随着训练改变参数量,它是给定了神经元之间的连接关系,训练只是调整其中的连接的权重。也就是说Transformer的参数量是静态的
Generative Pre-trained Transformer(GPT)
模型 | 发布时间 | 参数量 | 预训练数据量 |
---|---|---|---|
GPT | 2018 年 6 月 | 1.17 亿 | 约 5GB |
GPT-2 | 2019 年 2 月 | 15 亿 | 40GB |
GPT-3 | 2020 年 5 月 | 1,750 亿 | 45TB |
GPT-1:无监督学习
在GPT-1之前,传统的NLP模型往往使用大量的数据对有监督的模型进行任务相关的模型训练,但是这种有监督学习的任务存在两个缺点:
- 需要大量的标注数据,高质量的标注数据往往很难获得,因为在很多任务中,图像的标签并不是唯一的或者实例标签并不存在明确的边界;
- 根据一个任务训练的模型很难泛化到其它任务中,这个模型只能叫做“领域专家”而不是真正的理解了NLP。
这里介绍的GPT-1的思想是先通过在无标签的数据上学习一个生成式的语言模型,然后再根据特定热任务进行微调,处理的有监督任务包括
- 自然语言推理(Natural Language Inference 或者 Textual Entailment):判断两个句子是包含关系(entailment),矛盾关系(contradiction),或者中立关系(neutral);
- 问答和常识推理(Question answering and commonsense reasoning):类似于多选题,输入一个文章,一个问题以及若干个候选答案,输出为每个答案的预测概率;
- 语义相似度(Semantic Similarity):判断两个句子是否语义上市是相关的;
- 分类(Classification):判断输入文本是指定的哪个类别。
将无监督学习左右有监督模型的预训练目标,因此叫做生成式预训练(Generative Pre-training,GPT)。
.1.1 无监督预训练
GPT-1的无监督预训练是基于语言模型进行训练的,给定一个无标签的序列 U={u1,⋯,un} ,语言模型的优化目标是最大化下面的似然值:
(1)L1(U)=∑ilogP(ui|ui−k,…,ui−1;Θ)
其中 k 是滑动窗口的大小, P 是条件概率, Θ 是模型的参数。这些参数使用SGD进行优化。
在GPT-1中,使用了12个transformer[5]块的结构作为解码器,每个transformer块是一个多头的自注意力机制,然后通过全连接得到输出的概率分布。
图1:GPT系列的基本框架
(2)h0=UWe+Wp
(3)hl=transformer_block(hl−1)∀i∈[1,n](4)P(u)=softmax(hnWeT)
其中 U=(u−k,…,u−1) 是当前时间片的上下文token, n 是层数, We 是词嵌入矩阵, Wp 是位置嵌入矩阵。
1.1.2 有监督微调
当得到无监督的预训练模型之后,我们将它的值直接应用到有监督任务中。对于一个有标签的数据集 C ,每个实例有 m 个输入token: {x1,…,xm} ,它对于的标签 y 组成。首先将这些token输入到训练好的预训练模型中,得到最终的特征向量 hlm 。然后再通过一个全连接层得到预测结果 y :
(5)P(y|x1,…,xm)=softmax(hlmWy)
其中 Wy 为全连接层的参数。有监督的目标则是最大化(5)式的值:
(6)L2(C)=∑x,ylogP(y|x1,…,xm)
作者并没有直接使用 L2 ,而是向其中加入了 L1 ,并使用 λ 进行两个任务权值的调整, λ 的值一般为 0.5 :
(7)L3(C)=L2(C)+λL1(C)
当进行有监督微调的时候,我们只训练输出层的 Wy 和分隔符(delimiter)的嵌入值。
GPT系列从1到3,通通采用的是transformer架构,可以说模型结构并没有创新性的设计。在微软的资金支持下,这更像是一场赤裸裸的炫富:1750亿的参数,31个分工明确的作者,超强算力的计算机( 285,000 个CPU, 10,000 个GPU),1200万的训练费用,45TB的训练数据(维基百科的全部数据只相当于其中的 0.6% )。这种规模的模型是一般中小企业无法承受的,而个人花费巨金配置的单卡机器也就只能做做微调或者打打游戏了
读懂了GPT-3的原理,相信我们就能客观的看待媒体上对GPT-3的过分神话了。GPT-3的本质还是通过海量的参数学习海量的数据,然后依赖transformer强大的拟合能力使得模型能够收敛。基于这个原因,GPT-3学到的模型分布也很难摆脱这个数据集的分布情况。得益于庞大的数据集,GPT-3可以完成一些令人感到惊喜的任务
每个英文单词大约对应1.3个token
LLM在token的粒度上进行训练和推理,在处理英文时,token通常对应英文中的单词(word)或者“子词”(subword),例如“eating”这个词可能被拆解为两个token:“eat”和“ing”。一个包含750个单词的英文文档大约对应1000个token。因为大多数的大模型的接口调用根据token数来计费,根据1:1.3这个比例可以事先估算出调用大模型的成本。
在token总数为1.4T的语料上对参数量为13B的模型做预训练,大约需要100万美元
这个数据来自于LLaMa的论文,其中提到LLaMa的预训练在2048个A100(80G)的GPU上训练了21天,按此估算预训练成本约为100万美元。总之,从头开始训练一个LLM是可能的,但并不便宜,相对之下使用一个预训练模型就要便宜很多。
Transformers架构
Code
现在开源的LLM基本都是在Llama上魔改的了,因此Llama的modeling_llama.py很重要,建议看huggingface的,全文背诵就完事了。(Tensor Parallelism (pretraining_tp>1)那段看着吓人,不用看,跳过就行了)
https://github.com/huggingface/
除去基座大模型从头训练,国内更多的是用别人训练好的的基座大模型,进行微调
通义千问的开源后,阿里云成为国内首个加入大模型开源行列的大型科技企业。今年7月,微软宣布,联手Meta发布开源AI模型的可商用版本Llama 2,目前通义千问和Llama是最大的两个开源大模型基座。企业在阿里云上既可以调用通义千问的全部能力,也可以结合企业自身的行业知识和应用场景,训练自己的企业大模型。
1、大模型微调技术
大模型微调技术分为三种:(1)full fine-tuning全部参数;(2)parameter-efficient微调部分参数:冻结大部分参数,微调小部分参数;(3)prompt-tuning不微调参数:不进行参数微调,仅仅使用prompt工程让模型输出自己想要的答案
fine-tuning方法包括将预训练模型与少量特定任务数据一起继续训练。在这个过程中,预训练模型的权重被更新,以更好地适应任务
流行的大模型使用方法。即将除了输出层以外的所有权重“冻结”(freeze)。然后随机初始化输出层参数,再以迁移学习的方式训练。仅仅更新全连接输出层,其它层的权重不变
二、parameter-efficient fine-tuning技术
参数高效的fine-tuning,简称PEFT,旨在在尽可能减少所需的参数和计算资源的情况下,实现对预训练语言模型的有效微调。
其中一种参数高效的fine-tuning技术称为蒸馏(distillation),它由Hinton等人于2015年引入。该方法涉及训练一个较小的模型来模仿一个较大的预训练模型的行为。预训练模型生成“教师”预测结果,然后用于训练较小的“学生”模型。通过这样做,学生模型可以从较大模型的知识中学习,而无需存储所有参数。
另一种技术称为适配器训练(adapter training),它由Houlsby等人于2019年引入。适配器是添加到预训练模型中的小型神经网络,用于特定任务的微调。这些适配器只占原始模型大小的一小部分,这使得训练更快,内存需求更低。适配器可以针对多种任务进行训练,然后插入到预训练模型中以执行新任务。
第三种技术称为渐进收缩(progressive shrinking),它由Kaplan等人于2020年引入。这种技术涉及在fine-tuning期间逐渐减小预训练模型的大小。从一个大模型开始,逐渐减少参数的数量,直到达到所需的性能。这种方法可以产生比从头开始训练的模型性能更好的小型模型。
三、prompt-tuning技术
prompt-tuning是一种更近期的精调预训练语言模型的方法,重点是调整输入提示(input prompt)而非修改模型参数。这意味着预训练模型保持不变,只有输入提示被修改以适应下游的任务。
这通常是一个手动的试错过程,从中选择最适合特定任务的提示。然而,随着前缀调整和P-Tuning等提示调整技术的出现,它们提供了更系统化和高效的方式来适应输入提示
垂域大模型的核心还是在于垂域数据,信息时代部分领域一定有隐私数据是通用模型拿不到的,所以个人认为垂域大模型还是有存在的必要性
大模型为何需要“外挂”数据库?
之所以要研究这个方向,是因为如GPT-3和PaLM这类(大)语言模型,在表现出不错的效果同时,也出现了一些让人头疼的“bug”,主要有三个问题:
1、参数量过大,如果基于新数据重训练,计算成本过高;
2、记忆力不行(面对长文本,记了下文忘了上文),时间一长会产生幻觉,且容易泄露数据;
3、目前的参数量,不可能记住所有知识。
在这种情况下,外部检索语料库被提出,即给大语言模型“外挂”一个数据库,让它随时能通过查找资料来回答问题,而且由于这种数据库随时能更新,也不用担心重训的成本问题。
Agent = LLM(大型语言模型)+ 记忆 + 规划技能 + 工具使用
长期记忆:长期记忆为代理提供了长期存储和召回(无限)信息的能力,它们通常通过利用外部的向量存储和快速检索来存储和召回(无限)信息。
长期记忆是向量数据库
5、数据收集与清洗
(langchain就是个比较出名的prompt engineering
自动化
要想做好数据,那就需要先充分的理解当前的数据,因为一般来说数据量级很大,而且都是高维的,所以对我们人类在进行理解的时候比较困难,所以通常需要对数据进行归纳和可视化,方便我们理解。
一些图表的可视化可以有效的帮助我们洞悉数据的分布,比如星形图、线性图表等等。同时如果数据维度太高也是不利于人类更好理解的,所以一些前面提到的降维技术便可以发挥作用,比如降到二维或者三维
数据的存储和检索也同样非常重要。
数据的存储这里比较在意吞吐量,常见的有hadoop和spark等等
另一个研究方向是高效的数据检索,可以通过高效的索引选择和查询重写策略来实现。
chatgpt的prompt engineering工作(langchain就是个比较出名的prompt engineering)
数据标准过程是非常有必要的,它的label就直接用来训练模型,尽管一些无监督学习也取得重大的成功,但是想要最终取得很好的和人类对齐的效果,还是得用label去做监督学习。
这里通常的方法有crowdsourced labeling, semi-supervised labeling, active learning, data programming, and distant supervision. 第一种就是众包,说白了就是人标;第二种半监督也已经有很多方法了,常见的就是利用部分标注数据训练一个分类器等等辅助标注更多的数据,比如chatgpt的强化学习阶段就是通过训练一个reward model进行大规模打分的;第三个是主动学习,核心在于每次选出模型认为最难的样本进行人工标注,然后接着训练,进行多次迭代,所以这类方法大多聚焦在怎么选择出困难样本;第四种方法是弱监督的一种,其主要就是设计一种label函数,通常是基于启发式的,为了进一步和人类对齐,有些方法也借助少量人工进行互动来提高性能;最后一种就是远程监督,最出名的就是关系抽取中通过看一对实体是否共现在一个文本中来判断。
所以数据标注过程其实就在数据质量、数据数量以及预算之间折中取一个平衡。
数据预处理过程主要包括数据的清洗、特征抽取和特征变换。
数据清洗主要是剔除异常值,修正数据等等,一些比较传统的方法比如在面对缺失值的时候通过平均值等手段进行填充,但是这些基于启发式的方法在性能上的表现都有限。于是出现了一些基于model的方法,比如训练一个模型去预测缺失值等等,还有比如采用搜索算法自动识别最佳的清理策略,以优化验证集最终性能为目的等等方法。
特征抽取主要就是将原始样本进行表征,传统的机器学习有很多专门的特征提取器,但是随着深度学习的来临,这块工作被网络自动学出来了,但是也带来了不可解释,偏差放大等问题,所以在一些高风险的领域,传统的特征提取仍有一席之地。
特征变换主要就是将特征进行二次处理进而有利于模型学出更好的性能,比较常见的就是归一化normalization等等,比如归到一个正态分布即正态变换,还有比如对数变换和多项式变换,这些变换可以被任意组合力求达到最佳效果,比如有一个工作就是把这些变换方法组成一个graph,然后利用强化学习寻找最佳组合。
prompt engineering本质上就是在做一个template模型的事,比如对文本分类或者文本生成预先定义一些模版,或者基于梯度自动生成template。prompt engineering最大的问题的是缺乏一个统一通用的模版,每个模版对输出影响都极大。
而且都是高维的,所以对我们人类在进行理解的时候比较困难,所以通常需要对数据进行归纳和可视化,方便我们理解。
一些图表的可视化可以有效的帮助我们洞悉数据的分布,比如星形图、线性图表等等。同时如果数据维度太高也是不利于人类更好理解的,所以一些前面提到的降维技术便可以发挥作用,比如降到二维或者三维,同时自动聚类方法也经常与降维技术相结合,以分组、分类和常常使用颜色编码的方式组织数据点,促进人类对数据的理解和深入分析。