预训练大语言模型的三种微调技术总结:fine-tuning、parameter-efficient fine-tuning和prompt-tuning

news/2024/5/5 0:59:12/文章来源:https://blog.csdn.net/linjie_830914/article/details/131020240

预训练大模型,尤其是大语言模型已经是当前最火热的AI技术。2018年Google发布BERT模型(BERT在DataLearner官方模型卡信息:https://www.datalearner.com/ai-models/pretrained-models/BERT )的时候,大家还没有意识到本轮AI浪潮会发展到如此火热的地步。但是,BERT出现之后,fine-tuning技术也随之流行,即将预训练模型的权重冻结,然后根据具体任务进行微调变得十分有效且被应用在很多场景。而随着ChatGPT的火热,parameter-efficient fine-tuning和prompt-tuning技术似乎也有替代传统fine-tuning的趋势,本篇论文将简单描述预训练模型领域这三种微调技术及其差别。

当然,这三种技术并不是有完全隔离的界线,目前很多研究也并没有明显区分,本文的内容结合部分研究提供一种视角。欢迎理性讨论~

img

一、fine-tuning技术

Fine-tuning是一种在自然语言处理(NLP)中使用的技术,用于将预训练的语言模型适应于特定任务或领域。Fine-tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它。

Fine-tuning的概念已经存在很多年,并在各种背景下被使用。Fine-tuning在NLP中最早的已知应用是在神经机器翻译(NMT)的背景下,其中研究人员使用预训练的神经网络来初始化一个更小的网络的权重,然后对其进行了特定的翻译任务的微调。

经典的fine-tuning方法包括将预训练模型与少量特定任务数据一起继续训练。在这个过程中,预训练模型的权重被更新,以更好地适应任务。所需的fine-tuning量取决于预训练语料库和任务特定语料库之间的相似性。如果两者相似,可能只需要少量的fine-tuning。如果两者不相似,则可能需要更多的fine-tuning。

在NLP中,fine-tuning最著名的例子之一是由OpenAI开发的OpenAI GPT(生成式预训练变压器)模型。GPT模型在大量文本上进行了预训练,然后在各种任务上进行了微调,例如语言建模,问答和摘要。经过微调的模型在这些任务上取得了最先进的性能。

下图来自威斯康星大学麦迪逊分校的统计学教授Sebastian Raschka的总结。

img

这是近几年很流行的大模型使用方法。即将除了输出层以外的所有权重“冻结”(freeze)。然后随机初始化输出层参数,再以迁移学习的方式训练。仅仅更新全连接输出层,其它层的权重不变。

二、parameter-efficient fine-tuning技术

参数高效的fine-tuning,简称PEFT,旨在在尽可能减少所需的参数和计算资源的情况下,实现对预训练语言模型的有效微调。它是自然语言处理(NLP)中一组用于将预训练语言模型适应特定任务的方法,其所需参数和计算资源比传统的fine-tuning方法更少。

换个角度说,parameter-efficient fine-tuning技术在通过仅训练一小组参数来解决传统微调技术需要大量资源的问题,这些参数可能是现有模型参数的子集或新添加的一组参数。这些方法在参数效率、内存效率、训练速度、模型的最终质量和附加推理成本(如果有的话)方面存在差异。

这些技术对于研究人员和开发人员非常重要,因为他们可能无法使用强大的硬件或需要在低资源设备上进行模型微调。

其中一种参数高效的fine-tuning技术称为蒸馏(distillation),它由Hinton等人于2015年引入。该方法涉及训练一个较小的模型来模仿一个较大的预训练模型的行为。预训练模型生成“教师”预测结果,然后用于训练较小的“学生”模型。通过这样做,学生模型可以从较大模型的知识中学习,而无需存储所有参数。

另一种技术称为适配器训练(adapter training),它由Houlsby等人于2019年引入。适配器是添加到预训练模型中的小型神经网络,用于特定任务的微调。这些适配器只占原始模型大小的一小部分,这使得训练更快,内存需求更低。适配器可以针对多种任务进行训练,然后插入到预训练模型中以执行新任务。

第三种技术称为渐进收缩(progressive shrinking),它由Kaplan等人于2020年引入。这种技术涉及在fine-tuning期间逐渐减小预训练模型的大小。从一个大模型开始,逐渐减少参数的数量,直到达到所需的性能。这种方法可以产生比从头开始训练的模型性能更好的小型模型。

UMass Lowell大学的教授在3月份发布了一篇parameter-efficient fine-tuning的综述,大家可以去学习一下:Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning

三、prompt-tuning技术

prompt-tuning是一种更近期的精调预训练语言模型的方法重点是调整输入提示(input prompt)而非修改模型参数。这意味着预训练模型保持不变,只有输入提示被修改以适应下游的任务。通过设计和优化一组提示,可以使预训练模型执行特定任务。

prompt-tuning和传统的fine-tuning的主要区别在于预训练模型被修改的程度。fine-tuning修改模型的权重,而提示调整只修改模型的输入。因此,prompt-tuning调整比精调的计算成本低,需要的资源和训练时间也更少。此外,prompt-tuning比精调更灵活,因为它允许创建特定任务的提示,可以适应各种任务。

对于像GPT-3这样的大规模模型,整体精调可能需要大量计算资源。

一些值得注意的prompt-tuning技术包括:

Prefix tuning(前缀调整):由Li和Liang在论文“Prefix-Tuning: Optimizing Continuous Prompts for Generation”(2021)中提出。前缀调整涉及学习特定任务的连续提示,在推理过程中将其添加到输入之前。通过优化这个连续提示,模型可以适应特定任务而不修改底层模型参数,这节省了计算资源并实现了高效的精调。

下图是论文中给出的fine-tuning与Prefix tuning的差异示意图:

img

==P-Tuning:==由Liu等人在论文“P-Tuning: GPT Understands, Learns, and Generates Any Language”(2021)中提出。P-Tuning涉及训练可学习的称为“提示记号”的参数,这些参数与输入序列连接。这些提示记号是特定于任务的,在精调过程中进行优化,使得模型可以在保持原始模型参数不变的情况下在新任务上表现良好。

经典的prompt-tuning方式不涉及对底层模型的任何参数更新。相反,它侧重于精心制作可以指导预训练模型生成所需输出的输入提示或模板。这通常是一个手动的试错过程,从中选择最适合特定任务的提示。然而,随着前缀调整和P-Tuning等提示调整技术的出现,它们提供了更系统化和高效的方式来适应输入提示,从而提高大型预训练模型在特定任务上的性能。

四、总结

其实,从上述的总结中大家可以看到,微调技术的发展似乎与模型的发展规模息息相关。最早出现fine-tuning也是模型变大之后,使用原有模型的架构在新数据上训练成本过高且丢失了原有模型的能力,后来也是因为模型发展的规模增长远远超过硬件性能的发展,导致更加高效的微调技术出现。而当前最火热的prompt-tuning其实也就是几乎根本无法微调大模型而产生的一种替代方式。当然,模型本身能力的强大也使得该方法变得有效。其实,从这个思路下去,大家也可以看到,当大模型开始涉及更加复杂和现实的问题时候,如果可以出现自动prompt-tuning技术而非手工调整可能是未来很重要的方向。毕竟在文本摘要、代码debug等需要大量的输入来让模型认识问题的场景,如何有效的将过长的输入prompt给模型是一个很重要的问题,现在的大模型在长输入方面成本推理成本很高也有很大限制,因此这种技术也是未来很重要的一个方向!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_310802.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最热门高效的Node.JS开源第三方开发库和特点(持续更新......)

目录 1. Express 2. Socket.io 3. Mongoose 4. Passport 5. Async 6. PM2 7. Nodemailer 8. Request 9. Cheerio 10. Lodash 11. Bluebird 12. Winston 13. Socket.io-client 14. Node-sass 15. Moment 16. Gulp 17. Grunt 18. Chai 19. Sinon 20. Nodemon…

操作系统复习5.1.0-I/O管理

分类 按使用特性分 人机交互类:键盘、鼠标、打印机 存储设备:移动硬盘、光盘 网络通信设备:调制解调器 按速率分 低速设备:键鼠 中速设备:打印机 高速设备:磁盘 按信息交换单位分 块设备:…

排序算法——直接插入排序

直接插入排序 基本思想 直接插入排序是一种简单明了的插入排序法,其基本思想是:把待排序的数据按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有数据插入完为止。 在现实生活中,我们玩扑克对牌进行排序就运用了…

银行从业——法律法规——金融基础知识

第二章 金融基础知识 第二节 货币政策 【 知识点1】 货币政策目标 制定和实施货币政策, 首先必须明确货币政策最终要达到的目的, 即货币政策的最终目标。中央银行通过货币政策工具操作直接引起操作目标的变动,操作目标的变动又通过一定的途…

设计一个像ESPN一样的实时视频流系统

功能需求 •直播事件与流之间的最大延迟不超过1分钟•系统应能够适应大量用户(异构交付)•系统应能将视频转换为不同的分辨率和编解码器•系统应具备容错性 视频转换和接收 由于我们正在实时直播整个事件,因此我们不能等待整个视频结束后再开…

华为OD机试真题 Java 实现【火车进站】【牛客练习题】

一、题目描述 给定一个正整数N代表火车数量&#xff0c;0<N<10&#xff0c;接下来输入火车入站的序列&#xff0c;一共N辆火车&#xff0c;每辆火车以数字1-9编号&#xff0c;火车站只有一个方向进出&#xff0c;同时停靠在火车站的列车中&#xff0c;只有后进站的出站了…

Nginx网络服务——主配置文件-nginx.conf

Nginx网络服务——主配置文件-nginx.conf 一、全局配置的六个模块简介二、nginx配置文件的详解1.全局配置模块2.I/O 事件配置3.HTTP 配置4.Web 服务的监听配置5.其他设置 三、访问状态统计与控制1.访问状态统计2.基于授权的访问控制3.基于客户端的访问控制 一、全局配置的六个模…

python实现Canny算子边缘检测算法

边缘检测是一种将图片中关键信息表现出来的一种图片技术&#xff0c;它的结果并不是字面意思上的获取图片边缘&#xff0c;而是将图片有用的信息勾勒出来&#xff0c;类似素描的结果&#xff0c;但是已经去掉了很多信息。如下所示&#xff0c;一张原始的图片是这样的&#xff1…

李沐动手学习深度学习 2023年Win10 下安装 CUDA 和 Pytorch 跑深度学习(最新)

目录 一、安装Anaconda 1.下载Anaconda 测试是否安装成功 二、安装pytorch 验证pytorch是否安装成功 4.测试 3.配置pycharm 一、安装Anaconda 1.下载Anaconda 可以在官网下载&#xff0c;但是速度较慢&#xff0c;这里我选择了清华镜像源的下载 https://mirrors.tuna.t…

chatgpt赋能python:Python列表倒序排序

Python列表倒序排序 Python是一种高级编程语言&#xff0c;被广泛用于各种领域的应用程序开发中&#xff0c;包括数据科学和机器学习。Python语言自带许多强大的编程工具&#xff0c;其中列表是其中最基础的数据结构之一。它可以让程序员整理和管理大量的数据&#xff0c;在实…

RISC-V IDE MRS使用笔记(八):实现局域网下的远程调试功能

RISC-V IDE MRS使用笔记(八)&#xff1a;实现局域网下的远程调试功能 1.原理介绍 MRS调试时上位机与硬件的通信基于gdb客户端与服务端的连接。调试时&#xff0c;首先启动openocd以挂载gdbserver的服务到指定端口上。通信建立后&#xff0c;监听到界面操作后以gdb指令的形式发…

用于ECharts的全国省市区县乡镇街道级的行政区划边界数据(GeoJSON格式)

https://map.vanbyte.com 提供了免费的省市县3级行政边界数据(GeoJSON格式)、省市县乡4级联动数据。 至于行政区划边界数据的来源&#xff0c;网络上有各种教程。授人以鱼不如授人以渔&#xff0c;下面记录一下各类方法的具体步骤。 来源1&#xff1a;阿里云的数据可视化平台…

Makerbase SimpleFOC ESP32 例程3 I²C双编码器测试(AS5600)

Makerbase SimpleFOC ESP32 例程3 IC双编码器测试(AS5600) 第一部分 硬件介绍 1.1 硬件清单 序号品名数量1ESP32 FOC V1.0 主板12YT2804电机2312V电源适配器14USB 线156pin杜邦线2 注意&#xff1a;YT2804是改装的云台无刷电机,带有AS5600编码器&#xff0c;可实现360连续运…

Ai作画区域控制的几种方法

背景 距上次发文章&#xff0c;又过去好久。这期分享给大家带来的是Ai作画的图结构控制几种方法。现在大家用AI作画大部分情况是直接使用AI单图生成能力&#xff0c;其实并不太会取考虑构图&#xff0c;也不太会考虑到大图的图结构这件事。其实构图这件事是一件很综合复杂的事…

冒泡排序Java实现

冒泡排序的时间复杂度为O(n^2) package com.qianfeng.homework;import java.util.Arrays;public class BubbleSort {public static void bubbleSort(int[] nums){for (int i 0; i < nums.length-1; i) {for (int j 0; j < nums.length-i-1; j) {if(nums[j] > nums[…

Node.js+vue多用户个人博客网站i03nz

基于nodejs语言设计并实现了个人博客。该系统基于B/S即所谓浏览器/服务器模式&#xff0c;应用Vue框架&#xff0c;选择MySQL作为后台数据库。系统主要包括首页、个人中心、用户管理、文章分类管理、博客文章管理、留言板管理、系统管理等功能模块。要循序渐进&#xff0c;心急…

一文读懂MVCC:数据库中的并发读写利器!

大家好&#xff0c;我是你们的小米&#xff0c;一个积极活泼、喜好分享技术的小伙伴。今天&#xff0c;我想和大家聊一聊数据库领域的一个重要话题——MVCC多版本并发控制。MVCC是MySQL和其他一些数据库系统中常用的并发控制技术&#xff0c;通过它&#xff0c;我们可以在高并发…

Elasticsearch文件存储

分析Elasticsearch Index文件是如何存储的&#xff1f; 主要是想看一下FST文件是以什么粒度创建的&#xff1f; 首先通过kibana找一个索引的shard&#xff0c;此处咱们就以logstash-2023.05.30索引为例 查看下shard分布情况 GET /_cat/shards/logstash-2023.05.30?vindex …

tcp shrinking window 之进退

一个有趣的问题&#xff1a;Unbounded memory usage by TCP for receive buffers, and how we fixed it 引出一个 kernel patch&#xff1a;[PATCH] Add a sysctl to allow TCP window shrinking in order to honor memory limits 但这 patch 把一个问题变成了两个问题&#…

0基础学习VR全景平台篇第32章:场景功能-嵌入文字

大家好&#xff0c;欢迎观看蛙色VR官方系列——后台使用课程&#xff01; 本期为大家带来蛙色VR平台&#xff0c;场景管理模块-嵌入功能文字模块&#xff01; 功能位置示意 一、本功能将用在哪里&#xff1f; 嵌入功能可对VR全景作品嵌入【图片】【视频】【文字】【标尺】四…