前段时间,谷歌泄露的内部文件表达了这样一个观点,虽然表面看起来 openai 和谷歌在 ai 大模型上你追我赶,但真正的赢家未必会从这两家中产生,因为有一个第三方力量正在悄然崛起。这个力量就是「开源」。
围绕 meta 的 llama 开源模型,整个社区正在迅速构建与 openai、谷歌大模型能力类似的模型,而且开源模型的迭代速度更快,可定制性更强,更有私密性。
近日,前威斯康星大学麦迪逊分校助理教授、初创公司 lightning ai 首席 ai 教育官 sebastian raschka 表示,对于开源而言,过去一个月很伟大。
不过,那么多大语言模型(llm)纷纷出现,要紧紧把握住所有模型并不容易。所以,sebastian 在本文中分享了关于最新开源 llm 和数据集的资源和研究洞见。
论文与趋势过去一个月出现了很多研究论文,因此很难从中挑选出最中意的几篇进行深入的探讨。sebastian 更喜欢提供额外洞见而非简单展示更强大模型的论文。鉴于此,引起他注意力的首先是 eleuther ai 和耶鲁大学等机构研究者共同撰写的 pythia 论文。
论文地址:https://arxiv.org/pdf/2304.01373.pdf
pythia:从大规模训练中得到洞见
开源 pythia 系列大模型真的是其他自回归解码器风格模型(即类 gpt 模型)的有趣平替。论文中揭示了关于训练机制的一些有趣洞见,并介绍了从 70m 到 12b 参数不等的相应模型。
pythia 模型架构与 gpt-3 相似,但包含一些改进,比如 flash 注意力(像 llama)和旋转位置嵌入(像 palm)。同时 pythia 在 800gb 的多样化文本数据集 pile 上接受了 300b token 的训练(其中在常规 pile 上训练 1 个 epoch,在去重 pile 上训练 1.5 个 epoch )。
下面为一些从 pythia 论文中得到的洞见和思考:
在重复数据上的训练(即训练 epoch>1)会不会有什么影响?结果表明,数据去重不会改善或损害性能;训练命令会影响记忆吗?遗憾的是,结果表明并不会。之所以说遗憾,是因为如果影响的话,则可以通过训练数据的重新排序来减轻讨厌的逐字记忆问题;batch 大小加倍可以将训练时间减半但不损害收敛。开源数据
对于开源 ai,过去一个月特别令人兴奋,出现了几个 llm 的开源实现和一大波开源数据集。这些数据集包括 databricks dolly 15k、用于指令微调的 openassistant conversations (oasst1)、用于预训练的 redpajama。这些数据集工作尤其值得称赞,因为数据收集和清理占了真实世界机器学习项目的 90%,但很少有人喜欢这项工作。
databricks-dolly-15 数据集
databricks-dolly-15 是一个用于 llm 微调的数据集,它由数千名 databricks 员工编写了超过 15,000 个指令对(与训练 instructgpt 和 chatgpt 等系统类似)。
oasst1 数据集
oasst1 数据集用于在由人类创建和标注的类 chatgpt 助手的对话集合上微调预训练 llm,包含了 35 种语言编写的 161,443 条消息以及 461,292 个质量评估。这些是在超过 10,000 个完全标注的对话树中组织起来。
用于预训练的 redpajama 数据集
redpajama 是一个用于 llm 预训练的开源数据集,类似于 meta 的 sota llama 模型。该数据集旨在创建一个媲美大多数流行 llm 的开源竞争者,目前这些 llm 要么是闭源商业模型要么仅部分开源。
redpajama 的大部分由 commoncrawl 组成,它对英文网站进行了过滤,但维基百科的文章涵盖了 20 种不同的语言。
longform 数据集
论文《the longform: optimizing instruction tuning for long text generation with corpus extraction》介绍了基于 c4 和 wikipedia 等已有语料库的人工创作文档集合以及这些文档的指令,从而创建了一个适合长文本生成的指令调优数据集。
论文地址:https://arxiv.org/abs/2304.08460
alpaca libre 项目
alpaca libre 项目旨在通过将来自 anthropics hh-rlhf 存储库的 100k + 个 mit 许可演示转换为 alpaca 兼容格式,以重现 alpaca 项目。
扩展开源数据集
指令微调是我们从类 gpt-3 预训练基础模型演化到更强大类 chatgpt 大语言模型的关键方式。databricks-dolly-15 等开源人工生成指令数据集有助于实现这一点。但我们如何进一步扩展呢?是否可以不收集额外数据呢?一种方法是从自身的迭代中bootstrap 一个 llm。虽然 self-instruct 方法在 5 个月前提出(以如今标准来看过时了),但它仍是一种非常有趣的方法。值得强调的是,由于 self-instruct 一种几乎不需要注释的方法,因而可以将预训练 llm 与指令对齐。
如何运作呢?简而言之可以分为以下四个步骤:
首先是具有一组人工编写指令(本例中为 175)和样本指令的种子任务池;其次使用一个预训练 llm(如 gpt-3)来确定任务类别;接着给定新指令,使预训练 llm 生成响应;最后在将指令添加到任务池之前收集、修剪和过滤响应。
在实践中,基于 rouge 分数的工作会比较有效、例如 self-instruct 微调的 llm 优于 gpt-3 基础 llm,并可以在大型人工编写指令集上预训练的 llm 竞争。同时 self-instruct 也可以使在人工指令上微调过的 llm 收益。
但是当然,评估 llm 的黄金标准是询问人类评分员。基于人类评估,self-instruct 优于基础 llm、以及以监督方式在人类指令数据集上训练的 llm(比如 superni, t0 trainer)。不过有趣的是,self-instruct 的表现并不优于通过人类反馈强化学习(rlhf)训练的方法。
人工生成 vs 合成训练数据集
人工生成指令数据集和 self-instruct 数据集,它们两个哪个更有前途呢?sebastian 认为两者皆有前途。为什么不从人工生成指令数据集(例如 15k 指令的 databricks-dolly-15k)开始,然后使用 self-instruct 对它进行扩展呢?论文《synthetic data from diffusion models improves imagenet classification》表明,真实图像训练集与 ai 生成图像相结合可以提升模型性能。探究对于文本数据是否也是这样是一件有趣的事情。
论文地址:https://arxiv.org/abs/2304.08466
最近的论文《better language models of code through self-improvement》就是关于这一方向的研究。研究者发现如果一个预训练 llm 使用它自己生成的数据,则可以改进代码生成任务。
论文地址:https://arxiv.org/abs/2304.01228
少即是多(less is more)?
此外,除了在越来越大的数据集上预训练和微调模型之外,又如何提高在更小数据集上的效率呢?论文《distilling step-by-step! outperforming larger language models with less training data and smaller model sizes》中提出使用一种蒸馏机制来管理任务特定的更小模型,它们使用更少的训练数据却超越了标准微调的性能。
论文地址:https://arxiv.org/abs/2305.02301
追踪开源 llm
开源 llm 的数量呈爆炸式增长,一方面是非常好的发展趋势(相较于通过付费 api 控制模型),但另一方面追踪这一切可能很麻烦。以下四种资源提供了大多数相关模型的不同摘要,包括它们的关系、底层数据集和各种许可信息。
第一种资源是基于论文《ecosystem graphs: the social footprint of foundation models》的生态系统图网站,提供如下表格和交互式依赖图(这里未展示)。
这个生态系统图是 sebastian 迄今为止见过的最全面的列表,但由于包含了很多不太流行的 llm,因而可能显得有点混乱。检查相应的 github 库发现,它已经更新了至少一个月。此外尚不清楚它会不会添加更新的模型。
论文地址:https://arxiv.org/abs/2303.15772生态系统图网站地址:https://crfm.stanford.edu/ecosystem-graphs/index.html?mode=table第二种资源是最近论文《harnessing the power of llms in practice: a survey on chatgpt and beyond》中绘制精美的进化树,该论文侧重于最流行的 llm 和它们的关系。
虽然读者看到了非常美观和清晰的可视化 llm 进化树,但也有一些小的疑惑。例如不清楚为什么底部没有从原始 transformer 架构开始。此外开源标签并不是非常的准确,例如 llama 被列为开源,但权重在开源许可下不可用(只有推理代码是这样的)。
论文地址:https://arxiv.org/abs/2304.13712
第三种资源是 sebastian 同事 daniela dapena 绘制的表格,出自于博客《the ultimate battle of language models: lit-llama vs gpt3.5 vs bloom vs …》。
虽然下述表格比其他资源要小,但其优点在于包含了模型尺寸和许可信息。如果你计划在任何项目中采用这些模型,则该表格会非常有实用性。
博客地址:https://lightning.ai/pages/community/community-discussions/the-ultimate-battle-of-language-models-lit-llama-vs-gpt3.5-vs-bloom-vs/
第四种资源是 llama-cult-and-more 总览表,它提供了有关微调方法和硬件成本的额外信息。
总览表地址:https://github.com/shm007g/llama-cult-and-more/blob/main/chart.md
利用 llama-adapter v2 微调多模态 llm
sebastian 预测本月会看到更多的多模态 llm 模型,因此不得不谈到不久前发布的论文《llama-adapter v2: parameter-efficient visual instruction model》。先来回顾一下什么是 llama-adapter?它是一种参数高效的 llm 微调技术,修改了前面几个 transformer 块并引入一种门控机制来稳定训练。
论文地址:https://arxiv.org/abs/2304.15010
使用 llama-adapter 方法,研究人员能够在 52k 个指令对上仅用 1 小时(8 块 a100 gpu)来微调一个 7b 参数的 llama 模型。虽然仅对新添加的 1.2m 参数(adapter 层)进行了微调,但 7b llama 模型仍处于冻结(frozen)状态。
llama-adapter v2 的重点在多模态,即构建一个可以接收图像输入的视觉指令模型。最初的 v1 虽然可以接收文本 token 和图像 token,但在图像方面没有得到充分探索。
llama-adapter 从 v1 到 v2,研究人员通过以下三个主要技巧来改进 adapter 方法。
早期视觉知识融合:不再在每个 adapted 层融合视觉和 adapted 提示,而是在第一个 transformer 块中将视觉 token 与单词 token 连接起来;使用更多参数:解冻(unfreeze)所有归一化层,并将偏置单元和缩放因子添加到 transformer 块中每个线性层;具有不相交参数的联合训练:对于图文字幕数据,仅训练视觉投影层;针对指令遵循的数据仅训练 adaption 层(以及上述新添加的参数)。llama v2(14m)比 llama v1 (1.2 m) 的参数多了很多,但它仍是轻量级,仅占 65b llama 总参数的 0.02%。特别令人印象深刻的是,通过仅对 65b llama 模型的 14m 参数进行微调,得到的 llama-adapter v2 在性能上媲美 chatgpt(当使用 gpt-4 模型进行评估)。llama-adapter v2 还优于使用全微调方法的 13b vicuna 模型。
遗憾的是,llama-adapter v2 论文省略了 v1 论文中包含的计算性能基准,但我们可以假设 v2 仍然比全微调方法快得多。
其他开源 llm
大模型的发展速度奇快,我们无法一一列举,本月推出的一些著名的开源 llm 和聊天机器人包括 open-assistant、baize、stablevicuna、colossalchat、mosaic 的 mpt 等。此外,下面是两个特别有趣的多模态 llm。
openflamingo
openflamingo 是 google deepmind 去年发布的 flamingo 模型的开源复制版。openflamingo 旨在为 llm 提供多模式图像推理功能,让人们能够交错输入文本和图像。
minigpt-4
minigpt-4 是另一种具有视觉语言功能的开源模型。它基于 blip-27 的冻结视觉编码器和冻结的 vicuna llm。
nemo guardrails
随着这些大语言模型的出现,许多公司都在思考如何以及是否应该部署它们,安全方面的担忧尤为突出。目前还没有好的解决方案,但至少有一个更有前途的方法:英伟达开源了一个工具包来解决 llm 的幻觉问题。
简而言之,它的工作原理是此方法使用数据库链接到硬编码的 prompt,这些 prompt 必须手动管理。然后,如果用户输入 prompt,该内容将首先与该数据库中最相似的条目相匹配。然后数据库返回一个硬编码的 prompt,然后传递给 llm。因此,如果有人仔细测试硬编码 prompt,就可以确保交互不会偏离允许的主题等。
这是一种有趣但不是开创性的方法,因为它没有为 llm 提供更好的或新的能力,它只是限制了用户可以与 llm 交互的程度。尽管如此,在研究人员找到减轻 llm 中的幻觉问题和负面行为的替代方法之前,这可能是一种可行的方法。
guardrails 方法还可以与其他对齐技术相结合,例如作者在上一期 ahead of ai 中介绍的流行的人类反馈强化学习训练范例。
一致性模型
谈论 llm 以外的有趣模型是一个不错的尝试,openai 终于开源了他们一致性模型的代码:https://github.com/openai/consistency_models。
一致性模型被认为是扩散模型的可行、有效的替代方案。你可以在一致性模型的论文中获得更多信息。
以上就是大模型迎来「开源季」,盘点过去一个月那些开源的llm和数据集的详细内容。