【NLP】训练LLM的不同方式
一、说明
在大型语言模型(LLM)领域,有各种各样的 训练机制,具有不同的手段,要求和目标。由于它们服务于不同的目的,因此重要的是不要将它们相互混淆,并了解它们适用的不同场景。
在本文中,我想概述一些最重要的训练机制,它们是预训练、微调、从人类反馈中强化学习 (RLHF) 和适配器。此外,我将讨论提示的作用,它本身不被视为一种学习机制,并阐明提示调优的概念,它在提示和实际训练之间架起了一座桥梁。
二、关于预训练
预训练是最基本的训练方式,等同于你可能知道的其他机器学习领域的训练。在这里,您从一个未经训练的模型(即具有随机初始化权重的模型)开始,并训练以在给定一系列先前令牌的情况下预测下一个令牌。为此,从各种来源收集了大量的句子,并以小块的形式提供给模型。
这里使用的训练模式称为自监督。从正在训练的模型的角度来看,我们可以说是一种监督学习方法,因为模型在做出预测后总是得到正确的答案。例如,给定我喜欢冰的序列... 该模型可能会将锥体预测为下一个单词,然后可能会被告知答案是错误的,因为实际的下一个单词是奶油色。最终,可以计算损失并调整模型权重以更好地预测下一次。将其称为自我监督(而不是简单地监督)的原因是,无需事先以昂贵的程序收集标签,但它们已经包含在数据中。给定句子我喜欢冰淇淋,我们可以自动将其拆分为我喜欢冰作为输入和奶油作为标签,这不需要人工努力。虽然它不是模型本身,但它仍然由机器自动执行,因此人工智能在学习过程中自我监督的想法。
最终,在大量文本上进行训练后,模型学会了对语言结构进行编码(例如,它学习,我喜欢的后面可以跟一个名词或分词)以及它看到的文本中包含的知识。例如,它了解到,乔·拜登(Joe Biden)这句话......经常被美国总统所跟随,因此代表了该知识。
其他人已经完成了此预训练,您可以使用开箱即用的 GPT 等模型。但是,为什么要训练类似的模型呢?如果您使用的数据具有类似于语言的属性,但这不是通用语言本身,则可能需要从头开始训练模型。乐谱可以举个例子,它的结构在某种程度上像一种语言。关于哪些部分可以相互跟随,有一些规则和模式,但是在自然语言上训练的LLM无法处理这种数据,因此您必须训练一个新模型。然而,LLM的架构可能是合适的,因为乐谱和自然语言之间有许多相似之处。
三、关于微调
尽管预训练的LLM由于其编码的知识,能够执行各种数量的任务,但它有两个主要缺点,即其输出的结构和缺乏未在数据中编码的知识首先。
如您所知,LLM 总是在给定之前一系列令牌的情况下预测下一个令牌。对于继续一个给定的故事,这可能很好,但在其他情况下这不是你想要的。如果您需要不同的输出结构,有两种主要方法可以实现。你可以以这样的方式编写提示,使模型预测下一个令牌的惰性能力解决你的任务(这称为提示工程),或者你更改最后一层的输出,使其反映你的任务,就像你在任何其他机器学习模型中所做的那样。考虑一个分类任务,其中有 N 个类。通过提示工程,您可以指示模型始终在给定输入后输出分类标签。通过微调,您可以将最后几层更改为具有 N 个输出神经元,并从激活率最高的神经元中得出预测的类别。
LLM的另一个限制在于它被训练的数据。由于数据源非常丰富,因此最著名的LLM编码了各种各样的常识。因此,他们可以告诉你,除其他外,关于美国总统,贝多芬的主要著作,量子物理学的基础和西格蒙德弗洛伊德的主要理论。但是,有些域模型不知道,如果您需要使用这些域,微调可能与您相关。
微调的想法是采用已经预训练的模型并使用不同的数据继续训练,并在训练期间仅更改最后几层的权重。这只需要初始培训所需资源的一小部分,因此可以更快地执行。另一方面,模型在预训练期间学习的结构仍然编码在第一层中,可以使用。假设你想教你的模型关于你最喜欢的,但鲜为人知的幻想小说,这些小说不是训练数据的一部分。通过微调,您可以利用模型对自然语言的一般知识,使其理解奇幻小说的新领域。
四、RLHF微调
微调模型的一个特例是从人类反馈中强化学习(RLHF),这是GPT模型与Chat-GPT等聊天机器人之间的主要区别之一。通过这种微调,模型被训练为产生人类在与模型对话中最有用的输出。
主要思想如下:给定任意提示,为该提示生成模型的多个输出。人类根据他们发现的有用或适当程度对这些输出进行排名。给定四个样本 A、B、C 和 D,人类可能会决定 C 是最佳输出,B 稍差但等于 D,A 是该提示的最差输出。这将导致 C > B = D > A 的阶数。接下来,此数据用于训练奖励模型。这是一个全新的模型,它通过给予反映人类偏好的奖励来学习对LLM的产出进行评级。一旦奖励模型被训练,它就可以替代该产品中的人类。现在,模型的输出由奖励模型进行评级,并且该奖励作为反馈提供给LLM,然后进行调整以最大化奖励;一个与GAN非常相似的想法。
如您所见,对于这种训练,需要人工标记的数据,这需要相当多的努力。然而,所需的数据量是有限的,因为奖励模型的想法是从这些数据中泛化,以便一旦它学会了自己的部分,它就可以自己对LLM进行评级。 RLHF通常用于使LLM输出更像对话或避免不良行为,例如模型是平均的, 侵入性或侮辱性。
五、适配器
在前面提到的微调中,我们在最后几层调整模型的一些参数,而前几层中的其他参数保持不变。不过,还有另一种选择,它通过训练所需的更少参数来保证更高的效率,这称为dapters。
使用适配器意味着向已训练的模型添加其他层。在微调期间,仅训练这些适配器,而模型的其余参数根本不会更改。但是,这些层比模型附带的层小得多,这使得调整它们变得更加容易。此外,它们可以插入模型的不同位置,而不仅仅是在最后。在上图中,您看到两个示例;一个是以串行方式将适配器作为层添加的,另一个是将其并行添加到现有层。
六、促进
您可能想知道提示是否算作训练模型的另一种方式。提示意味着构造实际模型输入之前的指令,特别是如果您使用少数镜头提示,您可以在提示中向LLM提供示例,这与训练非常相似,后者也包括呈现给模型的示例。但是,提示比训练模型是有原因的。首先,从简单的定义来看,我们只在权重更新时才谈论训练,而在提示期间不会这样做。创建提示时,不会更改任何模型,不会更改权重,不会生成新模型,也不会更改模型中编码的知识或表示形式。提示应该被视为指导LLM并告诉它你想要从中得到什么的一种方式。以以下提示为例:
"""Classify a given text regarding its sentiment.Text: I like ice cream.
Sentiment: negativeText: I really hate the new AirPods.
Sentiment: positiveText: Donald is the biggest jerk on earth. I hate him so much!
Sentiment: neutralText: {user_input}
Sentiment:"""
我指示模型进行情绪分类,您可能已经注意到,我给模型的示例都是错误的!如果模型是用这些数据训练的,它会混淆正、负和中性的标签。现在,如果我让模型对我喜欢冰淇淋的句子进行分类,这是我示例的一部分,会发生什么?有趣的是,它将其归类为正数,这与提示相反,但在语义层面上是正确的。这是因为提示没有训练模型,也没有改变它所学内容的表示形式。提示只是告知模型我期望的结构,即我希望情绪标签(可以是正、负或中性)跟在冒号之后。
七、提示调整
虽然提示本身不是训练 llm,但有一种机制称为提示调整(也称为软提示),它与提示有关,可以看作是一种训练。
在前面的示例中,我们将提示视为提供给模型的自然语言文本,以便告诉它要做什么,并且先于实际输入。也就是说,模型输入变为<prompt><实例>,因此,例如,<将以下内容标记为正、负或中性:> <我喜欢冰淇淋>。 在自己创建提示时,我们说硬提示。在软提示中,将保留格式<prompt><实例>,但提示本身不是我们自己设计的,而是通过数据学习的。具体来说,提示由向量空间中的参数组成,这些参数可以在训练期间进行调整,以获得更小的损失,从而获得更好的答案。也就是说,在训练后,提示将是导致我们给定数据最佳答案的字符序列。但是,模型参数根本没有经过训练。
提示调优的一大优点是,您可以为不同的任务训练多个提示,但仍将它们用于同一模型。就像在硬提示中一样,您可以构造一个用于文本摘要的提示、一个用于情绪分析的提示和一个用于文本分类的提示,但将它们全部用于同一模型,您可以为此目的调整三个提示,并且仍然使用相同的模型。相反,如果您使用微调,您最终会得到三个模型,每个模型只服务于其特定任务。
八、总结
我们刚刚看到了各种不同的训练机制,所以让我们在最后做一个简短的总结。
- 预训练LLM意味着教它以自我监督的方式预测下一个令牌。
- 微调是在最后一层调整预训练LLM的权重,并可用于使模型适应特定的上下文。
- RLHF旨在调整模型的行为以符合人类的期望,并且需要额外的标记工作。
- 适配器允许更有效的微调方式,因为小层被添加到预训练的LLM中。
- 提示本身不被视为训练,因为它不会更改模型的内部表示。
- 提示优化是一种优化权重的技术,这些权重会产生提示,但不会影响模型权重本身。
当然,还有更多的训练机制,每天都有新的机制被发明出来。LLM可以做的不仅仅是预测文本,教他们这样做需要各种技能和技巧,其中一些我刚刚介绍给你。
多利安·德罗斯特
相关文章:
【NLP】训练LLM的不同方式
一、说明 在大型语言模型(LLM)领域,有各种各样的 训练机制,具有不同的手段,要求和目标。由于它们服务于不同的目的,因此重要的是不要将它们相互混淆,并了解它们适用的不同场景。 在本文中&#…...
MySQL 45讲笔记(1-10讲)
1. SQL语句如何开始执行? MySQL分为Server和存储引擎两部分: Server层包含连接器、存储缓存、分析器、执行器等,以及所有的内置函数(事件、日期)等等,还有视图、触发器。 存储引擎是负责数据的存储和提取&a…...
U盘数据如何保密?U盘数据加密软件合集
当我们将重要数据存放在U盘中时,必须要保障U盘的安全,以避免数据泄露。那么,U盘数据该如何保密呢?下面我们就来盘点一下那些好用的U盘数据保护方法。 U盘写保护 起初U盘写保护是专门为U盘防病毒而设计的,写保护后会将…...
此文详解,数据仓库管理建设的经验
目前由于数据分散在不同的存储环境或数据库中,对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理,造成资源和人力的浪费。同时,目前的系统架构,无法为未来数据驱动业务创新的理念提供友好的支撑。需要建设新…...
01 - 工作区、暂存区、版本库、远程仓库 - 以一次连贯的提交操作为例
查看所有文章链接:(更新中)GIT常用场景- 目录 文章目录 1. 工作区、暂存区、版本库、远程仓库1.1 工作区1.2 工作区 > 暂存区:git add1.3 暂存区 > 版本库:git commit1.4 push到远程仓库 1. 工作区、暂存区、版本…...
cesium学习记录06-视图、场景与相机
一、视图(Viewer) viewer是cesium的核心类,是一切的开端。通过new Cesium.Viewer(container, options)来创建一个Viewer对象,而通过这个 Viewer对象,可以添加图层、实体、相机控制等,以及设置一些全局属性…...
flutter开发实战-MethodChannel实现flutter与原生Android双向通信
flutter开发实战-MethodChannel实现flutter与原生Android双向通信 最近开发中需要原生Android与flutter实现通信,这里使用的MethodChannel 一、MethodChannel MethodChannel:用于传递方法调用(method invocation)。 通道的客户端和宿主端通过传递给通…...
django使用多个数据库实现
一、说明: 在开发 Django 项目的时候,很多时候都是使用一个数据库,即 settings 中只有 default 数据库,但是有一些项目确实也需要使用多个数据库,这样的项目,在数据库配置和使用的时候,就比较麻…...
Linux常见面试题,应对面试分享
操作系统基础 1.cpu占⽤率太⾼了怎么办? 排查思路是什么,怎么定位这个问题,处理流程 其他程序: 1.通过top命令按照CPU使⽤率排序找出占⽤资源最⾼的进程 2.lsof查看这个进程在使⽤什么⽂件或者有哪些线程 3.询问开发或者⽼⼤,是什么业务在使⽤这个进程…...
mysql索引的数据结构(Innodb)
首选要注意,这里的数据结构是存储在硬盘上的数据结构,不是内存中的数据结构,要重点考虑io次数. 一.不适合的数据结构: 1.Hash:不适合进行范围查询和模糊匹配查询.(有些数据库索引会使用Hash,但是只能精准匹配) 2.红黑树:可以范围查询和模糊匹配,但是和硬盘io次数比较多. 二…...
【MySQL】Java实现JDBC编程
文章目录 1. JDBC2. 添加驱动包3. 编程3.1 创建数据源3.2 与数据库建立连接3.3 构造SQL语句3.4 执行SQL语句3.5 释放资源,关闭连接 1. JDBC 数据库编程必须掌握至少一门编程语言,一种数据库,会导入数据库驱动包。 操作和连接不同数据库都需要…...
纽扣电池寿命和功率增强器
近日,基础半导体器件领域的高产能生产专家Nexperia(安世半导体)宣布推出NBM7100和NBM5100。这两款IC采用了具有突破意义的创新技术,是专为延长不可充电的典型纽扣锂电池寿命而设计的新型电池寿命增强器,相比于同类解决…...
bilibili倍数脚本,油猴脚本
一. 内容简介 bilibili倍数脚本,油猴脚本 二. 软件环境 2.1 Tampermonkey 三.主要流程 3.1 创建javascript脚本 点击添加新脚本 就是在 (function() {use strict;// 在这编写自己的脚本 })();倍数脚本,含解析 // UserScript // name bi…...
8.14 作业
1. .text .globl _start_start:mov r0,#0x9mov r1,#0xfbl loop loop:cmp r0,r1beq stopsubhi r0,r1subls r1,r0mov pc,lr stop:b stop 2.实现1-100的和 .text .globl _start_start:mov r0,#0x1bl loop loop:cmp r0,#0x64bhi stopaddls r1,r0addls r0,#0x1mov pc,lr stop:b sto…...
Debian安装和使用Elasticsearch 8.9
命令行通过 .deb 包安装 Elasticsearch 创建一个新用户 adduser elastic --> rust # 添加sudo权限 # https://phoenixnap.com/kb/how-to-create-sudo-user-on-ubuntu usermod -aG sudo elastic groups elastic下载Elasticsearch v8.9.0 Debian 包 https://www.elastic.co/…...
三 、CTR预估数据准备
三 CTR预估数据准备 3.1 分析并预处理raw_sample数据集 # 从HDFS中加载样本数据信息 df spark.read.csv("hdfs://localhost:9000/datasets/raw_sample.csv", headerTrue) df.show() # 展示数据,默认前20条 df.printSchema()显示结果: ------------…...
netty学习分享 二
操作系统IO模型与实现原理 阻塞IO 模型 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。 当调用recv()函数时,系…...
聊聊web服务器NGINX
文章目录 聊聊web服务器NGINXNGINX的起源NGINX早期阶段首次发布快速扩展模块化架构逐步增加功能商业收购 NGINX能做什么NGINX的优势NGINX为何能兴起 聊聊web服务器NGINX NGINX的起源 NGINX是一个 HTTP 和反向代理服务器,一个邮件代理服务器,以及一个通…...
【hello C++】特殊类设计
目录 一、设计一个类,不能被拷贝 二、设计一个类,只能在堆上创建对象 三、设计一个类,只能在栈上创建对象 四、请设计一个类,不能被继承 五、请设计一个类,只能创建一个对象(单例模式) C🌷 一、设计一个类&…...
js实现按创建时间戳1609459200000 开始往后开始显示运行时长-demo
运行时长 00日 00时 17分 59秒 代码 function calculateRuntime(timestamp) {const startTime Date.now(); // 获取当前时间戳//const runtimeElement document.getElementById(runtime); // 获取显示运行时长的元素function updateRuntime() {const currentTimestamp Date…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
