揭秘GLM-130B爆火秘诀:颠覆性自回归填空和二维位置编码的训练黑科技

news/2024/9/18 14:13:54/ 标签: 人工智能

GLM(通用语言模型)的训练过程确实复杂,尤其是涉及到其独特的预训练目标和架构调整。让我来详细解释一下GLM的训练过程。

1. 模型架构简介

GLM-130B 是基于 Transformer 架构的双语(中文和英文)语言模型,拥有 1300 亿个参数。与常见的 GPT 模型不同,GLM 采用了一种独特的自回归空白填充预训练目标,以更好地捕捉上下文之间的关系。

2. 预训练过程概述

GLM 的预训练过程可以分为三个主要部分:

  • 输入文本的构成
  • 模型的输入和输出
  • 注意力掩码矩阵的设计
输入文本的构成
  • 随机掩码:首先对句子中的一些词汇或片段进行随机掩码处理,即在文本中随机选择一段词汇并用特殊的 [MASK] 标记进行替换。

  • 分段:被掩码的文本分为两个部分:

    • Part A:包含 [MASK] 标记的句子部分。
    • Part B:被掩码的片段的原始 token,即这些被掩码部分在未被掩码前的真实内容。
  • 泊松分布:掩码片段的长度是根据泊松分布随机生成的,这使得每个掩码片段的长度有一定的随机性。

模型的输入和输出
  • 拼接:将 Part A 和 Part B 拼接在一起形成模型的输入。在这个过程中,为了区分 Part A 和 Part B,模型使用了特殊标记 [S] 来分隔这两部分内容。

  • 二维位置编码

    • 位置1:在位置编码上,Part A 的位置编码从 0 递增,而 Part B 的位置编码是被掩码的片段在原句子中的位置编码。
    • 位置2:在第二个位置编码上,Part A 的位置始终为 0,而 Part B 的每个片段内部位置编码是自增的。
注意力掩码矩阵设计
  • Part A(双向注意力):在 Part A 部分,GLM 使用双向注意力机制,允许当前 token 同时关注句子中之前和之后的 token。这种双向注意力机制可以帮助模型更好地理解句子中词汇之间的依赖关系。

  • Part B(单向注意力):在 Part B 部分,模型使用单向注意力机制,即每个 token 只能关注到之前的 token,这更像是传统的自回归生成模型中的做法。

3. GLM的独特改进

在基于 Transformer 架构的基础上,GLM 做了几个关键的改进:

  1. Layer Normalization 和 Residual Connection 的顺序调整:传统 Transformer 中的 Layer Normalization 和 Residual Connection 顺序被调整,以提高模型的训练稳定性。

  2. 单一线性层进行输出 token 预测:模型的输出层采用了单一线性层来预测 token,相较于传统的多层结构,这种设计可能更为简洁高效。

  3. ReLU 替换为 GeLU:激活函数由 ReLU 替换为 GeLU(高斯误差线性单元),这是一种更平滑的激活函数,有助于提升模型的训练效果。

4. 其他优化技术

  • 自回归空白填充目标:GLM 通过随机掩盖连续的文本区间,并对这些区间进行自回归预测,以此作为其主要的预训练目标。这种方法与传统的自回归语言模型目标有些类似,但能够更好地利用双向注意力机制。

  • 两种掩码标识符:GLM-130B 使用了两种掩码标识符 [MASK][gMASK],分别用于短文和长文的生成任务。

  • 旋转位置编码(RoPE):采用了一种称为旋转位置编码(RoPE)的技术,这种技术能够更好地处理长序列文本。

  • DeepNorm 层规范化:为了改善模型的训练效果,GLM 还采用了 DeepNorm 层规范化技术。

  • 高斯误差 GELU:使用了高斯误差 GELU 激活函数,这种函数比传统的 ReLU 更适合深层神经网络的训练。

5. 训练细节

  • 模型层数与维度:GLM-130B 模型拥有 70 层 Transformer,隐藏层维度为 12288,最大序列长度为 2048。

  • 分词器:采用了基于 icetk 的双语分词器,具有 150,000 个标识符,可以处理中英文双语的文本。

以上是 GLM-130B 的详细训练过程和模型设计的解释。GLM 的独特之处在于它结合了双向注意力和自回归生成能力,使得它在处理复杂的自然语言任务时表现更加出色。

二维位置编码是 GLM 模型的一项关键设计,它通过两种不同的方式对输入的序列进行编码,从而帮助模型更好地理解上下文中的依赖关系。让我们详细解析一下这两种位置编码方式。

位置1编码

  • Part A(含有 [MASK] 的部分)

    • 位置编码从 0 开始,按照顺序逐渐递增。也就是说,Part A 的第一个 token 位置编码为 0,第二个为 1,以此类推。这种递增的编码方式类似于 Transformer 中的标准位置编码方法。
  • Part B(被掩码的片段,原始 token 的部分)

    • Part B 的位置编码与其在原句子中的位置对应。例如,假设一个句子的第5到第7个词被掩码了,这个被掩码的片段在 Part B 中会保留原来在句子中的位置编码(比如,第5个词的位置编码仍然是 5,第6个词的位置编码是 6)。这种编码方式确保了模型在预测被掩码部分时能够知道这些词在原始句子中的具体位置,从而更好地理解上下文信息。

位置2编码

  • Part A

    • 在这个位置编码中,Part A 的所有 token 位置编码都被设为 0。这意味着无论 Part A 中的 token 是第几个,它们的这个位置编码值都是 0。这种设计让模型能够专注于 Part B 的位置信息,而不需要在 Part A 中计算具体的位置信息。
  • Part B

    • Part B 内的每个片段的 token 都有独立的、自增的编码。具体来说,虽然这些 token 在原始句子中可能有不同的位置,但在 Part B 中,每个片段会从 0 开始递增。例如,如果一个掩码片段包含 3 个词,那么这三个词在 Part B 中的第二个位置编码会是 0、1、2。这个编码方式在每个片段内部建立了一种相对的位置信息,帮助模型理解片段内部的顺序结构。

总结

  • 位置1:提供了全局的位置信息,其中 Part A 是标准递增的顺序,而 Part B 保留了原始句子中的位置信息。
  • 位置2:简化了 Part A 的位置信息(都为 0),而在 Part B 内部通过递增编码确保模型可以感知片段内的顺序。

通过这种二维位置编码的设计,GLM 模型可以同时捕捉到句子的全局结构和被掩码片段的局部顺序信息,从而增强了模型的上下文理解能力和预测准确性。

为了帮助你更好地理解 GLM 模型的训练过程,下面用一个具体的例子来说明该过程的各个步骤,尤其是如何利用二维位置编码和自回归空白填充目标进行训练。

假设的输入句子

我们以一个简单的句子为例:

输入句子:The quick brown fox jumps over the lazy dog.

1. 掩码处理

在预训练过程中,GLM 会随机选择一部分句子进行掩码处理。假设模型选择了 “brown fox” 这个片段进行掩码:

  • Part A(带掩码的部分):

    The quick [MASK] jumps over the lazy dog.
    
  • Part B(被掩码的片段原始内容):

    brown fox
    

2. 输入文本的构成

模型将 Part A 和 Part B 拼接在一起,并用特殊的 [S] 标记将两部分分隔开。拼接后的输入如下:

The quick [MASK] jumps over the lazy dog. [S] brown fox

3. 二维位置编码

接下来,模型会对拼接后的序列进行二维位置编码。

位置1编码(全局位置信息)
  • Part A
    The(0) quick(1)   jumps(3) over(4) the(5) lazy(6) dog(7).
    
  • Part B
    brown(2) fox(3)
    
    这里,Part B 的位置编码保留了它们在原始句子中的位置,即 “brown” 对应第2个位置,“fox” 对应第3个位置。
位置2编码(局部位置信息)
  • Part A

    The(0) quick(0)   jumps(0) over(0) the(0) lazy(0) dog(0).
    

    在位置2编码中,Part A 的所有 token 的位置编码都是 0。

  • Part B

    brown(0) fox(1)
    

    这里,Part B 的位置编码是片段内自增的,从 0 开始递增。即 “brown” 的位置编码是 0,而 “fox” 的位置编码是 1。

4. 注意力掩码

在训练过程中,模型会根据这些编码和序列设计注意力掩码矩阵。

  • Part A:由于采用双向注意力机制,所有的 token 都可以相互关注,既可以看到前面的 token,也可以看到后面的 token。

  • Part B:在 Part B 中,模型采用单向注意力机制。每个 token 只能看到它之前的 token,这类似于传统的自回归模型,这样可以更好地预测下一个 token。

5. 训练目标

模型的训练目标是根据 Part A 的上下文信息,以及 Part B 的前序 token 来预测 Part B 的被掩码片段,即 “brown fox”。

  • 对于 [MASK] 位置,模型需要预测 “brown fox”。
  • 由于 Part B 的自回归特性,模型在预测 “fox” 时只能看到 “brown”。

6. 训练过程总结

  1. 模型输入:模型接收经过掩码处理和拼接的序列,并应用二维位置编码。

  2. 自回归填充:模型利用 Part A 提供的上下文信息和 Part B 内部的自回归预测,逐步填充 [MASK] 的内容。

  3. 损失计算:模型的输出会与实际的 Part B 进行比较,计算预测误差,并通过反向传播调整模型参数。

通过大量类似的训练步骤,GLM 不断学习如何利用上下文信息和自回归预测来准确地填充被掩码的文本片段,从而在完成预训练任务后具备强大的自然语言处理能力。

这个例子展示了 GLM 模型的独特训练过程,尤其是如何利用二维位置编码和自回归填充目标来提高模型的预测能力和上下文理解能力。


http://www.ppmy.cn/news/1520622.html

相关文章

仕考网:应届生考公务员的优势

应届生报考公职存在显著优势,建议大家充分利用这一身份: 1.政策优惠 在不缴纳社保的前提下,应届毕业生可在两年内利用此身份参与各类公职考试。国考及省考中,大量岗位专为应届生设置,其中国考约有三分之一的职位仅限…

解除本地Git仓库与远程仓库关联

清除Git凭据缓存 Git在本地会缓存你的认证信息,以便在后续操作中自动使用。你可以通过以下步骤来清除这些缓存的凭据: 对于Windows用户: 打开“控制面板”并选择“凭据管理器”(Credential Manager)。在“Windows凭据…

C#如何使用外部别名Extern alias

说到 extern 关键字,只是很简单告诉大家用来做区分两个不同 dll 有相同的命名空间和类,可以使用这个关键字。 在遇到了存在两个 dll 都有相同的命名空间,而且有相同的类的时候,如何同时使用这两个 dll 的类。 这里有两个库 Jall…

通俗易懂理解Java枚举类

什么是枚举 一组常量。 比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。 Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。 例如定义一个颜色的枚举类。 enum Color { RED, GREEN, …

C++菜鸟教程 - 从入门到精通 第一节

一.C简介 C 是一种编程语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C 可运行于多种平台上,如 Windows、MAC 操作系统以及 UNIX 的各种版本。 C 是一种…

MongoDB之MongoDB Compass工具

MongoDB Compass 是 MongoDB 官方提供的一款图形化用户界面 (GUI) 工具,用于与 MongoDB 数据库进行交互和管理。Compass 提供了丰富的功能,能够帮助开发者、数据库管理员以及数据分析师轻松管理和分析 MongoDB 数据。以下是对 MongoDB Compass 的详细介绍…

Go语言 Go程基础

本篇文章主要为Go语言 Go程基础内容介绍及代码示例。 目录 并发与并行 Go程介绍 简单go程示例 匿名函数写法 启动多个子go进程 总结 并发与并行 并发:电脑同时听歌,看小说,看电影。cpu根据时间片进行划分,交替执行这个三个…

Windows安装docker,启动ollama运行open-webui使用AIGC大模型写周杰伦歌词

Windows安装docker,启动ollama运行open-webui使用AIGC大模型写周杰伦歌词 1、下载docker的Windows版本。 docker下载地址: https://docs.docker.com/desktop/install/windows-install/https://docs.docker.com/desktop/install/windows-install/ 2、设…

java基础知识-JVM知识详解

一、JVM内存结构 Java虚拟机(JVM)的内存结构主要分为几个不同的区域,每个区域都有其特定的目的和功能。以下是JVM内存结构的主要组成部分: 先看一下总体的结构图 程序计数器(Program Counter Register) 这是一个较小的内存块,用于存储当前线程所执行的字节码指令的地址…

tomato靶机通关攻略

主机发现 用kali去扫描端口,发现有3个开放端口 访问网站 在kali里面进行目录扫描,找到一个antibot_image 找到一个/antibot_image/ 目录,进而找到/antibots/目录 发现可能存在文件包含 页面通过image传参查看passwd文件 页面通过image传参查…

Linux 虚拟网络三大基石:Namespace、Veth pair 与 Bridge

引言 在 Linux 的世界里,虚拟网络技术是系统管理、云计算和容器化不可或缺的一部分。今天,我们将深入探讨构建这些虚拟网络的三大基石:Namespace、Veth 对和 Bridge,揭示它们如何在背后默默支撑起你的网络环境。 Namespace&…

区块链入门

1.1 区块链技术的发展 随着 2008 年比特币(Bitcoin) 的发明,一个被称为区块链(Blockchain) 的新概念进入了人们的视野,这项新技术据信有可能彻底改变整个社会。 区块链有望对每个行业产生颠覆的影响,包括但不限于 IT、金融、政府、媒体、医疗、法律和艺术等。一个流派将区…

速盾:防御ddos攻击的几大有效方法是什么?

DDoS攻击(分布式拒绝服务攻击)是一种恶意攻击手段,旨在通过向目标服务器发送大量的请求,使其无法正常响应正常用户的请求。这种攻击会耗尽服务器的带宽和资源,导致服务不可用。为了保护网络安全,防御DDoS攻…

线性代数 -- 矩阵求导

Tips:本文为理解神经网络的前置知识,整体内容并不全,相关内容还需后续进一步完善。 一、基础 1、标量、向量和矩阵 标量:只有大小,没有方向的量 向量(欧几里得向量):具有大小和方向…

Redis Desktop Manager 0.8.8.384 安装与使用详解

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

深入解析多商户商城系统源码:如何开发直播商城小程序?

本篇文章,小编将深入解析多商户商城系统源码的关键技术,并详细探讨如何基于这些源码开发一个功能完善的直播商城小程序。 一、多商户商城系统源码的核心构架 多商户商城系统源码的核心在于其能够支持多个商户独立运营,但同时又在一个统一的平…

LoRA大模型微调的利器

LoRA模型是小型的Stable Diffusion模型,它们对checkpoint模型进行微小的调整。它们的体积通常是检查点模型的10到100分之一。因为体积小,效果好,所以lora模型的使用程度比较高。 这是一篇面向从未使用过LoRA模型的初学者的教程。你将了解LoR…

Linux/Ubuntu服务器 screen 安装与使用

一、screen简单介绍 在Linux系统中,screen是一个非常强大的终端仿真器,它允许用户在一个终端窗口中创建多个子窗口,每个子窗口都可以运行一个独立的会话。screen的主要特点包括: 会话分离:screen允许用户在终端会话中运…

linux安装oracle的详细教程

在Linux系统上安装Oracle数据库涉及多个步骤,从准备工作到安装和初步配置。下面是一个详细的安装教程,以Oracle Database 19c和Oracle Linux(或类似的Red Hat/CentOS)系统为例。 前提条件 确保系统满足Oracle数据库的硬件和软件要…

学习日志8.30--防火墙NAT

目录 一、实验环境配置 二、配置防火墙静态NAT一对一 三、配置防火墙静态NAT多对多 四、配置防火墙NAT端口转换NAPT 五、防火墙smart-nat、easyip 六、防火墙三元组NAT 在学习过基于路由器的NAT网络地址转换,现在学习基于防火墙NAT的网络地址转换,…