大语言模型损失函数详解

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

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

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

一、自动编码式语言模型

       提到自动编码式语言模型,那最经典的非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.  

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二十二章 解读pycocotools的API,目标检测mAP的计算COCO的评价指标(工具)

Pycocotools介绍 为使用户更好地使用 COCO数据集, COCO 提供了各种 API。COCO是一个大型的图像数据集&#xff0c;用于目标检测、分割、人的关键点检测、素材分割和标题生成。这个包提供了Matlab、Python和luaapi&#xff0c;这些api有助于在COCO中加载、解析和可视化注释。 …

【古诗生成AI实战】之二——项目架构设计

[1] 项目架构 在我们深入古诗生成AI项目的具体实践之前&#xff0c;让我们首先理解整个项目的架构。本项目的代码流程主要分为三个关键阶段&#xff1a; 1、数据处理阶段&#xff1b;   2、模型训练阶段&#xff1b;   3、文本生成阶段。 第一步&#xff1a;在数据处理阶段…

6.12找树左下角的值(LC513-M)

算法&#xff1a; 这道题适合用迭代法&#xff0c;层序遍历&#xff1a;按层遍历&#xff0c;每次把每层最左边的值保存、更新到result里面。 看看Java怎么实现层序遍历的&#xff08;用队列&#xff09;&#xff1a; /*** Definition for a binary tree node.* public clas…

mysql从库设置为只读

直奔主题&#xff0c;mysql设置为只读后&#xff0c;无法增删改。 设置命令&#xff1a; mysql> set global read_only1; #1是只读&#xff0c;0是读写 mysql> show global variables like %read_only%; 以下是相关说明&#xff1a; 1、对于数据库读写状态&#xf…

Nginx(八) aio sendfile directio 组合使用测试(1)

测试输出日志太多&#xff0c;文章篇幅太长&#xff0c;所以没法一次性发布&#xff0c;只能拆成两部分了。 Nginx(九) aio & sendfile & directio 组合使用测试(2) 还是依照惯例&#xff0c;先上结论&#xff1a; 1、当开启aio&#xff0c;关闭sendfile时&#xff0…

文件搜索工具HoudahSpot mac中文版特点

HoudahSpot mac是一款文件搜索工具&#xff0c;它可以帮助用户快速准确地找到文件和文件夹&#xff0c;支持高级搜索和过滤&#xff0c;同时提供了多种视图和操作选项&#xff0c;方便用户进行文件管理和整理。 HoudahSpot mac软件特点 高级搜索和过滤功能&#xff1a;软件支持…

HarmonyOS开发者工具DevEco Studio-汉化

HarmonyOS DevEco Studio 简介 下载安装及汉化 打开开发者工具 安装语言包重启 然后设置页搜索“chinese”&#xff0c;选中中文语言包&#xff0c;点击后面的install&#xff1b; 或者 汉化按照IDEA的汉法风格&#xff0c;需要安装插件重启就可以汉化&#xff0c;步骤为&…

[C/C++]数据结构 堆的详解

一:概念 堆通常是一个可以被看做一棵完全二叉树的数组对象,它是一颗完全二叉树,堆存储的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并且需要满足每个父亲结点总小于其子节点(或者每个父亲结点总大于其子节点) 堆可以分为两种: 小堆: 任意一个父亲节点都小于其子…

MySQL性能优化,SQL调优,SQL调优的手段

文章目录 对MySQL性能的优化的理解硬件和操作系统层面的优化架构设计层面的优化MySQL程序配置优化SQL优化 SQL调优有哪几种方式1.EXPLAIN2.SQL语句中IN包含的值不应过多3.SELECT语句务必指明字段名称4.当只需要一条数据的时候&#xff0c;使用limit 15.如果排序字段没有用到索引…

二叉树算法—后继节点

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 1 后继节点1.1 解题思路1.2 代码实现 &#x1f48e;总结 1 后继节点 1.1 解题思路 二叉树节点结构定义如下&#xff1a; public static class Node { public int cal; public Node left; public Node right; public…

深度学习中的注意力机制:原理、应用与实践

深度学习中的注意力机制&#xff1a;原理、应用与实践 摘要&#xff1a; 本文将深入探讨深度学习中的注意力机制&#xff0c;包括其原理、应用领域和实践方法。我们将通过详细的解析和代码示例&#xff0c;帮助读者更好地理解和应用注意力机制&#xff0c;从而提升深度学习模…

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

文章目录 专栏导读一、地图应用场景二、参数说明1. 导包2. add函数 三、地图绘制实战1. 省市地图2. 中国地图3. 中国地图&#xff08;带城市&#xff09;4. 中国地图&#xff08;分段型&#xff09;5. 中国地图&#xff08;连续型&#xff09;6. 世界地图7. 行程轨迹地图8. 人口…