11.FrugalGPT


部分截图来自原课程视频《2023李宏毅最新生成式AI教程》,B站自行搜索。
这节课程内容来自文章: FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance
来自斯坦福的文章。

背景

减少大模型的调用成本,提高性能是很有意义的。一方面可以节约能源,为双碳战略提供支撑,另一方面可以开源节流。
这里算了一下使用GPT的成本:
输入:0.03$/1000 tokens
输出:0.06$/1000 tokens
假设每次使用输入1000 tokens、输出1000 tokens,那么每次使用需要 0.03$+0.06$=0.09$(2.78 新台币)
对于打访问量的需求,则可能会耗费巨资。例如:
在这里插入图片描述
具体做法有三种,文章主要讨论的是第三种方法。

法一:Prompt Adaptation 缩短输入

这个方法想办法在减少输入上下功夫。例如在做In-context learning的时候,为模型提供了两个实例:
在这里插入图片描述
那么可以考虑减少实例的个数,也就是Prompt Selection方法,但是文章中没有给出如何选择实例的方法:
在这里插入图片描述
通常还有一种情况,我们使用相同的Context,要生成不同的答案:
在这里插入图片描述
这个时候可以考虑使用Query Concatenation,把上面相同的部分结合起来:
在这里插入图片描述
这样就减少了Context的使用次数。

方法二:LLM Approximation 自建模型

自建模型的方法前面有提到过。但是自己训练模型还是要耗费一定的算力。这里提出一种更便宜,更没有技术含量的方法:Completion Cache
在这里插入图片描述
原理很简单,就是把问过GPT的问题和答案保存到数据库中,然后再有新的问题过来,先在数据库中进行查找即可。这个方法在某些大量重复提问的场景是比较有用的。

方法三:LLM cascade 大模型级联

下表是当前各种大模型收费表,各种模型大小不一,收费标准当然也不同,输入和输出的收费标准也不一样。
在这里插入图片描述
这里的原则是:
简单的问题交给弱鸡模型(比较便宜)
复杂的问题交给强的模型(比较贵)
期望这样可以使得不同能力的模型可以互补。
原文给出了一个实验结果:
在这里插入图片描述
这个实验有三组,我们只看第一组,这个实验的数据集是HEADLINES,就是让模型读新闻的标题,然后根据标题判断黄金的走势。图中纵轴和横轴都是模型名称,交叉的数字表示纵轴模型判断失误但是横轴模型回答正确的几率,这个数字越小表示模型越强,但是还是有缺陷。因此,原文提出级联的模型:
在这里插入图片描述
这里的三个模型强弱关系为:GPT-J<J1-L<GPT-4,当输入经过GPT-J,得到一个answer,这里额外训练了一个很小的模型(验证模块)来计算answer的得分:
在这里插入图片描述
当结果得分大于某个域值,说明GPT-J回答正确,直接将ans of GPT-J作为结果进行输出,如果结果得分小于某个域值,则将问题带入下一个模型J1-L,以此类推,最后进入GPT-4。最后的结果表明,级联后在HEADLINES运行能有效降低成本且准确度有所提升:
在这里插入图片描述
准确度提升是因为有6%的问题GPT-4会答错,但是GPT-J回答正确,这部分问题会被前置的GPT-J搞定。
那么我们应该选择哪些模型来级联效果才会更好?域值应该如何定才更合理?
接下来用数学表达来说明。

数学定义

假设模型为 L i L_i Li,输入为 q q q,模型输出为 L i ( q ) L_i(q) Li(q)
在这里插入图片描述
若正确答案表示为 a a a,则输入在模型 L i L_i Li的正确率可以表示为:
r ( a , L i ( q ) ) r(a,L_i(q)) r(a,Li(q))
验证模块的评分可表示为:
s ( q , L i ( q ) ) s(q,L_i(q)) s(q,Li(q))
模型的运行代价根据上面的调研表格可知:输入要钱、输出要钱、固定按次要钱。
c L i , 1 ∣ ∣ q ∣ ∣ + c L i , 2 ∣ ∣ L i ( q ) ∣ ∣ + c L i , 3 c_{L_i,1}||q||+c_{L_i,2}||L_i(q)||+c_{L_i,3} cLi,1∣∣q∣∣+cLi,2∣∣Li(q)∣∣+cLi,3
c L i , 1 − 3 c_{L_i,1-3} cLi,13表示不同模型不同输入输出以及固定次数的收费系数。
假设我们有 k k k个语言模型: L = { L 1 , L 2 , ⋯   , L k } \mathcal{L}=\{L_1,L_2,\cdots,L_k\} L={L1,L2,,Lk}
k − 1 k-1 k1个语言模型(最后一个模型不需要阈值)对应的阈值为: T = { λ 1 , λ 2 , ⋯   , λ k − 1 } \mathcal{T}=\{\lambda_1,\lambda_2,\cdots,\lambda_{k-1}\} T={λ1,λ2,,λk1}
则模型优化目标是要使得级联之后的模型最终的准确率越大越好:
max ⁡ L , T ∑ q , a r ( a , L z ( q ) ) \max_{\mathcal{L},\mathcal{T}}\sum_{q,a}r(a,L_z(q)) L,Tmaxq,ar(a,Lz(q))
其中 z z z是穷举所有模型能够达到模型输出 s ( q , L i ( q ) ) s(q,L_i(q)) s(q,Li(q))对应分数大于 λ i \lambda_i λi,在其中选出最小的下标 i i i作为 z z z

另外一个目标是总体cost越小越好:
∑ q ∑ i = 1 z [ c L i , 1 ∣ ∣ q ∣ ∣ + c L i , 2 ∣ ∣ L i ( q ) ∣ ∣ + c L i , 3 ] < B \sum_q\sum_{i=1}^z[c_{L_i,1}||q||+c_{L_i,2}||L_i(q)||+c_{L_i,3}]<B qi=1z[cLi,1∣∣q∣∣+cLi,2∣∣Li(q)∣∣+cLi,3]<B
B B B是我们的预算, z z z是模型的个数

结果

在这里插入图片描述
在这里插入图片描述
overruling是判断当前法律条文是否包含或覆盖其他法律条文。
在这里插入图片描述
COQA是问答任务。
三个数据集中横轴都是花费,纵轴是正确率。
三个任务都是GPT-4花费最高,但是其在第三个任务上居然比GPT-3差

相关推荐

  1. <span style='color:red;'>12</span>.<span style='color:red;'>11</span>

    12.11

    2024-03-16 19:50:03      41 阅读
  2. <span style='color:red;'>12</span>.<span style='color:red;'>11</span>

    12.11

    2024-03-16 19:50:03      36 阅读
  3. Qt12.11

    2024-03-16 19:50:03       43 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-16 19:50:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-16 19:50:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-16 19:50:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-16 19:50:03       18 阅读

热门阅读

  1. 学完Efficient c++ (44-45)

    2024-03-16 19:50:03       15 阅读
  2. 【KTips】把 Flow 变成 Iterator

    2024-03-16 19:50:03       21 阅读
  3. 厦大GPA(xmuoj)

    2024-03-16 19:50:03       18 阅读
  4. 452. 用最少数量的箭引爆气球

    2024-03-16 19:50:03       20 阅读
  5. 常用的正则表达式

    2024-03-16 19:50:03       18 阅读
  6. Redis 线程模型

    2024-03-16 19:50:03       20 阅读
  7. springboot2.7使用redis的redission组件实现分布式锁

    2024-03-16 19:50:03       16 阅读
  8. MySQL作业一

    2024-03-16 19:50:03       19 阅读