当下,像大语言模型这样的生成式AI很火,相应的学习资源也如雨后春笋,我从中挑选一份好的学习资料分享给大家。
关注微信公众号:人工智能大讲堂,后台回复llm获取白皮书pdf资源。
一共有两个pdf文档,一个教如何从零开始训练一个大模型,另一个教如何微调大模型,每个文档仅有23页,如果想涵盖全部内容就难免会缺少一些细节,对于想入门LLM的可以用它先来形成一个整体的思维脑图,然后再去补充细节。
下面是对LLM Training内容的总结:
模型搭建选择
从头训练LLM并非唯一选择,还可以使用开源LLM或者调用商业LLM API,需要需求、数据量、技术能力等因素进行选择。
模型扩展定律
讨论了模型大小和数据量之间的关系,总的来说,扩大模型,训练数据量也应按比例增加。
硬件考量
训练大模型很依赖硬件资源,需要大量GPU和高带宽网络,需要在内存和计算效率之间平衡,同时利用各种并行化技术来加快训练。
数据处理
收集高质量、高容量、高多样性的数据,并对数据进行清洗、抽样、去重等预处理,与CV相比,NLP需要一个特殊的操作:Tokenization,并介绍了几种常用的Tokenization方法。
预训练步骤
首先选择模型架构,是像GPT那样选择Decoder架构还是像Bert那样选择Encoder架构?接下来设置超参数。
模型评估
基准测试,少样本学习评估
偏差与毒性
分析和记录模型的潜在不良关联,采取缓解措施
指令调优
显著改善零样本性能,针对特定类型任务效果更好
通过人类反馈的强化学习
在指令调优的基础上加入人类偏好,提高安全性
下面是对LLM fine-tuning and prompting内容的总结:
大模型分为通用大模型和专业大模型。
通用大模型是在大规模语料(互联网,百科,电子书)上预训练完成,例如GPT,Bert。
专业大模型是在通用大模型基础上,通过微调或者提示工程使其善于完成某个下游任务,例如,ChatGPT。
如何从通用大模型变成专业大模型?
从模型参数的角度可分为三种类型:模型参数全量更新,模型参数部分更新,模型参数不变。
模型参数全量更新
该方法有个英文名:full fine-tuning或者fine-tuning,需要更新全部参数来达到通用大模型具有适配下游任务的能力。
常见的方法有迁移学习,这个在CV领域很常见,通常是在像ImageNet这样的大规模图像数据集上预训练一个模型,然后用某个领域的图像进行微调。
另一个是知识蒸馏,就是让一个小的学生模型向一个大的老师模型学习新任务的特征表示。
模型参数部分更新
参数全量更新费时,费力,那能不能只改变部分参数就能得到和全量更新差不多的效果呢?当然有,这种方法也有一个洋气的英文名:parameter-efficient fine turning。常见的方法有LoRA,模型的参数可以视为参数矩阵,这个矩阵很大,LoRA的方法是将这个大矩阵分解为两个小矩阵的乘积,这两个小矩阵的乘积被视为原始矩阵的低秩近似,训练过程中只更新这两个小矩阵使其逐步逼近原始矩阵,这样更新的参数量大大减小。
另一种方法是Prefix-turning,模型参数不变,通过增加任务相关的前置向量来实现。
模型参数不变
无论是模型参数全量更新还是部分更新,一般都需要手里有一定量某个领域的训练数据,既然要训练就难免费事,费力,那有没有省时,省力的方法呢?当然有,那就是提示工程,也就是模型参数不变,从提示上下功夫。
一种常见的方法是提示工程,就是用科学的方法构造或者修改提示,使模型更了解你的意图。
另一种方法是提示微调,也叫Prompt-turning,也就是增加额外的用于微调提示的层,通过训练来学习这些层的参数。
fine-turning和prompting如何选择?
两者各有千秋,且不矛盾,通常可以结合两者各自的优点来达到更好的效果,例如,你可以用过fine-turning微调一个预训练模型,在推理时通过提示工程来优化性能。
如果非要二选一,也可以从任务类型,训练数据规模,硬件配置等方面考虑。
在fine-turning过程中,还会用到基于人类反馈的强化学习RLHF,prompting过程中也会使用分解思想的chain-of-thoughts,这些在白皮书中都有介绍。