《AI学习笔记》大模型-微调/训练区别以及流程

news2024/9/19 10:46:15

阿丹:

        之前一直对于大模型的微调和训练这两个名词不是很清晰,所有找了一个时间来弄明白到底有什么区别以及到底要怎么去使用去做。并且上手实践一下。

大模型业务全流程:

大模型为啥要微调?有哪些微调方式?

模型参数与数据集规模增长-》
模型微调:

允许少量地重新调整预训练大模型的权重参数,或者大模型的输入和输出

有助于降低训练大模型的复杂性,降低重新进行训练的成本。

微调技术

低参数微调(PEFT)

全参微调,普通微调(Full Parameter Fine-Tuning)

SFT有监督微调

Instruction Tuning,指令微调

RLHF,ReinForcement Learning Human Feedback,人类反馈强化学习。

微调的发展:

LLM and LVM 预训练大模型的训练成本非常高,需要庞大的计算机资源和大量的数据

按照微调的参数规模划分:

Full Parameter Fine-Tuing全参数微调和Parameter Efficient Fine-Tuning PEFT,参数高效微调:

FPFT:用预训练模型作为初始化权重,在特定数据集上继续训练,全部参数都更新的方法

PEFT:用更少的计算资源完成模型参数的更新,包括之更新一部分的参数,或者通过对参数进行某种结构化约束,例如稀疏化或者降低参数模型数量。

常用微调(PEFT):

微调进入:PEFT,通过最小微调网络模型中的参数数量和计算复杂度,来提高预训练模型在新任务上的性能,用来缓解大模型预训练的成本。

好处:

        即使计算资源受限制,也可以利用预训练模型的知识来迅速适应新的任务,实现高效的迁徙,学习Transfer Learning。因此,Peft技术可以在提高模型效果的同时,缩短模型训练时间和计算成本。

按照训练的流程划分

按照大模型训练阶段进行微调,或者根据大模型微调的目标来区分:

提示微调、监督微调、人类反馈强化学习的方式

In-Context Learning 上下文学习(向量数据库)

区别预普通的微调fine-tuning。不对LLMS执行任何微调,直接将模型的输入输出拼接起来作为一个prompt,引导模型根据输入的数据结构,给出任务的预测结果。

ICL(上线文学习)能够给予无监督学习的基础上取得更好的模型效果,并且不需要根据特定的任务重新微调Fine-Tuning更新模型参数,避免不同任务要进行重新真正的微调。

按照训练的方式来划分:

预训练Pre-Training:

LLMs预训练过程是无监督的,但是微调过程往往是有监督的,当进行有监督的微调时,模型权重会根据真实的标签差异进行调整。

Supervised find-tuning.SFT:

        有监督微调使用有标签的数据(Label Data)来调整已经训练的LLMs,用来更加适配指定的场景任务。

指令微调Instruction Tuning

指令微调可以被看做是要监督sft的一种特殊的形式

SFT:使用标记数据对预训练模型进行微调的过程,让模型能够更好的执行特定的任务。

IT:通过<指令,输出>对数据集上进一步训练LLMsm的过程,以增强LLMs能力和可控性。

特殊之处在于其数据集的结构,用人类指令和期望的输出组成进行配对,这种数据接口让微调专注于让模型理解和遵循人类的指令。作为有监督的一种特殊方式,专注于通过理解和遵循人类指令来增强大模型的能力和可控性。

经典LLMs训练流程

基于Transformer大模型,ChatGPT以及LIama2,大体都是三个训练步骤:

预训练-》有监督微调-》对齐

1》预训练,模型会学习来自海量、无标注文本数据集知识

2》使用有监督微调方式来细化模型,在后面的推理中更好的遵循特定指令

3》使用对齐技术让LLMs可以更有用更安全的相应用户提示prompt(提问模版)

流程详情:

1、预训练pre

预训练阶段通常需要数十到百亿Token的文本语料库,但训练目标是简单的【下一个单词预测】任务。

自监督训练(无监督学习):让大模型从大规模数据中学习,不依赖人工标注完成训练,因为训练、学习的标签是文本的后续单词,已经在训练的数据集中了。

2、有监督微调 Supervised finetuning

第二阶段是在【下一个单词预测】任务,中区别在于数据集,需要人工标注的指令数据集,模型输入是一个指令或者特殊的数据结构。输出为期望大模型的回复内容。

程序会将指令文本作为大模型的输入,并逐个Token输出,训练目标和预期输出相同。

虽然1阶段和2阶段都采用【next token prediction】训练方式,但是sft的数据集通常比预训练的数据小很多,指令数据需要提供标注结果(权重等),所以没有办法规范大模型应用。

3、对齐 Alignment

第三阶段还是微调,不过主要目标是将大模型配合人类的偏好、价值观进行对齐,也是RLHF机制发挥作用的时候。

PLHF主要包括步骤

1、预训练有监督微调

收集提示词集合,并要求Label(绰号)人员写出高质量的答案,然后使用该数据集监督的方式来微调预训练模型-》产生一个SFT

有监督微调使用有标签的数据(Label Data)来调整已经训练的LLMs,用来更加适配指定的场景任务

2、创建奖励模型

对于每个提示Prompt,要求微调后的LLMs生成多个回复,再让标注人员根据真实的偏好对所有回复进行排序。接着训练奖励模型RM来学习人类的偏好,用于后续优化。

3、PPO进行微调

使用强化学习算法PPO等,根据奖励模型RM提供的奖励分数,对SFT模型进一步优化用于后续的推理。

微调使用场景:

1、定制模型

微调大模型,根据用户自身的具体需求定制模型,从而提高准确性和性能。

2、提高资源利用率

通过减少从头开始构建新模型的方式进行预训练,从而来节省时间、算力资源和其他带来的成本。

3、性能提升

微调的过程,可以让用户的独特的数据集,来增强训练模型的性能。

4、数据优化

可以充分利用客户的数据,调整

总结:

有一些微调其实也是训练的一种,用来提高回复的效果。

还有其他的提示词和模版也是微调的一部分。

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

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

相关文章

【机器学习】大模型在机器学习中的应用:从深度学习到生成式人工智能的演进

&#x1f512;文章目录&#xff1a; &#x1f4a5;1.引言 ☔2.大模型概述 &#x1f6b2;3.大模型在深度学习中的应用 &#x1f6f4;4.大模型在生成式人工智能中的应用 &#x1f44a;5.大模型的挑战与未来展望 &#x1f4a5;1.引言 随着数据量的爆炸性增长和计算能力的提…

电信光猫的USB存储对外网开放访问

前提条件当然是要有公网IP地址了&#xff0c;没有的话去找电信索要&#xff0c;然后可以使用动态域名正常访问。 我的电信光猫发现共享访问速度还可以&#xff0c;会有31M/s左右的写入速度 但是有一个不方便的是&#xff0c;无法从外网提供访问&#xff0c;SMB协议所用的445端…

国产信创数据库:使用MySQL等开源产品能做信创替换吗?

随着信创关键行业替代加速推进&#xff0c;多数企业习惯原来标配即&#xff1a;centosmysql等开源产品&#xff0c;而大家讨论核心焦点在于“什么是信创数据库”&#xff0c;使用 MySQL 能做信创替换吗&#xff1f;基于开源二开的数据库算信创库吗&#xff1f;等等。想来这个问…

常见算法(3)

1.Arrays 它是一个工具类&#xff0c;主要掌握的其中一个方法是srot&#xff08;数组&#xff0c;排序规则&#xff09;。 o1-o2是升序排列&#xff0c;o2-o1是降序排列。 package test02; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparat…

WordPress 发布了独立的 SQLite 插件

之前 WordPress 在官方的 Performance Lab 插件实现 SQLite 模块&#xff0c;现在重构 SQLite 的实现&#xff0c;并且将其发布成一个独立的插件&#xff1a;SQLite Database Integration。 独立 SQLite 插件 最初的功能模块实现是基于 aaemnnosttv 的 wp-sqlite-db 插件修改实…

linux文件权限常用知识点,基于Linux(openEuler、CentOS8)

目录 知识点常用实例 知识点 真实环境文件显示 解读 常用实例 文件所有者 chown -R nginx:nginx /home/source目录权限(R选填必须大写<遍历子文件夹及文件>) chmod -R 755 /home/sourcechmod -R 777 /home/source

原生js实现拖拽改变元素顺序

代码展示如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

基于HTML5和CSS3搭建一个Web网页(二)

倘若代码中有任何问题或疑问&#xff0c;欢迎留言交流~ 网页描述 创建一个包含导航栏、主内容区域和页脚的响应式网页。 需求: 导航栏: 在页面顶部创建一个导航栏&#xff0c;包含首页、关于我们、服务和联系我们等链接。 设置导航栏样式&#xff0c;包括字体、颜色和背景颜…

2024年上半年软件系统架构师论文【回忆版】

文章目录 考试时间考试地点案例分析1、微服务架构的优点和缺点2、质量属性的6个元素3、分布式锁 Redis的缺点4、MongoDB 存储矢量图的优势 论文回忆版论文一、论单元测试的设计与应用论文二、论大数据模型的设计与应用论文三、论模型驱动的架构设计及应用论文四、论云原生运维的…

第十节 SpringBoot Starter 实战之 redis 滑动窗口

使用 redis 实现滑动窗口&#xff0c;我们会基于这个场景&#xff0c;建立一个 Starter&#xff0c;在这之前&#xff0c;我们需要先。理解这个场景。 关键字&#xff1a;滑动窗口、流式计算、lua脚本、redis、zset、starter 概要&#xff1a;本文封装 redis 的API&#xff0c…

内网渗透(不出网上线CS)

目录 CS的概述 实验&#xff1a;不出网上线CS实验 一&#xff1a;给PC1种马 二&#xff1a;使用Beacon SMB去控制PC2。 三&#xff1a;将CS权限传递给MSF 四&#xff1a;将msf权限传递给CS CS的概述 cs是一款强大的控制windows木马的工具。是目前渗透中常使用的一个工具…

Pandas高效数据清洗与转换技巧指南【数据预处理】

三、数据处理 1.合并数据&#xff08;join、merge、concat函数&#xff0c;append函数&#xff09; Concat()函数使用 1.concat操作可以将两个pandas表在垂直方向上进行粘合或者堆叠。 join属性为outer&#xff0c;或默认时&#xff0c;返回列名并集&#xff0c;如&#xff…

Leetcode - 398周赛

目录 一&#xff0c;3151. 特殊数组 I 二&#xff0c;3152. 特殊数组 II 三&#xff0c;3153. 所有数对中数位不同之和 四&#xff0c;3154. 到达第 K 级台阶的方案数 一&#xff0c;3151. 特殊数组 I 本题就是判断一个数组是否是奇偶相间的&#xff0c;如果是&#xff0c;…

开源的在线JSON数据可视化编辑器jsoncrack本地部署与远程访问

文章目录 1. 在Linux上使用Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 JSON Crack 是一款免费的开源数据可视化应用程序&#xff0c;能够将 JSON、YAML、XML、CSV 等数据格式可视化为交互…

一篇文章讲透排序算法之希尔排序

希尔排序是对插入排序的优化&#xff0c;如果你不了解插入排序的话&#xff0c;可以先阅读这篇文章&#xff1a;插入排序 目录 1.插入排序的问题 2.希尔排序的思路 3.希尔排序的实现 4.希尔排序的优化 5.希尔排序的时间复杂度 1.插入排序的问题 如果用插入排序对一个逆序…

结构体;结构成员访问操作符

结构体&#xff1a; 虽然c语言已经提供了内置类型&#xff0c;比如&#xff1a;char、short、int、long等&#xff0c;但还是不够用&#xff0c;就好比我描述一个人&#xff0c;我需要描述他的身高&#xff0c;体重&#xff0c;年龄&#xff0c;名字等信息&#xff0c…

手把手一起学习Python NumPy

NumPy 是用于处理数组的 python 库&#xff0c;NumPy 中的数组对象称为 ndarray&#xff0c;它提供了许多支持函数&#xff0c;使得利用 ndarray 非常容易。Numpy官方网址 NumPy 安装 使用pip安装NumPy 模块&#xff1a; pip install numpyNumPy 入门 创建numpy数组&#x…

python-绘制五星红旗(非标准)

完整代码如下&#xff1a; #五星红旗&#xff08;非标准版&#xff09; from turtle import* import math from random import* tracer(0) penup() goto(-640,220) pendown() color(gold,gold) begin_fill() for i in range(5): fd(150) right(144) # 大五角星 penup(…

【Redis】 关于 Redis 哈希类型

文章目录 &#x1f343;前言&#x1f38b;命令介绍&#x1f6a9;hset&#x1f6a9;hget&#x1f6a9;hexists&#x1f6a9;hdel&#x1f6a9;hkeys&#x1f6a9;hvals&#x1f6a9;hgetall&#x1f6a9;hmget&#x1f6a9;hlen&#x1f6a9;hsetnx&#x1f6a9;hincrby&#x1…

C++面向对象程序设计-北京大学-郭炜【课程笔记(十一)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;十一&#xff09;】 1、string&#xff08;重要知识点&#xff09;1.2、string的赋值和链接1.3、比较string1.4、子串1.5、交换string1.6、寻找string中的字符1.7、删除string中的字符1.8、替换string中的字符1.9、在str…