赞
踩
LLM(大型语言模型)和生成式AI现在风头正劲。来自 IBM 的一项惊人统计显示,每 3 位高管中就有近 2 位感受到了来自投资者的压力,要求他们加快采用生成式AI技术。自然而然,这种压力也传导到了实际执行落地的数据科学和机器学习团队。
随着技术格局不断进化,LLM生态已经在开源通用和行业模型之间分化状态已经被快速填平。google内部邮件曝光也指出,openAI和google在大模型技术上没有护城河。这一蓬勃发展的趋势促使许多团队开始考虑:如何让 LLM 可以变得更符合自己的场景需要?
https://www.semianalysis.com/p/google-we-have-no-moat-and-neither
本文将探讨在关注投入时间和工程周期的情况下,构建一个专有LLM 时应首先应该考虑的一些关键因素。在此过程中,理解当前关于构建微调模型的潜在限制和最佳实践研究动态是至关重要的。通过阅读本文将掌握更多的思路引导企业做出正确的决策:训练还是不训练,以及如何训练。
让模型来模仿GPT简化训练?
OpenAI凭借其最新的GPT模型引领LLM生态,这对任何人来说都不是秘密。出于这个原因,许多需求方可能会要求开发团队出于各种原因(速率限制、数据隐私、成本等)部署一个和GPT模型结果相仿的模型。这自然会让开发人员产生疑问:是否可以利用GPT来生成输出并利用它们来微调模型吗?
这一问题的答案目前并不确定,它取决于几个因素。这项被称为模仿学习(imitation learning)的特殊任务涉及通过使用来自更强的模型(如GPT)的目标观测值进行微调来训练新的语言模型。虽然这似乎是从下游模型中获得良好性能的好方法,但它确实存在一些潜在问题。
最近一篇题为 “The False Promise of Imitating Proprietary LLMs”[1] 的论文揭示了使用这种方法可能会遇到的一些潜在隐患。作者通过一些实验证明,添加更多模仿数据可能会导致模型性能下降。观察上图,我们可以发现在中间的图表中,基准任务的准确率确实会随着token数量的增加而降低。但为什么会出现这种情况呢?
作者认为,发生这种情况的原因是模仿模型学习的是被模仿的模型的风格,而不是在学习和理解模型的内容。在上图的左窗格中,人类评审员更喜欢模仿模型的结果,而不是ChatGPT的结果。经过探索,很明显,评审人员喜欢模仿模型的风格,但没有仔细检查内容。有人指出,模仿模型产生的内容往往缺乏真实性,这导致作者总结道:“模仿模型实际上体现了人工智能助手最糟糕的一面:它们的答案听起来一本正经,很自信,但不如实际并不如ChatGPT真实。”
需要注意的是,在某些情况下,模仿模型可以获得出色的性能。作者指出,模仿模型可以在局部任务或复制老师模型的特定行为的任务上取得良好的性能。在为这项研究创建的一项名为NQ Synthetic的任务中,作者要求语言模型生成与给定上下文相关的10个问题和答案。值得注意的是,模仿模型的得分接近GPT。这表明,当试图模仿老师模型的行为时,更具体的模型可以获得有利的结果。
该论文的一个有趣的推论是,使用教师模型微调模型实际上有助于降低模仿模型的毒性分数。对于那些希望快速公开开源LLM而不需要围绕输出构建过滤器这一艰巨任务的公司来说,这可能非常有用。公司可以不用手工从零构建过滤器,而是构造一批从老师模型精心构造的输出数据作为训练数据来训练过滤器,以获得一个好的起点。
值得一提的是微软研究院最近发布的 Orca 模型,它将来自 GPT 的信号作为训练数据的一部分。两者的区别在于模型所使用的训练数据的大小。Orca 是在 500 万个示例的基础上进行微调的,而广泛覆盖的模仿模型则是在大约 15.1 万个观测数据的基础上进行调整的。由于我推测我的大多数听众不会花费 1.6 万美元来训练一个 LLM 作为一个偶然的实验,因此我倾向于发表更接近模仿建模论文而非 Orca 的言论。尽管如此,我们仍需等待更多的研究,以确定模仿学习作为更广泛任务的可行方案所需的最少实例数量。
值得一提的是微软研究院最近发布的 Orca 模型,它将来自 GPT 的信号作为训练数据的一部分。两者的区别在于模型所使用的训练数据的大小。Orca 是在 500 万个示例的基础上进行微调的,而广泛覆盖的模仿模型则是在大约 15.1 万个观测数据的基础上进行调整的。由于我推测我的大多数听众不会花费 1.6 万美元来训练一个 LLM 作为一个偶然的实验,因此我倾向于发表更接近模仿建模论文而非 Orca 的言论。尽管如此,我们仍需等待更多的研究,以确定模仿学习作为更广泛任务的可行方案所需的最少示例数量。
要点:根据任务的复杂程度,试图用较弱的模型来模仿 GPT 或任何复杂模型的输出,可能会导致模型性能不佳。
上下文学习(In-Context Learning)是否够用?
上下文学习,也叫few-show Learning或者prompt learning,是在prompt中包含一些具体任务例子提供给模型。需要说明的是,这种方法对于一些特定的复杂语言模型有用,而对于一些简单的开源model来讲,还没有达到处理上下文学习所需的水平。通常情况下,这种方法可以取得很好的结果,但为什么会这样呢?
Dai 等人的论文【Why Can GPT Learn In-Context? Language Models Implicitly Perform Gradient Descent as Meta-Optimizers】探讨了这一问题的答案,他们在论文中探讨了在prompt中提供示例与使用相同示例进行微调之间的数学联系。作者证明,提示示例会产生元梯度(meta-gradients),这些元梯度会在推理时的前向传播过程中反映出来。而在微调时,示例实际上会产生真正的梯度,用于更新权重。因此,上下文学习似乎能取得与微调类似的效果。如果想更深入地了解这些发现,我建议您阅读这篇论文,其中不乏它们在数学上的联系的细节。
尽管 "上下文学习 "的方法很好,但它确实存在微调中不明显的局限性。在我们拥有大量训练数据的情况下,微调模型会在训练过程中利用真实梯度更新模型,从而利用所有数据。在上下文学习过程中,我们只能提供有限数量的观测数据。因此,这里就出现了一个问题:在有大量训练语料的情况下,我们如何利用与输入数据最相关的示例来获得最佳结果?
解决这一问题的方法之一是使用启发式选择示例,幸运的是,LangChain 提供了这方面的支持。LangChain 是一个 Python模块,包含了预置提示,可以简化大语言模型的开发工作。现在要关注的 LangChain中的 ExampleSelector。
def get_similarity(seq_a: str, seq_b: str) -> Union[float, int]:` `"""`` Make a similarity heuristic,` `here we use Jaccard similarity or IOU` ` seq_a: First sequence to compare` `seq_b: Second sequence to compare` ` Returns:` `Similarity score (float or int)` `"""` `# Tokenize` `set_a = set(seq_a.split(' '))` `set_b = set(seq_b.split(' '))`` # Calculate IOU/Jaccard similarity` `return len(set_a.intersection(set_b)) / len(set_a.union(set_b))`` ``def example_selector(examples: List[str], input: str, examples2use: int) -> List[str]:` `"""`` Pseudo code for an example selector` ` examples: List of training corpus` `input: Target sequence to translate` `examples2use: Number of examples to use` ` Returns:` `List of selected examples` `"""` `scores = [get_similarity(example, input) for example in examples]` `sorted_idx = [i for i, _ in sorted(enumerate(scores), key=lambda x: x[1], reverse=True)]` `return examples[sorted_idx[:examples2use]]
ExampleSelectors是一种提示选择器,允许动态更改推理过程中使用的示例,包含许多启发式方法可以使用。上面的一些伪代码,说明LangChain中的选择器是如何工作的。我在输入序列和上面的示例序列之间使用了Jaccard相似度。在LangChain中还有更多的选择,可以参考官方文档。
采用这种方法有两个主要好处。第一个好处是,你可以根据给定的输入,有选择性地选择最相关的示例,从而提高 LLM 的数据效率。这有别于为所有观测结果静态加载几个示例的做法。第二个好处是如果通过托管服务进行调整,可以节约成本。截至目前,使用经过微调的Davinci模型的成本为每 1000 tokens 约0.12 美元。相比之下,使用微调Davinci模型的价格为 0.03 美元,价格上涨了 400%!这些价格还不包括培训费用。
值得注意的是,这些价格可能会发生变化,因为OpenAI还没有使用LoRa或Adapters,正如一篇现已删除的博客文章[Habib, R… (2023). OpenAI’s plans according to Sam Altman]所揭示的那样。尽管如此,由于需要为个人用户保留自定义权重,微调后的模型仍然可能更昂贵。这也没有考虑到上下文中示例的成本。团队需要从成本和准确性的角度评估In-context Learning或微调是否对自己的任务更有意义。
要点:具有动态示例选择的上下文学习可以实现与微调相同的结果,而不会产生来自维护托管服务的大量额外成本。
任务推理增加中间步骤是否有用?
假设您正试图通过长文档来回答复杂的问题。这项任务从根本上要求语言模型对语言有很好的掌握和理解。这就引出了一个问题:如果我们帮助语言模型将推理过程分解为子任务,就像人类分析文档并顺序执行任务一样,会怎么样?
这正是微软的研究人员想要实现的,他们对这个问题的答案是PEARL[PEARL: Prompting Large Language Models to Plan and Execute Actions Over Long Documents]。PEARL代表针对长文档推理的计划和执行操作。总体框架分为三个步骤:
1.行动挖掘:首先会提示语言模型阅读文档,并提取可用于回答特定领域问题的可能行动。为了提取这些行动,语言模型会得到一些行动示例。我在下面提供了一个行为示例。
2.计划生成:在生成了一组特定任务的行动之后,现在要求 LLM 根据问题和上下文生成一个后续行动列表,并按顺序执行。LLM 会得到一些其他任务的计划示例,这有助于制定高质量的计划。有关技术细节的更多详情,请参阅本文。
3.计划执行:模型现在有了计划。现在我们向模型提供输入并执行计划。
一些中间步骤可用于确保阶段之间的质量。作者包含一个自我纠正步骤,以确保计划符合要求的格式。此外,还有一个自我完善步骤,用于确定该计划是否可以稍后用作few-shot示例。
从评估看,PEARL 与其他 GPT 模型相比有明显的改进,特别是在包含长文档的情况下。从这一过程中得到的主要启示是,在某些情况下,多个步骤可以极大地帮助模型。
另一种情况是,当需要包含在上下文中的文档数量超过语言模型所支持的数量时,中间步骤就会变得非常有用。目前,OpenAI 所使用的注意力机制规模为 O(n²),而且还没有克服这一问题的解决方案。因此,如何将上下文缩减到尽可能小的格式引起了人们的极大兴趣。
根据任务的不同,有不同的处理方法。例如,如果任务完全围绕实体展开,就有机会提取相关实体及其相关属性。可以将这种方法视为一种有损压缩,可以将更多上下文输入到 LLM 中。这一中间步骤的另一个好处是,可以将非结构化数据转换为结构化格式,这样就可以在不使用 LLM 的情况下做出明智的决策。下图是Hao Fei等人的一个例子。[Hao Fei , Fei Li , Chenliang Li , Shengqiong Wu , Jingye Li and Donghong Ji, (2022). Inheriting the Wisdom of Predecessors: A Multiplex Cascade Framework for Unifed Aspect-based Sentiment Analysis]
要点:将任务分解为较小的子问题可以帮助将较大的问题简化为更易于掌控的局部问题,还可以使用这些较小的任务来解决与模型上下文限制相关的瓶颈问题。
总结
以上是研究人员在 LLM 性能和效率前沿探索的一些总体思路。这并不是一份详尽无遗的注意清单,但会是开启大模型之旅时的一个很好的起点。
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
保证100%免费
】123?spm=1001.2014.3001.5501)这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。