一文读懂:监督式微调(SFT)

news2024/9/28 13:14:40

监督式微调 (Supervised fine-tuning),也就是SFT,就是拿一个已经学了不少东西的大型语言模型,然后用一些特定的、已经标记好的数据来教它怎么更好地完成某个特定的任务。就好比你已经学会了做饭,但是要特别学会怎么做川菜,那就得用川菜的菜谱来练手。

图片

现在大多数的大型语言模型,比如今年流行的那些,都是通过这种方式来学会怎么更好地聊天或者执行命令的。

在监督式微调的过程中,这个大型语言模型会用一种叫做监督学习的方法,通过一些已经标记好的数据来学习。它会根据任务的需要,调整自己的参数,就像是在学习怎么更好地预测下一个词或者理解一句话的意思。

这种微调通常在模型已经预训练好之后进行,目的是让模型能够更好地理解用户的指令。虽然这样做比那种没有监督的微调要费事一些,但是效果通常也更好。

至于要微调多少,那就得看任务有多复杂,还有你手上有多少数据了。比如说,你要是用OpenAI的模型,比如GPT-3.5或者GPT-4,来做点简单的风格转换,有个30到50个好例子通常就够了。

如果你想把一个基础的大型语言模型变成一个能听懂指令的模型,比如从Mistral变成Mistral Instruct,那可能就得用上万个例子来训练。

比如说,一个大概有70亿参数的大模型,它的微调训练可能需要在16个Nvidia A100 GPU上跑大概4个小时,这就算是个不错的开始了。

图片

 

监督式微调,就像是给一个已经学了不少的模型来个特训,让它在某个具体任务上表现得更出色。这整个过程分成三步:

  1. 预训练:最开始,这个模型会在一大堆数据上学习,试着预测句子里的下一个词,这样它就能慢慢懂得语言的规律、语法和上下文。这个阶段就是让模型对语言有个大概的了解。

  2. 数据标注:接下来,得准备一些特别的数据,这些数据都是已经标记好的,告诉模型每个数据点的正确答案是什么。这些标记好的数据对监督学习来说特别重要,因为它们会告诉模型在微调时该怎么调整自己。

  3. 微调:最后,就是用这些已经标记好的、跟特定任务有关的数据来继续训练模型。这样模型就会调整自己,让自己在那个特定的任务上表现得更好,比如文本分类、情感分析或者问答系统。

我们说这个过程是“监督”的,是因为整个过程都是用那些已经知道正确答案的标记数据来指导学习的。这样一来,模型就能把之前学的那些广泛的语言知识,专注地用在某个特定的任务上,提高自己的准确度。

图片

 

微调类型训练数据使用场景
监督式微调使用标注数据当你有标注数据并需要将模型适配到特定任务以提高准确性时
自监督微调无需标注数据当标注数据不可用,你希望模型从数据的内在结构中学习时
无监督微调模型从输入数据生成标签当你希望利用大量未标注数据来预训练模型,以用于下游任务时
强化学习微调使用基于奖励的决策进行训练当任务涉及顺序决策制定,并且有反馈可用于指导学习时

监督式微调好处可不少:

  1. 学得更精准 — 通过调整模型的参数来适应特定的任务,模型就能掌握任务特有的那些小细节和模式。

  2. 表现更上一层楼 — 微调能让模型用上它之前从海量数据中学到的知识和技能,这样一来,在特定任务上的表现就能更上一层楼。

  3. 数据用得更精明 — 哪怕手头的标注数据不多,SFT也能让模型在各种真实世界的场景中发挥出不错的效果。

  4. 资源用得更经济 — 比起从头开始训练一个模型,微调一个已经预训练过的模型能省下不少时间和计算资源。

  5. 定制化服务 — SFT能让模型的行为、写作风格或者专业知识更贴合特定的需求,无论是语气还是术语,都能和特定的风格或专业领域紧密结合。

  6. 避免学得太死板 — 在微调的过程中,可以通过早停、dropout或者数据增强等手段来避免模型在小数据集上学得太死板,让它能更好地适应新数据。

总的来说,监督式微调就是让模型在保持广泛知识的同时,还能在特定任务上表现得更加精准和高效。

咱们聊聊那些让大型语言模型(LLMs)变得更聪明的监督式微调技术。这些技术就像是给模型们开小灶,让它们在特定任务上表现得更出色。常见的有这么几种:

  1. LoRA(低秩适应) — 这招挺巧妙,用低秩分解的方式来更新模型的权重,就像是用两个小矩阵来代替一个大矩阵,这样一来,需要调整的参数就少了,微调起来也更高效。

  2. QLoRA(量化LoRA) — 这是LoRA的一个升级版,它在内存使用上更节省,特别适合那些大块头的语言模型。

这些技术都属于参数高效微调(PEFT)的范畴,目的就是让微调过程既省资源又高效。

除了LoRA和QLoRA,还有其他一些技巧:

  • 基本超参数调整 — 这就像是给模型调校引擎,通过手动调整学习率、批量大小和训练周期数等超参数,直到模型的表现达到最佳。

  • 迁移学习 — 这种方法是让模型在已经学会的基础上,再用标注数据来学习新的特定任务。

  • 多任务学习 — 这就像是让模型同时学几门课,这样它就能学会在不同任务之间找到共通点。

  • 少样本学习 — 当可用的标注数据不多时,这种方法能让模型利用有限的信息来做出预测。

  • 任务特定微调 — 这种方法就是让模型全身心投入到一个特定任务中,通过调整所有层的参数来提高性能。

  • 奖励建模 — 这招是通过给模型设定奖励,让它在标注数据集上学习,从而更准确地预测结果。

  • 近端策略优化 — 这种方法用人类反馈来指导模型,就像是有个教练在旁边指导,帮助模型在特定任务上做得更好。

  • 比较排名 — 这招是训练模型去判断不同输出的相关性或质量,就像是让模型学会自己给自己打分,从而提高输出的质量。

这些技术就像是模型的私人教练,帮助它们在特定领域里变得更加专业。

微调方法描述使用场景
LoRA(低秩适应)减少可训练参数当你需要在有限的计算资源下进行高效的微调时使用
QLoRA(量化LoRA)LoRA的内存效率变体当内存限制是一个问题,并且你需要微调大型模型时使用
超参数调整手动调整学习率和批量大小当你需要通过参数调整来优化模型性能时使用
迁移学习在特定任务上进行微调当你有新任务的标注数据,并希望利用预训练的知识时使用
多任务学习同时在多个任务上进行训练当你希望模型学习跨任务的共享表示时使用
少样本学习在少量标注示例上进行训练当标注数据稀缺,你希望利用模型的现有知识时使用
任务特定微调在任务特定数据上训练整个模型当你需要为特定任务调整所有模型层时使用
奖励建模在有正确答案的标注数据集上进行训练当你需要模型基于奖励准确预测标签时使用
近端策略优化使用人类反馈的强化学习进行微调当任务涉及从人类偏好中学习以提高性能时使用
比较排名训练模型根据相关性对输出进行排名当你需要模型生成高质量、相关性强的输出时使用

这些微调技术就像是给大型语言模型(LLMs)穿上了定制的外衣,让它们能够更好地适应各种特定的任务和领域。这样一来,模型不仅性能更上一层楼,而且能更精准地理解和生成语言,无论是处理自然语言、做翻译、写摘要还是分析情感,都能大显身手。

不过,监督式微调LLMs的时候也会遇到一些常见的挑战:

  1. 过拟合 — 就是模型在训练数据上表现太好,以至于在新的、没见过的数据上就懵了。这在机器学习里挺常见的,微调的时候也得留心。

  2. 超参数调整 — 这就像是调琴弦,如果调得不好,模型学起来可能就慢了,或者学完也用不好。找到合适的超参数是个技术活,也挺费时间。

  3. 数据质量问题 — 微调的效果好不好,很大程度上取决于你给模型喂的数据质量如何。如果数据不靠谱,模型学出来的效果可能也就不理想。

  4. 灾难性遗忘 — 有时候模型在学新东西的时候,会不小心把以前学过的重要知识给忘了,这在微调的时候就可能会发生。

  5. 性能不一致 — 有时候模型在处理一些特殊情况或者少见的样本时,表现可能会不稳定,或者在理解上下文的时候,如果信息太少,也会影响表现。

要解决这些问题,咱们得用上一些策略。比如,可以用网格搜索或者贝叶斯优化这样的自动化技术来调整超参数,这样能更高效地找到最佳设置。对付过拟合和灾难性遗忘,可以试试看知识蒸馏这样的技术。当然,保证数据的质量和相关性也特别重要。最后,微调的过程得持续监控,不断分析错误,然后一点点改进。这样,模型就能越学越好,越来越聪明。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以流量裂变为目标,驱动动销新潮流

在当今数字化商业世界,流量成为关键。而以流量裂变为目标的动销策略,正成为企业致胜法宝。 流量裂变,即让流量呈指数级增长。它依靠用户传播分享,能快速扩大品牌曝光度与影响力,提高获客效率。动销则是推动产品销售&am…

【幂简集成】手机归属地查询API,精准获取号码所在地,提升数据准确率

在互联网与移动通信技术迅猛进步的背景下,手机号码已成为企业经营及个人生活中的重要工具。对众多企业而言,通过手机号归属地查询,既可优化营销策略,又能提高客户服务精确性。手机号归属地查询 API 的问世,旨在满足这一…

AI产品经理学习路径:从零基础到精通,从此篇开始!

一、AI产品经理和和通用型产品经理的异同: 市面上不同的公司对产品经理的定位有很大的差别,一名合格的产品经理是能对软件产品整个生命周期负责的人。 思考框架相同: AI产品经理和通用型软件产品经理的底层思考框架是一样的,都是…

旺店通ERP集成金蝶K3(旺店通主供应链)

源系统成集云目标系统 金蝶K3介绍 金蝶K3是一款ERP软件,它集成了供应链管理、财务管理、人力资源管理、客户关系管理、办公自动化、商业分析、移动商务、集成接口及行业插件等业务管理组件。以成本管理为目标,计划与流程控制为主线,通过对成…

protobuff中的required有什么用?

大家在proto2 应该经常看到如下msg表达: message MsgType3 { required int32 value1 1; required int32 value2 2; } 在protobuff中的required 有什么作用?在 Protocol Buffers(protobuf)中,required 关键字用于指定某个字段是…

Pygame中Sprite实现逃亡游戏5

在《Pygame中Sprite实现逃亡游戏4》中通过碰撞检测实现了玩家、飞龙与飞火之间的碰撞处理,基本上实现了逃亡功能。最后,实现这个逃亡游戏中文字提示的功能。 1 操作提示 当进入游戏后,会在玩家下方的位置给出操作提示,如图1所示…

Battery management system (BMS)

电池管理系统(BMS)是一种专门用于监督电池组的技术,电池组由电池单元组成,在电气上按照行x列矩阵配置进行排列,以便在预期的负载场景下,在一段时间内提供目标范围的电压和电流。 文章目录 电池管理系统是如…

Linux之实战命令16:ncal应用实例(五十)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

消息中间件 Kafka 快速入门与实战

1、概述 最近感觉上班实在是太无聊,打算给大家分享一下Kafka的使用,本篇文章首先给大家分享三种方式搭建Kafka环境,接着给大家介绍kafka核心的基础概念以及Java API的使用,最后分享一个SpringBoot的集成案例,希望对大…

Arthas sc(查看JVM已加载的类信息 )

文章目录 二、命令列表2.2 class/classloader相关命令2.2.5 sc(查看JVM已加载的类信息 )举例1:模糊搜索,xx包下所有的类举例2:打印类的详细信息举例3:打印出类的Field信息 二、命令列表 2.2 class/classlo…

计算机网络的整体认识---网络协议,网络传输过程

计算机网络背景 网络发展 独立模式: 计算机之间相互独立; 网络互联: 多台计算机连接在一起, 完成数据共享; 局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起; 广域网WAN: 将远隔千里的计算机都连在一起;所谓 "局域网" 和 "广域网" 只是一个相…

(最新已验证)stm32 + 新版 onenet +dht11+esp8266/01s + mqtt物联网上报温湿度和控制单片机(保姆级教程)

物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意:ESP-01sWIFI模块,去搜了一下这个小东西很有玩点,远程控制LED啥的,然后我就想…

Arthas classloader (查看 classloader 的继承树,urls,类加载信息)

文章目录 二、命令列表2.2 class/classloader相关命令2.2.4 classloader (查看 classloader 的继承树,urls,类加载信息)举例1:按类加载类型查看统计信息举例2:按类加载实例查看统计信息举例3:查…

k8s搭建一主三从的mysql8集群---无坑

一,环境准备 1.1 k8s集群服务器 ip角色系统主机名cpumem192.168.40.129mastercentos7.9k8smaster48192.168.40.130node1centos7.9k8snode148192.168.40.131node2centos7.9k8snode248192.168.40.132node3centos7.9k8snode348 k8s集群操作请参考《K8s安装部署&…

如何调整云桌面安装的虚拟机分辨率?

如何调整云桌面安装的虚拟机分辨率? 1. 编辑GRUB配置文件2. 修改分辨率3. 更新GRUB4. 重启虚拟机 💖The Begin💖点点关注,收藏不迷路💖 在云桌面环境中,虚拟机分辨率过低且无法调整时,可以通过以…

UCS512DHN DMX512差分并联协议LED驱动IC 舞动灯光的魔法芯片

UCS512DHN产品概述: UCS512DHN是DMX512差分并联协议LED驱动芯片,可选择1/2/3/4通道高精度恒流输出,灰度达65536 级。UCS512DHN为带散热片封装的大电流输出版本。UCS512DHN有PWM反极性输出功能,此功能适合外挂三极 管,…

认识Hash表+Hash函数的设计+Hash冲突的处理+Hash表的实现+Java中的equals与hashCode

一、Hash表 1、定义:Hash表是一种特殊的数组 2、Hash函数 (1)设计原则 (2)作用 (3)应用 (4)Hash冲突: 二、Hash函数的设计 1、解决Hash索引分布不均匀…

tomcat安装与部署

一、基础准备 1. 节点规划 IP 主机名 节点 192.168.200.70 tomcat Tomcat 2. 环境准备 准备一台虚拟机,镜像为CentOS-7-x86_64,下载两个软件包,apache-tomcat-9.0.95.tar.gz;zrlog WAR包。 二、安装Tomcat 1.基础环境配…

跳表的理解以及使用

文章目录 背景数组-链表优化链表随机访问的方法 介绍跳表的理解层数随机为什么随机可以保证效率实现细节 跳表与二分查找跳表与红黑数跳表与HASH 使用实现随机层数的实现跳表实现以及测试 背景 数组-链表 数组优点 随机访问速度较快(基于下标访问)。 实…

OpenCV视频I/O(5)视频采集类VideoCapture之从视频流中获取下一帧的函数grab()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从视频文件或捕获设备中抓取下一帧。 grab() 函数是 OpenCV 中 VideoCapture 类的一个成员函数,用于从视频流中获取下一帧而不立即检…