更高效的大模型调优方法,华盛顿大学推出“代理调优”

2024-01-25 06:28

本文主要是介绍更高效的大模型调优方法,华盛顿大学推出“代理调优”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

随着ChatGPT等生成式AI产品朝着多模态发展,基础模型的参数越来越高,想进行权重调优需要耗费大量时间和AI算力。

为了提升模型的调优效率,华盛顿大学和艾伦AI实验室的研究人员推出了全新方法——Proxy Tuning(代理调优)。

该调优方法无需接触模型的内部权重,利用一个小型调整模型和一个未调整的对应模型,通过对比它们的预测结果来引导基础模型的预测

再通过解码时的引导,基础模型可以朝着调优方向进行微调,同时保留了更大规模预训练的优势。

为了验证代理调优的性能,研究人员对LlAMA-2的13B、70B原始模型进行了微调。结果显示,这两个模型分别接近对应的Chat模型的91.1%和88.1%的性能

图片

此外,在知识量大的TruthfulQA数据集测试中,代理调优的真实性比直接调优的模型还高,说明在解码时更好地保留了训练知识。

论文地址:https://arxiv.org/abs/2401.08565

代理调优的核心技术思想是,先调优一个小的语言模型,然后用这个小型调优模型指导大型黑箱语言模型,使其具备像调优后的模型一样行为、功能

但不需要访问其内部权重,只需要其在输出词表上的预测分布。有趣的是,该技术与大模型中的“蒸馏”技术恰恰相反。

代理调优的技术方法

首先,我们需要准备一个小型的预训练语言模型M-,该模型与基础模型M共享相同的词汇表。M-可以是一个现成的模型,也可以是通过较小规模的预训练得到的模型。

图片

接下来,我们使用训练数据对M-进行调优,得到一个调优后的模型M+。调优可以使用各种技术,例如,有监督的微调或领域自适应方法,具体取决于任务的需求。

详细解码流程

在解码时,对于给定的输入,我们通过对基础模型M的输出预测分布和调优模型M+的输出预测分布之间的差异进行操作,来引导基础模型的预测。

使用基础模型M对输入进行解码,得到基础模型的预测结果。这可以通过生成模型的输出概率分布来实现,通常使用一种解码算法,例如,贪婪搜索或束搜索来生成最优的输出序列。

图片

然后,使用调优模型M+对相同的输入进行解码,得到调优模型的预测结果。

接下来,计算基础模型的预测结果与调优模型的预测结果之间的差异。可以使用KL散度或交叉熵方法,来度量两个预测分布之间的差异。

最后,将预测差异应用于基础模型的预测结果,以引导基础模型的预测朝向调优模型的预测方向移动。同时可以将预测差异添加到基础模型的预测分布中,以调整每个词的概率值。

本文素材来源Proxy Tuning论文,如有侵权请联系删除

END

这篇关于更高效的大模型调优方法,华盛顿大学推出“代理调优”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642364

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI