当前位置: 首页 > news >正文

大语言模型损失函数详解

       我们可以把语言模型分为两类:

  • 自动回归式语言模型:自动回归式语言模型在本质上是单向的,也就是说,它只沿着一个方向阅读句子。正向(从左到右)预测;反向(从右到左)预测。
  • 自动编码式语言模型:自动编码式语言模型同时利用了正向预测和反向预测的优势。在进行预测时,它会同时从两个方向阅读句子,所以自动编码式语言模型是双向的。

      本文将结合具体模型和论文,探讨这两种模型的损失函数。

一、自动编码式语言模型

       提到自动编码式语言模型,那最经典的非BERT莫属了。

1.1 BERT

       BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的自然语言处理模型。它由Google于2018年提出,以解决语境相关性和双向理解的问题。BERT采用双向训练方式,能够同时考虑文本左右两侧的上下文信息,有效捕获语境含义。

        BERT的损失函数由两部分组成,第一部分是来自 Mask-LM 的单词级别分类任务,另一部分是句子级别的分类任务。通过这两个任务的联合学习,可以使得 BERT 学习到的表征既有 token 级别信息,同时也包含了句子级别的语义信息。

       在第一部分的损失函数中,如果被 mask 的词集合为 M(即计算BERT的MLM loss时会忽略没被mask的token),因为它是一个词典大小 |V| 上的多分类问题,那么具体说来有:


L_1\left(\theta, \theta_1\right)=-\sum_{i=1}^M \log p\left(m=m_i \mid \theta, \theta_1\right), m_i \in[1,2, \ldots,|V|]

       在句子预测任务中,也是一个分类问题的损失函数:

L_2\left(\theta, \theta_2\right)=-\sum_{j=1}^N \log p\left(n=n_i \mid \theta, \theta_2\right), n_i \in[\text { IsNext, NotNext }]

        这两个损失函数也很容易理解:

  • 多分类问题,类别的数量等于词表的大小,第i个词被正确预测的概率越大,相应的损失越小
  • 二分类问题,第j个句子的类别被正确预测的概率越大,相应的损失越小

        因此,两个任务联合学习的损失函数是:

L\left(\theta, \theta_1, \theta_2\right)=-\sum_{i=1}^M \log p\left(m=m_i \mid \theta, \theta_1\right)-\sum_{j=1}^N \log p\left(n=n_i \mid \theta, \theta_2\right)

二、自动回归式语言模型

       BERT一度引领了NLP领域。但是随着OpenAI-GPT系列模型的爆火,自回归式模型被更为广泛的采用。本章详细解析GLM大模型、LoRA微调方法、Prefix tuning这三篇论文中的损失函数。以期找到这些损失函数的共性。

2.1 GLM系列大模型

       清华大学提出的GLM大模型预训练框架采用了自回归的空白填充方法,在自然语言理解、无条件生成、有条件生成等NLP任务上取得了显著成果。其中,GLM-130B是最大的模型,拥有1300亿参数,支持中英文双语,旨在训练出开源开放的高精度千亿中英双语语言模型。该模型采用了量化技术,可在4块3090(24G)或8块2080Ti(11G)上推理。

       输入向量为\mathbf{x}=\left[x_1, \cdots, x_n\right],抽样出文本段\left\{\boldsymbol{s}_1, \cdots, \boldsymbol{s}_m\right\},每个文本段s_{i}都代表了一系列连续的token吗,可以写做\left[s_{i, 1}, \cdots, s_{i, l_i}\right],每个文本段s_{i}都用[MASK]代表,从而形成了x_{corrupt}m表示抽样文本段的数量,l_{i}表示每个抽样文本段的长度。预训练目标可以用下式表示:

\max _\theta \mathbb{E}_{\boldsymbol{z} \sim Z_m}\left[\sum_{i=1}^m \log p_\theta\left(\boldsymbol{s}_{z_i} \mid \boldsymbol{x}_{\text {corrupt }}, \boldsymbol{s}_{\boldsymbol{z}_{<i}}\right)\right]

      需要对所有的抽样文本段进行随机打乱, Z_{m}\left\{\boldsymbol{s}_1, \cdots, \boldsymbol{s}_m\right\}被打乱后,所有可能性的集合,s_{z<i}又可以写作\left[\boldsymbol{s}_{z_1}, \cdots, \boldsymbol{s}_{z_{i-1}}\right]。在预测缺失的文本段s_{z_{i}}时(每个z_{i}都包含多个单词,所以需要用集合S表示,z_{i}作为下标),模型可以访问到被破坏的文本x_{corrupt},以及s_{z_{i}}前面所有的抽样文本段。

      那每个s_{z_{i}}中token的预测概率应该如何表示呢?如下:

\begin{aligned} & p_\theta\left(\boldsymbol{s}_i \mid \boldsymbol{x}_{\text {corrupt }}, \boldsymbol{s}_{\boldsymbol{z}_{<i}}\right) \\ = & \prod_{j=1}^{l_i} p\left(s_{i, j} \mid \boldsymbol{x}_{\text {corrupt }}, \boldsymbol{s}_{\boldsymbol{z}_{<i}}, \boldsymbol{s}_{i,<j}\right) \end{aligned}

     很简单,把所有token的概率乘起来就可以了。

     需要注意的是,这边要弄清楚s_{z_{i}}s_{i}的区别:

  • s_{i}代表第i个文本段
  • 由于\left\{\boldsymbol{s}_1, \cdots, \boldsymbol{s}_m\right\}有很多种打乱方式,s_{z_{i}}表示其中某一个打乱方式的第i个抽样文本段。

2.2 LoRA

       以上是针对GLM这系列特殊的模型。那么对于一般的自回归式模型,有没有更普遍的一种表达方式呢?我们以LoRA这篇文章为例。

       每一个下游任务都能用 内容-目标对来表示:\mathcal{Z}=\left\{\left(x_i, y_i\right)\right\}_{i=1, . ., N}x_{i}y_{i}都是token序列。例如在自然语言->sql语句任务中,x_{i}是自然语言查询,y_{i}是其相应的SQL命令。对于概括任务而言,x_{i}是文章的内容,y_{i}是其相应的概述内容。预训练的自回归语言模型可以用P_{\Phi}(y \mid x)来表示。那么微调就是要找到一组参数\phi,使得下式最大:

\max _{\Phi} \sum_{(x, y) \in \mathcal{Z}} \sum_{t=1}^{|y|} \log \left(P_{\Phi}\left(y_t \mid x, y_{<t}\right)\right)

       即用t前的所有样本来预测第t个样本。

三、参考文献

[1] Devlin J , Chang M W , Lee K ,et al.BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J].  2018.

[2] Du Z , Qian Y , Liu X ,et al.GLM: General Language Model Pretraining with Autoregressive Blank Infilling[J].  2021.DOI:10.48550/arXiv.2103.10360.  

[3] Zeng, Aohan, et al. "Glm-130b: An open bilingual pre-trained model." arXiv preprint arXiv:2210.02414 (2022).

[4] Hu E J , Shen Y , Wallis P ,et al.LoRA: Low-Rank Adaptation of Large Language Models[J].  2021.DOI:10.48550/arXiv.2106.09685.  

相关文章:

大语言模型损失函数详解

我们可以把语言模型分为两类&#xff1a; 自动回归式语言模型&#xff1a;自动回归式语言模型在本质上是单向的&#xff0c;也就是说&#xff0c;它只沿着一个方向阅读句子。正向&#xff08;从左到右&#xff09;预测&#xff1b;反向&#xff08;从右到左&#xff09;预测。…...

Spring Boot 3 集成 Knife4j

基础环境 SpringBoot : 3.0.6 Java: jdk-17.0.5 Maven: 3.6.1依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xs…...

BetaFlight模块设计之三十六:SoftSerial

BetaFlight模块设计之三十六&#xff1a;SoftSerial 1. 源由2. API接口2.1 openSoftSerial2.2 onSerialRxPinChange2.3 onSerialTimerOverflow2.4 processTxState2.5 processRxState 3. 辅助函数3.1 applyChangedBits3.2 extractAndStoreRxByte3.3 prepareForNextRxByte 4. 总结…...

PC访问华为昇腾开发板的摸索过程

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 最近要折腾华为昇腾开发板&#xff08;官方名称叫&#xff1a;Atlas 200I DK&#xff09;。先是按照官方教程折腾&#xff1a;Atlas200DK环境部署。我发现…...

C++学习之路(六)C++ 实现简单的工具箱系统命令行应用 - 示例代码拆分讲解

简单的工具箱系统示例介绍: 这个示例展示了一个简单的工具箱框架&#xff0c;它涉及了几个关键概念和知识点&#xff1a; 面向对象编程 (OOP)&#xff1a;使用了类和继承的概念。Tool 是一个纯虚类&#xff0c;CalculatorTool 和 FileReaderTool 是其派生类。 多态&#xff1…...

redis运维(十四) hash缓存案例

一 缓存案例 ① 需求 ② 个人理解 策略&#xff1a;不更新缓存&#xff0c;而是删除缓存大部分观点认为&#xff1a;1、做缓存不应该是去更新缓存,而是应该删除缓存2、然后由下个请求去缓存,发现不存在后再读取数据库,写入redis缓存 高并发场景下,到底先更新缓存还是先更…...

Rust UI开发(三):iced如何打开图片(对话框)并在窗口显示图片?

注&#xff1a;此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库&#xff0c;用于为rust语言程序构建UI界面。 这是一个系列博文&#xff0c;本文是第三篇&#xff0c;前两篇的链接&#xff1a; 1、Rust UI开发&#xff08;一&#xff09;&#xff1a;使用iced构建…...

网络爬虫(Python:Requests、Beautiful Soup笔记)

网络爬虫&#xff08;Python&#xff1a;Requests、Beautiful Soup笔记&#xff09; 网络协议简要介绍一。OSI参考模型二、TCP/IP参考模型对应关系TCP/IP各层实现的协议应用层传输层网络层 HTTP协议HTTP请求HTTP响应HTTP状态码 Requests&#xff08;Python&#xff09;Requests…...

【Kotlin】内联函数

文章目录 内联函数noinline: 避免参数被内联非局部返回使用标签实现Lambda非局部返回为什么要设计noinline crossinline具体化参数类型 Kotlin中的内联函数之所以被设计出来&#xff0c;主要是为了优化Kotlin支持Lambda表达式之后所带来的开销。然而&#xff0c;在Java中我们似…...

Unity技美35——再URP管线环境下,配置post后期效果插件(post processing)

前两年在我的unity文章第10篇写过&#xff0c;后效滤镜的使用&#xff0c;那时候大部分项目用的还是unity的基础管线&#xff0c;stander管线。 但是现在随着unity的发展&#xff0c;大部分项目都用了URO管线&#xff0c;甚至很多PC端用的都是高效果的HDRP管线&#xff0c;这就…...

Redis:持久化RDB和AOF

目录 概述RDB持久化流程指定备份文件的名称指定备份文件存放的目录触发RDB备份redis.conf 其他一些配置rdb的备份和恢复优缺点停止RDB AOF持久化流程AOF启动/修复/恢复AOF同步频率设置rewrite压缩原理触发机制重写流程no-appendfsync-on-rewrite 优缺点 如何选择 概述 Redis是…...

基于python协同过滤推荐算法的音乐推荐与管理系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Python的协同过滤推荐算法的音乐推荐与管理系统是一个集成了音乐推荐和管理的系统&#xff0c;它使用协同过滤算…...

【极客技术】真假GPT-4?微调 Llama 2 以替代 GPT-3.5/4 已然可行!

近日小编在使用最新版GPT-4-Turbo模型&#xff08;主要特点是支持128k输入和知识库截止日期是2023年4月&#xff09;时&#xff0c;发现不同商家提供的模型回复出现不一致的情况&#xff0c;尤其是模型均承认自己知识库达到2023年4月&#xff0c;但当我们细问时&#xff0c;Fak…...

STK Components 二次开发-创建地面站

1.地面站只需要知道地面站的经纬高。 // Define the location of the facility using cartographic coordinates.var location new Cartographic(Trig.DegreesToRadians(-75.596766667), Trig.DegreesToRadians(40.0388333333), 0.0); 2.创建地面站 创建方式和卫星一样生成对…...

数据结构与算法(三)贪心算法(Java)

目录 一、简介1.1 定义1.2 基本步骤1.3 优缺点 二、经典示例2.1 选择排序2.2 背包问题 三、经典反例&#xff1a;找零钱3.1 题目3.2 解答3.3 记忆化搜索实现3.4 动态规划实现 一、简介 1.1 定义 贪心算法&#xff08;Greedy Algorithm&#xff09;&#xff0c;又名贪婪法&…...

057-第三代软件开发-文件监视器

第三代软件开发-文件监视器 文章目录 第三代软件开发-文件监视器项目介绍文件监视器实现原理关于 QFileSystemWatcher实现代码 关键字&#xff1a; Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&…...

二十七、微服务案例

目录 一、实现输入搜索功能 1、下载代码&#xff0c;在idea上打开 2、新建RequestParams类&#xff0c;用于接收解析请求 3、在启动类中加入客户端地址Bean&#xff0c;以便实现服务 4、编写搜索方法 5、新建返回分页结果类 6、实现搜索方法 7、编写控制类&#xff0c;…...

(C++)string类的模拟实现

愿所有美好如期而遇 前言 我们模拟实现string类不是为了去实现他&#xff0c;而是为了了解他内部成员函数的一些运行原理和时间复杂度&#xff0c;在将来我们使用时能够合理地去使用他们。 为了避免我们模拟实现的string类与全局上的string类冲突(string类也在std命名空间中)&…...

处理数据中的缺失值--删除缺少值的行

两个最主要的处理缺失值的方法是&#xff1a; ❏ 删除缺少值的行&#xff1b; ❏ 填充缺失值&#xff1b; 我们首先将serum_insulin的中的字段值0替换为None&#xff0c;可以看到缺失值的数量为374个&#xff1b; print(pima[serum_insulin].isnull().sum()) pima[serum_insu…...

Kotlin学习——kt里的集合,Map的各种方法之String篇

Kotlin 是一门现代但已成熟的编程语言&#xff0c;旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作&#xff0c;并提供了多种方式在多个平台间复用代码&#xff0c;以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化

是不是受够了安装了oracle database之后sqlplus的简陋&#xff0c;无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话&#xff0c;配置.bahs_profile后也能解决上下翻页这些&#xff0c;但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可&#xff0c…...

Windows 下端口占用排查与释放全攻略

Windows 下端口占用排查与释放全攻略​ 在开发和运维过程中&#xff0c;经常会遇到端口被占用的问题&#xff08;如 8080、3306 等常用端口&#xff09;。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口&#xff0c;帮助你高效解决此类问题。​ 一、准…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...