大语言模型(LLM)和基于人类反馈的强化学习(RLHF)

news2024/12/29 13:34:06

只需三步,构建你的LLM

  1. 预训练语言模型 L L M S S L LLM^{SSL} LLMSSL(self-supervised-learning)
  2. (指令)监督微调预训练模型 L L M S F T LLM^{SFT} LLMSFT(supervised-fine-tuning)
  3. 基于人类反馈的强化学习微调 L L M R L LLM^{RL} LLMRL(reinforcement-learning)

  开玩笑的,训练一个LLM的过程是极其及其复杂的尤其是像GPT那样的,需要的数据和算力就不说了,光是准备工作都不止3步。三步主要是指LLM模型训练过程中的三个核心步骤,以及每个步骤的目的。

1 :预训练阶段

  从互联网上收集海量的文本数据,通过自监督的方式训练语言模型,根据上下文来预测下个词。token的规模大概在trillion级别,这个阶段要消耗很多资源,海量的数据采集、清洗和计算,该阶段的目的是:通过海量的数据,让模型接触不同的语言模式,让模型拥有理解和生成上下文连贯的自然语言的能力。
在这里插入图片描述

训练过程大致如下:

  • Training data : 来自互联网的开放文本数据,整体质量偏低

  • Data scale : 词汇表中的token数量在trillion级别

  • L L M ϕ S S L LLM_{\phi}^{SSL} LLMϕSSL: 预训练模型

  • [ T 1 , T 2 , . . . , T V ] [T_1, T_2, ... , T_V] [T1,T2,...,TV] : vocabulary 词汇表,训练数据中词汇的集合

  • V V V: 词汇表的大小

  • f ( x ) f(x) f(x): 映射函数把词映射为词汇表中的索引即:token. if x x x is T k T_k Tk in vocab, f ( x ) = k f(x) = k f(x)=k.

  • ( x 1 , x 2 , . . . , x n ) (x_1, x_2, ..., x_n) (x1,x2,...,xn), 根据文本序列生成训练样本数据:

    • Input: x = ( x 1 , x 2 , . . . , x i − 1 ) x = (x_1, x_2, ..., x_{i-1}) x=(x1,x2,...,xi1)
    • Output(label) : x i x_i xi
  • ( x , x i ) (x, x_i) (x,xi),训练样本:

    • Let k = f ( x i ) k = f(x_i) k=f(xi) w o r d → t o k e n word \to token wordtoken
    • Model’s output : L L M S S L ( x ) = [ y ‾ 1 , y ‾ 2 , . . . , y ‾ V ] LLM^{SSL}(x) = [\overline{y}_1, \overline{y}_2, ..., \overline{y}_V] LLMSSL(x)=[y1,y2,...,yV], 模型预测下一个词的概率分布,Note : ∑ j y ‾ j = 1 \sum_j \overline{y}_j = 1 jyj=1
    • The loss value : C E ( x , x i ; ϕ ) = − l o g ( y ‾ k ) CE(x, x_i; \phi) = -log(\overline{y}_k) CE(x,xi;ϕ)=log(yk)
  • Goal : find ϕ \phi ϕ ,Minimize C E ( ϕ ) = − E x l o g ( y ‾ k ) CE(\phi) = -E_x log(\overline{y}_k) CE(ϕ)=Exlog(yk)

  预先训练阶段 L L M S S L LLM^{SSL} LLMSSL还不能正确的响应用户的提示,例如,如果提示“法国的首都是什么?”这样的问题,模型可能会回答另一个问题的答案,例如,模型响应的可能是“意大利的首都是什么?”,因为模型可能没有“理解”/“对齐aligned”用户的“意图”,只是复制了从训练数据中观察到的结果。

  为了解决这个问题,出现了一种称为监督微调或者也叫做指令微调的方法。通过在少量的示例数据集上采用监督学习的方式对 L L M S S L LLM^{SSL} LLMSSL进行微调,经过微调后的模型,可以更好地理解和响应自然语言给出的指令。

2 : 监督微调阶段

在这里插入图片描述

  SFT(Supervised Fine-Tuning)阶段的目标是优化预训练模型,使模型生成用户想要的结果。在该阶段,给模型展示如何适当地响应不同的提示(指令)(例如问答,摘要,翻译等)的示例。这些示例遵循(prompt、response)的格式,称为演示数据。通过基于示例数据的监督微调后,模型会模仿示例数据中的响应行为,学会问答、翻译、摘要等能力,OpenAI 称为:监督微调行为克隆 。

  基于LLM指令微调的突出优势在于,对于任何特定任务的专用模型,只需要在通用大模型的基础上通过特定任务的指令数据进行微调,就可以解锁LLM在特定任务上的能力,不在需要从头去构建专用的小模型。

指令微调过程如下:

  • Training Data : 高质量的微调数据,由人工产生。

  • Data Scale : 10000~100000

    • InstructGPT : ~14500个人工示例数据集。

    • Alpaca : 52K ChatGPT指令数据集。

  • Model input and output

    • Input : 提示(指令)。
    • Output : 提示对应的答案(响应)
  • Goal : 最小化交叉熵损失,只计算出现在响应中的token的损失。

事实也证明,经过微调后的小模型可以生成比没有经过微调的大模型更好的结果:

3 : RLHF阶段

  在经过监督(指令)微调后,LLM模型已经可以根据指令生成正确的响应了,为什么还要进行强化学习微调?

  因为随着像ChatGPT这样的通用聊天机器人的日益普及,全球数亿的用户可以访问非常强大的LLM,确保这些模型不被用于恶意目的,同时拒绝可能导致造成实际伤害的请求至关重要。

恶意目的的例子如下:

  • 具有编码能力的LLM可能会被用于以创建恶意软件
  • 在社交媒体平台上大规模的使用聊天机器人扭曲公共话语
  • 当LLM无意中从训练数据中复制个人身份信息造成的隐私风险。
  • 用户向聊天机器人寻求社交互动和情感支持时可能会造成心理伤害

  为了应对以上的风险,需要采取一些策略来防止LLM的能力不被滥用,构建一个可以与人类价值观保持一致的LLM,RLHF(从人类反馈中进行强化学习)可以解决这些问题,让AI更加的Helpfulness、Truthfulness和Harmlessness。

3. 1 奖励模型

  在强化学习中一般都有个奖励函数,对当前的 A c t i o n Action Action| ( S t a t e , A c t i o n ) (State,Action) (State,Action)进行评价(打分),从而使使Policy模型产生更好的 a c t i o n action action。在RLHF微调的过程,也需要一个Reard Model来充当奖励函数,它代表着人类的价值观,RM 的输入是(prompt, response),返回一个分数。response可以看作LLM的 a c t i o n action action,LLM看作Policy模型,通过RL框架把人类的价值观引入LLM。
在这里插入图片描述

对比数据集

在训练RM之前,需要构建对比数据,通过人工区分出好的回答和差的回答,数据通过经过监督微调(SFT)后的 L L M S F T LLM^{SFT} LLMSFT生成,随机采样一些prompt,通过模型生成多个response,通过人工对结果进行两两排序,区分出好的和差的。数据格式如下:

(prompt, good_response,bad_response)

奖励模型的训练过程如下:

  • Training Data : 高质量的人工标记数据集(prompt, winning_response, losing_response)

  • Data Scale : 100k ~ 1M

  • R θ R_{\theta} Rθ : 奖励模型

  • Training data format:( x , y w , y l x, y_w, y_l x,yw,yl)

    • x x x : prompt
    • y w y_w yw : good response
    • y l y_l yl : bad response
  • For each training sample:

    • s w = R θ ( x , y w ) s_w = R_{\theta}(x, y_w) sw=Rθ(x,yw) ,奖励模型的评价
    • s l = R θ ( x , y l ) s_l = R_{\theta}(x,y_l) sl=Rθ(x,yl)
    • L o s s Loss Loss : Minimize − l o g ( σ ( s w − s l ) ) -log(\sigma(s_w - s_l)) log(σ(swsl))
  • Goal : find θ \theta θ to minimize the expected loss for all training samples. − E x l o g ( σ ( s w − s l ) ) -E_xlog(\sigma(s_w - s_l)) Exlog(σ(swsl))

3.2 PPO微调

在这里插入图片描述

  1. 从数据中随机采样prompt。
  2. Policy( L L M R L LLM^{RL} LLMRL即: L L M S F T LLM^{SFT} LLMSFT),根据prompt生成response。
  3. Reward模型根据 ( p r o m p t , r e s p o n s e ) (prompt, response) (prompt,response),计算分数score。
  4. 根据score更新Policy模型(Policy是在 L L M S F T LLM^{SFT} LLMSFT基础上微调得到的)。

  在这个过程中,policy( L L M R L LLM^{RL} LLMRL)会不断更新,为了不让它偏离SFT阶段的模型太远,OpenAI在训练过程中增加了KL离散度约束,保证模型在得到更好的结果同时不会跑偏,这是因为Comparison Data不是一个很大的数据集,不会包含全部的回答,对于任何给定的提示,都有许多可能的回答,其中绝大多数是 RM 以前从未见过的。对于许多未知(提示、响应)对,RM 可能会错误地给出极高或极低的分数。如果没有这个约束,模型可能会偏向那些得分极高的回答,它们可能不是好的回答。

RLHF微调过程如下:

  • ML task : RL(PPO)

    • Action Space : the vocabulary of tokens the LLM uses. Taking action means choosing a token to generate.
    • Observation Space : the distribution over all possible prompts.
    • Policy: the probability distribution over all actions to take (aka all tokens to generate) given an observation (aka a prompt). An LLM constitutes a policy because it dictates how likely a token is to be generated next.
    • Reward function: the reward model.
  • Training data: randomly selected prompts

  • Data scale: 10,000 - 100,000 prompts

    • InstructGPT: 40,000 prompts
  • R ϕ R_{\phi} Rϕ : the reward model.

  • L L M S F T LLM^{SFT} LLMSFT : the supervised finetuned model(intruction finetuning).

  • L L M ϕ R L LLM^{RL}_{\phi} LLMϕRL : the model being trained with PPO, parameterized by ϕ \phi ϕ.

    • x x x : prompt.
    • D R L D_{RL} DRL : the distribution of prompts used explicitly for the RL model.
    • D p r e t r a i n D_{pretrain} Dpretrain : the distribution of the training data for the pretrain model.

    For each training step, sample a batch of x R L x_{RL} xRL from D R L D_{RL} DRL and a batch of x p r e t r a i n x_{pretrain} xpretrain from D p r e t r a i n D_{pretrain} Dpretrain.

    1. For each x R L x_{RL} xRL , we use L L M ϕ R L LLM_{\phi}^{RL} LLMϕRL to generate a reponse : y ∼ L L M ϕ R L ( x R L ) y \sim LLM_{\phi}^{RL}(x_{RL}) yLLMϕRL(xRL).

      objective 1 ( x R L , y ; ϕ ) = R θ ( x R L , y ) − β log ⁡ ( L L M ϕ R L ( y ∣ x ) L L M S F T ( y ∣ x ) ) \text{objective}_1(x_{RL}, y; \phi) = R_{\theta}(x_{RL}, y) - \beta \log (\frac{LLM^{RL}_\phi(y \vert x)}{LLM^{SFT}(y \vert x)}) objective1(xRL,y;ϕ)=Rθ(xRL,y)βlog(LLMSFT(yx)LLMϕRL(yx))

    2. For each x p r e t r a i n x_{pretrain} xpretrain, the objective is computed as follows. Intuitively, this objective is to make sure that the RL model doesn’t perform worse on text completion - the task the pretrained model was optimized for.

      objective 2 ( x p r e t r a i n ; ϕ ) = γ log ⁡ ( L L M ϕ R L ( x p r e t r a i n ) ) \text{objective}_2(x_{pretrain}; \phi) = \gamma \log (LLM^{RL}_\phi(x_{pretrain})) objective2(xpretrain;ϕ)=γlog(LLMϕRL(xpretrain))

    3. The final objective is the sum of the expectation of two objectives above.

      objective ( ϕ ) = E x ∼ D R L E y ∼ L L M ϕ R L ( x ) [ R θ ( x , y ) − β log ⁡ L L M ϕ R L ( y ∣ x ) L L M S F T ( y ∣ x ) ] + γ E x ∼ D p r e t r a i n log ⁡ L L M ϕ R L ( x ) \text{objective}(\phi) = E_{x \sim D_{RL}}E_{y \sim LLM^{RL}_\phi(x)} [R_{\theta}(x, y) - \beta \log \frac{LLM^{RL}_\phi(y \vert x)}{LLM^{SFT}(y \vert x)}] + \gamma E_{x \sim D_{pretrain}}\log LLM^{RL}_\phi(x) objective(ϕ)=ExDRLEyLLMϕRL(x)[Rθ(x,y)βlogLLMSFT(yx)LLMϕRL(yx)]+γExDpretrainlogLLMϕRL(x)

  • Goal : Maximize o b j e c t i v e ( ϕ ) objective(\phi) objective(ϕ).

最后一首chatGPT写的关于LLM的诗:

  • Language models so grand and divine,
  • 语言模型如此伟大和神圣,
  • Answers to questions, so quick and so fine.
  • 回答问题,如此快速,如此精细。
  • From science to art, they shine like a star,
  • 从科学到艺术,它们像星星一样闪耀,
  • Making humans look like they’re not quite as far.
  • 让人类看起来没有那么远。

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

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

相关文章

K8s常用命令

Namespace 默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中&#…

猪场规模怎样划分?类型都有哪些?

养猪场按照经营方式分为大中小猪场(猪场规模)和集团猪场。集团猪场是指集团化发展与管理的养猪企业,或者简称为集团化养猪企业,重点在于“集团化”。猪场规模则是按照年出栏数量划分。 小规模猪场:年出栏3000头以下&a…

加密芯片在GCP系统的应用方案

物联网(IoT)设备正在迅速发展,越来越多的设备连接到互联网并与其他设备进行通信。这使得设备的安全变得更加重要,因为它们可能会暴露敏感的数据和功能。Google Cloud IoT Core(GCP)是一个完全托管的服务&am…

Easydict 简洁易用的翻译词典,带你轻松优雅地查找单词或翻译文本。

Easydict Easydict 是一个简洁易用的翻译词典 macOS App,能够轻松优雅地查找单词或翻译文本。Easydict 开箱即用,能自动识别输入文本语言,支持输入翻译,划词翻译和 OCR 截图翻译,可同时查询多个翻译服务结果&#xff…

喜报丨迪捷软件荣获浙江省专精特新荣誉称号

近日,根据工业和信息化部《优质中小企业梯度培育管理暂行办法》(工信部企业〔2022〕63号)和《浙江省经济和信息化厅关于印发浙江省优质中小企业梯度培育管理实施细则(暂行)的通知》(浙经信企业〔2022〕197号…

光耦合器的输入电路及重要参数

光耦合器是一种通过使用光能将输入控制信号耦合到输出或负载的器件,其方式使得输入信号和负载(输出)之间的电气隔离也保持不变。光耦合器的基本功能是通过光能耦合输入和输出电路(因此称为光耦合器),并在输…

Monaco Editor编辑器教程(三十):将vue文件作为一种编程语言集成到monaco editor中,实现vue组件的语法,标签高亮。

前言 最近在使用gitlab的web ide时发现当编写一个 vue组件时,文件的后缀名为.vue。在编辑器的右上角会显示当前的编程语言时vue,并且高亮语法或标签,格式化,折叠都表现很优秀。但是其实monaco是不支持vuejs的,作为一名前端开发者,我们有时需要在monaco编辑器中编写vue组…

操作系统学习02

!!!由于感冒和出去玩,好几天没学这些计算机基础知识了!!! 抓紧跟上嘿嘿嘿 1、内存管理主要做了什么 操作系统的内存管理非常重要,主要负责下面这些事情: 内存的分配与…

Windows服务器配置开机自启动

有两种简单实现的方式。 第一种,直接将可执行文件或脚本的快捷方式放置到 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 这个文件夹里,服务器在启动的时候会自动执行。 第二种,配置为windows系统服务 利用winsw来将可…

HMC408LP3ETR-ASEMI代理亚德诺HMC408LP3ETR原厂芯片

编辑-Z HMC408LP3ETR参数描述: 型号:HMC408LP3ETR 频率范围:5.1 - 5.9 GHz 增益:20 dB 输入回波损耗:8 dB 输出回波损耗:6 dB 1dB压缩的输出功率:27 dBm 饱和输出功率:31 dB…

鬼畜提问变身指南:ChatGPT十个打破常规的提问公式

Chatgpt的恐怖之处不在于它有多么的准确,很多时候它的回答甚至充满常识性错误,比如你问美国为什么轰炸珍珠岛它都能一本正经的回答你(这当然也有中文语料数据投喂不足和中文本身就复杂而难以理解的原因,听说用英文提问的准确性会提…

openeuler 22.03 制作openssh9.3p1 rpm升级包和升级实战

一、背景说明 openeuler 22.03 默认安装的openssh 版本为8.8p1,经绿盟扫描,存在高危漏洞,需要升级到最新。 官网只提供编译安装包,而openeuler 22.03 为rpm方式安装。 为了方便升级,先通过编译安装包,制…

OpenCV中的图像处理3.7-3.8(五)边缘检测、图像金字塔

目录 3.7 边缘检测目标理论OpenCV中的Canny边缘检测其他资源练习 3.8 图像金字塔目标理论使用金字塔进行图像混合其他资源 翻译及二次校对:cvtutorials.com 编辑者:廿瓶鲸(和鲸社区Siby团队成员) 3.7 边缘检测 目标 在本章中&a…

搭建jaegerAll in one 测试环境

1. Jaeger介绍 Jaeger 受 Dapper 和 OpenZipkin 的启发,是由 Uber Technologies 发布的开源分布式追踪系统。它用于监控和排查基于微服务的分布式系统问题,包括: 分布式上下文传播分布式事务监控根因分析服务依赖关系分析性能 / 延迟优化 Jaeger 架构…

初识TypeScript与静态类型解析

一、初识ts 二、如何运行ts代码 假如本地新建了一个b.ts文件 安装TypeScript:npm install -g typescript 编译代码:tsc b.ts 运行js:node b.js 在终端输入 tsc -init 生成 tsconfig.json 文件 类型注解:TypeScript里的类型注解是一…

浅学Go下的ssti

前言 作为强类型的静态语言,golang的安全属性从编译过程就能够避免大多数安全问题,一般来说也唯有依赖库和开发者自己所编写的操作漏洞,才有可能形成漏洞利用点,在本文,主要学习探讨一下golang的一些ssti模板注入问题…

手术麻醉信息系统源码 B/S网页版

手术麻醉信息系统源码 php mysql vue2 B/S网页版 手术麻醉信息系统是HIS产品中的一个组成部分,主要应用于医院的麻醉科,属于电子病历类产品。麻醉监护的功能覆盖整个手术与麻醉的全过程,包括手术申请与排班、审批、安排、术前、术中和术后…

什么是阿里云服务器?云服务器的优缺点

阿里云服务器是什么?云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,云服务器可以降低IT成本提升运维效率,免去企业或个人前期采购IT硬件的成本,阿里云服务器让用户像使用水、电、天然气等公共资源一样便捷、高效地使用服务器…

线程池工作原理和实现原理

为什么要使用线程池 平时讨论多线程处理,大佬们必定会说使用线程池,那为什么要使用线程池?其实,这个问题可以反过来思考一下,不使用线程池会怎么样?当需要多线程并发执行任务时,只能不断的通过…

如何压缩mp3文件大小,5分钟学会4种方法

如何压缩mp3文件大小?我们在开车的时候都很喜欢听歌,一般歌曲库里的mp3文件都很多,小编的就有上千首。如果我们还想要增加更多mp3文件,有时候就会出现内存不足的情况啦。所以我们需要压缩mp3文件大小,这样才能在我们手…