精彩评论
- al2359(2年前 (2023-02-06))
求科学离线插件,谢谢!34401355@qq.com
评:改版梅林固件安装SS【shadowsocks】科学上网插件教程 - al2359(2年前 (2023-02-06))
求科学离线插件,谢谢!!!
评:改版梅林固件安装SS【shadowsocks】科学上网插件教程
自2017年Transformer问世以来,语言模型迎来了井喷式的发展,其数量以及能力都出现了阶跃式进步,GPT3.5以及GPT4.0的出现,给人类带来了开启下一次智能革命的希望。与此同时,各种开源大语言模型也相继问世,也让人们得以了解大语言模型训练的内部原理。
然而大语言模型的训练并不是一件简单的事,经过近五年的发展,研究者们探索了各式各样的训练方式已取得更好的效果,无监督学习,监督学习,强化学习,等等等,纷繁复杂,使得新手无所适从,因此,本文将就大语言模型的各种训练方法进行一次汇总。
几乎所有大语言模型训练的第一步就是在海量的语料数据上进行无监督预训练。这是要让模型能够捕获人类语言中各种基本特征,在以亿为基本参数单位的大语言模型中,形成理解人类语言的关键基础结构。有研究证实[1],模型参数越多,需要的预训练数据也就越多,性能也就越好,而它们之间呈现线性关系。虽然目前仍不知道其内部的数学原理,但实践已经告诉我们答案。
无监督预训练核心在于使用大量未标记的文本数据来训练语言模型,使其能够理解和生成自然语言。为了优化模型参数,这个过程主要有两个任务:
这些方法从算法的角度来说并不困难,无监督预训练的主要难点在于数据量太大,以至于需要大规模分布式高性能GPU集群才能够在可接受的时间内训练完成。例如,
GPT-3 完成一次训练的总计算量是3640PFlops[2],按NVIDIA A100 80G 和平均利用率达到50% 计算,需要花费近一个月时间使用1000 块GPU 完成。
这无疑只有大型企业耗费数百万元才能完成。
因此,目前虽然大语言模型花样百出,但作为基石的预训练模型都是基于那么几个大公司发布的预训练模型。
监督微调又称为指令微调 (Instruction Fine Tuning), 是指在已经训练好的语言模型的基础上,通过使用有标注的特定任务数据进行进一步的微调,从而使得模型具备遵循指令的能力。经过海量数据预训练后的语言模型虽然具备了大量的“知识”,但是由于其训练时的目标仅是进行下一个词的预测,此时的模型还不能够理解并遵循人类自然语言形式的指令。为了能够使得模型具有理解并响应人类指令的能力,还需要使用指令数据对其进行微调。指令数据如何构造,如何高效低成本地进行指令微调训练,以及如何在语言模型基础上进一步扩大上下文等问题是大语言模型在有监督微调阶段所关注的核心。
经典的fine-tuning方法包括将预训练模型与少量特定任务数据一起继续训练。在这个过程中,预训练模型的权重被更新,以更好地适应任务。所需的fine-tuning量取决于预训练语料库和任务特定语料库之间的相似性。如果两者相似,可能只需要少量的fine-tuning。如果两者不相似,则可能需要更多的fine-tuning。
由于全参数微调对于大模型来说过于困难(计算量过大,显存要求过高),因此研究者们开发了各种各样的针对大语言模型微调的新方法。
总体来说,研究者们倾向于不去/少去改动预训练大模型的内部参数,而是通过一些替代的、增量的方式让模型更加适应当前任务。
LoRA(Low-Rank Adaptation)模型优化技术是一种用于自然语言处理(NLP)和其他机器学习任务的参数高效适应技术。它主要用于优化大型预训练语言模型(比如BERT、GPT等),允许这些模型以较少的额外参数进行高效地微调和适应。
LoRA的核心思想是通过在模型的原有权重矩阵上应用低秩矩阵来实现模型调整,而不是直接修改原有权重。这样做的好处是,可以显著减少微调过程中需要学习的参数数量,从而减少内存占用和加速训练。
目前,Lora技术已经被集成到各种大语言模型用的训练库中,通过配置参数即可使用,比如:PEFT (huggingface/peft: PEFT: State-of-the-art Parameter-Efficient Fine-Tuning. (github.com))
知乎上也有很多介绍Lora的文章:
发展至今,Lora技术也产生了一些变体,比如
Qlora[3]:没有对LoRA 的逻辑作出修改,而是通过将预训练模型量化为4-bit 以进一步节省计算开销。QLoRA 可以将650 亿参数的模型在单张48GB GPU 上微调并保持原本16-bit 微调的性能。QLoRA 的主要技术为:(1)新的数据类型4-bit NormalFloat(NF4);(2)双重量化(DoubleQuantization);(3)分页优化器(Paged Optimizers)。其中分页优化器指在训练过程中显存不足时自动将优化器状态移至内存,需要更新优化器状态时再加载回来。接下来将具体介绍QLoRA 中的量化过程。
AdaLoRA[4]:微调过程中根据各权重矩阵对下游任务的重要性动态调整秩的大小,用以进一步减少可训练参数量的同时保持或提高性能。
参考我翻译的这篇文章:
P-Tuning在不大幅改动模型主体的前提下,通过微调输入部分来优化模型在特定任务上的表现。可以认为P-tuning是自动调整输入prompt来优化模型表现的一种技术。
参考这篇文章:
Incontext learning 是一种在大型语言模型(如GPT系列)中常见的学习方式,它依赖于模型通过阅读和分析给定上下文(context)来生成适当的回应或完成特定任务的能力。这种方法特别在少样本或零样本学习场景中显得非常重要,因为它允许模型在没有显式训练的情况下适应新任务。
Incontext learning 的核心是利用模型的“记忆”能力。大型语言模型在训练过程中接触到大量的文本数据,学习到了如何基于上下文信息推断、理解和生成文本。当这些模型接收到一段包含特定格式或任务描述的文本时,它们能够“回忆起”训练数据中的类似模式,并据此生成答案或完成任务。
总的来说,Incontext learning不会通过监督方法改变模型参数,而是在每次进行推理时,将预先定义好的“例子”与用户输入一起输送给模型,让模型能够更准确的“理解”用户想要什么。
笔者认为,语境学习可能不应该归类为大模型“训练”的范畴,而应该属于探索大模型“应用”的范畴,毕竟它不涉及模型参数的调整。
这一概念有时也被称为Prompt Engineering[5]。
通过有监督微调,大语言模型已经初步具备了服从人类指令,并完成各类型任务的能力。然而有监督微调需要大量指令和所对应的标准回复,获取大量高质量的回复需要耗费大量的人力和时间成本。由于有监督微调通常采用交叉熵损失做为损失函数,目标是调整参数使得模型输出与标准答案完全相同,不能从整体上对模型输出质量进行判断。因此,模型不能适用自然语言多样性,也不能解决微小变化的敏感性问题。
强化学习则将模型输出文本作为一个整体进行考虑,其优化目标是使得模型生成高质量回复。此外,强化学习方法还不依赖于人工编写的高质量回复。模型根据指令生成回复,奖励模型针对所生成的回复给出质量判断。模型也可以生成多个答案,奖励模型对输出文本质量进行排序。模型通过生成回复并接收反馈进行学习。强化学习方法更适合生成式任务,也是大语言模型构建中必不可少的关键步骤。
关于强化学习相较于监督微调的好处,参考OpenAI创始人的这个视频:
总而言之,有以下几点好处:
举个例子:
对于语言模型生成的内容,什么是“好”的文本本质上很难定义,因为它是主观的和依赖于上下文的。有许多应用程序,例如编写需要创造力的故事、应该是真实的信息文本片段或我们希望可执行的代码片段,编写一个损失函数来捕获这些属性似乎很棘手,因为它涉及到人类的主观判断,我们很难量化一个统一的标准进行衡量。
目前被应用在大模型上的强化学习方法被称为基于人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF),相信很多新手都看过这个字眼但是理解不能,之所以被称为基于人类反馈的强化学习是因为我们希望大语言模型能够满足满足3H原则[6],即帮助性(Helpfulness)、真实性(Honesty)以及无害性(Harmless)。
只有通过人类的调整/评判,才能让模型的输出与人类意图“对齐”。
RLHF主要分为奖励模型训练和近端策略优化两个步骤。奖励模型通过由人类反馈标注的偏好数据来学习人类的偏好,判断模型回复的有用性以及保证内容的无害性。奖励模型模拟了人类的偏好信息,能够不断地为模型的训练提供奖励信号。在获得奖励模型后,需要借助强化学习对语言模型继续进行微调。
OpenAI 在大多数任务中使用的强化学习算法都是近端策略优化算法(Proximal Policy Optimization, PPO)。近端策略优化可以根据奖励模型获得的反馈优化模型,通过不断的迭代,让模型探索和发现更符合人类偏好的回复策略。
目前,也已经有一些库实现了该技术:
详细原理可以参考:
「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」
求科学离线插件,谢谢!34401355@qq.com
评:改版梅林固件安装SS【shadowsocks】科学上网插件教程求科学离线插件,谢谢!!!
评:改版梅林固件安装SS【shadowsocks】科学上网插件教程