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

【LLM】GLM系列模型要点

note

文章目录

  • note
  • GLM
  • 一、数据层面
    • 1. 预训练数据
  • 二、GLM4模型层面
  • 三、GLM-4 All Tools
  • 四、GLM的其他技术
  • Reference

GLM

Paper:https://arxiv.org/abs/2406.12793
GitHub:https://github.com/THUDM
HF:https://huggingface.co/THUDM
在这里插入图片描述

经过进一步优化的GLM-4 All Tools模型能够理解用户的意图,并自主决定何时以及如何使用包括网络浏览器、Python解释器、文本到图像模型以及用户自定义函数在内的工具来高效完成复杂任务。在实际应用中,GLM-4 All Tools在访问在线信息和使用Python解释器解决数学问题等任务中的表现超过了GPT-4 All Tools。

一、数据层面

1. 预训练数据

ChatGLM系列模型的预训练语料库由多种语言的文档构成,主要为英文和中文,涵盖了网页、维基百科、书籍、代码和论文等多种来源。数据处理流程精心设计,分为三个主要阶段:去重、过滤和分词。

  • 在去重阶段,我们通过精确匹配和模糊匹配技术剔除重复或相似的文档,确保数据集的多样性。
  • 在过滤阶段,我们移除了包含攻击性内容、占位符文本和源代码等噪声文档,以提升数据质量。最后,在分词阶段,文本被转换成token序列,为后续处理打下基础。
  • 预训练数据中的token数量对模型训练速度有直接影响。为了提高效率,我们采用了字节级字节对编码(BPE)算法,分别对中文和多语种文本进行学习,并将学到的token与tiktoken中的cl100k_base tokenizer的token合并,形成了一个包含15万词汇的统一token集。在最终训练集中,我们对不同来源的数据进行了重新加权,增加了高质量和教育性来源(如书籍和维基百科)的数据比例,使得预训练语料库包含了约十万亿个tokens。

二、GLM4模型层面

No Bias Except QKV:为了提升训练速度,我们去除了所有偏差项,除了注意力层中的查询(Query)、键(Key)和值(Value)偏差。这一变化略微改善了长度外推法的性能。

RMSNorm 和 SwiGLU:我们用RMSNorm替换了LayerNorm,并用SwiGLU替换了ReLU。这两种策略能够提升模型性能。

旋转位置嵌入(RoPE):我们将RoPE扩展到二维形式,以适应GLM中的二维位置编码。

分组查询注意力(GQA):我们用GQA替换了传统的多头注意力(MHA),以减少推理过程中的KV缓存大小。由于GQA使用的参数比MHA少,我们相应增加了FFN的参数数量,以保持模型大小的一致性。

ChatGLM系列模型的上下文长度经历了多次扩展,从ChatGLM的2K增长到ChatGLM2和ChatGLM3的32K,再进一步增长到GLM-4的128K和1M。这种扩展不仅仅是通过上下文长度的增加(位置编码的扩展和对长文本的持续训练)实现的,而且还通过对长上下文的优化对齐,使得GLM-4能够有效地处理长文本。

三、GLM-4 All Tools

GLM-4 All Tools 是专门为支持智能体和相关任务而进一步优化的模型版本。它能够自主理解用户的意图,规划复杂的指令,并能够调用一个或多个工具(例如网络浏览器、Python解释器和文本到图像模型)以完成复杂的任务。

下图展示了 GLM-4 All Tools系统的整体工作流程。当用户提出复杂请求时,模型会对任务进行分析,并逐步规划解决问题的过程。如果模型确定无法独立完成任务,它将依次调用一个或多个外部工具,利用它们的中间反馈和结果来协助解决任务。

在这里插入图片描述

四、GLM的其他技术

LLM 的涌现能力:我们深入研究了 LLM 的涌现能力,探讨了预训练损失与模型在下游任务上的性能之间的关系。我们发现,在不同模型大小和训练token数量下,当预训练损失相同时,LLMs在下游任务上展现出相似的性能。此外,我们还观察到,在某些任务(如MMLU和GSM8K)上,只有当预训练损失降至特定阈值以下时,模型性能才会显著超越随机概率。基于这些发现,我们将涌现能力重新定义为模型在较低预训练损失下所展现出的特殊能力。(arXiv:2403.15796)

LongAlign:为了扩展LLMs处理长上下文的能力,我们提出了LongAlign,这是一套全面的长上下文对齐方法。它使得GLM-4能够处理长达128K token的长文本,并且在性能上与Claude 2和GPT-4 Turbo (1106)持平。(arXiv:2401.18058)

ChatGLM-Math:我们还专注于提升LLMs在数学问题解决方面的能力,推出了ChatGLM-Math。这一方法通过自我批评机制来选择数据,而不是依赖于外部模型或手动标注。(arXiv:2404.02893)

ChatGLM-RLHF:为了使LLMs更好地与人类反馈对齐,我们提出了ChatGLM-RLHF,这是将PPO和DPO应用于LLMs的一种方法。(arXiv:2404.00934)

Self-Contrast:为了避免依赖昂贵的人类偏好反馈数据,我们开发了Self-Contrast,一种无需反馈的对齐策略。它利用目标LLM自身来生成大量负样本,以此进行RLHF对齐。(arXiv:2404.00604)

AgentTuning:为了提高 LLM 的智能体能力,我们开发了 AgentTurning 框架,该框架包括 AgentInstruct 指令微调数据集,其中包含智能体与环境之间的高质量交互轨迹。(arXiv:2310.12823)

APAR:为了提高LLMs对具有分层结构响应的推理速度,我们提出了自并行自回归(APAR)生成方法。它通过指令微调来训练LLM规划其并行生成过程,并执行APAR生成。(arXiv:2401.06761)

基准测试:我们还开发了一系列开放的LLM基准测试,包括用于评估LLMs作为智能体能力的AgentBench(arXiv:2308.03688),用于评估长上下文处理性能的LongBench(arXiv:2308.14508),用于测量ChatGLM与中文内容对齐质量的AlignBench(arXiv:2311.18743),用于评估非Python编程语言中HumanEval问题的HumanEval-X(arXiv:2303.17568),以及用于测量模型解决实际编程任务能力的NaturalCodeBench (NCB)(arXiv:2405.04520)。

Reference

[1] ChatGLM 技术报告:从 GLM-130B 到 GLM-4 All Tools

相关文章:

【LLM】GLM系列模型要点

note 文章目录 noteGLM一、数据层面1. 预训练数据 二、GLM4模型层面三、GLM-4 All Tools四、GLM的其他技术Reference GLM Paper:https://arxiv.org/abs/2406.12793 GitHub:https://github.com/THUDM HF:https://huggingface.co/THUDM 经过…...

安卓开发,获取本机手机号

用免费云服务器,三丰云记录安卓开发过程 以下是使用 Android 开发获取本机手机号的示例代码(需要相关权限): java 复制 import android.content.Context; import android.content.pm.PackageManager; import android.os.Build; i…...

linux学习week1

linux学习 一.介绍 1.概述 linux的读法不下10种 linux是一个开源的操作系统,操作系统包括mac、windows、安卓等 linux的开发版:Ubuntu(乌班图)、RedHat(红帽)、CentOS linux的应用:linux在服…...

【React篇】父组件渲染时避免重复渲染子组件的3种处理方法

在 React 中,父组件渲染时要避免重复渲染子组件,可以使用以下方法: 使用 React.memo(仅适用于函数式组件)或 PureComponent(适用于类组件): 这些方法可以帮助你创建在接收到新的 pr…...

深度神经网络——决策树的实现与剪枝

概述 决策树 是一种有用的机器学习算法,用于回归和分类任务。 “决策树”这个名字来源于这样一个事实:算法不断地将数据集划分为越来越小的部分,直到数据被划分为单个实例,然后对实例进行分类。如果您要可视化算法的结果&#xf…...

IOPaint前后端框架

IOPaint 前后端框架 IOPaint 是一个图像修复工具,使用了先进的AI模型进行图像编辑。以下是其前后端所使用的框架: 前端框架 IOPaint 的前端使用了 Node.js 和 npm 进行依赖管理和构建。具体步骤如下: 克隆仓库并进入 web_app 目录&#x…...

【Linux】进程间通信_2

文章目录 七、进程间通信1. 进程间通信分类管道 未完待续 七、进程间通信 1. 进程间通信分类 管道 管道的四种情况: ①管道内部没有数据,并且具有写端的进程没有关闭写端,读端就要阻塞等待,知道管道pipe内部有数据。 ②管道内部…...

Linux基础 - 常用命令

目录 零. 简介 一 . 常见 Ubuntu 命令 二. apt-get 下载 三. 网络命令 四. 常用命令的总结 零. 简介 在 Ubuntu 中,命令是用于与操作系统进行交互和执行各种操作的指令。通过在终端中输入命令,可以完成文件管理、系统配置、软件安装、进程管理等各种…...

轻松两步,借助向量数据库 VectorDB 与千帆 Appbuilder 构建个性化本地问答知识库

在我们日常的工作和生活中,经常会遇到需要快速获取和管理大量信息的情况。无论是解答客户的问题,还是整理公司内部的资料,一个高效的知识库系统都能帮我们省下大量时间和精力。 为了帮助大家快速构建 RAG 应用,我们之前发布了一个…...

ONLYOFFICE 桌面编辑器 8.1

ONLYOFFICE 桌面编辑器 8.1 ONLYOFFICE 简介一、轻松编辑器 PDF 文件二、用幻灯片版式快速修改幻灯片三、无缝切换文档编辑、审阅和查看模式四、**改进从右至左语言的支持 & 新的本地化选项**五、隐藏“连接到云”板块六、在演示文稿中播放视频和音频文件七、版本 8.1&…...

idea中的git在clone文件提示 filename too long

一 解决版本 1.1 问题描述以及解决办法 当在Windows系统下使用Git时出现“filename too long”错误: git config --system core.longpaths true...

C++ 数组介绍

1. 数组是什么? 在C中,数组是一种基本的数据结构,它允许我们存储固定大小的相同类型元素的集合。每个元素在数组中都有一个唯一的索引,从0开始。 2. 数组的声明与初始化 2.1 声明数组 声明数组时,需要指定数组的类…...

思维导图MindManager2024最新版,让你的思维飞起来!

亲爱的朋友们,今天我要跟大家分享一款我近期深度使用并彻底被种草的神器——MindManager2024最新版本的思维导图软件。作为一位对效率和创意有着极高追求的内容创作者,我几乎尝试过市面上所有的思维导图工具,而MindManager2024无疑是其中的佼…...

Spring容器启动流程——refresh()单个方法分析

文章目录 Spring启动过程this()方法refresh()prepareRefresh()obtainFreshBeanFactory()prepareBeanFactory()postProcessBeanFactory()invokeBeanFactoryPostProcessorsregisterBeanPostProcessorsinitMessageSource()initApplicationEventMulticaster()onRefresh()registerLi…...

Redis--注册中心集群 Cluster 集群

准备工作: 首先pull用到的镜像 docker pull redis:6.0.8 端口准备 node01 192.168.248.189.6381-6382 node02 192.168.248.190 6383-6384 node03 192.168.248.191 6385-6386 创建路径: mkdir -p /soft/docker/redis-cluster cd /soft/docker/re…...

秋招突击——6/20——复习{(单调队列优化)——最大子序列和,背包问题——宠物小精灵收服问题}——新作{两两交换链表中的节点}

文章目录 引言复习单调队列优化——最大子序列和思路分析实现代码参考实现 背包问题——宠物小精灵的收服问题个人实现参考实现 新作两两交换链表中的节点个人实现参考实现 删除有序数组中的重复项个人实现知识补全迭代器的访问和控制vector删除特定的元素erasevector底层删除元…...

使用 MongoDB 剖析开放银行:技术挑战和解决方案

开放银行(或开放金融)在银行业掀起了一股颠覆性浪潮,它迫使金融机构(银行、保险公司、金融科技公司、企业甚至政府机构)迎接一个透明、协作和创新的新时代。这种模式转变要求银行与第三方提供商(TPP&#x…...

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二

一、鸿蒙应用界面开发 弹性布局-Flex 语法 /* 弹性容器组件 Flex() 位置: Flex默认主轴水平往右,交叉轴垂直向下(类似Row) 语法: Flex(参数对象){子组件1,子组件2,子组件3 } 属性方法: direction&#xf…...

26.4 Django 视图层

1. 视图函数 视图函数是Django框架中用于处理Web请求并返回Web响应的重要组件. 以下是对Django视图函数的详细解释: * 1. 视图函数与URL的映射.为了让Django能够知道哪个URL对应哪个视图函数, 需要在应用的urls.py文件中定义URL模式.使用path或re_path函数来定义URL模式, 并将…...

Hbase介绍

Hbase介绍 HBase 是一个开源的、分布式的、面向列的 NoSQL 数据库系统,它建立在 Apache Hadoop 之上,提供了高可靠性、高性能、可伸缩性和高可用性的存储解决方案。让我来简单介绍一下 HBase 的架构。 1. 架构概述: HBase 的架构设计基于 Go…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...